FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: appi am 23 Mai 2025, 19:49:02

Titel: subscribe_Reading in DoIf Device - JSON in Redings
Beitrag von: appi am 23 Mai 2025, 19:49:02
Hallo
ich bin am Ende meiner Kenntnisse.....

Ich möchte in einem DoIF Device mit subscribe_Reading ein MQTT JSON String aufsplitten und einzelne Readings erzeugen. Leider klappt es nicht und ich wäre wiedermal um einen Tipp dankbar.

Die MQTT JSON MessaGE sieht so aus:
p2b91 = {"event":"up","val":8}
Mein subscribe_Reading:
Fan_Speed:topic=hasp/plate_3/state/p2b91 Fan_Speed:expression={"val"=>$value}
Ergibt:   
{"event":"up","val":7}

Wie kriege ich nur den Wert von val mit dem Readingname p2b91_val? Also p2b91_val = 7

Danke für einen Tipp

gruss
Titel: Aw: subscribe_Reading in DoIf Device - JSON in Redings
Beitrag von: betateilchen am 23 Mai 2025, 20:50:17
Warum möchte man sowas in einem DOIF machen?
Für MQTT/JSON gibt es doch tatsächlich andere/spezialisiertere Lösungen in FHEM.
Titel: Aw: subscribe_Reading in DoIf Device - JSON in Redings
Beitrag von: appi am 24 Mai 2025, 08:08:59
Ich betreibe ein Display welches openhasp installiert hat per MQTT gefüttert und ausgelesen wird.
Ich hätte gerne alle publishes und subscribes in einem einzigen Device und nicht auf x Notifys und Dummy  verteilt.

So ist mein DoIf Device entstanden, welches schon sehr gut funktioniert und extrem übersichtlich ist.

defmod d_openhasp_4 DOIF {}
attr d_openhasp_4 event_Readings T_Aussen: [WP_Helio:T_Aussen],\
T_Aussen_color: ([WP_Helio:T_Aussen] < 18 ? "red" : "blue"),\
H_Aussen: [KNX_Burli_Hum:Humidity-get],\
H_Aussen_color: ([KNX_Burli_Hum:Humidity-get] < 60 ? "red" : "green"),\
W_Aussen: [Aussen_Aenometer:Windspeed],\
W_Aussen_color: ([Aussen_Aenometer:Windspeed] > 40 ? "red" : "withe"),\
S_Eigenv: [SMAInverter:EigenverbrauchHeute],\
S_Verbrauch: [Energie_Bezug:Bezug_all-get]+[SMAInverter:SPOT_PACTOT]+[SMAInverter_8KW:SPOT_PACTOT],\
S_Bezug:[Energie_Bezug:Bezug_all-get],\
S_Produktion_alt: [SMAInverter:SPOT_PACTOT],\
S_Produktion_neu: [SMAInverter_8KW:SPOT_PACTOT],\
S_Produktion_alle: [SMAInverter:PV_alle_aktuell],\
S_Bilanz: [Energie_Bezug:Strombilanz_aktuell],\
S_Bilanz_color: ([Energie_Bezug:Strombilanz_aktuell] < 0 ? "red" : "green"),\
S_Produktion_Tag: ([SMAInverter:SPOT_ETODAY]/1000)+([SMAInverter_8KW:SPOT_ETODAY]/1000),\
S_Bezug_heute:([Stromzaehler_Bezug:Zaehler_Bezug_all-get_EnergyDay]/1000),\
S_Lieferung_heute: ([Stromzaehler_Einspeisung:Zaehler_Lieferung_all-get_EnergyDay]/1000),\
B_Byd_SOC:[myBYDBox:Battery_1_SOC],\
Sonos_Kueche_Source:[Sonos_Kueche:currentSource],\
Volvo_SOC:[volvo_2:battery_charge_level],\
Volvo_distance_to_go:[volvo_2:distance_to_go],\
Volvo_kilometerstand:[volvo_2:kilometerstand]
attr d_openhasp_4 group Plot
attr d_openhasp_4 mqtt_bridged_Defaults base={"hasp/plate_3/command"}
attr d_openhasp_4 mqtt_bridged_Publish S_Bilanz:topic={"$base/p4b52.jsonl"} S_Bilanz:expression={toJSON({text_color=>ReadingsVal("$device","S_Bilanz_color",0),text=>"".$value." W"})}\
S_Eigenv:topic={"$base/p4b22.jsonl"} S_Eigenv:expression={toJSON({text_color=>"blue",text=>"".$value." W"})}\
S_Betzug_heute:topic={"$base/p19b23.jsonl"} S_Betzug_heute:expression={toJSON({text_color=>"blue",text=>"".$value." W"})}\
S_Produktion_Tag:topic={"$base/p4b24.jsonl"} S_Produktion_Tag:expression={toJSON({text_color=>"blue",text=>"".$value." W"})}\
S_Produktion_alle:topic={"$base/p4b51.jsonl"} S_Produktion_alle:expression={toJSON({text_color=>"blue",text=>"".$value." W"})}\
S_Produktion_alt:topic={"$base/p4b26.jsonl"} S_Produktion_alt:expression={toJSON({text_color=>"blue",text=>"".$value." WC"})}\
S_Produktion_neu:topic={"$base/p4b27.jsonl"} S_Produktion_neu:expression={toJSON({text_color=>"blue",text=>"".$value." W"})}\
S_Produktion_Tag:topic={"$base/p4b28.jsonl"} S_Produktion_Tag:expression={toJSON({text_color=>"yellow",text=>"".$value." W"})}\
T_Aussen:topic={"$base/p3b21.jsonl"} T_Aussen:expression={toJSON({text_color=>ReadingsVal("$device","T_Aussen_color",0),text=>"".$value." °C"})}\
H_Aussen:topic={"$base/p3b61.jsonl"} H_Aussen:expression={toJSON({text_color=>ReadingsVal("$device","H_Aussen_color",0),value_str=>"".$value.""})}\
W_Aussen:topic={"$base/p3b81.jsonl"} W_Aussen:expression={toJSON({text_color=>ReadingsVal("$device","W_Aussen_color",0),value_str=>"".$value." km/h"})}\
B_Byd_SOC!1:topic={"$base/p4b53.jsonl"} B_Byd_SOC!2:topic={"$base/p4b23.jsonl"} B_Byd_SOC!1:expression={toJSON({text=>"SOC".$value." %",text_color=>"green"})} B_Byd_SOC!2:expression={toJSON({val=>"".$value.""})}\
Volvo_SOC!1:topic={"$base/p8b53.jsonl"} Volvo_SOC!2:topic={"$base/p8b23.jsonl"} Volvo_SOC!1:expression={toJSON({text=>"".$value." %",text_color=>"green"})} Volvo_SOC!2:expression={toJSON({val=>"".$value.""})}\
Volvo_distance_to_go!1:topic={"$base/p8b54.jsonl"} Volvo_distance_to_go!2:topic={"$base/p8b24.jsonl"} Volvo_distance_to_go!1:expression={toJSON({text=>"".$value." km",text_color=>"red"})} Volvo_distance_to_go!2:expression={toJSON({val=>"".$value.""})}\
Volvo_kilometerstand:topic={"$base/p8b84.jsonl"} Volvo_kilometerstand:expression={toJSON({text=>"".$value." km"})}
attr d_openhasp_4 mqtt_bridged_Subscribe Fan_Speed:topic=hasp/plate_3/state/p2b91 Fan_Speed:expression={"p2b91"=>$value}
attr d_openhasp_4 room openhasp
attr d_openhasp_4 userReadings Kalender_heute { ReadingsVal("myView","t_001_bdate.A",0) }

setstate d_openhasp_4 initialized
setstate d_openhasp_4 2025-05-24 08:04:16 B_Byd_SOC 20.2
setstate d_openhasp_4 2025-05-24 08:00:43 H_Aussen 54.52 %
setstate d_openhasp_4 2025-05-24 08:00:43 H_Aussen_color red
setstate d_openhasp_4 2025-05-24 08:05:05 Kalender_heute 0
setstate d_openhasp_4 2025-05-24 08:05:05 S_Bezug 23
setstate d_openhasp_4 2025-05-24 07:56:17 S_Bezug_heute 0.064
setstate d_openhasp_4 2025-05-24 08:05:05 S_Bilanz -23
setstate d_openhasp_4 2025-05-24 08:05:05 S_Bilanz_color red
setstate d_openhasp_4 2025-05-24 08:04:56 S_Eigenv 4158
setstate d_openhasp_4 2025-05-24 07:56:17 S_Lieferung_heute 0.869
setstate d_openhasp_4 2025-05-24 08:04:58 S_Produktion_Tag 5.031
setstate d_openhasp_4 2025-05-24 08:04:56 S_Produktion_alle 2297
setstate d_openhasp_4 2025-05-24 08:04:56 S_Produktion_alt 2047
setstate d_openhasp_4 2025-05-24 08:04:58 S_Produktion_neu -1711
setstate d_openhasp_4 2025-05-24 08:05:05 S_Verbrauch 359
setstate d_openhasp_4 2025-05-24 07:56:17 Sonos_Kueche_Source
setstate d_openhasp_4 2025-05-24 08:02:39 T_Aussen 6.7
setstate d_openhasp_4 2025-05-24 08:02:39 T_Aussen_color red
setstate d_openhasp_4 2025-05-24 07:56:17 Volvo_SOC 56.0
setstate d_openhasp_4 2025-05-24 07:56:17 Volvo_distance_to_go 254
setstate d_openhasp_4 2025-05-24 07:56:17 Volvo_kilometerstand 7565
setstate d_openhasp_4 2025-05-24 07:56:17 W_Aussen 3.27
setstate d_openhasp_4 2025-05-24 07:56:17 W_Aussen_color withe
setstate d_openhasp_4 2025-05-24 07:56:17 mode enabled
setstate d_openhasp_4 2025-05-24 08:02:58 p2b91 {"event":"up","val":6}
setstate d_openhasp_4 2025-05-24 07:56:17 state initialized

Zur Zeit kämpfe ich um das Attribut mqtt_bridged_Subscribe um den JSON aufzubrechen und den Wert von "val" als Reading zu erhalten.
z.B  p2b91 = 6

Sollte ich auf dem Holzweg sein, bin ich natürlich offen für einfachere Lösung, danke für einen Tip
Titel: Aw: subscribe_Reading in DoIf Device - JSON in Redings
Beitrag von: Beta-User am 24 Mai 2025, 08:30:39
Zitat von: appi am 24 Mai 2025, 08:08:59Zur Zeit kämpfe ich um das Attribut mqtt_bridged_Subscribe um den JSON aufzubrechen und den Wert von "val" als Reading zu erhalten.
Warum nimmst du dann nicht den Vorschlag aus der commmandref zu MQTT_GENERIC_BRIDGE?
attr <dev> mqttSubscribe json:topic=XTEST/json json:expression={json2nameValue($message)}json2nameValue() "kann" dann noch mehr, wenn man es richtig parametriert ;) .
Titel: Aw: subscribe_Reading in DoIf Device - JSON in Redings
Beitrag von: appi am 24 Mai 2025, 08:50:46
So einfach.....  Danke

Ich habe nun ergänzt:
json:topic=hasp/plate_3/state/p2b91 json:expression={json2nameValue($message,'p2b91_')}

und erhalte die Readings:
p2b91_event  up 
p2b91_val     8

Ich mach mal weiter  8)