HB-UNI-Sensor1 - Neuauflage

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

harvey
Beiträge: 125
Registriert: 01.12.2013, 13:19
Danksagung erhalten: 3 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von harvey » 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:

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>
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
Homematic raspberrymatic, iobroker, Asksinpp und Arduinos - rund 50 Geräte

Benutzeravatar
chianti2000
Beiträge: 40
Registriert: 12.08.2017, 17:15
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von chianti2000 » 28.07.2020, 12:11

Hallo Ivo,
Ist das Feld Luftqualität nur ein "Vorhalt" oder schon mit einem Fühler hinterlegt?
Im Beispiel 2 und 3 von Tom gibt es das nicht.
Bild

jp112sdl
Beiträge: 5876
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 256 Mal
Danksagung erhalten: 521 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von jp112sdl » 28.07.2020, 12:14

harvey hat geschrieben:
28.07.2020, 10:28
Auch wenn es aktuell nicht viel Bedeutung hat finde ich die "no_sensor" Klassifizierung gut, vielleicht wertet die ccu/raspberrymatic das mal aus.
special_value wird nur beim Setzen von Parametern verwendet.
Der wird in den VALUES auch in Zukunft (die Weiterentwicklung von HMRF ist seit Jahren eingestellt) keine weitere Bedeutung finden.

Was die Art der Mehrkanalimplementierung betrifft, hatte ich schon mal meine Bedenken geäußert.
eQ-3 macht's anders, aber wenn es bei dir so funktioniert ist es ja ok.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

jp112sdl
Beiträge: 5876
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 256 Mal
Danksagung erhalten: 521 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von jp112sdl » 28.07.2020, 12:16

chianti2000 hat geschrieben:
28.07.2020, 12:11
Ist das Feld Luftqualität nur ein "Vorhalt" oder schon mit einem Fühler hinterlegt?
Bezeichner werden in [ eckigen Klammern ] dargestellt, wenn es für die Parameter ID keine Übersetzung gibt.
z.B.:

Code: Alles auswählen

<parameter id="Luftqualitaet" operations="read,event">

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

ivo-int
Beiträge: 47
Registriert: 13.04.2020, 08:55
System: Alternative CCU (RaspberryMatic etc.)
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von ivo-int » 28.07.2020, 14:50

Hallo chianti2000
chianti2000 hat geschrieben:
28.07.2020, 12:11
Hallo Ivo,
Ist das Feld Luftqualität nur ein "Vorhalt" oder schon mit einem Fühler hinterlegt?
Im Beispiel 2 und 3 von Tom gibt es das nicht.
Ja das ist korrekt, bei Tom gibt es das nicht. Aber aus diesem Grund hat er ja die CustomFirmware eingeführt. Die Sensoren 2-5 sind für die Anpassung durch den Anwender gedacht.
Der UNI-Sensor1 wird von Tom zur Verfügung gestellt.

In meinem Beispiel liefert nur die Temperatur und Luftdruck von einem echten Fühler. Der LQ-Wert ist eine Random Zahl im Sketch. Bei mir wir dieser Fühler kommen. Ich bin ja selbst noch am Aufbau meiner Fühler.

Wie Jerome geschrieben hat wird dieser Text nicht übersetzt. Ich habe nirgends eine schlaue Parameter ID für diesen Text gefunden. Bei meinen Versuchen habe ich keine negativen Auswirkungen gefunden. In der WebUI und CCU-Historian wird der Text angezeigt.

Gruss Ivo
Raspberrymatic auf einem Raspi 4 4GB mit 2 LAN Gateways,
43 RF Geräte, 6 IP Geräte und 21 Cuxd Geräte
hm_pdetect, E-Mail, XML-API, JB HB Devices, CUx-Daemon, CCU-Historian auf einem separaten Raspi

TomMajor
Beiträge: 1101
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 68 Mal
Danksagung erhalten: 194 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 28.07.2020, 23:45

Hallo Harvey,

die Symbole haben eine kleine Zahl 2-5 bekommen, aber die Farbe soll bei meinen HB Geräten immer gleich bleiben.

das Multichannel Konzept wurde ja u.a. hier sehr ausführlich diskutiert
https://github.com/TomMajor/SmartHome/issues/29
für mich ist das Thema durch.
ich verwende Multichannel nicht weil ich es einfach nicht brauche und per default möchte ich es nicht in den Unisensor reinpacken weil ich es nicht supporten kann.

