树莓派利用Instapush服务推送信息到手机

树莓派利用Instapush服务推送信息到手机

作者:半点闲
时间:2015-12-18 911
博客:blog.csdn.net/cg_i
邮箱:[email protected]
关键字:树莓派,instapush,ifconfig,grep,sed,shell

背景

    玩树莓派有一段时间了。平时通过PL2303串口线联接上去进行操作,我购买了个RTL8188CUS USB的无线网卡给它用于联网。PL2303串口线提供了电源输出接口,树莓派官方文档也声明支持串口供电。实际使用发现串口供电能加电启动系统,确无法加电驱动USB无线网卡。所以,只将PL2303的数据线联接到树莓派上用于通信,再单独用一根MiniUsb电源线给其供电。
   
像我这种有轻度洁癖的人,看着需要两根链接线而使用的树莓派,着实有些别扭。树莓派系统一但配置好后,完全可以通过SSH登录上去远程进行一些操作,而我办公室里联网的设备较多,WIFI路由是通过DHCP服务,为大家动态分配IP,每次联上网络分配的IP都不相同,这就为SSH登上树莓派带来不便(手里没有路由管理密码,也不能每次都扫描一下所有网络设备吧),在多个已知的WIFI网络里切换使用更是如此。
   
我使用了一个名为Instapush的免费推送服务。InstapushiOSAndroid上有免费的APP,而且这个平台上也有一个易于使用的REST API供软件开发者使用。这里每当树莓派启动正确连上WIFI后,就会将WIFIESSID名及路由器分配到的IP信息推送到手机上,方便了通过SSH远程登录操作树莓派。下面将这个过程记录并提供给大家,我不是树莓派的专家,我写的代码也不是很简洁,而且可能还有其它更好的办法,我个人很乐意接受建设性的批评和建议。如果有任何改进的建议,请在评论栏中告诉我。

树莓派利用Instapush服务推送信息到手机_第1张图片

(1通过串口与树莓派通信)

配置树莓派发送推送消息需要完成的

1.Instapush上建立推送服务,并安装移动APP
2.编写Shell代码。
3.测试,获取推送通知。
4.配置开机执行代码。

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

1.首先,在https://instapush.im/注册并登陆。
2.下载移动APP(iOSAndroid)。
3.登陆到APP上,使用你在网站上注册的账户即可。
4.在APP上登陆后,你会发现控制面板中已经显示你的设备已连接到Instapush的账户上了。去这里查看https://instapush.im/dashboard
5.然后点击设备标签。我有两台设备都连接到了Instapush的账户上,如图2。

树莓派利用Instapush服务推送信息到手机_第2张图片

(图2 instapush上我的设备)

6.接下来,点击APP标签。然后选择添加应用。
7.为你的应用选择一个名称,然后点击Add。我把应用命名为“rpi-connection”。
8.添加了你的应用之后,你会进入事件界面。点击添加事件。
9.为你的事件选择一个标题。事件名中不要加入任何空格。我用的是“NetworkingAlert”。
10.你需要添加至少一个tracker。这基本上就是一个用在推送通知中的变量。我给它命名为“message”。
11.最后,输入你想要推送的消息内容。我的Shell代码将变量{message}传给Instapush服务,因此我建议你只把{message}添加到Message字段即可。如图3。

树莓派利用Instapush服务推送信息到手机_第3张图片

(图3 添加的事件)

12.点击Basic Info标签,记下Application ID和Application Secret fields这两个字段的内容。在编写Shell代码时需要用到这些。当然,我把我的ID做了些处理。如图4。

树莓派利用Instapush服务推送信息到手机_第4张图片

(图4 我的ID)

直接给出编写Shell代码

#!/bin/sh
###################################################################################################
# 文件:puship.sh
# 功能:获取指定接口IP并推送到instapush
# 目地:树莓派自身不带显示器,通过开机执行此程序,将本机IP信息推送到手机上,#便于使用SSH登录到树莓派进行远程操作。
# 作者:高玉涵
# 时间:2015/12/17
# 平台:raspberrypi
###################################################################################################
if [ "$1= "" ]
then
     echo"$1:error fetching interface information: Device not found"
     exit
fi

ip=$(ifconfig $1|grep -o 'inetaddr:[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}.[0-9]\{1,3\}'|sed 's/inetaddr://')

if [ -z $ip ]
then
     echo"Not Network!"
     exit
fi

#获取WIFI SSID名
ssid=$(iwconfig $1|grep -o  '".*\s'|sed 's/"//g'|sed 's/\s//g')

#HTTP状态码非200,sleep 10秒后重试,成功退出循环
until curl -X POST \
      -H "x-instapush-appid:xxxxxx你的IDxxxxxx" \
      -H "x-instapush-appsecret:xxxxxx你的IDxxxx" \
      -H "Content-Type:application/json" \
      -d '{"event":"NetworkingAlert","trackers":{"message":"'$ssid-$ip'"}}'\
      https://api.instapush.im/v1/post | grep-o '200'
do
     sleep10
done

    上面的代码比较简单的(为了少费脑子。获取ESSID名是一处硬编码,有兴趣的朋友可以自已完善并给我一份哈,呵呵),相信大家理解起来应该是没有难度的,大家也可以参见官方开发文档https://instapush.im/developer/rest

测试,获取推送通知

    登录到树莓派,在$提示符下执行脚本

    $puship.sh wlan0

    程序执行后。会将连接WIFIESSID名和分配的IP推送到你的手机上。如图5

树莓派利用Instapush服务推送信息到手机_第5张图片

(5我接收的推送消息)

配置开机执行代码

    登录到树莓派,并输入以下命令

    $cd /etc

    $sudo vi rc.local

    在exit0行之上添加脚本的执行路径,保存退出。如图6。

(图6 我的rc.local)

    至此,每次树莓派开机时,只要它身处在一个已知的WIFI环境里,手机就将获取到当前连接的WIFI名称及分配到的IP信息,便于你通过SSH登录使用它。当然了,你也可以发挥你的想象,将你感兴趣的信息推送到你的手机上。最后,这就是工具论:有了一点点正确的知识,你就可以做出任何东西来。

你可能感兴趣的:(OS/Network)