DOIF --> MQTT publish (JSON) String

Begonnen von rohlande, 09 November 2020, 16:52:47

Vorheriges Thema - Nächstes Thema

rohlande

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
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

Otto123

#1
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 mal ein bisschen was zusammengeschrieben - kommst Du damit weiter?

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

rohlande

#2
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
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger

Otto123

Du meinst escapen? Also anstatt {"Dein String \"im String\" "} ?
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 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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

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}'"}
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

 :o Uih, da muss ich wohl nochmal nachsitzen, staun...

(Trotzdem ist die Escaperei auf die Dauer irgendwie unschön ::) )
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rohlande

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
HostSystem: Synology DS918 | FHEM im Docker Version: 6.0-s22528_v2.2.4 (dedizierte IP Adresse) | MQTT_Broker auf DS918 NAS | MQTT_FHEM | TASMOTA_DEVICE | SSChatBot | SSCam | LaMetric | FBAHAHTTP | CUL | SONOS | HUEBridge (deCONZ) Zigbee | FB_CALLMONITOR | InfluxDBLogger