Watterott CO2 Ampel einbinden?

Begonnen von reibuehl, 12 Dezember 2020, 12:52:22

Vorheriges Thema - Nächstes Thema

reibuehl

Hallo!

Hat jemand schon eine Konfiguration für die WLAN/MQTT-fähige Version der CO2 Ampel von Watterott gemacht?

Das Teil sendet leider etwas komische MQTT Statusmeldungen: Es posted Strings an das Topic "sensors", die dann den Namen des Messwerts und den Namen des MQTT Devices (hier CO2Ampel_1) und dann den Value haben. Das sieht dann ungefähr so aus:


hum,ampel=CO2Ampel_1 value=75
temp,ampel=CO2Ampel_1 value=10
co2,ampel=CO2Ampel_1 value=573


Mir ist nicht ganz klar, wie ich dazu die subscribeReading_* Attribute anlegen soll, um dann, nur für das jeweilige MQTT Device, die Werte für Temperatur, Luftfeuchtigkeit und CO2 in entsprechende Readings zu bekommen.

Gruß,
Reiner
Reiner.

Otto123

Hallo Reiner,

sieht doch übersichtlich aus. Vorn steht das Reading hinten der Wert :)
Schau mal zum Ideen finden hier https://forum.fhem.de/index.php/topic,116480.msg1108234.html#msg1108234
Rudi hatte dann eine super kurze Lösung. Die könnte man abwandeln?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

reibuehl

Hallo Otto,

leider sind die von mir als Beispiel angegebenen drei Zeilen nicht die drei Zeilen eines publish sondern das Device sendet jede Zeile als eigenes Publish und somit wird der Wert "hum,ampel=CO2Ampel_1 value=75" als MQTT Message gesendet und nur Sekundenbruchteile später kommt eine neue Message an das gleiche Topic mit "temp,ampel=CO2Ampel_1 value=10" und so weiter.

Da ich nicht wirklich verstehe, wie der Code im von Dir verlinkten Thread funktioniert, habe ich mir gedacht, ich fange mal klein an und versuche erst mal, die Werte den einzelnen Readings zuzuordnen. Aus der Commandref habe ich gelesen, dass man einem Perl Ausdruck definieren kann, der bestimmt, ob ein Reading gesetzt wird oder nicht. Ich hab dann mal

attr CO2Ampel subscribeREading_co2 { if ($message=~/^co2/) { return 1} else { return 0 } } sensors

definiert. Leider funktioniert das so aber wohl nicht. Das Reading wird bei jedem Publish neu gesetzt, swird aber immer auf die "hum,..." Zeile und nicht auf die "co2,..." Zeile gesetzt.
Reiner.

Otto123

#3
Klein :)
{my %Hash=(hum=>'56'); return{%Hash}}

Den gibst Du mal bei readingList mit. Damit Du siehst wie der Ansatz wäre.

Du müsstest jetzt ein regExp machen was vorn den Teil ermittelt und hinten den Wert. Damit passiert dann genau was Du willst.

Edit: so in der Art müsste es was werden (Perlausdruck in readingList mit dem entsprechenden topic davor):
{$EVENT=~m/([0-9,a-z]+)\,.*\=([0-9]+)/;return {($1=>$2)}}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

reibuehl

Ich hab jetzt das "Übel" an der Wurzel gepackt  :)

Statt das dämliche Format der MQTT Messages im FHEM zu fixen, hab ich mir die Firmware des Sensors vorgenommen. Im Arduino Code waren da nur ein paar Zeilen zu ändern und jetzt sendet der Sensor alle Werte als JSON und ich kann in FHEM alles einfach mit json2nameValue($EVENT) shön auseinander nehmen.
Reiner.

Otto123

Stift oder Akkuschrauber - der Schrauber hat gewonnen. ;D

Dabei fand ich meinen Code auch nicht schlecht - aufheben :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz