基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(六)使用domoticz联合arm上的mosquitto实现Android客户端远程控制

本篇将使用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

这里写图片描述
点击右上角setup按钮,
这里写图片描述

点击settings
看到界面:
这里写图片描述

点击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。

这里写图片描述

然后点击下面的“增加”按钮。

设置好之后,可以看到mini2440串口打印信息:
这里写图片描述

说明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按钮:
这里写图片描述

然后点Always按钮:

这里写图片描述

同样,连接上了domoticz服务器了。

再往右划,进入它的主界面:

这里写图片描述

不用点更新,点后退键就进来了:

这里写图片描述

从左边划一下,看到菜单:

这里写图片描述

然后点击那个电灯开关的图标,进入下面界面:
这里写图片描述

这个就是我们刚才在domoticz平台主页面上添加的那个虚拟设备。
现在就可以操作它了,点手机APP这边的开关,可以看到domoticz平台上已经被控制转换了状态:

这里写图片描述

这里写图片描述

而在domoticz平台上控制改变状态之后,手机APP这边需要更新——按住触摸屏向下拉一下。
跟上面的状态一样的,就不再截图了。

也就是说在安卓手机APP和domoticz主页面上都可以控制这个设备。

本篇到此就结束了,下一篇将实现用依靠控制虚拟设备来完成对真实设备的控制。

猜你喜欢

转载自blog.csdn.net/sqshining/article/details/69941550
今日推荐