关于Telegram这款通讯应用,雷锋网有过详细介绍,而且创始人背后的故事也十分精彩,堪比好莱坞大片,推荐阅读。不过今天要介绍的,却是如何用Telegram远程控制传感器和制动器。虽然我们能用App控制家里的智能产品,但如果用通讯应用的话,是不是有一种与设备聊天的亲密感呢?
去年六月,Telegram公布了一些API,可以借此开发模仿真实用户的自动化程序,即BOT。整个思路是,开发一个BOT,运行在树莓派上,让它接受Telegram的指令,再让温度/湿度传感器和一个装有两个继电器的模块接上树莓派,接受控制。
用户通过手机上的Telegram与BOT聊天,信息会发往Telegram服务器。而树莓派上的程序会通过两种方式收到信息:
polling:每隔一段时间,程序查看是否有新信息,有则收取
webhook:配置Telegram,将新信息发到一个网页URL
第二种方法需要一个公有IP,而且要对路由进行设置,比较麻烦,所以选第一个。
第一步当然是建个Telegram号啦。很简单,直接向系统内置的BotFather发“/newbot”指令就行啦,就像下图那样。
设定好显示名称和用户名就行啦,系统会提供一个授权指令,它就是密码了。有了名字和密码,程序就能扮演人类了。
本文的例子中,BOT程序是用javascript开发的,运行在Node.js服务器环境(如何在树莓派上安装请看这里)。程序需要3个库:
node-dht-sensor:从传感器中读取温度和温度值
onoff:控制树莓派数字PIN码
node-telegram-bot:使用Telegram的API
建个新文件夹保存BOT程序代码,并在此文件夹下,输入以下命令:
npm install node-dht-sensor onoff node-telegram-bot
在同一文件夹下,复制BOT的javascript代码,下载地址见这里。记得替换代码中的密码,换成自己申请的那个。
执行程序只需用下面的代码:
sudo node bot.js
现在开发的命令有下面这些:
/getouts:显示继电器的状态
/setout1 ON|OFF和/setout2 ON|OFF:控制两个输出口的开/关
/gettemp:显示实际温度
/gethum:显示实际湿度
Telegram里的BOT都是公开的,每个用户都能给它们发信息,所以为了确保自己的程序只响应自己的命令,要在代码中加入用户的ID验证。如下所示:
本文的例子中用的是DHT11温度/湿度传感器,以及一个配了两个继电器的模块。将他们接上树莓派的PIN口即可。在程序中,还要配置正确的PIN口,如下:
都弄完后,就可以用Telegram给家里的传感器什么的发指令了。PS:如果大神发现QQ和微信什么的也可以,可留言或关注硬创邦微信号讨论。
via lucadentella