Aber genau das ist jetzt das Schöne an der aktuellen Erweiterung des AddOn mit Unisensor1-5. :)
Jeder kann sich seinen Sensor von den Datenpunkten und auch Multichannel so zusammenbauen wie er mag und das AddOn-Skript mit customized firmware dir Feature sorgt dafür das der Rest passt.
Das sollte auch für dein Multichannel Bsp. funktionieren.
Viele Grüße,
Tom

Benutzeravatar
chianti2000
Beiträge: 40
Registriert: 12.08.2017, 17:15
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von chianti2000 » 30.07.2020, 21:26

Hallo Tom,

wird es auch ein Beispiel für die Aktivierung des UV-Index in der hb-uni-sensorX.xml und HB-UNI-SensorX.ino geben?

Falls nicht, was muss ich für den VEML6070 und VEML6075 in der HB-UNI-SensorX.ino eintragen, damit der UV-Index nach Aktivierung in der .xml auch angezeigt wird. Ich denke an dieser Stelle müssen die Werte eingegeben werden.

Code: Alles auswählen

 // user custom data
        pload[10] = (customData >> 8) & 0xff;
        pload[11] = customData & 0xff; 
Nur welche? Bin mir nicht sicher, ob das die richtigen Werte sind.

Code: Alles auswählen

  customData &= 0xFFF0;
        customData |= (uvi & 0x0F);

TomMajor
Beiträge: 1101
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 68 Mal
Danksagung erhalten: 194 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 31.07.2020, 00:52

ja ich kann noch die kommenden xml Dummies für Sensor4 und Sensor5 beispielhaft für VEML6070 / VEML6075 auslegen, das sollte kein Problem sein.

Deine erste zitierte Codestelle solltest du so lassen für beide Varianten, die sorgt für das generische Befüllen der payload mit customData in der weather message/init.

An der zweiten Codestelle must du eigentlich gar nichts machen.
Die beiden #ifdef hier sorgen dafür das "richtig" befüllt wird.
https://github.com/TomMajor/SmartHome/b ... #L422-L436

ich denke am WE kann ich das final releasen.
Viele Grüße,
Tom

Benutzeravatar
chianti2000
Beiträge: 40
Registriert: 12.08.2017, 17:15
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von chianti2000 » 31.07.2020, 11:56

Danke 😊

TomMajor
Beiträge: 1101
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 68 Mal
Danksagung erhalten: 194 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 01.08.2020, 18:09

ok, habe gerade die neue Release des AddOn 2.51 online gestellt.
Es unterstützt jetzt die HB-UNI-Sensoren 1..6

Kann nicht ausschließen das irgendwo noch ein Bug lauert, es wurde zumindest von mehreren Leuten inkl. mir einigermaßen getestet.

Noch mal die kurze Zusammenfassung zu den vorhandenen xml-Templates:

hb-uni-sensor2.xml
Hier ist der (oft nicht benötigte) Datenpunkt 'Ventilposition' (Digitaler Eingang) weggelassen, so dass dieser HB-UNI-Sensor2 nur 5 Datenpunkte hat.
Den Sketch (HB-UNI-Sensor2.ino) und die Payload darin braucht man dafür nicht unbedingt zu ändern.

hb-uni-sensor3.xml
Hier ist der Datenpunkt 'Ventilposition' geändert in 'Wassertemperatur' um eine Frage aus dem Forum aufzugreifen.
Dazu habe ich ein passendes HB-UNI-Sensor3.bsp gemacht in dem nur als Beispiel diese Wassertemperatur mit dem Wert 22,4 °C gesendet wird.
Dieser sketch liegt mit im /Arduino Verzeichnis. Er muss in .ino umbenannt werden und für die Arduino-IDE muss das Verzeichnis dann HB-UNI-Sensor3 heißen (Sketch-Name und Verzeichnisname müssen für die Arduino-IDE gleich sein).

hb-uni-sensor4.xml
Ist identisch zu hb-uni-sensor2.xml, nur als Dummy vorgehalten.

hb-uni-sensor5.xml
Ein neuer Datenpunkt für den UV-Sensor VEML6070 wurde ergänzt, der per define im Sketch unterstützt wird. Der Datenpunkt 'Ventilposition' (Digitaler Eingang) wurde entfernt.

hb-uni-sensor6.xml
Ein neuer Datenpunkt für den UV-Sensor VEML6075 wurde ergänzt, der per define im Sketch unterstützt wird. Der Datenpunkt 'Ventilposition' (Digitaler Eingang) wurde entfernt.

VEML6070 / VEML6075 Beispiele auf Wunsch von chianti2000 eingefügt.

https://github.com/TomMajor/SmartHome/t ... ensordaten
Viele Grüße,
Tom

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“