Setup MQTT support to connect external devices:修订间差异

来自Domoticz
(中文化中……)
 
 
(未显示同一用户的9个中间版本)
第1行: 第1行:
== Introduction ==
== 引言 ==


==== Architecture ====
==== 系统架构 ====
MQTT [http://mqtt.org/] is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
MQTT [http://mqtt.org/] 是机器对机器的 (M2M)/"物联网"通信协议。它被设计的目的是成为一个非常轻量级的发布/订阅消息传输平台。
MQTT provides a publish/subscribe message pattern to provide one-to-many message distribution and decoupling of applications.
MQTT 提供发布/订阅消息模式,以提供一对多消息分发和应用程序解耦。


Node.js [http://nodejs.org/] is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.
Node.js [http://nodejs.org/] 是基于Chrome的JavaScript运行时构建的平台,可轻松构建快速、可扩展的网络应用程序。
 
Node-RED [http://nodered.org] 是一个在Node.js平台上运行的工具,它提供了一个基于浏览器的流编辑器,可以很容易地将“流”连接起来。流量可以通过单击来部署到运行时中。
Node-RED [http://nodered.org] is a tool running in the Node.js platform providing a browser-based flow editor that makes it easy to wire together "flows". Flows can be then deployed to the runtime in a single-click.


[[File:Domoticz-architecture_0.2.png]]  
[[File:Domoticz-architecture_0.2.png]]  


Domoticz supports a number of hardware devices natively (rfxtrx433, zwave, smartmeter etc.). There are zillions of other devices out there, with a lot of interfaces. Using it's native MQTT interface Domoticz can publish events from inside to the outside world. Domoticz can also respond to actions requested by anyone (and passed on by the MQTT-broker). Now something has to take care of creating and interpreting these messages.
Domoticz 本地支持多种硬件设备(rfxtrx433, zwave, smartmeter etc.),在系统里还有大量其他设​​备和接口。使用它的原生MQTT接口Domoticz可以将事件从内部发布到外部。Domoticz还可以响应任何人请求的行为(并由MQT​​T代理传递)。只是需要注意创建和解释这些消息。


The Node-RED tool provides an alternative way to creating little programs (flows) to interface with anything you want. But maybe your application can create MQTT-messages on it's own that can be understood by Domoticz. Or maybe you like to create programs in Node.js itself. So using Node-RED is not mandatory, it does however provide a fun and attractive way to handle messages.
Node-RED工具提供了另一种创建小程序(流程)的方式来与任何你想要的接口连接。但是,也许你的应用程序可以自己创建MQTT消息,Domoticz可以理解它。或者,也许你喜欢在Node.js本身中创建程序。因此,使用Node-RED并不是强制性的,但它提供了一种有趣而有吸引力的方式来处理消息。


If you don't want to use MQTT it's also possible to use the internal LUA-engine of Domoticz (for instance using the commandArray['OpenURL'] functionality). So it also depends on your needs and preferences.
如果你不想使用MQTT,也可以使用Domoticz的内部LUA引擎(例如使用commandArray ['OpenURL']功能)。所以这也取决于你的需求和喜好。


==== You'll need ====
==== 你需要做好的准备 ====
* Domoticz running on a Raspberry Pi (Windows or Mac are supported but this tutorial focusses on a Pi)
* 运行在Raspberry Pi上的Domoticz(支持Windows或Mac,但本教程重点介绍Pi)
* Node.JS (we'll install that later)
* Node.JS(我们将在稍后安装它)
* Node-RED (we'll install that later)
* Node-RED(我们将在稍后安装它)
* A MQTT broker (we'll install that later)
* MQTT代理(我们将在稍后安装它)
* A few Node-RED example [[Flows]]
* 几个Node-RED示例[[流程]]
* Add 'virtual' hardware to Domoticz: "Create a MQTT Client Gateway with LAN interface" (on localhost)
* 在Domoticz中添加'虚拟'硬件:“Create a MQTT Client Gateway with LAN interface”(在本地主机上)


== Installing software ==
== 安装软件 ==


  Please note that the current Domoticz SDCard image has this included, and you do not need to install any software.
  请注意,目前的Domoticz SD卡镜像包含此项功能,您无需安装任何软件。


==== Installing Node.JS ====
==== 安装 Node.JS ====
# NOTE: Do you need this, since node.red instalation later removes old node.js and npm and installs newer ones ?
# 注意:你是否需要这个,因为node.red instalation后来删除了旧的node.js和npm并安装了新的?
# Please follow the [http://joshondesign.com/2013/10/23/noderpi instructions] to install nodejs.
# 请按照 [http://joshondesign.com/2013/10/23/noderpi instructions] 来安装 nodejs。
# After that, install some modules using the Node Package Manager:<br />
# 然后,使用Node Package Manager安装一些模块:<br />
  <nowiki>sudo npm install -g mqtt url request</nowiki>
  <nowiki>sudo npm install -g mqtt url request</nowiki>
If you want to debug or auto-reload of the script, also install nodemon:
如果您想要调试或自动重新加载脚本,请同时安装nodemon:
  <nowiki>sudo npm install -g nodemon</nowiki>
  <nowiki>sudo npm install -g nodemon</nowiki>


...
...


==== Installing Mosquitto ====
==== 安装 Mosquitto ====


It is highly recommended that if you are using Debian or Rasbian that you use the additional Mosquitto repositories. This will ensure you get the latest stable version of Mosquitto as determined by the project itself, rather than an outdated version via the Debian or Raspbian repositories.
It is highly recommended that if you are using Debian or Rasbian that you use the additional Mosquitto repositories. This will ensure you get the latest stable version of Mosquitto as determined by the project itself, rather than an outdated version via the Debian or Raspbian repositories.
第45行: 第44行:
Rather than re-iterating the install procedure here, the guide given at http://mosquitto.org/2013/01/mosquitto-debian-repository/ is simple and easy to follow, and we encourage you to give their process a shot.
Rather than re-iterating the install procedure here, the guide given at http://mosquitto.org/2013/01/mosquitto-debian-repository/ is simple and easy to follow, and we encourage you to give their process a shot.


==== Installing Node-RED ====
==== 安装 Node-RED ====


Instructions can be found here: [http://nodered.org/docs/getting-started/]
Instructions can be found here: [http://nodered.org/docs/getting-started/]
第51行: 第50行:
  Node-RED should now be available on HTTP port 1880
  Node-RED should now be available on HTTP port 1880


== Add hardware "MQTT Client Gateway" ==
== 添加硬件 "MQTT Client Gateway" ==
Domoticz needs to subscribe to the Mosquitto MQTT message broker that is now running locally. Under Setup/Hardware add a device of type: "MQTT Client Gateway with LAN interface" with settings:
Domoticz needs to subscribe to the Mosquitto MQTT message broker that is now running locally. Under Setup/Hardware add a device of type: "MQTT Client Gateway with LAN interface" with settings:


第77行: 第76行:




== Useful MQTT possibilities ==
== 可用的 MQTT 应用 ==


==== Owntracks ====
==== Owntracks ====
第83行: 第82行:
A Node-RED script could subscribe to the owntracks-topic and republish the info in a Domoticz compatible message so Domoticz can use the location info.
A Node-RED script could subscribe to the owntracks-topic and republish the info in a Domoticz compatible message so Domoticz can use the location info.


== Domoticz MQTT communication ==
== Domoticz与MQTT的通信  ==
Communication from and to Domoticz works via JSON.
与Domoticz之间的通信是通过JSON进行的。
Default MQTT topics of the Domoticz for incoming and outcoming messages are:
默认MQTT中Domoticz信息进出的标题是:
   domoticz/in
   domoticz/in
   domoticz/out
   domoticz/out


=== Domoticz to MQTT ===
=== Domoticz MQTT ===
  {
  {
   "idx" : 5,
   "idx" : 5,
第117行: 第116行:
  }
  }


The format is compatible as described in [[Domoticz_API/JSON_URL%27s]] wiki page, except the "svalue" is split into multiple parts for easier parsing<br>
该格式与[[Domoticz_API/JSON_URL%27s]] wiki页面中描述的格式兼容,除了“svalue”被拆分为多个部分以便于解析。<br>


=== MQTT to Domoticz ===
=== MQTT Domoticz ===
The format is compatible as described in the JSON wiki.<br>
消息格式与JSON wiki中的内容相同。<br>


=== Update devices/sensors ===
=== 更新设备/传感器 ===
Note: If "command" is not set, it defaults to "udevice", the two following messages are equivalent:
注意:如果 "command" 未设置,将使用 "udevice" 默认值,以下两条信息执行的效果是相同的:
  {
  {
   "command": "udevice",
   "command": "udevice",
第137行: 第136行:
  }
  }


=== Sending a Switch Command ===
=== 发送开关转换命令 ===
  {"command": "switchlight", "idx": 2450, "switchcmd": "On" }
  {"command": "switchlight", "idx": 2450, "switchcmd": "On" }
  {"command": "switchlight", "idx": 2450, "switchcmd": "Set Level", "level": 100 }
  {"command": "switchlight", "idx": 2450, "switchcmd": "Set Level", "level": 100 }
第146行: 第145行:
The options for setcolbrightnessvalue are explained on [[Domoticz_API/JSON_URL's#Set_a_light_to_a_certain_color_or_color_temperature]]
The options for setcolbrightnessvalue are explained on [[Domoticz_API/JSON_URL's#Set_a_light_to_a_certain_color_or_color_temperature]]


=== Sending a Scene Command ===
=== 发送场景命令 ===
  {"command": "switchscene", "idx": 24, "switchcmd": "On" }
  {"command": "switchscene", "idx": 24, "switchcmd": "On" }
  {"command": "switchscene", "idx": 24, "switchcmd": "Toggle" }
  {"command": "switchscene", "idx": 24, "switchcmd": "Toggle" }


=== Sending a Notification ===
=== 发送通知命令 ===
Optional: priority, sound
Optional: priority, sound
  {"command": "sendnotification", "subject": "My Subject", "body": "My Body", "priority": 0, "sound": "mysound" }
  {"command": "sendnotification", "subject": "My Subject", "body": "My Body", "priority": 0, "sound": "mysound" }


=== Set a User Variable ===
=== 设置用户变量 ===
  {"command": "setuservariable", "idx": 1, "value": "12.3" }
  {"command": "setuservariable", "idx": 1, "value": "12.3" }


=== Request Device Info ===
=== 请求设备信息 ===
  {"command": "getdeviceinfo", "idx": 2450 }
  {"command": "getdeviceinfo", "idx": 2450 }


=== Request Scene Info ===
=== 请求场景信息 ===
  {"command": "getsceneinfo", "idx": 1 }
  {"command": "getsceneinfo", "idx": 1 }


=== Log message ===
=== Log 信息 ===
  {"command" : "addlogmessage", "message" : "MyMessage to log" }
  {"command" : "addlogmessage", "message" : "MyMessage to log" }


== More information & useful links ==
== 更多信息和有用链接 ==


* [[Flows]]: This wiki-page is a collection of node-RED flows specific to Domoticz
* [[Flows]]: This wiki-page is a collection of node-RED flows specific to Domoticz
第174行: 第173行:




= Native MQTT Libraries =
= 本地 MQTT =
For interacting directly with Domoticz via MQTT.
For interacting directly with Domoticz via MQTT.



2018年4月5日 (四) 15:41的最新版本

引言

系统架构

MQTT [1] 是机器对机器的 (M2M)/"物联网"通信协议。它被设计的目的是成为一个非常轻量级的发布/订阅消息传输平台。 MQTT 提供发布/订阅消息模式,以提供一对多消息分发和应用程序解耦。

Node.js [2] 是基于Chrome的JavaScript运行时构建的平台,可轻松构建快速、可扩展的网络应用程序。 Node-RED [3] 是一个在Node.js平台上运行的工具,它提供了一个基于浏览器的流编辑器,可以很容易地将“流”连接起来。流量可以通过单击来部署到运行时中。

Domoticz 本地支持多种硬件设备(rfxtrx433, zwave, smartmeter etc.),在系统里还有大量其他设​​备和接口。使用它的原生MQTT接口Domoticz可以将事件从内部发布到外部。Domoticz还可以响应任何人请求的行为(并由MQT​​T代理传递)。只是需要注意创建和解释这些消息。

Node-RED工具提供了另一种创建小程序(流程)的方式来与任何你想要的接口连接。但是,也许你的应用程序可以自己创建MQTT消息,Domoticz可以理解它。或者,也许你喜欢在Node.js本身中创建程序。因此,使用Node-RED并不是强制性的,但它提供了一种有趣而有吸引力的方式来处理消息。

如果你不想使用MQTT,也可以使用Domoticz的内部LUA引擎(例如使用commandArray ['OpenURL']功能)。所以这也取决于你的需求和喜好。

你需要做好的准备

  • 运行在Raspberry Pi上的Domoticz(支持Windows或Mac,但本教程重点介绍Pi)
  • Node.JS(我们将在稍后安装它)
  • Node-RED(我们将在稍后安装它)
  • MQTT代理(我们将在稍后安装它)
  • 几个Node-RED示例流程
  • 在Domoticz中添加'虚拟'硬件:“Create a MQTT Client Gateway with LAN interface”(在本地主机上)

安装软件

请注意,目前的Domoticz SD卡镜像包含此项功能,您无需安装任何软件。

安装 Node.JS

  1. 注意:你是否需要这个,因为node.red instalation后来删除了旧的node.js和npm并安装了新的?
  2. 请按照 instructions 来安装 nodejs。
  3. 然后,使用Node Package Manager安装一些模块:
sudo npm install -g mqtt url request

如果您想要调试或自动重新加载脚本,请同时安装nodemon:

sudo npm install -g nodemon

...

安装 Mosquitto

It is highly recommended that if you are using Debian or Rasbian that you use the additional Mosquitto repositories. This will ensure you get the latest stable version of Mosquitto as determined by the project itself, rather than an outdated version via the Debian or Raspbian repositories.

Rather than re-iterating the install procedure here, the guide given at http://mosquitto.org/2013/01/mosquitto-debian-repository/ is simple and easy to follow, and we encourage you to give their process a shot.

安装 Node-RED

Instructions can be found here: [4]

Node-RED should now be available on HTTP port 1880

添加硬件 "MQTT Client Gateway"

Domoticz needs to subscribe to the Mosquitto MQTT message broker that is now running locally. Under Setup/Hardware add a device of type: "MQTT Client Gateway with LAN interface" with settings:

  • Data Timeout: Disabled
  • Remote Address: localhost
  • Port: 1883
  • Username: empty
  • Password: empty

To finish press 'Add'.


To test if Domoticz receives data, create a Dummy Virtual temperature sensor.

  • Under Setup/Hardware add a device of type: "Dummy (Does nothing, use for virtual switches only)" with the name of your choice ("Dummy" for example).
  • In the corresponding entry of your just created "Dummy" hardware, click the "Create Virtual Sensors" button that appear following his type. Then enter the name of your choice (Let's say "Fictive Temp").
  • Under Setup/Devices, get the "idx" number of your "Fictive Temp" device (Let's say it's 1).

Then publish a temperature measurement to the virtual sensor idx noted above (example idx 1) like:

mosquitto_pub -h localhost -m '{ "idx" : 1, "nvalue" : 0, "svalue" : "25.0" }' -t 'domoticz/in'

If the mosquitto_pub command is not found install the mosquitto client:

sudo apt-get install mosquitto-clients


可用的 MQTT 应用

Owntracks

Owntracks ([owntracks.org]) is an app (both Android and iPhone) which periodicaly sends the location of a device to a mqtt-broker (e.g. mosquitto). A Node-RED script could subscribe to the owntracks-topic and republish the info in a Domoticz compatible message so Domoticz can use the location info.

Domoticz与MQTT的通信

与Domoticz之间的通信是通过JSON进行的。 默认MQTT中Domoticz信息进出的标题是:

  domoticz/in
  domoticz/out

Domoticz 到 MQTT

{
 "idx" : 5,
 "name" : "Internal Temperature",
 "id" : "00080A",
 "unit" : 1 
 "dtype" : "Temp",
 "stype" : "TFA 30.3133",
 "nvalue" : 0,
 "svalue1" : "41.2",
 "Battery" : 100,
 "RSSI" : 12,
}
{
 "idx" : 7,
 "name" : "S0 P1",
 "id" : "123456",
 "unit" : 0
 "dtype" : "Energy",
 "stype" : "CM119 / CM160",
 "nvalue" : 0,
 "svalue1" : "90",
 "svalue2" : "2975.00",
 "Battery" : 100,
 "RSSI" : 12,
}

该格式与Domoticz_API/JSON_URL's wiki页面中描述的格式兼容,除了“svalue”被拆分为多个部分以便于解析。

MQTT 到 Domoticz

消息格式与JSON wiki中的内容相同。

更新设备/传感器

注意:如果 "command" 未设置,将使用 "udevice" 默认值,以下两条信息执行的效果是相同的:

{
 "command": "udevice",
 "idx" : 7,
 "nvalue" : 0,
 "svalue" : "90;2975.00"
}
{
 "idx" : 7,
 "nvalue" : 0,
 "svalue" : "90;2975.00"
}

发送开关转换命令

{"command": "switchlight", "idx": 2450, "switchcmd": "On" }
{"command": "switchlight", "idx": 2450, "switchcmd": "Set Level", "level": 100 }
{"command": "setcolbrightnessvalue", "idx": 2450, "hue": 274, "brightness": 40, "iswhite"=false }
{"command": "setcolbrightnessvalue", "idx": 2450, "hex": "RRGGBB", "brightness": 100, "iswhite"=false }
{"command": "setcolbrightnessvalue", "idx": 2450, "color": {"m":3,"t":0,"r":0,"g":0,"b":50,"cw":0,"ww":0}, "brightness": 40}

The options for setcolbrightnessvalue are explained on Domoticz_API/JSON_URL's#Set_a_light_to_a_certain_color_or_color_temperature

发送场景命令

{"command": "switchscene", "idx": 24, "switchcmd": "On" }
{"command": "switchscene", "idx": 24, "switchcmd": "Toggle" }

发送通知命令

Optional: priority, sound

{"command": "sendnotification", "subject": "My Subject", "body": "My Body", "priority": 0, "sound": "mysound" }

设置用户变量

{"command": "setuservariable", "idx": 1, "value": "12.3" }

请求设备信息

{"command": "getdeviceinfo", "idx": 2450 }

请求场景信息

{"command": "getsceneinfo", "idx": 1 }

Log 信息

{"command" : "addlogmessage", "message" : "MyMessage to log" }

更多信息和有用链接

  • Flows: This wiki-page is a collection of node-RED flows specific to Domoticz
  • flows.nodered.org here you'll find the official Node-RED library
  • MQTT Forum Topic (note: the topic also includes discussions/solutions when Domoticz did not yet have a native MQTT interface so ignore those)
  • MyMQTT for Android usefull for reading the MQTT messages during testing.


本地 MQTT 库

For interacting directly with Domoticz via MQTT.

NodeJS

sudo npm install node-domoticz-mqtt

See: https://www.domoticz.com/forum/viewtopic.php?f=21&t=10190

Python

You may use *paho-mqtt* library to communicate with domoticz MQTT client

sudo pip install paho-mqtt

See: https://pypi.python.org/pypi/paho-mqtt/1.3.1

Arduino

Needed! Please Help.

Here is a good starting point: https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_basic/mqtt_basic.ino
This project contains an Arduino sketch for a sonoff device with MQTT/Domoticz compatibility: https://github.com/arendst/Sonoff-MQTT-OTA-Arduino