Tag Archives: Raspberry Pi

【树莓派/Raspberry Pi】用树莓派给智能手机发送推送通知

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

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

配置树莓派发送推送消息

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

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

在Instapush上建立推送服务,并安装移动app

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

    将电磁感应门连接到树莓派上

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

    安装pycurl库

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

    sudo apt-get install python-pycurl

    Python代码

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

    # ------------- Begin doorSensor.py ------------------ # import pycurl, json from StringIO import StringIO import RPi.GPIO as GPIO #setup GPIO using Broadcom SOC channel numbering GPIO.setmode(GPIO.BCM) # set to pull-up (normally closed position) GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) #setup InstaPush variables # set this to Application ID from Instapush appID = "" # set this to the Application Secret from Instapush appSecret = "" # leave this set to DoorAlert unless you named your event something different in Instapush pushEvent = "DoorAlert" # set this to what you want the push message to say pushMessage = "Door Opened!" # use StringIO to capture the response from our push API call buffer = StringIO() # use Curl to post to the Instapush API c = pycurl.Curl() # set Instapush API URL c.setopt(c.URL, 'https://api.instapush.im/v1/post') # setup custom headers for authentication variables and content type c.setopt(c.HTTPHEADER, ['x-instapush-appid: ' + appID, 'x-instapush-appsecret: ' + appSecret, 'Content-Type: application/json']) # create a dictionary structure for the JSON data to post to Instapush json_fields = {} # setup JSON values json_fields['event']=pushEvent json_fields['trackers'] = {} json_fields['trackers']['message']=pushMessage postfields = json.dumps(json_fields) # make sure to send the JSON with post c.setopt(c.POSTFIELDS, postfields) # set this so we can capture the resposne in our buffer c.setopt(c.WRITEFUNCTION, buffer.write) # uncomment to see the post that is sent #c.setopt(c.VERBOSE, True) # setup an indefinite loop that looks for the door to be opened / closed while True: # door open detected GPIO.wait_for_edge(23, GPIO.RISING) print("Door Opened!n") # in the door is opened, send the push request c.perform() # capture the response from the server body= buffer.getvalue() # print the response print(body) # reset the buffer buffer.truncate(0) buffer.seek(0) # door closed detected GPIO.wait_for_edge(23, GPIO.FALLING) print("Door Closed!n") # cleanup c.close() GPIO.cleanup() # -------------------- End doorSensor.py -------------------- # Save the Python script on your Raspberry Pi. ...

【Raspberry Pi】树莓派安装DLAN服务

DLAN相关介绍

DLNA 成立于2003 年6 月24 日, 其前身是DHWG (Digital Home Working Group 数字家庭工作组),由Sony、Intel、Microsoft等发起成立、旨在解决个人PC ,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。DLNA的口号是Enjoy your music, photos and videos, anywhere anytime。

具体全面的介绍请猛戳 DLAN百度百科

安装DLAN:

1、安装minidlna

suod apt-get install minidlna

2、配置minidlna

#打开配置文件 sudo nano /etc/minidlna.conf #可参考修改的项有: #媒体文件目录: media_dir=/媒体文件存储目录/ #数据库目录,minidlna使用的是sqlite数据库来索引文件 db_dir=/var/lib/minidlna #服务器IP listening_ip=树莓派的IP #端口 port=8200 #网络名称,用于其它设备发现当前设备 friendly_name=Raspi DLan ...

【RaspNAS/树莓派】树莓派上的NAS系统

*RaspNAS是基于Debian制作, 用于树莓派实现网络附加存储(NAS)功能的系统镜像.

“性能出众”:

RaspNAS主要采用了性能较Samba(亦包含在内)等文件传输协议更为出众的AFP(Apple Filing Protocol)协议, 帮您”突破”树莓派本身的I/O性能瓶颈(在连接100Mbit/s局域网的情况下最高传输速率可超过8MB/s* **). ...