JSON: Wie den Inhalt aus HSBColor in 3 Readings ?

Begonnen von TomLee, 25 Februar 2020, 18:48:40

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

bei folgendem JSON werden in einem MQTT2_DEVICE für Channel 3 Readings Channel_x erstellt.
Bei HSBColor nur ein Reading mit dem Inhalt bspw. 189,17,12.
Wie stelle ich es an das ich diesen Inhalt auch in 3 Readings HSBColor_x zurückbekomme ?
Würde gerne hue statt rgb (Color) verwenden, senden ist kein Problem das könnte ich mit HSBColor1 bekomme aber ja aber nur HSBColor zurück.
Das gleiche Problem besteht nstürlich auch beim zweiten Wert vom Inhalt des Reading HSBColor (HSBColor2/saturation), senden kein Thema bekomme aber ja nichts als Bestätigung zurück.


stat/tasmota/RESULT = {"POWER1":"on","Dimmer":12,"Color":"1A1E1F","HSBColor":"189,17,12","Channel":[10,12,12]}

defmod MQTT2_DVES_0C7A27 MQTT2_DEVICE DVES_0C7A27
attr MQTT2_DVES_0C7A27 IODev MQTT2_Server
attr MQTT2_DVES_0C7A27 autocreate 0
attr MQTT2_DVES_0C7A27 comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/cmnd/tasmota/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
attr MQTT2_DVES_0C7A27 devStateIcon {Color::devStateIcon($name,"rgb","Color","pct","state")}
attr MQTT2_DVES_0C7A27 event-on-change-reading .*
attr MQTT2_DVES_0C7A27 genericDeviceType light
attr MQTT2_DVES_0C7A27 icon hue_filled_outlet
attr MQTT2_DVES_0C7A27 jsonMap POWER1:0 Dimmer:pct Channel_1:0 Channel_2:0 Channel_3:0 HSBColor:0 Color:rgb
attr MQTT2_DVES_0C7A27 model tasmota_rgbw_led
attr MQTT2_DVES_0C7A27 readingList tele/tasmota/LWT:.* LWT\
  tele/tasmota/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  stat/tasmota/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  stat/tasmota/POWER1:.* state
attr MQTT2_DVES_0C7A27 room MQTT2_DEVICE
attr MQTT2_DVES_0C7A27 setList off:noArg cmnd/tasmota/POWER1 0\
on:noArg cmnd/tasmota/POWER1 1\
toggle:noArg cmnd/tasmota/POWER1 2\
rgb:colorpicker,RGB cmnd/tasmota/COLOR\
saturation:colorpicker,BRI,0,1,100 cmnd/tasmota/HSBCOLOR2\
pct:colorpicker,BRI,0,5,100 cmnd/tasmota/DIMMER\
Speed:colorpicker,BRI,0,1,20 cmnd/tasmota/SPEED\
Fade:uzsuSelect,ON,OFF cmnd/tasmota/FADE $EVTPART1\
mode:colorpicker,BRI,0,1,4 cmnd/tasmota/SCHEME\
on_test:noArg cmnd/tasmota/Backlog Wakeup 100\
\

attr MQTT2_DVES_0C7A27 setStateList on off toggle
attr MQTT2_DVES_0C7A27 webCmd rgb:saturation:pct:Speed:Fade:mode
attr MQTT2_DVES_0C7A27 webCmdLabel Farbe\
:Sättigung\
:Helligkeit\
:speed\
:fade\
:Modus:

setstate MQTT2_DVES_0C7A27 on
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Fade on
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 FallbackTopic cmnd/DVES_0C7A27_fb/
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 GroupTopic cmnd/tasmotas/
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Heap 28
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 Hostname tasmota-6695
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 IPAddress 192.168.188.124
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 LWT Online
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 LedTable on
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 LoadAvg 51
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 Module Generic
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 MqttCount 1
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:38 RestartReason External System
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Scheme 0
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Sleep 10
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 SleepMode Dynamic
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Speed 20
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Time 2020-02-25T18:31:42
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Uptime 0T00:00:15
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 UptimeSec 15
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 Version 8.1.0(tasmota)
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:37 WebServerMode Admin
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_AP 1
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_BSSId BC:05:43:CA:4F:AC
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_Channel 13
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_Downtime 0T00:00:09
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_LinkCount 1
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_RSSI 82
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_SSId FBF
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 Wifi_Signal -59
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 pct 100
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:42 rgb 9D52FF
setstate MQTT2_DVES_0C7A27 2020-02-25 17:54:16 saturation set
setstate MQTT2_DVES_0C7A27 2020-02-25 18:31:38 state on



Gruß

Thomas

rudolfkoenig


TomLee

#2
Kann gern wer machen der die Bulbs auch nutzt, meine Intention war vielleicht was zu lernen was ich bisher nicht verstanden/übersehen habe, es ein neues Template (hier war userReadings meiner Erfahrung nach semi) geben wird zu so konfigurierten Bulbs, die dann diesen JSON übergeben.


Die Bulbs liegen hier seit Mitte 2018 rum, weil ich nichts damit anfangen konnte. Hab ich damals vom Chinesen als Sonoff B1 geschickt bekommen und nach Reklamation 10 € am Ende bezahlt. Es sind FCMILA-Bulbs.
Letzte Woche, nach einem Geistesblitz, waren sie nach 2 1/2 Stunden mittels Tuya-convert mit Tasmota geflasht, weil ich Spass daran habe.
Ich spiele nur, hab keine Verwendung für so farbige Bulbs, verkaufe bzw. verschenke sie auch.

Beta-User

Zitat von: TomLee am 25 Februar 2020, 21:20:01
meine Intention war vielleicht was zu lernen was ich bisher nicht verstanden/übersehen habe,
Na ja, neben userReadings gäbe es noch die Möglichkeit, $EVENT direkt mit Perl auszuwerten. Gibt ein paar wenige attrTemplate, die das machen, vermutlich kannst du mit den tasmota_rf bzw. ...ir-Beispielen noch am ehesten was anfangen. Da wird zuerst nachgesehen, ob bestimmte Elemente in dem JSON sind, und dann regex-Zwischenergebnisse weiterverarbeitet. Allerdings gibt es z.B. in Color.pm keine Routinen, die viel mehr hergeben als eine RGB-Umrechnung, und dann kann man auch gleich dieses Datenfeld nehmen (und mit jsonMap "richtig" benennen)...
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

TomLee

Hallo,

hat jetzt nichts mit HSBColor zu tun, aber mit $EVENT direkt mit Perl auswerten und möchte deswegen keinen neuen Thread aufmachen.

Bezüglich der Frage hier:

diese regex
(?<=<fx>).*?(?=<\/fx>)

gibt mir aus dem api-XML

<?xml version="1.0" ?><vs><ac>89</ac><cl>255</cl><cl>160</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>45</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>

den Inhalt aus <fx>45</fx>, also 45, zurück.

Meine Perl-Kentnisse sind nun mal bescheiden, die vorgeschlagenen Beispiele hab ich mir angeschaut, steige aber nur in Teilen durch, wenn ich die ReadingList wie folgt erweitere

wled/538e36/v:.* {"fx",$EVENT =~ m,(?<=<fx>).*?(?=<\/fx>),}

wird ein Reading fx angelegt mit dem Wert 1.
Die Beispiele meine ich so zu verstehen das in $1 das Zwischenergebnis ist, aber wie übergebe ich $1 jetzt das es ins Reading geschrieben wird.

Gruß

Thomas

Beta-User

Du gibst einen hash zurück mit {"readingname"=>$1}; siehe die zitierten Beispiele.
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

TomLee

dann hat das Reading fx aber keinen Inhalt.

wled/538e36/v:.* {$EVENT =~ m,(?<=<fx>).*?(?=<\/fx>), ? {"fx"=>"$1"} : undef }

Beta-User

HM, du willst ja die "45" haben, dann muss das auch in der referenzieren capturegroup sein... Sehe hier aber keine passenden Klammern ;)
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

TomLee

#8
 :) Danke

Wirst du den effect-setter und die readingList, als Beispiel für API-Aufrufe, in das Template aufnehmen ?


