FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TWART016 am 18 Mai 2019, 23:34:04

Titel: userreading - mehrere Optionen für ein Reading
Beitrag von: TWART016 am 18 Mai 2019, 23:34:04
Hallo,

ich habe für Shelly ein MQTT Device. Die Werte kommen korrekt in das Device. Jedoch gibt es 2 Wege, einen von der Shelly App und eines über Tablet UI.

Bei der Shelly App gibt es ein Reading status_get
2019-05-18 23:29:18   status_get      {"ison":true,"mode":"color","red":0,"green":255,"blue":50,"white":255,"gain":0,"effect":0,"power":41.05,"overpower":false}


Bei FTUI rgb
2019-05-18 23:17:20   rgb             f4fcf2

Mit einem Userreading schreibe ich den hex Wert bereits in ein Reading red / blue / green
red {hex(substr(ReadingsVal($name,"rgb",0),0,2))},
green {hex(substr(ReadingsVal($name,"rgb",0),2,2))},
blue {hex(substr(ReadingsVal($name,"rgb",0),4,2))},


Jetzt würde ich das gerne so belassen, nur wenn sich bei status_get eine Farbe ändert, soll auch das reading red / green / blue angepasst warten. Wie ist eine Oder Verknüpfung in einem Userreading möglich?


Gruß
TWART016
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: Beta-User am 19 Mai 2019, 07:14:28
So ganz habe ich zwar das Problem nicht durchschaut, wann welches Reading tatsächlich aktualisiert wird. Tendenziell scheint mir aber, du solltest erst mal den trigger enger fassen, vielleicht hilft das schon:

red:rgb {hex(substr(ReadingsVal($name,"rgb",0),0,2))},
green:rgb {hex(substr(ReadingsVal($name,"rgb",0),2,2))},
blue:rgb {hex(substr(ReadingsVal($name,"rgb",0),4,2))},

Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: TWART016 am 20 Mai 2019, 14:50:56
Ja, bisher wird bei jedem Event von diesem Gerät das Reading aktualisiert.

Ziel ist das Reading red / blue / green.

Diese Werte bekomme ich entweder aus:
1) dem Reading rgb, welches über FTUI gesetzt wird
2) dem Reading status_get, welches per MQTT vom Shelly kommt

Kann man in einem Userreading 2 mal red schreiben?
red:rgb {hex(substr(ReadingsVal($name,"rgb",0),0,2))},
red:rgb REGEX,
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: Beta-User am 20 Mai 2019, 15:01:13
Ob das 2x geht? Kann ich nicht sagen. Was hindert dich, es zu testen? Ggf. erst mal kein save machen, dann kannst du neu starten, wenn es Schwierigkeiten machen sollte.
Aber der trigger wäre dann wohl nicht rgb sondern status_get, oder?

In der MQTT2-Welt wäre es einfach, da kommte einfach ein readingList-Eintrag hin für den Topic, auf den das kommt und dann json2nameValue() als Funktion dahinter. Aber eigentlich sollte sich da expandJSON auch nicht wesentlich anders verhalten (wenn du das nutzt; irgenwoher müssen die Einzelwerte ja kommen.

Evtl. wäre ein RAW-list des Devices (und des expandJSON) hilfreich, dann sieht man eher, was wie reinkommt.

Aber mal was anderes: in FHEM ist es doch häufig einfacher, RRGGBB-Werte zu haben (ich bastel das daher z.B. bei dem MiLights so auch wieder aus den Einzelwerten zusammen). Welchen Vorteil hat für dich der umgekehrte Weg?
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: TWART016 am 20 Mai 2019, 19:26:23
Zitat von: Beta-User am 20 Mai 2019, 15:01:13
Ob das 2x geht? Kann ich nicht sagen. Was hindert dich, es zu testen? Ggf. erst mal kein save machen, dann kannst du neu starten, wenn es Schwierigkeiten machen sollte.
Aber der trigger wäre dann wohl nicht rgb sondern status_get, oder?
Leider wird dann immer die letzte Zeile genommen.

Damit wird leider nichts getriggert:
red:rgb {hex(substr(ReadingsVal($name,"rgb",0),0,2))},
green:rgb {hex(substr(ReadingsVal($name,"rgb",0),2,2))},
blue:rgb {hex(substr(ReadingsVal($name,"rgb",0),4,2))},


Zitat von: Beta-User am 20 Mai 2019, 15:01:13
Evtl. wäre ein RAW-list des Devices (und des expandJSON) hilfreich, dann sieht man eher, was wie reinkommt.
defmod Shelly_Wohnzimmer_test MQTT_DEVICE
attr Shelly_Wohnzimmer_test userattr subscribeReading_state publishSet_test
attr Shelly_Wohnzimmer_test IODev Mosquitto
attr Shelly_Wohnzimmer_test event-on-change-reading .*
attr Shelly_Wohnzimmer_test publishSet on off shellies/shellyrgbw2-5A3992/color/0/command
attr Shelly_Wohnzimmer_test publishSet_test shellies/shellyrgbw2-5A3992/color/0/set
attr Shelly_Wohnzimmer_test subscribeReading_state shellies/shellyrgbw2-5A3992/color/0
attr Shelly_Wohnzimmer_test subscribeReading_status_get shellies/shellyrgbw2-5A3992/color/0/status
attr Shelly_Wohnzimmer_test userReadings status_set {'{"turn":"' .ReadingsVal($name,"state",0) .'","red":' .ReadingsVal($name,"red",0) .',"green":' .ReadingsVal($name,"green",0) .',"blue":' .ReadingsVal($name,"blue",0) .',"white":' .ReadingsVal($name,"white",0) .',"gain":' .ReadingsVal($name,"gain",0) .',"effect":0}' },\
RGBr {hex(substr(ReadingsVal($name,"rgb",0),0,2))},\
red {hex(substr(ReadingsVal($name,"rgb",0),0,2))},\
RGBg {hex(substr(ReadingsVal($name,"rgb",0),2,2))},\
green {hex(substr(ReadingsVal($name,"rgb",0),2,2))},\
RGBb {hex(substr(ReadingsVal($name,"rgb",0),4,2))},\
blue {hex(substr(ReadingsVal($name,"rgb",0),4,2))},\
test {'{"turn":"' .ReadingsVal($name,"state",0) .'","red":' .ReadingsVal($name,"red",0) .',"green":' .ReadingsVal($name,"green",0) .',"blue":' .ReadingsVal($name,"blue",0) .',"white":' .ReadingsVal($name,"white",0) .',"gain":' .ReadingsVal($name,"gain",0) .',"effect":0}' },

setstate Shelly_Wohnzimmer_test on
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 RGBb 15
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 RGBg 27
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 RGBr 160
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 blue 15
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 effect 0
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 gain 0
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 green 27
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 ison 1
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 mode color
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 overpower 0
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 power 41.05
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 red 160
setstate Shelly_Wohnzimmer_test 2019-05-20 19:16:41 rgb a01b0f
setstate Shelly_Wohnzimmer_test 2019-05-20 19:17:16 state on
setstate Shelly_Wohnzimmer_test 2019-05-08 23:11:40 state_set on
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 status_get {"ison":true,"mode":"color","red":255,"green":87,"blue":192,"white":255,"gain":0,"effect":0,"power":41.05,"overpower":false}
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 status_set {"turn":"on","red":160,"green":27,"blue":15,"white":255,"gain":0,"effect":0}
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 test {"turn":"on","red":160,"green":27,"blue":15,"white":255,"gain":0,"effect":0}
setstate Shelly_Wohnzimmer_test 2019-05-08 22:33:29 test2 {"turn":"rgb","red":219,"green":91,"blue":141,"white":255,"gain":0,"effect":0}
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:56 transmission-state incoming publish received
setstate Shelly_Wohnzimmer_test 2019-05-20 19:20:26 white 255


defmod Shelly_Wohnzimmer_test_JSON expandJSON Shelly_Wohnzimmer_test:status_get:.*


Zitat von: Beta-User am 20 Mai 2019, 15:01:13
Aber mal was anderes: in FHEM ist es doch häufig einfacher, RRGGBB-Werte zu haben (ich bastel das daher z.B. bei dem MiLights so auch wieder aus den Einzelwerten zusammen). Welchen Vorteil hat für dich der umgekehrte Weg?
Stimmt schon. Nur setze ich den Wert über status_set und da wird der Wert in dezimal benötigt.
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: Beta-User am 20 Mai 2019, 19:44:59
Versuch's mal so:
red:rgb.* {hex(substr(ReadingsVal($name,"rgb",0),0,2))},
green:rgb.* {hex(substr(ReadingsVal($name,"rgb",0),2,2))},
blue:rgb.* {hex(substr(ReadingsVal($name,"rgb",0),4,2))},

Das sollte eigentlich schon reichen, da die anderen Daten ja über eine andere Quelle reinkommen (zu einem anderen Zeitpunkt).
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: TWART016 am 20 Mai 2019, 20:49:39
Ja, das schon. Wenn die Werte über MQTT kommen, ändert sich das Reading red / green / blue nicht. Kann man das im Userreading machen, oder braucht man da ein notify?
Titel: Antw:userreading - mehrere Optionen für ein Reading
Beitrag von: Beta-User am 20 Mai 2019, 21:03:51
Hmm, eigentlich hätte ich angenommen, das expandJSON das übernimmt.

Aber ich bin da raus, ich kenne mich eher in der MQTT2-Ecke aus, da ist sowas m.E. einfacher (es könnte sogar sein, dass es schon ein passendes template gibt).