使用Domoticz通过mqtt来控制灯的开关。
在orangepi zero上跑的debian,然后安装的domoticz。
硬件用的是esp82266,开发环境用的是Visual studio code加PlatformIO,使用arduino开发。
domoticz关于mqtt的文档如下:
https://www.domoticz.com/wiki/MQTT
传送的格式为json的,然后在arduino上使用了PubSubClient和ArduinoJson的库。Pubsubclient问mqtt的库,arduinojson为解析json格式数据的库。
调试mqtt使用了simulate-device.exe这个调试软件工具,后面我把源码文件和用到的调试工具都放在云盘里面,做个链接,大家看了多多纠正。源码文件直接用visual studio code开发环境直接打开下载下来的文件夹就可以了,库文件都放在里面了。
Mqtt服务器直接使用sudo apt-get install mosquitto命令安装的,然后也没有配置什么,直接在1883这个端口上连接,就可以使用了,先跑起来再说,先看到效果,这样也有继续玩下去的信心。再说了,什么密码、安全之类的,如果家里的路由器已经被别人破解了,那其他的什么东西都可以被别人控制了。
记录一下在测试过程中的记录:
domoticz在mqtt上,发布的主题为:domoticz/out;订阅的主题为:domoticz/in。我的理解,domoticz如果要往外输出数据,则通过发布domoticz/out主题,将数据发送出去,例如:给开关发数据。如果要获得数据,则通过订阅domoticz/in主题,得到数据,例如:温湿度传感器的数据。
以下为使用mqtt软件调试工具得到的数据:
调试工具通过订阅domoticz/out主题,到domoticz的灯打开时,接收到:
{
"Battery" : 255,
"RSSI" : 12,
"description" : "",
"dtype" : "Light/Switch",
"id" : "00014051",
"idx" : 1,
"name" : "light2",
"nvalue" : 1,
"stype" : "Switch",
"svalue1" : "0",
"switchType" : "On/Off",
"unit" : 1
}
灯关闭时,接收到:
{
"Battery" : 255,
"RSSI" : 12,
"description" : "",
"dtype" : "Light/Switch",
"id" : "00014051",
"idx" : 1,
"name" : "light2",
"nvalue" : 0,
"stype" : "Switch",
"svalue1" : "0",
"switchType" : "On/Off",
"unit" : 1
}
就是:nvalue这个值在变化。我把这个值提出来,做个判断就可以了。然后idx是这个设备的标签,这个需要一一对应,是自己的,才能接收数据做动作,不是自己的就不要动作,不然就乱了。