defmod MQTT2_WLED_538e36 MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_538e36 IODev MQTT2_Server
attr MQTT2_WLED_538e36 comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html\
\
(?<=<fx>).*?(?=<\/fx>)\
wled/538e36/v:.* api
attr MQTT2_WLED_538e36 devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_538e36 genericDeviceType light
attr MQTT2_WLED_538e36 homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_538e36 icon hue_filled_iris
attr MQTT2_WLED_538e36 model wled_controller
attr MQTT2_WLED_538e36 readingList wled/538e36/g:.* brightness\
wled/538e36/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/538e36/status:.* status\
wled/538e36/v:.* api\
wled/538e36/v:.* {$EVENT =~ m,((?<=<fx>).*?(?=<\/fx>)), ? {"effect"=>"$1"} : undef }
attr MQTT2_WLED_538e36 room MQTT2_DEVICE
attr MQTT2_WLED_538e36 setList on:noArg wled/538e36 status on\
  off:noArg wled/538e36 status off\
  toggle:noArg wled/538e36 status t\
  rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\
  brightness:colorpicker,BRI,0,1,255 wled/538e36\
effect:colorpicker,BRI,0,1,79 wled/538e36/api http://192.168.188.50/win&FX=$EVTPART1
attr MQTT2_WLED_538e36 webCmd rgb:brightness:effect

setstate MQTT2_WLED_538e36 toggle
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 api <?xml version="1.0" ?><vs><ac>0</ac><cl>255</cl><cl>224</cl><cl>122</cl><cs>255</cs><cs>145</cs><cs>36</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>18</fx><sx>6</sx><ix>2</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 brightness 0
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 effect 18
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 rgb FFE07A
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 state toggle
setstate MQTT2_WLED_538e36 2020-03-01 15:57:47 status online




Beta-User

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

TomLee

Colorpicker find ich sieht doch optisch auch gut aus und ist auch nur eine Aktion nötig, beim selectnumbers sinds zwei bis zur Auswahl des gewünschten Wert.

Beta-User

Wenn ich's richtig verstanden habe, sind die Effekte sehr unterschiedlich, oder ist das eher ein gleitender Übergang?

Wenn gleitend, ist ein slider gut. Ist das Verhalten eher "brüchig", finde ich eine mehrgliedrige Wahlmöglichkeit besser (ggf. iVm. dezidierten settern für einzelne "Vorzugseffekte")...
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

TomLee

Alles quer durch die Bank, hier sehr übersichtlich zu sehen.

Mir fällt jetzt auf es sind doch 100, war der Meinung was von 79 gelesen zu haben, im UI ist die Anzahl nicht ersichtlich es sind einfach viele Buttons übereinander angeordnet.

Mir Wurscht wie du das einbaust.

TomLee

Eine Verständnisfrage noch:

Wozu eigentlich im Template  BASE_ID/DEVNAME/v:.* api abonnieren ?

Kein User braucht doch dieses Reading.

TomLee

Ok, sehe doch einen Sinn darin.

Aber warum wird das Reading immer wieder angelegt obwohl ich es mit jsonMap verhindern möchte:

defmod MQTT2_WLED_538e36 MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_538e36 IODev MQTT2_Server
attr MQTT2_WLED_538e36 comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html\
\
(?<=<fx>).*?(?=<\/fx>)\
wled/538e36/v:.* api
attr MQTT2_WLED_538e36 devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_538e36 genericDeviceType light
attr MQTT2_WLED_538e36 homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_538e36 icon hue_filled_iris
attr MQTT2_WLED_538e36 jsonMap api:0
attr MQTT2_WLED_538e36 model wled_controller
attr MQTT2_WLED_538e36 readingList wled/538e36/g:.* brightness\
wled/538e36/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/538e36/status:.* status\
wled/538e36/v:.* {$EVENT =~ m,((?<=<fx>).*?(?=<\/fx>)), ? {"effect"=>"$1"} : undef }\
wled/538e36/v:.* api
attr MQTT2_WLED_538e36 room MQTT2_DEVICE
attr MQTT2_WLED_538e36 setList on:noArg wled/538e36 status on\
  off:noArg wled/538e36 status off\
  toggle:noArg wled/538e36 status t\
  rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\
  brightness:colorpicker,BRI,0,1,255 wled/538e36\
effect:colorpicker,BRI,0,1,79 wled/538e36/api http://192.168.188.50/win&FX=$EVTPART1
attr MQTT2_WLED_538e36 webCmd rgb:brightness:effect

setstate MQTT2_WLED_538e36 toggle
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 api <?xml version="1.0" ?><vs><ac>0</ac><cl>255</cl><cl>160</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>0</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 brightness 0
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 effect 0
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 rgb FFA000
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 state toggle
setstate MQTT2_WLED_538e36 2020-03-01 22:09:56 status online