VZLogger über mqtt angebunden, wie bekomme ich die 5 Nachkommastellen entfernt.

Begonnen von rubinho, 12 Oktober 2021, 08:19:22

Vorheriges Thema - Nächstes Thema

rubinho

Hallo Communitiy,

da mein erstes Elektroauto noch dieses Jahr erwartet wird, habe ich mir noch schnell eine Wallbox zugelegt.
Da ich, wie die meisten hier im Forum, technikverliebt bin, will ich die Steuerung (PV Überschussladen) der WB mittels EVCC realisieren.
Damit das Teil richtig arbreiten kann, braucht das Teil neben den Daten des Wechselrichters auch die Daten eines Smart Meter.
Ich greife nun seit Jahren die Verbrauchsdaten meines EHZ mittels Lesekopf direkt mit Fhem ab, allerdings hat Evcc keine Möglichkeit die Daten direkt von Fhem zu bekommen, aber von VZlogger.
Gesagt getan, habe ich meine Raspberry umgebaut und zusätzlich vzlogger installiert. Evcc und VZlogger arbeiten jetzt zusammen, allerdings wollte ich meine Daten weiterhin noch in Fhem sehen können.
Da ich die alten Module Volkszähler und VZlogger nicht wirklich zum laufen gebracht habe (UUID wurde nicht erkannt). habe ich mich dazu entschieden die Werte über MQTT zu übermitteln.
Das funktioniert soweit gut, allerdings bekomme ich insgesamt 6 Nachkommastellen angezeigt, wovon 5 Stellen immer 0 anzeigen.

Lange Rede kurzer Sinn,
gibt es ne überschaubare Anpassung der Readinglist oder Userreading, wo ich die Nachkommastellen entfernen kann.

Ich wolle in der Readinglist statt dem .* mit d bzw. d+ arbeiten, allerdings bekam ich danach nichts mehr angezeigt. (Ich habe allerdings so meine Probleme mit Regexp)
Ich benötige auch nicht unbedingt die Werte hinter dem Komma. Das bläst nur das Log voll.

Gruß
Rubinho
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Beta-User

Aus der Angabe "readinglist" schließe ich, es handelt sich um ein MQTT2_DEVICE....?

