co2mini + ESPHome + MQTT

Begonnen von fireball, 04 Februar 2023, 22:22:30

Vorheriges Thema - Nächstes Thema

fireball

Hi,

ich habe gerade herausgefunden, das ESPHome den co2mini unterstützt.
Daher habe ich mir ein WemosD1 an den co2mini gebaut und sende jetzt die Daten via MQTT zu FHEM. Super Sache, aber ein Punkt bekomme ich gerade nicht hin.
Es wurde automatisch dieses DEVICE angelegt:

Internals:
   CFGFN     
   CID        co2_sensor_sz_840d8e8a913d
   DEF        co2_sensor_sz_840d8e8a913d
   FUUID      63deb1d9-f33f-0804-eddf-8494e3fdccb568f4
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     498
   MyBroker_CONN MyBroker_192.168.178.149_58224
   MyBroker_MSGCNT 498
   MyBroker_TIME 2023-02-04 22:13:48
   NAME       MQTT2_co2_sensor_sz
   NR         8149
   STATE      24.1
   TYPE       MQTT2_DEVICE
   eventCount 504
   READINGS:
     2023-02-04 20:28:25   IODev           MyBroker
     2023-02-04 21:55:22   avty_t          co2-sensor-sz/status
     2023-02-04 22:13:48   debug           [D][sensor:126]: 'Schlafzimmer Temperatur': Sending state 24.10001 °C with 1 decimals of accuracy
     2023-02-04 21:55:22   dev_cla         temperature
     2023-02-04 21:55:22   dev_ids         840d8e8a913d
     2023-02-04 21:55:22   dev_mdl         d1_mini
     2023-02-04 21:55:22   dev_mf          espressif
     2023-02-04 21:55:22   dev_name        co2-sensor-sz
     2023-02-04 21:55:22   dev_sw          esphome v2022.12.8 Feb  4 2023, 20:27:44
     2023-02-04 21:55:22   ic              mdi:molecule-co2
     2023-02-04 21:55:22   name            Schlafzimmer Temperatur
     2023-02-04 21:55:22   stat_cla        measurement
     2023-02-04 21:55:22   stat_t          co2-sensor-sz/sensor/schlafzimmer_temperatur/state
     2023-02-04 22:13:48   state           24.1
     2023-02-04 21:55:22   status          online
     2023-02-04 21:55:22   uniq_id         ESPsensorschlafzimmer_temperatur
     2023-02-04 21:55:22   unit_of_meas    °C
Attributes:
   readingList co2_sensor_sz_840d8e8a913d:co2-sensor-sz/debug:.* debug
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* { json2nameValue($EVENT) }
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_co2/state:.* state
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* { json2nameValue($EVENT) }
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_temperatur/state:.* state
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/status:.* status
   room       MQTT2_DEVICE


Das Problem ist, dass ich von den zwei Sensoren nur einen in FHEM sehe und zwar den zweiten, den Temperaturwert.

Wenn ich das readingList richtig verstehe und mit dem MQTT Explorer mir das so anschauen, dann habe ich gerade das Gefühl, dass zwar beide Werte ausgelesen werden, aber der zweite Wert "schlafzimmer_temperatur" den ersten Wert überschreibt.

Dieses JSON:
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* { json2nameValue($EVENT) }
hat am Ende die gleichen Werte wie hier
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* { json2nameValue($EVENT) }

Der "state" wird quasi auch überschrieben.

Ich könnte jetzt "state" in state_co2 und state_temp umwandeln, aber bei den JSON  Infos wüßte ich nicht wie?!

Wie kann ich also beide Werte bekommen?!

VG+Danke
René

PS: so sieht das angelegte Log aus:
2023-02-04_22:34:48 MQTT2_co2_sensor_sz debug: ESC[0;36m[D][sensor:126]: 'Schlafzimmer CO2': Sending state 1236.00000 ppm with 0 decimals of accuracyESC[0m
2023-02-04_22:34:48 MQTT2_co2_sensor_sz 1236
2023-02-04_22:34:48 MQTT2_co2_sensor_sz debug: ESC[0;36m[D][sensor:126]: 'Schlafzimmer Temperatur': Sending state 24.35001 °C with 1 decimals of accuracyESC[0m
2023-02-04_22:34:48 MQTT2_co2_sensor_sz 24.4
2023-02-04_22:35:48 MQTT2_co2_sensor_sz debug: ESC[0;36m[D][sensor:126]: 'Schlafzimmer CO2': Sending state 1146.00000 ppm with 0 decimals of accuracyESC[0m
2023-02-04_22:35:48 MQTT2_co2_sensor_sz 1146
2023-02-04_22:35:48 MQTT2_co2_sensor_sz debug: ESC[0;36m[D][sensor:126]: 'Schlafzimmer Temperatur': Sending state 24.35001 °C with 1 decimals of accuracyESC[0m
2023-02-04_22:35:48 MQTT2_co2_sensor_sz 24.4

Otto123

#1
Moin,

die Funktion json2namevalue kennt mehr Argumente, siehe Wiki Artikel im passenden Abschnitt.

Oder den topic zwischendurch mit analysieren. Siehe bridgeRegexp

Und vielleicht die homeassistent Topics gleich in den Skat drücken. ;) Auswertung unterbinden.

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

fireball

Moinsen Otto,

ich hatte mir den Artikel gestern Nacht noch angeschaut und hatte jetzt noch ein
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* { json2nameValue($EVENT, 'SZ_') }
eingebaut... hat aber erst heute Morgen um 6 Uhr die Readings geändert und nicht sofort.
Weißt du warum das so lange dauert?

Aber ich habe verstanden, dass ich mit der zweiten Option noch Präfixe setzen kann.
Die Frage ist ob ich das wirklich will/muss... eigentlich interessiert mich ja nur die eigentlichen CO2 und Temp - Werte und der andere "Quatsch" den der ESPHome sendet ist für mich eher uninteressant.

Also wäre doch die eigentliche Lösung, die beiden Zeilen:
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* { json2nameValue($EVENT) }
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* { json2nameValue($EVENT) }

zu löschen und
diese hier den Readingsnamen anzupassen:

co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_co2/state:.* co2
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_temperatur/state:.* temp


oder?
Ich hantiere das erste Mal mit MQTT rum, bis auf den TASMOTA-Stromzähler, daher bin ich da noch nicht ganz so bewandert.

VG+Danke
René
Rene

Otto123

#3
Warum das lange gedauert hat kann ich nicht sagen. :-[

Die readingList Einträge löschen ist der falsche Weg, Du musst die Auswertung unterbinden:
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* {}
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* {}

oder so
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/.*/config:.* {}
Ansonsten tauchen die Readings irgendwann irgendwo wieder auf :)
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

TomLee

Zitat von: Otto123 am 05 Februar 2023, 09:07:36
oder so
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/.*/config:.* {}

Bestimmte Zweige nicht auszupacken hat mich die Tage auch beschäftigt, ich meine festgestellt zu haben das man alles was nach co2-sensor-sz folgt dann auch so ausknipsen kann:

co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz.* {}

Oder ist dabei ein Denkfehler, es tut bei mir zumindest ?

Otto123

Du Schere - ich Skalpell :)
Falls da noch was anderes wäre als config  ;D

Klar geht das - es ginge ja sogar .* {} für alles :)
ZitatreadingList <regexp> [readingName|perl-Expression]
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

fireball

Moinsen,

ich habs jetzt so gemacht wie Otto und auch das was bei debug geloggt wurde mit dem "Skalpel" deaktiviert.
Gleichzeitig habe ich nochmal alle sinnlosen Readings aus der Übersicht gelöscht.

jetzt sieht das so aus:
Internals:
   CFGFN     
   CID        co2_sensor_sz_840d8e8a913d
   DEF        co2_sensor_sz_840d8e8a913d
   FUUID      63deb1d9-f33f-0804-eddf-8494e3fdccb568f4
   IODev      MyBroker
   LASTInputDev MyBroker
   MSGCNT     3615
   MyBroker_CONN MyBroker_192.168.178.149_60737
   MyBroker_MSGCNT 3615
   MyBroker_TIME 2023-02-05 10:57:38
   NAME       MQTT2_co2_sensor_sz
   NR         8149
   STATE      1447 ppm
<br>
23.8 Grad
   TYPE       MQTT2_DEVICE
   eventCount 3421
   OLDREADINGS:
   READINGS:
     2023-02-04 20:28:25   IODev           MyBroker
     2023-02-05 10:57:38   co2_state       1447
     2023-02-05 09:44:50   debug           [D][sensor:126]: 'Schlafzimmer Temperatur': Sending state 23.22501 °C with 1 decimals of accuracy
     2023-02-04 21:55:22   dev_cla         temperature
     2023-02-04 21:55:22   dev_ids         840d8e8a913d
     2023-02-04 21:55:22   dev_mdl         d1_mini
     2023-02-04 21:55:22   dev_mf          espressif
     2023-02-04 21:55:22   dev_name        co2-sensor-sz
     2023-02-04 21:55:22   dev_sw          esphome v2022.12.8 Feb  4 2023, 20:27:44
     2023-02-04 21:55:22   ic              mdi:molecule-co2
     2023-02-05 09:50:49   status          online
     2023-02-05 10:57:38   temp_state      23.8
Attributes:
   readingList co2_sensor_sz_840d8e8a913d:co2-sensor-sz/debug:.* {}
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* {}
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_co2/state:.* co2_state
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* {}
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/sensor/schlafzimmer_temperatur/state:.* temp_state
co2_sensor_sz_840d8e8a913d:co2-sensor-sz/status:.* status
   room       MQTT2_DEVICE
   stateFormat co2_state ppm
<br>
temp_state Grad


Ich könnte noch ein paar Werte mehr löschen, da sie nie wieder aktualisiert werden, da ..../config:.* ja jetzt "deaktivert ist, aber so weiß ich wenigstens noch woher die Daten mal kamen.

VG+Danke

fireball

Moinsen,

ich habe jetzt einen zweiten co2mini per MQTT eingebunden, dieser liefert nur

co2_sensor_wz_84f3eb244711:co2-sensor-wz/debug:.* {}
co2_sensor_wz_84f3eb244711:co2-sensor-wz/sensor/wohnzimmer_co2/state:.* co2_state
co2_sensor_wz_84f3eb244711:co2-sensor-wz/sensor/wohnzimmer_temperatur/state:.* temp_state
co2_sensor_wz_84f3eb244711:co2-sensor-wz/status:.* status


allerdings habe ich hier relativ "schnell" die debug Zeile "deaktiviert".
Oder habt ihr eine andere Idee, warum hier die

co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_co2/config:.* {}
co2_sensor_sz_840d8e8a913d:homeassistant/sensor/co2-sensor-sz/schlafzimmer_temperatur/config:.* {}


nicht ausgelesen werden?
VG+Danke
René

Otto123

Moin René,

ich denke der ha topic ist dort nicht aktiviert? Du hast ev. MQTT anders konfiguriert im Gerät?

Theoretisch kann auch ein homeassistant/sensor/.* {} in EINEM MQTT2_DEVICE alle diese Nachrichten quasi "wegfressen"

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

Beta-User

Zitat von: Otto123 am 05 Februar 2023, 08:10:31
Und vielleicht die homeassistent Topics gleich in den Skat drücken. ;)
...das solltest du in deine berühmte Zitatensammlung übernehmen...

Ansonsten ist (u.a.) der "homeassistant-config"-Topic auch einfach ein Kandidat für "ignoreRegexp" am IO-Device ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fireball

Hi Otto,

ja irgendwas muss ich anders konfiguriert haben... ganz ehrlich, ich finde aber den Grund nicht.
Ich habe ESPHome nochmal frisch auf beide ESPs geflashed und jetzt senden beide die Homeassistant-Werte nicht mehr... naja umso besser :)

Mit dem MQTT2 Device lese ich ja jetzt ein Topic aus... da auch wird einmalig beim Start des ESPs ein Status "online" übermittelt.
https://esphome.io/components/mqtt.html#mqtt-last-will-birth
Aber wenn ich den ESP stromlos mache, dann wechselt das auch nicht zu offline... wie auch, der client kann nix mehr senden.
Oder kann der MQTT2 Server das irgendwie zu offline wandeln, wenn keine Nachrichten mehr kommen?!

VG
René