虽然domoticz官网提供了一个插件开发教程,但是在实际的开发过程中就会发现有很多内容写的不够详细,无法参考。 官网教程链接: https://en.domoticz.cn/wiki/Developing_a_Python_plugin 国内的中文wiki页面比较陈旧,文档也不是最新的,不建议参考。
其实真个插件主要分为两个部分:
-
插件模板
-
插件代码
插件模板主要就是插件的定义,以及相关的参数配置选项,格式为xml:
Baby Weather Plugin
支持从国内的天气服务器获取天气信息
Features
- 支持和风天气
- 支持彩云天气
- 支持今天明天的天气预报信息
Devices
- Temperature - 当前温度
- Feeling Temperature - 当前体感温度
- Humidity - 湿度
- Pressure - 气压
Configuration
API KEY请自行注册相关的开发者账号,然后获取key。
技术支持:http://www.h4ck.org.cn
彩云天气:https://open.caiyunapp.com/
和风天气:https://dev.heweather.com/
这里面的定义需要注意的是参数的名称并不能自己随意定义, 仅能使用如下的参数名称:
- SerialPort – used by ‘serial’ transports
- Address – used by non-serial transports
- Port – used by non-serial transports
- Mode1 – General purpose
- Mode2 – General purpose
- Mode3 – General purpose
- Mode4 – General purpose
- Mode5 – General purpose
- Mode6 – General purpose
- Username – Username for authentication
- Password – Password for authentication
例如 <param field=”Mode3″ label=”经度” width=”600px” required=”true” default=”116.40″/>修改为 <param field=”GpsLong” label=”经度” width=”600px” required=”true” default=”116.40″/> 然后就挂了,提示找不到属性。
除此之外,定义部分其他的内容文档里写的都比较清楚了。在代码中取参数的数值通过Mode3获取。
在代码部分,需要注意的是Update函数:
Devices[Unit].Update(nValue=nValue, sValue=str(sValue), SignalLevel=5, Image=8)
对于部分Device的sValue参数文档中给出了说明,要传递的数值: Wind sensor (sValue: “<WindDirDegrees>;<WindDirText>;<WindAveMeterPerSecond10>;<WindGustMeterPerSecond10>;<Temp_c>;<WindChill_c>”) 但是这个文档的数值并不是全部的内容:
Filling is in progress, table doesn’t contain full available list yet
https://github.com/Xorfor/Domoticz-API/wiki/Device 这个页面提供了更详细的说明,在更新sValue的时候需要注意要传的并不是一个字符串,而是多个;分隔的字符串。
Device/Sensor | nvalue | svalue | Example |
---|---|---|---|
Alert sensor | LEVEL | TEXT | |
Barometer | BAR | BAR_FOR | dev.update(1020, “3”) |
Counter | COUNTER | ||
Custom sensor | 0 | VALUE | |
Distance | 0 | DISTANCE | |
Electricity (instant and counter) | 0 | POWER;ENERGY | |
Electricity Current/Ampere 3 Phase | 0 | AMPERE1;AMPERE2;AMPERE3 | |
Electricity P1 smart meter | 0 | USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD | |
Gas | 0 | USAGE | |
Humidity | HUM | HUM_STAT | dev.update(45, “2”) |
Lux | LUX | ||
Moisture (Soil) | MOISTURE | ||
Percentage | 0 | PERCENTAGE | |
Pressure | 0 | BAR | |
Rain | 0 | RAINRATE;RAINCOUNTER | |
Temperature | 0 | TEMP | dev.update(0, “20.3″) |
Temperature/humidity | 0 | TEMP;HUM;HUM_STAT | |
Temperature/humidity/barometer | 0 | TEMP;HUM;HUM_STAT;BAR;BAR_FOR | |
Temperature/barometer | 0 | TEMP;BAR;BAR_FOR;ALTITUDE | |
Text | 0 | TEXT | |
UV | 0 | UV;TEMP | |
Visibility | 0 | VISIBILITY | |
Voltage | 0 | VOLTAGE | |
Wind | 0 | BEARING;DIRECTION;WS;WG;TEMP;CHILL |
在线xls 转markdown :https://tableconvert.com
例如更新wind Device需要更新如下参数:
if wind_speed and wind_direction:
self.update_device_value(8, 0, str(wind_direction)
+ ";" + self.getWindDirection(wind_direction)
+ ";" + str(round(float(wind_speed) * 10))
+ ";" + str(round(float(wind_speed) * 10))
+ ";0;0")
<
p class=”md-end-block md-p md-focus”>参考链接: https://github.com/Xorfor/Domoticz-API/wiki/Device#examples https://en.domoticz.cn/wiki/Developing_a_Python_plugin