Dann könntest du ggf. direkt in der readingList "rechnen": einfach den Wert mit 1 multiplizieren sollte reichen. Wie das konkret zu machen ist, hängt davon ab, ob die Werte als JSON verpackt sind oder im Klartext übermittelt werden (=> https://forum.fhem.de/index.php/topic,112327.0.html).
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

rubinho

OK, reicht das als Info?

define MQTT2_vzlogger MQTT2_DEVICE vzlogger
attr MQTT2_vzlogger autocreate 0
attr MQTT2_vzlogger group Zähler
attr MQTT2_vzlogger readingList vzlogger:vzlogger/data/chn0/id:.* id0\
vzlogger:vzlogger/data/chn0/uuid:.* uuid0\
vzlogger:vzlogger/data/chn0/raw:.* channel0\
vzlogger:vzlogger/data/chn1/id:.* id1\
vzlogger:vzlogger/data/chn1/uuid:.* uuid1\
vzlogger:vzlogger/data/chn1/raw:.* channel1\

attr MQTT2_vzlogger stateFormat channel0 w channel1 kwh



2021-10-12 09:29:26 MQTT2_DEVICE MQTT2_vzlogger channel0: 282.600000
2021-10-12 09:29:26 MQTT2_DEVICE MQTT2_vzlogger channel1: 76472752.400000
2021-10-12 09:29:28 MQTT2_DEVICE MQTT2_vzlogger channel0: 284.200000
2021-10-12 09:29:28 MQTT2_DEVICE MQTT2_vzlogger channel1: 76472752.500000
2021-10-12 09:29:30 MQTT2_DEVICE MQTT2_vzlogger channel0: 281.600000
2021-10-12 09:29:30 MQTT2_DEVICE MQTT2_vzlogger channel1: 76472752.700000
2021-10-12 09:29:31 MQTT2_DEVICE MQTT2_vzlogger channel0: 281.600000
2021-10-12 09:29:31 MQTT2_DEVICE MQTT2_vzlogger channel1: 76472752.800000
2021-10-12 09:29:33 MQTT2_DEVICE MQTT2_vzlogger channel0: 284.800000
2021-10-12 09:29:33 MQTT2_DEVICE MQTT2_vzlogger channel1: 76472752.900000
2021-10-12 09:29:34 MQTT2_DEVICE MQTT2_vzlogger channel0: 278.600000
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

rudolfkoenig

Vermutlich nicht, ich jedenfalls wuerde die unverdauten Daten sehen wollen.
Diese sieht man z.Bsp. im Event-Monitor, nachdem man beim MQTT2_SERVER/CLIENT rawEvents gesetzt hat.

Auf der anderen Seite wuerde ich mir nicht die Muehe machen, die 0-er abzuschneiden, das Gesparte steht mAn in keinem Verhaeltnis zum Aufwand.

rubinho

Ok, danke für die Info.

Das wollte ich doch wissen. Wenns keine knackige Lösung gibt, die einer von euch Guru´s aus dem Ärmel schütteln kann, lebe ich damit.

Mehr Lebendszeit ist auch was schönes. Sollte der Winter dunkler werden als gedacht, kann ich mich da immer noch reinkniehen. So lange ich das Rad nicht nocheinmal erfinden muss ist alles gut.

Gruß
Rubinho
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Beta-User

Na ja, aus den Angaben raus würde ich vermuten, dass z.B.vzlogger:vzlogger/data/chn0/raw:.* channel0\
so geändert werden könnte:
vzlogger/data/chn0/raw:.* { looks_like_number($EVENT) ? { channel0=>$EVENT*1 } : { channel0_o=>$EVENT } }\
Ob sich das lohnt, mag ich nicht beurteilen...
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

Christoph Morrison

Dein Problem ist doch nicht, dass die vielen "unnutzen" Nullen da sind, sondern dass du sie angezeigt bekommst, richtig?
Versuchs mal hiermit:


attr MQTT2_vzlogger stateFormat [$name:channel0:d2] W [$name:channel1:d2] kWh

rubinho

Danke Leute,

ich habe es mit Beta-User´s Scriptschnipsel hinbekommen.
Auch wenn ich nicht hinter die Logik von { looks_like_number($EVENT) ? { channel0=>$EVENT*1 } : { channel0_o=>$EVENT } } gestiegen bin.
Einzig die Kommaverschiebung bei den KWh Werten habe ich durch Division { channel1=>$EVENT/1000 } hinbekommen.

Insgesamt reicht mir das. Ich muss nicht alles verstehen :D

Danke nochmal.
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

Beta-User

ZitatAuch wenn ich nicht hinter die Logik von
{ looks_like_number($EVENT) ? { channel0=>$EVENT*1 } : { channel0_o=>$EVENT } }

Also:
1: (Feststellung ) Man kann (im Prinzip beliebigen) Perl-Code in der readingList verwenden. "Normal" wird json2nameValue() in verschiedenen Formen automatisch ergänzt, wenn eine JSON-Payload erkannt wird, es geht aber "alles mögliche".
2. Die Rückgabe muss aber dann ein Hash (also eine Liste mit "key:value"-Paaren) sein.
3. Die Schreibweise "$x ? 'y' : 'z'" ist eigentlich ein verkürztes if-else-Konstrukt (ternärer Operator).

Konkret wird hier also nachgeschaut, ob eine Zahl übermittelt wurde. Wenn ja, wird gerechnet und am Ende ein Hash mit "channel0"=> "neuer Wert" zurückgegeben. Wenn nicht, wird ein anderes Reading befüllt, indem eben ein anderer "key"-Name dem ursprünglich erhaltenen Wert zugewiesen wird.

Wenn du also gleich nach diesem Muster umrechnen willst, kannst du die Rechnung jetzt wohl auch einfach in den ternären Operator einfügen ;) .

Kein Hexenwerk, man muss es nur wissen...
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