本篇将使用mini2440上的domoticz服务平台和mosquitto,以domoticz上的虚拟设备为例,实现对设备的控制,以及使用Android的客户端APP实现远程控制。
1、启动mini2440板上的mosquitto代理服务器,在串口端执行命令:
mosquitto -c /etc/mosquitto/mosquitto.conf &
2、运行mini2440板上的domoticz系统;
/etc/init.d/domoticz.sh start &
3、简单设置一下domoticz界面。
在pc上打开浏览器,进入
http://192.168.1.230:8080
点击Language这个选项,设置为Chinese,用以切换到中文界面。
要设置成功必须填写Location那一项。为了获得相关参数可以打开下面网址:
https://www.domoticz.cn/location/
找到:
经度(Longitude):【116.413554】
纬度(Latitude):【39.911013】
把这两个参数填入domoticz的设置界面Location中:
参考:https://www.domoticz.com/wiki/Application_Settings
4、下面开始设置MQTT代理的参数:
点击右上角“设置”,点“硬件”,
名称填写:mosquitto代理服务器
类型设置为:MQTT Client Gateway with LAN interface
选好后,出现更多内容:
远端地址:127.0.0.1
端口:1883
因为我们是使用的在mini2440上运行的MQTT代理服务器mosquitto,跟domoticz都在这块arm板上,设置为本地地址就可以了。
端口一定要设置为1883。
然后点击下面的“增加”按钮。
说明domoticz已经连接了mosquitto。
5、下面添加一个类型为MQTT的虚拟开关来实验一下。
这个MQTT类型虚拟设备,具有一个设备索引号(idx),可以接收domoticz在MQTT上订阅的主题为“domoticz/in”的消息,或者发布主题为“domoticz/out”的消息。
这个设备其实是接收或发布了MQTT协议的消息,所以可以用来做远程控制。
在domoticz主页上,点击右上角“设置”,点“硬件”,
名称:LED灯测试
类型:Dummy
然后点击刚增加的条目上的“创建虚拟传感器”:
名称填写:LED灯传感器
传感器类型:开关
点OK按钮。
这样就可以在主页的开关选项卡里面找到这个LED灯了:
接下来,我们先在PC上用mosquitto的客户端程序来实验一下这个虚拟设备。
类似前面:基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(四)交叉编译OpenSSL、c-ares、e2fsprogs和mosquitto
在win7上打开两个cmd窗口,都进入mosquitto的安装目录。
1)、一个窗口订阅192.168.1.230上的“domoticz/out”主题消息:
mosquitto_sub -h 192.168.1.230 -t domoticz/out
现在点击一下domoticz主页上的那个虚拟LED灯图标:
可以看到订阅客户端已经收到消息:
再点一下那个虚拟灯,可以看到变化的是那个叫做nvalue的参数:
并且可以看到他的idx是1,这个参数很重要,是设备的索引号。
这个索引号在domoticz主页面的设置–>设备中找到对应设备的idx号,这个将来会用到,暂时提示一下。
2)、另一个窗口用来向domoticz平台发送控制消息,实际上就是向192.168.1.230上发布“domoticz/in”主题的MQTT协议消息:
mosquitto_pub -h 192.168.1.230 -m "{ \"idx\" : 1, \"nvalue\" : 1,\"svalue\" : \"0\"}" -t "domoticz/in"
可以看到第一个cmd窗口也更新了内容,同时,domoticz主页上的虚拟led灯状态也变成了打开的状态。
发送:
mosquitto_pub -h 192.168.1.230 -m "{ \"idx\" : 1, \"nvalue\" : 0,\"svalue\" : \"0\"}" -t "domoticz/in"
可以看到设备被关闭了:
到此,在PC上远程控制实验已经完成了,结论是一切正常。
以上参考:https://www.domoticz.com/wiki/MQTT
6、接下来,我们下载并安装一个Android手机上的domoticz客户端APP,然后通过手机进行控制。
Android的domoticz客户端APP中文版下载地址为:
https://www.jianguoyun.com/p/DTuxvrQQjZb-BRiXgSg
下载资料来自:https://www.domoticz.cn/forum/viewtopic.php?f=4&t=3
请自行下载安装。
为了演示,我截图是在安卓模拟器上安装的domoticz,实际和真实的手机是一样的。
安装之后,点击运行domoti Lite:
服务器地址(填写arm的ip):192.168.1.230
协议:HTTP
端口:8080
然后再往右划,到最后一页,它会自动连接arm板上的domoticz平台。
然后识别出domoticz的版本,显示发现一个设备,说明已经连接上了。
说到这里注意的是,如果使用SSL加密的HTTPS连接,
协议:HTTPS
端口:443
这个版本的domoticz似乎有个bug就是无法指定certificate证书地址,它只在执行启动脚本的当前路径下搜索证书,所以需要在此路径下,放置server_cert.pem,否则的话,启动的时候会找不到证书而不能进行HTTPS协议访问。
而mini2440上通过看它的错误信息如下:
Error: Webserver(SSL) startup failed on address 0.0.0.0 with port: 443: use_certificate_chain_file: No such file or directory
我在google上搜不到解决办法,无奈只能自己查找问题,在domoticz源代码的webserver/server.cpp第184行看到这行代码:
context_.use_certificate_chain_file(settings_.certificate_chain_file_path);
就是搜索证书的路径设置,然后在它之前加了一行代码:
_log.Log(LOG_STATUS, "[web:%s] certificate_chain_file_path: %s", settings_.listening_port.c_str(), settings_.certificate_chain_file_path.c_str());
在日志中打印这个路径。
路径显示:
所以,事实上,它并没有进入domoticz的根目录搜索证书,而原本证书是放在domoticz的根目录下的,所以就出现了那个错误。
按照domoticz官网提供的一个用法:
-sslcert file_path
来指定搜索证书的路径,但结果是无效的,不知这算不算是个bug,也不知道最新版是否有更改。
参考:https://www.domoticz.com/wiki/Native_HTTPS_/_SSL_support
目前的解决办法就是把它放在执行启动脚本的当前路径下,我这边就在整个根文件系统的根目录下。
这样就行了。
Android这边设置:
IP:192.168.1.230
协议:HTTPS
端口:443
然后再往右划,看到验证证书的界面:
这是提示说未知证书,因为这是使用domoticz提供的默认证书,跟我们自己使用的网络配置不符合,假设domoticz将来会映射到公网上去的话,应该使用公网IP的认证证书,关于证书的创建、申请可以参考:
http://www.domoticz.com/wiki/Native_secure_access_with_Lets_Encrypt
https://aur.archlinux.org/packages/domoticz-git/
或者其他资料。
然后点Always按钮:
同样,连接上了domoticz服务器了。
再往右划,进入它的主界面:
不用点更新,点后退键就进来了:
从左边划一下,看到菜单:
这个就是我们刚才在domoticz平台主页面上添加的那个虚拟设备。
现在就可以操作它了,点手机APP这边的开关,可以看到domoticz平台上已经被控制转换了状态:
而在domoticz平台上控制改变状态之后,手机APP这边需要更新——按住触摸屏向下拉一下。
跟上面的状态一样的,就不再截图了。
也就是说在安卓手机APP和domoticz主页面上都可以控制这个设备。
本篇到此就结束了,下一篇将实现用依靠控制虚拟设备来完成对真实设备的控制。