用树莓派给智能手机发送推送通知

2014-12-151.5万
AI 快速预览详细 收起
本项目介绍了如何使用树莓派和电磁感应门通过Instapush服务向iOS和Android设备发送推送通知。首先需要在Instapush上建立推送服务并安装移动app,然后将电磁感应门连接到树莓派上,安装pycurl库,并加载Python代码。运行Python应用后,当电磁感应门被触发时,树莓派会发送推送通知到指定的设备。这个项目可以很容易地替换成其他类型的告警设备,如PIR运动传感器或红外引信。


用树莓派给智能手机发送推送通知图5

本项目说明了如何从树莓派发送推送通知给iOS和Android设备,只需要用到一个免费的推送app即可。这里的主要思想就是利用一个电磁感应门来触发推送信息的事件。当电磁门打开时,树莓派就发送消息。在这个项目中,电磁感应门可以很容易替换成其他类型的告警设备,比如PIR运动传感器,红外引信等。

作者声明:我不是个Python专家,也不是树莓派的专家。虽然我有过很多软件开发的经验,而且也曾是个全职的开发者,但这是我的第一个树莓派项目和Python应用。因此,我写的Python代码很可能不是最简洁的,而且也可能会有其他更好的方式来配置树莓派。我个人很乐意接受建设性的批评和建议。如果有任何改进的建议,请在评论栏中告诉我。

配置树莓派发送推送消息

下面各项就是我们需要完成的:

  • 在Instapush上建立推送服务,并安装移动app
  • 将电磁感应门连接到树莓派上
  • 安装pycurl库
  • 加载python代码
  • 运行python应用
  • 测试,获取推送通知
在Instapush上建立推送服务,并安装移动app

要处理推送通知,我使用了一个名为Instapush的免费推送服务。Instapush在iOS和Android上有免费的app,而且这个平台上也有一个易于使用的REST API供软件开发者使用。

  • 首先,在https://instapush.im/注册并登陆。
  • 下载移动app(iOS版,Android版)
  • 登陆到app上,使用你在网站上注册的账户即可
  • 在app上登陆后,你会发现控制面板中已经显示你的设备已连接到Instapush的账户上了。去这里查看https://instapush.im/dashboard.
  • 然后点击设备标签。我有两台设备都连接到了Instapush的账户上,见下图。
  • 用树莓派给智能手机发送推送通知图2
  • 接下来,点击app标签。然后选择添加应用。
  • 为你的应用选择一个名称,然后点击Add。我把应用命名为“Door Push”
  • 添加了你的应用之后,你会进入事件界面。点击添加事件
  • 为你的时间选择一个标题。我建议在事件名中不要加入任何空格。我用的是“DoorAlert”
  • 你需要添加至少一个tracker。这基本上就是一个用在推送通知中的变量。我给它命名为“message”
  • 最后,输入你想要推送的消息内容。我的Python代码将变量{message}传给Instapush服务,因此我建议你只把{message}添加到Message字段即可。用树莓派给智能手机发送推送通知图1
点击添加事件
  • 点击Basic Info标签,记下Application ID和Application Secret fields这两个字段的内容。在编写Python代码时需要用到这些。可以参考下图中的示例。当然,我把我的ID做了些处理。用树莓派给智能手机发送推送通知图3
将电磁感应门连接到树莓派上

我使用了一个面包板套件来让这个过程变得简单些。我使用GPIO的第23号管脚以及接地管脚来连接电磁感应门。哪条线接GPIO,哪条线接地无关紧要。下面是示意图:

用树莓派给智能手机发送推送通知图6
安装pycurl库

我们的Python程序需要使用一个称为pycurl的库来发送API请求给InstaPush服务。在树莓派上运行下面的命令来安装这个Python库。

[backcolor=rgb(238, 238, 238) !important]
  1. sudo apt-get install python-pycurl
复制代码
python代码

下面就是我编写的Python代码了。代码中的注释应该能很好的解释我在做什么。将程序命名为doorSensor.py。你可以在这里下载源代码。

[backcolor=rgb(238, 238, 238) !important]
Python
  1. # ------------- Begin doorSensor.py ------------------ #
  2. import pycurl, json
  3. from StringIO import StringIO
  4. import RPi.GPIO as GPIO
  5. #setup GPIO using Broadcom SOC channel numbering
  6. GPIO.setmode(GPIO.BCM)
  7. # set to pull-up (normally closed position)
  8. GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
  9. #setup InstaPush variables
  10. # set this to Application ID from Instapush
  11. appID = ""
  12. # set this to the Application Secret from Instapush
  13. appSecret = ""
  14. # leave this set to DoorAlert unless you named your event something different in Instapush
  15. pushEvent = "DoorAlert"
  16. # set this to what you want the push message to say
  17. pushMessage = "Door Opened!"
  18. # use StringIO to capture the response from our push API call
  19. buffer = StringIO()
  20. # use Curl to post to the Instapush API
  21. c = pycurl.Curl()
  22. # set Instapush API URL
  23. c.setopt(c.URL, 'https://api.instapush.im/v1/post')
  24. # setup custom headers for authentication variables and content type
  25. c.setopt(c.HTTPHEADER, ['x-instapush-appid: ' + appID,
  26. 'x-instapush-appsecret: ' + appSecret,
  27. 'Content-Type: application/json'])
  28. # create a dictionary structure for the JSON data to post to Instapush
  29. json_fields = {}
  30. # setup JSON values
  31. json_fields['event']=pushEvent
  32. json_fields['trackers'] = {}
  33. json_fields['trackers']['message']=pushMessage
  34. postfields = json.dumps(json_fields)
  35. # make sure to send the JSON with post
  36. c.setopt(c.POSTFIELDS, postfields)
  37. # set this so we can capture the resposne in our buffer
  38. c.setopt(c.WRITEFUNCTION, buffer.write)
  39. # uncomment to see the post that is sent
  40. #c.setopt(c.VERBOSE, True)
  41. # setup an indefinite loop that looks for the door to be opened / closed
  42. while True:
  43. # door open detected
  44. GPIO.wait_for_edge(23, GPIO.RISING)
  45. print("Door Opened!\n")
  46. # in the door is opened, send the push request
  47. c.perform()
  48. # capture the response from the server
  49. body= buffer.getvalue()
  50. # print the response
  51. print(body)
  52. # reset the buffer
  53. buffer.truncate(0)
  54. buffer.seek(0)
  55. # door closed detected
  56. GPIO.wait_for_edge(23, GPIO.FALLING)
  57. print("Door Closed!\n")
  58. # cleanup
  59. c.close()
  60. GPIO.cleanup()
  61. # -------------------- End doorSensor.py -------------------- #
  62. Save the Python script on your Raspberry Pi.
复制代码


将Python脚本保存到你的树莓派上。

运行Python应用

要测试是否能从树莓派上发送推送通知,先运行doorSensor.py应用。程序跑起来之后,将电磁感应门的传感器分开。你会看到树莓派的屏幕上会打印出一些内容。第一行就是运行程序的命令,而第二行就是当我们打开门的时候所打印的。紧跟着会打印出从InstaPush的API服务接收到的响应。

[backcolor=rgb(238, 238, 238) !important]
  1. pi@raspberrypi ~ $ sudo python doorSensor.py
  2. Door Opened!
  3. {“msg”:”Notification Sent Successfully”,”error”:false,”status”:200}
  4. Door Closed!
复制代码
获取推送通知

在你打开电磁门的1到2秒后,你应该在iOS或者Android设备上接收到推送通知。下图就是在我的三星Galaxy上所接收到的推送消息。iPhone上也工作的一样好。

用树莓派给智能手机发送推送通知图4





创新的碟形飞艇有望改变货物运输业的面貌qw1.jpg (172.63 KB, 下载次数: 3128)

树莓派 · 用树莓派给智能手机发送推送通知_image_3.webp

创新的碟形飞艇有望改变货物运输业的面貌qw2.jpg (130.22 KB, 下载次数: 3115)

树莓派 · 用树莓派给智能手机发送推送通知_image_6.webp

创新的碟形飞艇有望改变货物运输业的面貌qw3.jpg (225.53 KB, 下载次数: 3299)

树莓派 · 用树莓派给智能手机发送推送通知_image_9.webp

创新的碟形飞艇有望改变货物运输业的面貌qw4.jpg (279.66 KB, 下载次数: 3241)

树莓派 · 用树莓派给智能手机发送推送通知_image_12.webp

创新的碟形飞艇有望改变货物运输业的面貌qw5.jpg (630.53 KB, 下载次数: 3138)

树莓派 · 用树莓派给智能手机发送推送通知_image_15.webp

创新的碟形飞艇有望改变货物运输业的面貌qw6.jpg (139.84 KB, 下载次数: 3138)

树莓派 · 用树莓派给智能手机发送推送通知_image_18.webp

创新的碟形飞艇有望改变货物运输业的面貌qw7.jpg (911.97 KB, 下载次数: 3216)

树莓派 · 用树莓派给智能手机发送推送通知_image_21.webp

创新的碟形飞艇有望改变货物运输业的面貌qw8.jpg (71.64 KB, 下载次数: 3123)

树莓派 · 用树莓派给智能手机发送推送通知_image_24.webp

创新的碟形飞艇有望改变货物运输业的面貌qw9.jpg (312.86 KB, 下载次数: 3188)

树莓派 · 用树莓派给智能手机发送推送通知_image_27.webp

创新的碟形飞艇有望改变货物运输业的面貌qw1.jpg (172.63 KB, 下载次数: 3163)

树莓派 · 用树莓派给智能手机发送推送通知_image_30.webp

创新的碟形飞艇有望改变货物运输业的面貌qw2.jpg (130.22 KB, 下载次数: 3234)

树莓派 · 用树莓派给智能手机发送推送通知_image_33.webp

创新的碟形飞艇有望改变货物运输业的面貌qw3.jpg (225.53 KB, 下载次数: 3157)

树莓派 · 用树莓派给智能手机发送推送通知_image_36.webp

创新的碟形飞艇有望改变货物运输业的面貌qw4.jpg (279.66 KB, 下载次数: 3208)

树莓派 · 用树莓派给智能手机发送推送通知_image_39.webp

创新的碟形飞艇有望改变货物运输业的面貌qw5.jpg (630.53 KB, 下载次数: 3160)

树莓派 · 用树莓派给智能手机发送推送通知_image_42.webp

创新的碟形飞艇有望改变货物运输业的面貌qw6.jpg (139.84 KB, 下载次数: 3196)

树莓派 · 用树莓派给智能手机发送推送通知_image_45.webp

创新的碟形飞艇有望改变货物运输业的面貌qw7.jpg (911.97 KB, 下载次数: 3194)

树莓派 · 用树莓派给智能手机发送推送通知_image_48.webp

创新的碟形飞艇有望改变货物运输业的面貌qw8.jpg (71.64 KB, 下载次数: 3112)

树莓派 · 用树莓派给智能手机发送推送通知_image_51.webp

创新的碟形飞艇有望改变货物运输业的面貌qw9.jpg (312.86 KB, 下载次数: 3199)

树莓派 · 用树莓派给智能手机发送推送通知_image_54.webp

字节面试官一道题,淘汰了90%的候选人?qw1.jpg (54.79 KB, 下载次数: 3186)

树莓派 · 用树莓派给智能手机发送推送通知_image_57.webp

字节面试官一道题,淘汰了90%的候选人?qw2.jpg (298.87 KB, 下载次数: 3110)

树莓派 · 用树莓派给智能手机发送推送通知_image_60.webp

字节面试官一道题,淘汰了90%的候选人?qw3.jpg (602.61 KB, 下载次数: 3240)

树莓派 · 用树莓派给智能手机发送推送通知_image_63.webp

字节面试官一道题,淘汰了90%的候选人?qw4.jpg (57.36 KB, 下载次数: 3168)

树莓派 · 用树莓派给智能手机发送推送通知_image_66.webp

字节面试官一道题,淘汰了90%的候选人?qw5.jpg (10.74 KB, 下载次数: 3092)

树莓派 · 用树莓派给智能手机发送推送通知_image_69.webp

字节面试官一道题,淘汰了90%的候选人?qw6.jpg (1.54 MB, 下载次数: 3210)

树莓派 · 用树莓派给智能手机发送推送通知_image_72.webp

字节面试官一道题,淘汰了90%的候选人?qw7.jpg (102.32 KB, 下载次数: 3313)

树莓派 · 用树莓派给智能手机发送推送通知_image_75.webp

字节面试官一道题,淘汰了90%的候选人?qw8.jpg (206.73 KB, 下载次数: 3087)

树莓派 · 用树莓派给智能手机发送推送通知_image_78.webp

字节面试官一道题,淘汰了90%的候选人?qw9.jpg (94.75 KB, 下载次数: 3194)

树莓派 · 用树莓派给智能手机发送推送通知_image_81.webp

字节面试官一道题,淘汰了90%的候选人?qw10.jpg (45.74 KB, 下载次数: 3155)

树莓派 · 用树莓派给智能手机发送推送通知_image_84.webp

字节面试官一道题,淘汰了90%的候选人?qw12.jpg (430.05 KB, 下载次数: 3363)

树莓派 · 用树莓派给智能手机发送推送通知_image_87.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw1.jpg (8.68 KB, 下载次数: 3151)

树莓派 · 用树莓派给智能手机发送推送通知_image_90.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw2.jpg (33.33 KB, 下载次数: 3096)

树莓派 · 用树莓派给智能手机发送推送通知_image_93.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw3.jpg (42.34 KB, 下载次数: 3198)

树莓派 · 用树莓派给智能手机发送推送通知_image_96.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw4.jpg (31.69 KB, 下载次数: 3192)

树莓派 · 用树莓派给智能手机发送推送通知_image_99.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw5.jpg (36 KB, 下载次数: 3173)

树莓派 · 用树莓派给智能手机发送推送通知_image_102.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw6.jpg (36.76 KB, 下载次数: 3242)

树莓派 · 用树莓派给智能手机发送推送通知_image_105.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw7.jpg (26.5 KB, 下载次数: 3133)

树莓派 · 用树莓派给智能手机发送推送通知_image_108.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw8.jpg (22.18 KB, 下载次数: 3271)

树莓派 · 用树莓派给智能手机发送推送通知_image_111.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw9.jpg (37.26 KB, 下载次数: 3142)

树莓派 · 用树莓派给智能手机发送推送通知_image_114.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw10.jpg (35.48 KB, 下载次数: 3166)

树莓派 · 用树莓派给智能手机发送推送通知_image_117.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw11.jpg (50.05 KB, 下载次数: 3155)

树莓派 · 用树莓派给智能手机发送推送通知_image_120.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw12.jpg (105.32 KB, 下载次数: 3176)

树莓派 · 用树莓派给智能手机发送推送通知_image_123.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw13.jpg (68.38 KB, 下载次数: 3146)

树莓派 · 用树莓派给智能手机发送推送通知_image_126.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw14.jpg (123.7 KB, 下载次数: 3251)

树莓派 · 用树莓派给智能手机发送推送通知_image_129.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw15.jpg (167.7 KB, 下载次数: 3109)

树莓派 · 用树莓派给智能手机发送推送通知_image_132.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw16.jpg (188.59 KB, 下载次数: 3218)

树莓派 · 用树莓派给智能手机发送推送通知_image_135.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw17.jpg (259.3 KB, 下载次数: 3151)

树莓派 · 用树莓派给智能手机发送推送通知_image_138.webp

太秀了!用 Pandas 秒秒钟搞定 24 张 Excel 报表,还做了波投放分析!qw18.jpg (81.93 KB, 下载次数: 3199)

树莓派 · 用树莓派给智能手机发送推送通知_image_141.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
社区活动向导
社区活动向导
这么好的技术贴居然没人点赞,楼主我为你鸣不平
- 没有更多了 -