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

原创 2017年04月10日 03:04:50

本篇将使用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主页面上都可以控制这个设备。

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

相关文章推荐

【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客

最近发现了Domoticz平台,配合ESPEasy固件,玩起来也是挺有意思,这里贴一些资源,以后玩起来再更新博客吧。 在树莓派系统中安装dromoticz步骤 开源IoT平台domoticz与百搭w...

【Domoticz】【ESP】通过Domoticz控制esp的http命令格式——ESPEasy System Variables

原文在这里 使用Domoticz平台时,控制EasyESP节点的IO口,可使用http命令控制,这里贴官网的详细介绍以便查询,日后再整理。 ESP Easy offers a set of com...

基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)

为了充分利用domoticz平台的对MQTT客户端的控制功能,现在,受控设备端代码的核心任务转移到了对domoticz/out主题的MQTT消息解析上。本文将设计一个简单框架来实现对其消息的解析和功能...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

s3c2440移植MQTT

因为项目需要从机接收MQTT广播,网上有关2440的MQTT移植文章非常少,懵逼死我了,所以移植成功以后先把它写出来,给有需要的人看。我当时是参考了下面几篇文章,但是都不能顺利完成,几篇文章写得很好,...

在Domoticz中添加彩云天气python插件

做个笔记,之前遇到些问题,现在解决了,但是都没有记下来,现在开始记下来。同时如果有人对domoticz感兴趣的话,也可以少走一些我走过的弯路。 我用的是domoticz windows版,WiKi上...
  • czhsqqc
  • czhsqqc
  • 2017年04月27日 12:54
  • 779

基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(十)使用domoticz+mosquitto+Android客户端实现控制STM32板上的LED(一)

本文将在前面mini2440建立的domoticz、mosquitto为服务器的基础上,以Android做远程客户端来实现对STM32芯片的开发板的LED进行灯控制,当然,这是一个基本功能的实现,如果...

基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(四)交叉编译OpenSSL、c-ares、e2fsprogs和mosquitto

本篇主旨是编译安装mosquitto,其他的库是它的依赖库。后面我们交叉编译的程序都将放置在主机的”/usr/local/arm/”目录中,以区别主机本地的应用程序。 我的mimi2440的根文件系...

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

本篇将在上一篇交叉编译paho.mqtt.embedded-c官方的源代码例程基础上,稍作修改,尝试实现domoticz+mosquitto联合做服务器,使用Android客户端APP或浏览器对min...

基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(十一)使用domoticz+mosquitto+Android客户端实现控制STM32板上的LED(二)

本文在前一篇实现了STM32平台利用MQTT协议对接domoticz平台控制LED灯的基础上,完善了网络连接和MQTT的broker连接过程,实现了断网重连功能。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(六)使用domoticz联合arm上的mosquitto实现Android客户端远程控制
举报原因:
原因补充:

(最多只允许输入30个字)