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
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 shellybulb
Wenn'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...).
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!
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