Re: HB-UNI-Sensor1 - Neuauflage
Verfasst: 28.07.2020, 10:28
Hallo Tom,
ja, das geht in die richtige Richtung, damit meine ich die Abwendung der Firmwareversions orientierten Variante zur Model-ID Variante.
Weil eben weitere Werkzeuge (wie etwa iobroker) eben nicht die Firmware identifizieren. Also ganz gro0es Lob, vielen Dank.
Kleiner Wunsch: (habe noch nicht gesehen, ob vielleicht schon realisiert) selbes Symbol, aber unterschiedliuche Farben je Model-ID.
Allerdings scheinen mir manche Varianten doch "nur" einen anderen Wertebereich oder eine andere Bezeichnung eines Messpunktes zu haben.
Daher möchte ich Dich bitten, auch eine Variante mit "multi-channel" Layout einzubinden. Eigentlich alles diskutiert hier meine Gründe:
- die Payload (der Sketch) braucht nicht/nur für andere Sensoren oder andere Bereiche (z.B. statt 2* unint8 gegenüber 1* int16 oder 255 Bit gegenüber 4 signifikaten Bit) angepasst werden
- das ist einfach und verständlich, der Autor will ja gerade andere Werte transportieren, kennt also seine payload
- die Darstellung im WebGUI erfolgt in einzelnen "Channels"
- diese Channels können "unsichtbar" gemacht werden (Geräteeinstellungen, Haken bei "Sichtbar" entfernen)
- jedem Channel kann ein Name zugeordnet werden (auch änderbar), dadurch kann ein Wert mal "Ventilposition", "UV-Index" oder "Wassertemperatur unten" benannt werden (ebenfalls in den Geräteeinstellungen), und das bei GLEICHER Model-ID (natürlich unterschiedlicher Serial)
Auch wenn es aktuell nicht viel Bedeutung hat finde ich die "no_sensor" Klassifizierung gut, vielleicht wertet die ccu/raspberrymatic das mal aus.
Das führt aber dazu, daass etwa Lux z.B. int anstatt uint sein sollte, und "-1" als "no_sensor", finde ich besser als lux=200000 = "no_sensor".
Damit habe ich diverse Varianten auf Basis UNI-SENSOR1 realisiert.
Hier ein Beispiel dazu, für Kenner der Materie selbsterklärend:
Es werden die "CustomByte" als zwei 8-Bit Werte (0.254) betrachtet. Das kann etwa als Schalter (off=0, ON=200) genutzt werden, oder als Wert von 0-100% oder oder .... Und ungenutzte Werte können unsichtbar gemacht werden (bei identischer Payload und identischen Sketch).
Nur so meine Idee. Für mich selbst habe ich das schon seit einiger Zeit (manuell update- und rebootfest) eingebaut. Passt aber glaube ich gut in die aktuelle Diskussion rein.
bleibt gesund und ciao
Harvey
PS: im Beispiel XML, was nur den unteren Teil enthält, stehen Anmerkungen drin, also noch die Anmerkungen löschen
ja, das geht in die richtige Richtung, damit meine ich die Abwendung der Firmwareversions orientierten Variante zur Model-ID Variante.
Weil eben weitere Werkzeuge (wie etwa iobroker) eben nicht die Firmware identifizieren. Also ganz gro0es Lob, vielen Dank.
Kleiner Wunsch: (habe noch nicht gesehen, ob vielleicht schon realisiert) selbes Symbol, aber unterschiedliuche Farben je Model-ID.
Allerdings scheinen mir manche Varianten doch "nur" einen anderen Wertebereich oder eine andere Bezeichnung eines Messpunktes zu haben.
Daher möchte ich Dich bitten, auch eine Variante mit "multi-channel" Layout einzubinden. Eigentlich alles diskutiert hier meine Gründe:
- die Payload (der Sketch) braucht nicht/nur für andere Sensoren oder andere Bereiche (z.B. statt 2* unint8 gegenüber 1* int16 oder 255 Bit gegenüber 4 signifikaten Bit) angepasst werden
- das ist einfach und verständlich, der Autor will ja gerade andere Werte transportieren, kennt also seine payload
- die Darstellung im WebGUI erfolgt in einzelnen "Channels"
- diese Channels können "unsichtbar" gemacht werden (Geräteeinstellungen, Haken bei "Sichtbar" entfernen)
- jedem Channel kann ein Name zugeordnet werden (auch änderbar), dadurch kann ein Wert mal "Ventilposition", "UV-Index" oder "Wassertemperatur unten" benannt werden (ebenfalls in den Geräteeinstellungen), und das bei GLEICHER Model-ID (natürlich unterschiedlicher Serial)
Auch wenn es aktuell nicht viel Bedeutung hat finde ich die "no_sensor" Klassifizierung gut, vielleicht wertet die ccu/raspberrymatic das mal aus.
Das führt aber dazu, daass etwa Lux z.B. int anstatt uint sein sollte, und "-1" als "no_sensor", finde ich besser als lux=200000 = "no_sensor".
Damit habe ich diverse Varianten auf Basis UNI-SENSOR1 realisiert.
Hier ein Beispiel dazu, für Kenner der Materie selbsterklärend:
Code: Alles auswählen
...
<channel index="1" type="WEATHER">
<link_roles>
<source name="WEATHER" />
</link_roles>
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="TEMPERATURE" operations="read,event">
<logical type="float" min="-99.9" max="120.0" unit="°C">
<special_value id="NO_SENSOR" value="-99.9" />
</logical>
<physical type="integer" interface="command" value_id="TEMPERATURE">
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="10.0" />
<description>
<field id="AutoconfRoles" value="WEATHER" />
</description>
</parameter>
</paramset>
<paramset type="LINK" id="HB-UNI-Sensor4_link"></paramset>
</channel>
<channel index="2" type="WEATHER_AP">
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="AIR_PRESSURE" operations="read,event">
<logical type="float" min="500.0" max="1200.0" unit="hPa">
<special_value id="NO_SENSOR" value="0.0" />
</logical>
<physical type="integer" interface="command" value_id="AIR_PRESSURE">
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="10.0" />
<description>
<field id="AutoconfRoles" value="WEATHER" />
</description>
</parameter>
</paramset>
</channel>
<channel index="3" type="WEATHER_HU" autoregister="true">
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="HUMIDITY" operations="read,event">
<logical type="integer" min="0" max="100" unit="%">
<special_value id="NO_SENSOR" value="200" /> (finde ich unschön, besser wäre int8, mit 0-100% und -1% = NO_SENSOR)
</logical>
<physical type="integer" interface="command" value_id="HUMIDITY">
<event frame="WEATHER_EVENT" />
</physical>
<description>
<field id="AutoconfRoles" value="WEATHER" />
</description>
</parameter>
</paramset>
</channel>
<channel index="4" type="WEATHER_LU" autoregister="true">
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="LUX" operations="read,event">
<logical type="float" min="0.00" max="200000.00" unit="Lux">
<special_value id="NO_SENSOR" value="200000.00" /> (ebenso unschön)
</logical>
<physical type="integer" interface="command" value_id="LUX" no_init="true">
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="100.0" />
</parameter>
</paramset>
</channel>
<channel index="5" type="WEATHER_VA" autoregister="true">
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="VALVE_STATE" operations="read,event">
<logical type="integer" min="0" max="200" unit="">
<special_value id="NO_SENSOR" value="200" />
</logical>
<physical type="integer" interface="command" value_id="VALVE_STATE" no_init="true">
<event frame="WEATHER_EVENT" />
</physical>
</parameter>
</paramset>
</channel>
<channel index="6" type="WEATHER_OV" autoregister="true">
<paramset type="MASTER" id="HB-UNI-Sensor5_master" />
<paramset type="VALUES" id="HB-UNI-Sensor5_values">
<parameter id="OPERATING_VOLTAGE" operations="read,event">
<logical type="float" min="0.5" max="15.5" unit="V" />
<physical type="integer" interface="command" value_id="OPERATING_VOLTAGE">
<event frame="WEATHER_EVENT" />
</physical>
<conversion type="float_integer_scale" factor="1000.0" />
</parameter>
</paramset>
</channel>
<channel index="7" type="WEATHER_T2" autoregister="true">
<paramset type="MASTER" id="HB-UNI-Sensor4_master" />
<paramset type="VALUES" id="HB-UNI-Sensor4_values">
<parameter id="VALUEH" operations="read,event">
<logical type="integer" min="0" max="255" unit="">
<special_value id="NO_SENSOR" value="255" />
</logical>
<physical type="integer" interface="command" value_id="VALUEH" no_init="true">
<event frame="WEATHER_EVENT" />
</physical>
</parameter>
<parameter id="VALUEL" operations="read,event">
<logical type="integer" min="0" max="255" unit="">
<special_value id="NO_SENSOR" value="255" />
</logical>
<physical type="integer" interface="command" value_id="VALUEL" no_init="true">
<event frame="WEATHER_EVENT" />
</physical>
</parameter>
</paramset>
</channel>
</channels>
<frames>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="1" type="0x70">
<parameter type="integer" signed="true" index="9" size="1.7" param="TEMPERATURE" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="2" type="0x70">
<parameter type="integer" index="11" size="2.0" param="AIR_PRESSURE" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="3" type="0x70">
<parameter type="integer" index="13" size="1.0" param="HUMIDITY" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="4" type="0x70">
<parameter type="integer" index="14" size="4.0" param="LUX" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="5" type="0x70">
<parameter type="integer" index="18" size="1.0" param="VALVE_STATE" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="6" type="0x70">
<parameter type="integer" index="19" size="2.0" param="OPERATING_VOLTAGE" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="7" type="0x70">
<parameter type="integer" index="21" size="1.0" param="VALUEH" />
</frame>
<frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="7" type="0x70">
<parameter type="integer" index="22" size="1.0" param="VALUEL" />
</frame>
</frames>
Nur so meine Idee. Für mich selbst habe ich das schon seit einiger Zeit (manuell update- und rebootfest) eingebaut. Passt aber glaube ich gut in die aktuelle Diskussion rein.
bleibt gesund und ciao
Harvey
PS: im Beispiel XML, was nur den unteren Teil enthält, stehen Anmerkungen drin, also noch die Anmerkungen löschen