[Gelöst] ReadingsProxy & expandJSON > Wandelt JSON nicht um

Begonnen von Gear, 18 Mai 2023, 00:58:16

Vorheriges Thema - Nächstes Thema

Gear

Guten Morgen / Nacht zusammen,

ich habe mir eine Shelly Bulb Duo gekauft.
Die Bulb ist als MQTT Device angelegt, hier geht alles.
Da man in einem MQTT Device keine Helligkeit / Farbtemperatur schalten kann und der CMD zum Shelly ein JSON sein muss, nutze ich ein ReadingsProxy.
> Das geht auch.

Da ich gerne den Zustand der Bulb in ReadingsProxy hätte, war die Überlegung das JSON von der Bulb im RP via expandJSON in Readings umwandeln zu lassen.
> eJ auf das MQTT Device geht ohne Probleme, nur auf das RP nicht.

MQTT Device:
define SZ.Licht.Decke.BulbDuo.Shelly MQTT_DEVICE
attr SZ.Licht.Decke.BulbDuo.Shelly userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr SZ.Licht.Decke.BulbDuo.Shelly DbLogExclude .*
attr SZ.Licht.Decke.BulbDuo.Shelly event-on-change-reading brightness,ison,source,state,temp,white,
attr SZ.Licht.Decke.BulbDuo.Shelly event-on-update-reading Status,Power,Sensor
attr SZ.Licht.Decke.BulbDuo.Shelly publishSet on off shellies/ID005/light/0/command
attr SZ.Licht.Decke.BulbDuo.Shelly publishSet_SET shellies/ID005/light/0/set
attr SZ.Licht.Decke.BulbDuo.Shelly room 99 Functional
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Cloud shellies/ID005/cloud
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Firmware shellies/ID005/firmware
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_LampState shellies/ID005/light/0
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Loaderror shellies/ID005/loaderror
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Network shellies/ID005/network
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Online shellies/ID005/online
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_OverTemperatur shellies/ID005/overtemperature
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Overload shellies/ID005/overload
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_OverpowerValue shellies/ID005/overpower_value
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Overtemperature shellies/ID005/overtemperature
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Power shellies/ID005/light/0/power
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Sensor shellies/ID005/light/0/energy
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Status shellies/ID005/light/0/status
attr SZ.Licht.Decke.BulbDuo.Shelly subscribeReading_Temperatur shellies/ID005/temperature
attr SZ.Licht.Decke.BulbDuo.Shelly webCmd on:off
#   FUUID      64650515-f33f-cc91-8a7f-0c04e3990ba17a4f
#   FVERSION   10_MQTT_DEVICE.pm:0.249520/2021-09-11
#   IODev      Mosquitto
#   NAME       SZ.Licht.Decke.BulbDuo.Shelly
#   NR         292
#   STATE      off
#   TYPE       MQTT_DEVICE
#   eventCount 307
#   OLDREADINGS:
#   READINGS:
#     2023-05-18 00:56:08   LampState       off
#     2023-05-18 00:56:08   Power           0.00
#     2023-05-18 00:42:57   SET             {"brightness": 6,"turn": "on"}
#     2023-05-18 00:56:08   Sensor          54
#     2023-05-18 00:56:08   Status          {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}
#     2023-05-18 00:43:39   state           off
#     2023-05-18 00:56:08   transmission-state incoming publish received
#   message_ids:
#   publishSets:
#     :
#       topic      shellies/ID005/light/0/command
#       values:
#         on
#         off
#     SET:
#       topic      shellies/ID005/light/0/set
#       values:
#   sets:
#     SET       
#     off       
#     on        
#   subscribe:
#     shellies/ID005/cloud
#     shellies/ID005/firmware
#     shellies/ID005/light/0
#     shellies/ID005/loaderror
#     shellies/ID005/network
#     shellies/ID005/online
#     shellies/ID005/overtemperature
#     shellies/ID005/overload
#     shellies/ID005/overpower_value
#     shellies/ID005/light/0/power
#     shellies/ID005/light/0/energy
#     shellies/ID005/light/0/status
#     shellies/ID005/temperature
#   subscribeExpr:
#     ^shellies\/ID005\/cloud$
#     ^shellies\/ID005\/firmware$
#     ^shellies\/ID005\/light\/0$
#     ^shellies\/ID005\/loaderror$
#     ^shellies\/ID005\/network$
#     ^shellies\/ID005\/online$
#     ^shellies\/ID005\/overtemperature$
#     ^shellies\/ID005\/overload$
#     ^shellies\/ID005\/overpower_value$
#     ^shellies\/ID005\/light\/0\/power$
#     ^shellies\/ID005\/light\/0\/energy$
#     ^shellies\/ID005\/light\/0\/status$
#     ^shellies\/ID005\/temperature$
#   subscribeQos:
#     shellies/ID005/cloud 0
#     shellies/ID005/firmware 0
#     shellies/ID005/light/0 0
#     shellies/ID005/light/0/energy 0
#     shellies/ID005/light/0/power 0
#     shellies/ID005/light/0/status 0
#     shellies/ID005/loaderror 0
#     shellies/ID005/network 0
#     shellies/ID005/online 0
#     shellies/ID005/overload 0
#     shellies/ID005/overpower_value 0
#     shellies/ID005/overtemperature 0
#     shellies/ID005/temperature 0
#   subscribeReadings:
#     shellies/ID005/cloud:
#       cmd       
#       name       Cloud
#     shellies/ID005/firmware:
#       cmd       
#       name       Firmware
#     shellies/ID005/light/0:
#       cmd       
#       name       LampState
#     shellies/ID005/light/0/energy:
#       cmd       
#       name       Sensor
#     shellies/ID005/light/0/power:
#       cmd       
#       name       Power
#     shellies/ID005/light/0/status:
#       cmd       
#       name       Status
#     shellies/ID005/loaderror:
#       cmd       
#       name       Loaderror
#     shellies/ID005/network:
#       cmd       
#       name       Network
#     shellies/ID005/online:
#       cmd       
#       name       Online
#     shellies/ID005/overload:
#       cmd       
#       name       Overload
#     shellies/ID005/overpower_value:
#       cmd       
#       name       OverpowerValue
#     shellies/ID005/overtemperature:
#       cmd       
#       name       Overtemperature
#     shellies/ID005/temperature:
#       cmd       
#       name       Temperatur
#
setstate SZ.Licht.Decke.BulbDuo.Shelly off
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:56:08 LampState off
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:56:08 Power 0.00
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:42:57 SET {"brightness": 6,"turn": "on"}
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:56:08 Sensor 54
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:56:08 Status {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:43:39 state off
setstate SZ.Licht.Decke.BulbDuo.Shelly 2023-05-18 00:56:08 transmission-state incoming publish received


ReadingsProxy:
define SZ.Licht.Decke.BulbDuo.Shelly.rProxy readingsProxy SZ.Licht.Decke.BulbDuo.Shelly:Status
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy userattr Light Light_map lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 structexclude
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy DbLogExclude .*
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy event-on-update-reading state
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy eventMap on:ON off:OFF
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy genericDeviceType light
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy group Licht
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy room 03 Schlafzimmer,42 Licht
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy setFn {if ($CMD =~ m/on|off/) {$ARGS=$CMD;;$CMD = ""} elsif ($CMD =~ m/Brightness/ and $ARGS == 0) {fhem ("set $DEVICE off");;} elsif ($CMD =~ m/Brightness/ and $ARGS != 0) {fhem ("set $DEVICE SET {\"brightness\": $ARGS,\"turn\": \"on\"}");;} elsif ($CMD =~ m/ColorTemp/) {fhem ("set $DEVICE SET {\"temp\": $ARGS,\"turn\": \"on\"}");;} else {fhem ("set $DEVICE off");;}}
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy setList on:noArg off:noArg Brightness:slider,0,1,100 ColorTemp:slider,2700,10,6500
attr SZ.Licht.Decke.BulbDuo.Shelly.rProxy webCmd ON:OFF:Brightness:ColorTemp
#   DEF        SZ.Licht.Decke.BulbDuo.Shelly:Status
#   DEVICE     SZ.Licht.Decke.BulbDuo.Shelly
#   FUUID      64654312-f33f-cc91-8554-12aba4bf9b20e067
#   FVERSION   33_readingsProxy.pm:0.162990/2018-03-01
#   NAME       SZ.Licht.Decke.BulbDuo.Shelly.rProxy
#   NOTIFYDEV  SZ.Licht.Decke.BulbDuo.Shelly,global
#   NR         294
#   NTFY_ORDER 50-SZ.Licht.Decke.BulbDuo.Shelly.rProxy
#   READING    Status
#   STATE      {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}
#   TYPE       readingsProxy
#   eventCount 94
#   CONTENT:
#     SZ.Licht.Decke.BulbDuo.Shelly 1
#   READINGS:
#     2023-05-18 00:43:39   lastCmd         off
#     2023-05-18 00:56:38   state           {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}
#   hmccu:
#
setstate SZ.Licht.Decke.BulbDuo.Shelly.rProxy {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}
setstate SZ.Licht.Decke.BulbDuo.Shelly.rProxy 2023-05-18 00:43:39 lastCmd off
setstate SZ.Licht.Decke.BulbDuo.Shelly.rProxy 2023-05-18 00:56:38 state {"ison":false,"source":"mqtt","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"brightness":6,"white":38,"temp":4160,"transition":0}


expandJSON:
define eJ.5 expandJSON SZ.Licht.Decke.BulbDuo.Shelly.rProxy:.\{.*}  (ison|source|brightness|white|temp)
attr eJ.5 DbLogExclude .*
attr eJ.5 room 20 System
#   CFGFN     
#   DEF        SZ.Licht.Decke.BulbDuo.Shelly.rProxy:.\{.*}  (ison|source|brightness|white|temp)
#   FUUID      646555dc-f33f-cc91-2c26-1ff5b477c07e502f
#   NAME       eJ.5
#   NR         479
#   NTFY_ORDER 50-eJ.5
#   STATE      active
#   TYPE       expandJSON
#   eventCount 6
#   s_regexp   SZ.Licht.Decke.BulbDuo.Shelly.rProxy:.\{.*}
#   t_regexp   (ison|source|brightness|white|temp)
#   version    1.13
#   Helper:
#     DBLOG:
#       state:
#         DBLogging:
#           TIME       1684362716.68518
#           VALUE      active
#   READINGS:
#     2023-05-18 00:43:31   state           active
#   helper:
#   hmccu:
#
setstate eJ.5 active
setstate eJ.5 2023-05-18 00:43:31 state active



Danke und Grüße
Gear
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Beta-User

Moin.
Vorab: der krampfige Umgang mit JSON war für mich damals der Anlass, intensiver in MQTT2_DEVICE einzusteigen - das ist (mind.) in der Hinsicht sehr viel flexibler.

Zum eigentlichen:
In fhem.pl gibt es eine Funktion "json2reading()". Möglicherweise (!) ginge es, den "state"-JSON an diese Funktion (im readingsProxy/valueFn (?)) zu übergeben, mit etwas Glück packt es fhem dann aus.
Ob man mit readingsProxy mehrere schaltbare Elemente hinbekommt? Keine Ahnung; readingsProxy ist eigentlich dafür gedacht, EIN Reading zu repräsentieren, nicht mehrere....

Alternative Ansätze:
- MQTT2_DEVICE (zum Testen s.u.)
- readingsGroup (da kann man mehrere Bedienelemente zusammenfassen und beliebig darstellen)
- Shelly (-Modul)
- dummy+MQTT_GENERIC_BRIDGE

OT-Anmerkung:
Diese "Eindeutschung" von Reading-Namen halte ich persönlich für kontraproduktiv - spätestens beim Thema Sprachsteuerung fällt einem das auf die Füße (weil es den Konfigurationsaufwand deutlich erhöht). Aber auch "Standard-SVG"-Konfigurationen/gplot kann man nicht nutzen etc..

Test MQTT2_DEVICE:
Zusätzlich ein MQTT2_CLIENT auf den mosquitto (?) zeigen lassen, ein MQTT2_DEVICE anlegen und in der readingList einen Eintrag vornehmen, den das passende attrTemplate kennt. Etwa so:
defmod M2D_Test MQTT2_DEVICE
attr M2D_Test readingList shellies/ID005/online:.* online
Dann das attrTemplate anwenden:
set M2D_Test attrTemplate shellybulbWenn's gefällt, kannst du ja die "subscriptions" vom MQTT2_CLIENT noch auf das einschränken, was für den Shelly erforderlich ist (sonst abonniert das alles, was der Server kennt...).
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

Gear

Moin!
Zitat von: Beta-User am 18 Mai 2023, 06:56:06Vorab: der krampfige Umgang mit JSON war für mich damals der Anlass, intensiver in MQTT2_DEVICE einzusteigen - das ist (mind.) in der Hinsicht sehr viel flexibler.
Ja gut, wenn das von Natur aus nicht umsetzbar ist, dann kann ich das auch über ein Notify lösen oder ähnlich. :)
Ich nutzte MQTT, da ich dies auch für Sachen außerhalb von FHEM brauche.

Zitat von: Beta-User am 18 Mai 2023, 06:56:06json2reading()
Danke, das muss ich mal testen!

Zitat von: Beta-User am 18 Mai 2023, 06:56:06- Shelly (-Modul)
- dummy+MQTT_GENERIC_BRIDGE
Mit dem Shelly-Modul kann ich nur die Plugs steuern, wenn ich wie in der Ref die Bulb steuern will, dann passiert nichts.
Das mit Dummy + MQTT_GENERIC_BRIDGE muss ich mir mal anschauen, Danke.

Zitat von: Beta-User am 18 Mai 2023, 06:56:06Diese "Eindeutschung" von Reading-Namen halte ich persönlich für kontraproduktiv - spätestens beim Thema Sprachsteuerung fällt einem das auf die Füße (weil es den Konfigurationsaufwand deutlich erhöht). Aber auch "Standard-SVG"-Konfigurationen/gplot kann man nicht nutzen etc..
Ich weiß zwar nicht genau, was du mit ""Eindeutschung" von Reading-Namen" meinst, aber bis dato hatte ich noch nie Probleme, weder mit Google Sprachsteuerung noch anderweitig.

Danke!
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Gear

Ok, habe für mich die Lösung gefunden.
Der Fehler lag am expandJSON Device.

Habe es abgeänder von:
SZ.Licht.Decke.BulbDuo.Shelly.rProxy:.\{.*}
nach:
SZ.Licht.Decke.BulbDuo.Shelly.rProxy:{.*}
Danke!
Grüße
Gear
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <