Hallo Experten,
ich versuche die Energie Daten meines IR Lesekopf der PV und Stromzähler auf den MQTT Broker zu mappen.
Das gelingt mir auch soweit.
Nur bekomme ich keinen sauberen JSON String hin:
so sieht mein DOIF aus:
define MS_Liefern_MQTT DOIF ([MS_Liefern:power] || 0) ({my $power=(ReadingsVal("MS_Liefern","power",""));;fhem ("set DSBroker publish /Fhem/MS_Liefern $power")})
DOELSE ()
Heraus kommt das:
{power:27.9 W}
sollte aber wohl so aussehen damit es JSON konform aussieht:
{"power":27.9 W}
Kann mir jemand sagen wie der String korrekt auszusehen hat?
Vg Denny
Hallo Denny,
ich weiß ja nicht was das gegenüber genau will und was (ReadingsVal("MS_Liefern","power","") wirklich zurück liefert - aber es gibt auch eine Funktion toJson.
Ich habe hier (https://heinz-otto.blogspot.com/2019/11/mqtt-ich-muss-das-testen.html)mal ein bisschen was zusammengeschrieben - kommst Du damit weiter?
Gruß Otto
Hallo Otto,
Sorry für die späte Rückmeldung.
Ich habe es via DOIF gelöst.
define MS_Liefern_MQTT DOIF ([MS_Liefern:power] || 0) ({my $power=(ReadingsVal("MS_Liefern","power",""));;;; fhem ("set DSBroker publish /Fhem/MS_Liefern '{power:$power}'")}) \
DOELSE ()
Das einzige was ich dabei nicht hinbekommen habe, sind die doppelten Hochkomma ["]. Das habe ich einfach nicht hinbekommen.
Was aber obsolet ist, da die OpwnWB die Daten selbst direkt von Fhem holen kann.
Aber wieder etwas dazu gelernt.
Vielen Dank!
Vg Denny
Du meinst escapen? Also anstatt {"Dein String \"im String\" "} ?
Zitat von: Otto123 am 04 Dezember 2020, 11:56:55
Du meinst escapen? Also anstatt {"Dein String \"im String\" "} ?
Da ist m.E. noch mehr "verbogen", weil $power in einfachen Quotes auch nicht aufgelöst werden dürfte.
Würde mal den Umweg über eine Variable austesten:
{my $power=ReadingsVal('MS_Liefern','power','unknown'); my $cmnd = qq(set DSBroker publish /Fhem/MS_Liefern {"power":$power}); fhem ($cmnd)}
Details: z.B. hier https://www.perlmonks.org/?node_id=401006
Zitat von: Beta-User am 04 Dezember 2020, 13:07:05
Da ist m.E. noch mehr "verbogen", weil $power in einfachen Quotes auch nicht aufgelöst werden dürfte.
Doch es wird, weil doch die äußeren Klammern zählen?
Versuch:
{my $power=75;; return "set DSBroker publish /Fhem/MS_Liefern '{power:$power}'"}
:o Uih, da muss ich wohl nochmal nachsitzen, staun...
(Trotzdem ist die Escaperei auf die Dauer irgendwie unschön ::) )
Vielen Dank für Eure Hilfe.
Ich mache es via GENERIC_MQTT_BRIDGE Modul.
Warum ich das nicht gleich so gemacht habe!
:-(
Man lernt nicht aus.
VG Denny