ioBroker中的对象(object)
这篇帖子的目的是介绍ioBroker中如何规范化设备的对象的。
有助于适配器开发,以及用户使用时如何能够手动配置对象的角色和类型,来让更多的前端UI自动发现设备。
规范化的设备
ioBroker中没有明确的设备类型概念,这一点在之前介绍[ioBroker状态值的角色定义](【ioBroker官方文档】ioBroker状态值的角色定义
这样对于适配器开发人员而言,是容易很多,没有了约束,所有的设备状态都可以自由设定。这样的设定对于自动化而言,也没有太大的问题,因为都是单独某一个状态变化触发,然后执行某些自动化。
可是对于前端UI而言,就不是那么友好了。因为UI最好是以设备为单位显示,而不是都是零散的状态值。
所以ioBroker的用户对于前端UI总有一些抱怨,要么是不美观,要么是需要配置很复杂(habpanel是一个例子)。
随着ioBroker社区对自身UI不足的认知的加深,出现了一些不需要太多配置,就可以自动将ioBroker中的对象按照类型生成设备图表,很大程度上减轻了用户UI配置的工作。比如:material和iqontrol。
下面的内容我是根据Bluefox维护的一个自动发现设备的库type-detector总结出来的,说明了ioBroker官方规定的,何种类型的设备,应该拥有哪些角色的对象。
对象命名规则
ioBroker的对象命名规则一般需要遵守这样的规范。
<adapterName>.<instantNumber>.<device>.<channel>.<state>
- adapterName:适配器名称,比如miio。
- instantNumber:适配器实例编号,比如0。
- device:代表一个真实设备。
- channel:代表这个真实设备的一类功能。
- state:代表这个功能的一个具体状态。
对于device,channel和state我还是需要举例说明一下(这个例子是理想状态下应该遵循的规则,但是实际上适配器作者是否遵循标准并不确定)。
比如,小米的多功能网关。
这个设备本身是一个具体的设备,所以device可以叫做gateway_UUID,UUID是为了区别用户家里可能存在多个小米网关的情况。
我们知道网关拥有这样几个功能:RGB灯,在线广播播放器,光感传感器和报警器。所以这个设备应该拥有这样的几个channels:rgb,mediaPlayer,sensor,alarm。
每一个channel都对应着一些列的状态值,比如rgb对应需要配置的打开关闭,调整RGB值,调整亮度,调整色温等。
规范化设备和对象的真值表
这里需要提前说明一点,这里的设备并不是真实的物理设备,而是一个完整功能单元的channel。对应于上面讲的小米网关的例子,小米网关这个真实设备应该可以在系统中创建成为4个设备(对应于4个channels)。
因为规定了对象的角色,所以根据角色对数值的类型要求,也就进一步得到了数值的类型和范围。
类型 | 对象角色 | 对象名称 | 是否必须存在 |
---|---|---|---|
media | media.state | STATE | 必须 |
media | button.play或者action.play | PLAY | 可选 |
media | button.pause或者action.pause | PAUSE | 可选 |
media | button.stop或者action.stop | STOP | 可选 |
media | button.next或者action.next | NEXT | 可选 |
media | button.prev或者action.prev | PREV | 可选 |
media | media.mode.shuffle | SHUFFLE | 可选 |
media | media.mode.repeat | REPEAT | 可选 |
media | media.artist | ARTIST | 可选 |
media | media.album | ALBUM | 可选 |
media | media.title | TITLE | 可选 |
media | media.cover | COVER | 可选 |
media | media.duration | DURATION | 可选 |
media | media.elapsed | ELAPSED | 可选 |
media | media.season | SEEK | 可选 |
media | media.seek | SEEK | 可选 |
media | media.track | TRACK | 可选 |
media | media.episode | EPISODE | 可选 |
media | media.season | SEASON | 可选 |
media | level.volume | VOLUME | 可选 |
media | value.volume | VOLUME_ACTUAL | 可选 |
media | media.mute | MUTE | 可选 |
media | indicator.reachable | CONNECTED | 可选 |
media | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
media | indicator.maintenance | MAINTAIN | 可选 |
media | indicator.error | ERROR | 可选 |
weatherForecast | weather.icon或者weather.icon.forecast.0 | ICON | 必须 |
weatherForecast | value.temperature.min.forecast.0 | TEMP_MIN | 必须 |
weatherForecast | value.temperature.max.forecast.0 | TEMP_MAX | 必须 |
weatherForecast | value.precipitation或者value.precipitation.forecast.0 | PRECIPITATION_CHANCE | 可选 |
weatherForecast | date或者date.forecast.0 | DATE | 可选 |
weatherForecast | dayofweek或者dayofweek.forecast.0 | DOW | 可选 |
weatherForecast | weather.state或者weather.state.forecast.0 | STATE | 可选 |
weatherForecast | value.temperature或者value.temperature.forecast.0 | TEMP | 可选 |
weatherForecast | value.pressure | PRESSURE | 可选 |
weatherForecast | value.humidity或者value.humidity.forecast.0 | HUMIDITY | 可选 |
weatherForecast | value.temperature.windchill或者value.temperature.windchill.forecast.0 | WIND_CHILL | 可选 |
weatherForecast | value.temperature.feelslike或者value.temperature.feelslike$.forecast.0 | FEELS_LIKE | 可选 |
weatherForecast | value.speed.wind或者value.speed.wind.forecast.0 | WIND_SPEED | 可选 |
weatherForecast | value.direction.wind或者value.direction.wind.forecast.0 | WIND_DIRECTION | 可选 |
weatherForecast | weather.direction.wind或者weather.direction.wind.forecast.0 | WIND_DIRECTION_STR | 可选 |
weatherForecast | weather.icon.wind或者weather.icon.wind.forecast.0 | WIND_ICON | 可选 |
weatherForecast | weather.chart.url | HISTORY_CHART | 可选 |
weatherForecast | weather.chart.url.forecast | FORECAST_CHART | 可选 |
weatherForecast | location | LOCATION | 可选 |
weatherForecast | weather.icon.forecast | ICON%d | 可选 |
weatherForecast | value.temperature.min.forecast | TEMP_MIN%d | 可选 |
weatherForecast | value.temperature.max.forecast | TEMP_MAX%d | 可选 |
weatherForecast | date.forecast | DATE%d | 可选 |
weatherForecast | dayofweek.forecast | DOW%d | 可选 |
weatherForecast | weather.state.forecast | STATE%d | 可选 |
weatherForecast | value.temperature.forecast | TEMP%d | 可选 |
weatherForecast | value.humidity.forecast | HUMIDITY%d | 可选 |
weatherForecast | value.humidity.max.forecast | HUMIDITY_MAX%d | 可选 |
weatherForecast | value.precipitation.forecast | PRECIPITATION_CHANCE%d | 可选 |
weatherForecast | value.speed.wind.forecast | WIND_SPEED%d | 可选 |
weatherForecast | value.direction.wind.forecast | WIND_DIRECTION%d | 可选 |
weatherForecast | weather.direction.wind.forecast | WIND_DIRECTION_STR%d | 可选 |
weatherForecast | weather.icon.wind.forecast | WIND_ICON%d | 可选 |
rgb | level.color.red | RED | 必须 |
rgb | level.color.green | GREEN | 必须 |
rgb | level.color.blue | BLUE | 必须 |
rgb | level.dimmer | DIMMER | 可选 |
rgb | level.brightness | BRIGHTNESS | 可选 |
rgb | level.color.saturation | SATURATION | 可选 |
rgb | level.color.temperature | TEMPERATURE | 可选 |
rgb | switch.light | ON_LIGHT | 可选 |
rgb | switch | ON | 可选 |
rgb | indicator.working | WORKING | 可选 |
rgb | indicator(.maintenance).unreach | UNREACH | 可选 |
rgb | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
rgb | indicator.maintenance | MAINTAIN | 可选 |
rgb | indicator.error | ERROR | 可选 |
rgb | level.color.r | RED | 必须 |
rgb | level.color.g | GREEN | 必须 |
rgb | level.color.b | BLUE | 必须 |
rgb | level.dimmer | DIMMER | 可选 |
rgb | level.brightness | BRIGHTNESS | 可选 |
rgb | level.color.saturation | SATURATION | 可选 |
rgb | level.color.temperature | TEMPERATURE | 可选 |
rgb | switch.light | ON_LIGHT | 可选 |
rgb | switch | ON | 可选 |
rgb | indicator.working | WORKING | 可选 |
rgb | indicator(.maintenance).unreach | UNREACH | 可选 |
rgb | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
rgb | indicator.maintenance | MAINTAIN | 可选 |
rgb | indicator.error | ERROR | 可选 |
rgbSingle | level.color.rgb | RGB | 必须 |
rgbSingle | level.dimmer | DIMMER | 可选 |
rgbSingle | level.brightness | BRIGHTNESS | 可选 |
rgbSingle | level.color.saturation | SATURATION | 可选 |
rgbSingle | level.color.temperature | TEMPERATURE | 可选 |
rgbSingle | switch.light | ON_LIGHT | 可选 |
rgbSingle | switch | ON | 可选 |
rgbSingle | indicator.working | WORKING | 可选 |
rgbSingle | indicator(.maintenance).unreach | UNREACH | 可选 |
rgbSingle | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
rgbSingle | indicator.maintenance | MAINTAIN | 可选 |
rgbSingle | indicator.error | ERROR | 可选 |
hue | level.color.hue | HUE | 必须 |
hue | level.dimmer | DIMMER | 可选 |
hue | level.brightness | BRIGHTNESS | 可选 |
hue | level.color.saturation | SATURATION | 可选 |
hue | level.color.temperature | TEMPERATURE | 可选 |
hue | switch.light | ON | 可选 |
hue | switch | ON | 可选 |
hue | indicator.working | WORKING | 可选 |
hue | indicator(.maintenance).unreach | UNREACH | 可选 |
hue | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
hue | indicator.maintenance | MAINTAIN | 可选 |
hue | indicator.error | ERROR | 可选 |
ct | level.color.temperature | TEMPERATURE | 必须 |
ct | level.dimmer | DIMMER | 可选 |
ct | level.brightness | BRIGHTNESS | 可选 |
ct | level.color.saturation | SATURATION | 可选 |
ct | switch.light | ON | 可选 |
ct | switch | ON | 可选 |
ct | indicator.working | WORKING | 可选 |
ct | indicator(.maintenance).unreach | UNREACH | 可选 |
ct | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
ct | indicator.maintenance | MAINTAIN | 可选 |
ct | indicator.error | ERROR | 可选 |
warning | value.warning | LEVEL | 必须 |
warning | weather.title.short | TITLE | 可选 |
warning | weather.title | INFO | 可选 |
warning | date.start | START | 可选 |
warning | date.end | END | 可选 |
warning | date | START | 可选 |
warning | weather.chart.url | ICON | 可选 |
warning | weather.state | DESC | 可选 |
thermostat | temperature | SET | 必须 |
thermostat | temperature | ACTUAL | 可选 |
thermostat | humidity | HUMIDITY | 可选 |
thermostat | switch.boost | BOOST | 可选 |
thermostat | indicator.working | WORKING | 可选 |
thermostat | indicator(.maintenance).unreach | UNREACH | 可选 |
thermostat | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
thermostat | indicator.maintenance | MAINTAIN | 可选 |
thermostat | indicator.error | ERROR | 可选 |
blind | level(.blind) | SET | 必须 |
blind | value(.blind) | ACTUAL | 可选 |
blind | button.stop或者action.stop | STOP | 可选 |
blind | indicator.direction | DIRECTION | 可选 |
blind | indicator.working | WORKING | 可选 |
blind | indicator(.maintenance).unreach | UNREACH | 可选 |
blind | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
blind | indicator.maintenance | MAINTAIN | 可选 |
blind | indicator.error | ERROR | 可选 |
lock | switch.lock | SET | 必须 |
lock | state | ACTUAL | 可选 |
lock | indicator.direction | DIRECTION | 可选 |
lock | indicator.working | WORKING | 可选 |
lock | indicator(.maintenance).unreach | UNREACH | 可选 |
lock | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
lock | indicator.maintenance | MAINTAIN | 可选 |
lock | indicator.error | ERROR | 可选 |
motion | state.motion或者sensor.motion | ACTUAL | 必须 |
motion | brightness | SECOND | 可选 |
motion | indicator(.maintenance).unreach | UNREACH | 可选 |
motion | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
motion | indicator.maintenance | MAINTAIN | 可选 |
motion | indicator.error | ERROR | 可选 |
window | state(.window)或者sensor(.window) | ACTUAL | 必须 |
window | indicator(.maintenance).unreach | UNREACH | 可选 |
window | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
window | indicator.maintenance | MAINTAIN | 可选 |
window | indicator.error | ERROR | 可选 |
windowTilt | state或者value(.window) | ACTUAL | 必须 |
windowTilt | indicator(.maintenance).unreach | UNREACH | 可选 |
windowTilt | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
windowTilt | indicator.maintenance | MAINTAIN | 可选 |
windowTilt | indicator.error | ERROR | 可选 |
fireAlarm | state或者sensor(.alarm).fire | ACTUAL | 必须 |
fireAlarm | indicator(.maintenance).unreach | UNREACH | 可选 |
fireAlarm | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
fireAlarm | indicator.maintenance | MAINTAIN | 可选 |
fireAlarm | indicator.error | ERROR | 可选 |
door | state或者state(.door) | ACTUAL | 必须 |
door | indicator(.maintenance).unreach | UNREACH | 可选 |
door | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
door | indicator.maintenance | MAINTAIN | 可选 |
door | indicator.error | ERROR | 可选 |
dimmer | level(.dimmer)或者level.brightness | SET | 必须 |
dimmer | value(.dimmer) | ACTUAL | 可选 |
dimmer | switch(.light)或者state | ON_SET | 可选 |
dimmer | switch(.light)或者state | ON_ACTUAL | 可选 |
dimmer | indicator.working | WORKING | 可选 |
dimmer | indicator(.maintenance).unreach | UNREACH | 可选 |
dimmer | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
dimmer | indicator.maintenance | MAINTAIN | 可选 |
dimmer | indicator.error | ERROR | 可选 |
light | switch(.light)或者state | SET | 必须 |
light | switch(.light)或者state | ACTUAL | 可选 |
light | indicator.working | WORKING | 可选 |
light | indicator(.maintenance).unreach | UNREACH | 可选 |
light | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
light | indicator.maintenance | MAINTAIN | 可选 |
light | indicator.error | ERROR | 可选 |
volume | level.volume | SET | 必须 |
volume | value.volume | ACTUAL | 可选 |
volume | media.mute | MUTE | 可选 |
volume | indicator.working | WORKING | 可选 |
volume | indicator(.maintenance).unreach | UNREACH | 可选 |
volume | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
volume | indicator.maintenance | MAINTAIN | 可选 |
volume | indicator.error | ERROR | 可选 |
volumeGroup | level.volume.group | SET | 必须 |
volumeGroup | value.volume.group | ACTUAL | 可选 |
volumeGroup | media.mute.group | MUTE | 可选 |
volumeGroup | indicator.working | WORKING | 可选 |
volumeGroup | indicator(.maintenance).unreach | UNREACH | 可选 |
volumeGroup | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
volumeGroup | indicator.maintenance | MAINTAIN | 可选 |
volumeGroup | indicator.error | ERROR | 可选 |
slider | level | SET | 必须 |
slider | value | ACTUAL | 可选 |
slider | indicator.working | WORKING | 可选 |
slider | indicator(.maintenance).unreach | UNREACH | 可选 |
slider | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
slider | indicator.maintenance | MAINTAIN | 可选 |
slider | indicator.error | ERROR | 可选 |
socket | switch或者state或者switch.active | SET | 必须 |
socket | state或者state.active | ACTUAL | 可选 |
socket | indicator.working | WORKING | 可选 |
socket | indicator(.maintenance).unreach | UNREACH | 可选 |
socket | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
socket | indicator.maintenance | MAINTAIN | 可选 |
socket | indicator.error | ERROR | 可选 |
button | button(…\w]+)或者action(…\w]+) | SET | 必须 |
button | indicator(.maintenance).unreach | UNREACH | 可选 |
button | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
button | indicator.maintenance | MAINTAIN | 可选 |
button | indicator.error | ERROR | 可选 |
temperature | temperature | ACTUAL | 必须 |
temperature | humidity | SECOND | 可选 |
temperature | indicator(.maintenance).unreach | UNREACH | 可选 |
temperature | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
temperature | indicator.maintenance | MAINTAIN | 可选 |
temperature | indicator.error | ERROR | 可选 |
info | indicator.working | WORKING | 可选 |
info | indicator(.maintenance).unreach | UNREACH | 可选 |
info | indicator(.maintenance).lowbat或者indicator(.maintenance).battery | LOWBAT | 可选 |
info | indicator.maintenance | MAINTAIN | 可选 |
info | indicator.error | ERROR | 可选 |