Tasmota/ MQTT: Parse JSON Reading

Begonnen von hkspks, 01 Dezember 2022, 16:26:11

Vorheriges Thema - Nächstes Thema

hkspks

Hallo zusammen,

gibt es eine charmante Möglichkeit, den Tasmota-JSON-Response "SENSOR" direkt in Einzel-Readings zu überführen?

Aktuell packt er mir nachvollziehbar den JSON-String in ein Reading "Sensor". Klar, könnte ich da jetzt ein Notify drauf setzen und mit Codings hantieren - ggf. gibt es aber ja eine charmantere Möglichkeit? Ich hätte gerne die Energiewerte direkt als einzelne Readings im Device.

defmod Steckdose MQTT_DEVICE
attr Steckdose subscribeReading_Sensor tele/tasmota_EE34E1/SENSOR
setstate Steckdose 2022-12-01 15:15:20 Sensor {"Time":"2022-12-01T15:15:20","ENERGY":{"TotalStartTime":"2022-10-14T12:15:23","Total":1.323,"Yesterday":0.470,"Today":0.288,"Period": 4,"Power":45,"ApparentPower":77,"ReactivePower":63,"Factor":0.57,"Voltage":237,"Current":0.326}}


Ggf. ist es möglich, einzelne Readings zu definieren und dann darin direkt Perl-Code auszuführen, der das richtige Datenelement aus dem JSON extrahiert:

Zitatattr <name> subscribeReading_<reading> [{Perl-expression}] [qos:?] [retain:?] <topic>
mapps a reading to a specific topic. The reading is updated whenever a message to the configured topic arrives.
QOS and ratain can be optionally defined for this topic.
Furthermore, a Perl statement can be provided which is executed when the message is received. The following variables are available for the expression: $hash, $name, $topic, $message. Return value decides whether reading is set (true (e.g., 1) or undef) or discarded (false (e.g., 0)).

z.B. attr Steckdose subscribeReading_EnergyTotal PERL_EXTRAKT_CODE(tele/tasmota_EE34E1/SENSOR)

Falls ja, ggf. hat ja jemand ein Snippet für mich ;-)

LG, Christian

OdfFhem

Bei MQTT_DEVICE wird (oft) expandJSON verwendet.

s. https://forum.fhem.de/index.php/topic,100187.msg936219.html#msg936219 und natürlich die gerätespezifische FHEM-Hilfe.

Otto123

Hi,

"charmanter" wäre mit MQTT2_DEVICE und attrTemplate zu hantieren ;)

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

hkspks

Cool, das hat geklappt. Jetzt habe ich an 6 Geräten ein Reading Energy_Today reading.

Was wäre der Goldstandard, um die Werte täglich abzugreifen, wegzuschreiben, zu aggregieren und zu plotten? Überlege mir ein kleines Energiereporting a la ein Barchart mit einer Säule je Tag und die Säule unterteilt in die Geräte 😉

Quasi eine kleine DWH Anwendung ^^

Sany

#4
Zitatum die Werte täglich abzugreifen, wegzuschreiben, zu aggregieren und zu plotten? Überlege mir ein kleines Energiereporting a la ein Barchart mit einer Säule je Tag und die Säule unterteilt in die Geräte

schau mal hier, sowas in der Art gibts schon.
https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Anwendungsbeispiele_mit_card
Laut Damian Work in progress, es wird erweitert und Säulendiagramme kommen...
Ist aber nicht copy-paste, jedenfalls nicht der Anzeigeteil. Einarbeitung in DOIF-perl und uiTable ist schon erforderlich.


Gruß


Sany

edit: link vergessen ::)
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

OdfFhem


Beta-User

statistics macht so was auch, man muss sich dann hält um die Darstellung selbst kümmern...
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

Sany

Zitathier" scheint nur Text zu sein ... Link fehlt ...

oben korrigiert.
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

#8
Für Energiereporting (inklusive Berechnung des Tages/Monats/Jahres-Verbrauchs) mit Visualisierung habe hier etwas definiert. Erforderlich ist nur die Angabe des Zählerreadings. Die Visualisierung habe ich über vordefinierte Templates vereinfacht, auch hier reicht schon die Angabe des betroffenen Devices und des Readingnamens.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hkspks

Hi Damian,

mega - das war ja super einfach. Gibt es auch die Möglichkeit, gestapelte Charts zu erstellen - egal ob als Linien- oder Balkendiagramm?

LG, Christian

Damian

#10
Zitat von: hkspks am 05 Dezember 2022, 22:12:47
Hi Damian,

mega - das war ja super einfach. Gibt es auch die Möglichkeit, gestapelte Charts zu erstellen - egal ob als Linien- oder Balkendiagramm?

LG, Christian

In der card-Funktion z. Zt. nicht. card mit Balken wird es bald geben. Es gibt Balken/gestapelte Balken, allerdings muss man sich um die einzelnen Werte selbst kümmern:

https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#3d-Balkendarstellung_mehrerer_Zahlenwerten_mit_Hilfe_der_universellen_SVG-Funktion_cylinder.2Fcylinder_s

oder

https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#Balkendarstellung_mehrerer_Zahlenwerte_mit_Hilfe_der_universellen_SVG-Funktion_cylinder_bars

Edit: Man kann sich allerdings behelfen, indem man die einzelnen Werte über ein user-Reading oder DOIF-Reading selbst addiert und dann den kumulierten und einen der anderen Werte darstellt. Das sieht man z. B. bei Darstellung der Heizenergie im di_counter-Beispiel. Heizenergie ist die Summe aus der Warmwasserenergie und Energie der Heizung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hkspks

Cool, ansonsten habe ich früher etwas hier mit gespielt: https://developers-dot-devsite-v2-prod.appspot.com/chart/interactive/docs/gallery

Wäre ggf. auch etwas? Natürlich dann nicht mehr komplett on premise, aber für ein Dashboard müsste das aus meiner Sicht OK sein :-)

LG, Christian

Damian

ja, so schön die Tools auch sind, sie bauen auf irgendwelchen externen Bibliotheken auf. Ich erzeuge die Plots mit rudimentären SVG-Funktionen, die alle Browser unterstützen. Dadurch ist man unabhängig und hat die höchste Darstellungsgeschwindigkeit. Den HTML-Code erzeuge ich nicht im Browser, sondern auf dem Server in Perl.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hkspks

Zitat von: Damian am 07 Dezember 2022, 11:56:07
ja, so schön die Tools auch sind, sie bauen auf irgendwelchen externen Bibliotheken auf.

Da ist sicherlich was wahres dran - so eine API ändert sich auch mal gerne :-)

Zitat von: Damian am 05 Dezember 2022, 22:29:41
Edit: Man kann sich allerdings behelfen, indem man die einzelnen Werte über ein user-Reading oder DOIF-Reading selbst addiert

Kannst Du mir noch kurz helfen, wo du die Werte aggregieren würdest? Im DOIF-Skript selbst oder würdest Du ein Dummy-Device zwischen DOIF und den Geräten schalten?

In meinem Beispiel habe ich 4 Tasmota Lampen, die ich gerne aggregiert in das uiTables geben würde. In dem Fall nicht gestapelt, sondern einfach eine Linie mit den summierten werten.

LG

Damian

Wenn du es nur für die Darstellung brauchst, dann würde ich die Summierung direkt in dem DOIF-Device über DOIF_Readings machen. Das hat den Vorteil, dass im Gegensatz zu user_Readings keine Events nach außen produziert werden, uiTable-Funktionen werden dennoch benachrichtigt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF