当前位置: 首页 > 工具软件 > Domoticz > 使用案例 >

domoticz 使用esp8266通过mqtt控制灯开关

薄哲
2023-12-01

使用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是这个设备的标签,这个需要一一对应,是自己的,才能接收数据做动作,不是自己的就不要动作,不然就乱了。

代码和调试工具下载链接:

https://pan.baidu.com/s/1mIiWq-wPjAs95pbNKzpcvw

 

 类似资料: