subscribe_Reading in DoIf Device - JSON in Redings

Begonnen von appi, 23 Mai 2025, 19:49:02

Vorheriges Thema - Nächstes Thema

appi

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

betateilchen

Warum möchte man sowas in einem DOIF machen?
Für MQTT/JSON gibt es doch tatsächlich andere/spezialisiertere Lösungen in FHEM.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

appi

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

Beta-User

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 ;) .
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

appi

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)