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
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
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.
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)}}
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.
Stift oder Akkuschrauber - der Schrauber hat gewonnen. ;D
Dabei fand ich meinen Code auch nicht schlecht - aufheben :)