Autor Thema: JSON: Wie den Inhalt aus HSBColor in 3 Readings ?  (Gelesen 1151 mal)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« am: 25 Februar 2020, 18:48:40 »
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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22809
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #1 am: 25 Februar 2020, 19:31:20 »

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #2 am: 25 Februar 2020, 21:20:01 »
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.
« Letzte Änderung: 25 Februar 2020, 21:24:56 von TomLee »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #3 am: 28 Februar 2020, 09:50:36 »
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-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #4 am: 01 März 2020, 14:23:13 »
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #5 am: 01 März 2020, 15:08:40 »
Du gibst einen hash zurück mit {"readingname"=>$1}; siehe die zitierten Beispiele.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #6 am: 01 März 2020, 15:20:26 »
dann hat das Reading fx aber keinen Inhalt.

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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #7 am: 01 März 2020, 15:40:44 »
HM, du willst ja die "45" haben, dann muss das auch in der referenzieren capturegroup sein... Sehe hier aber keine passenden Klammern ;)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #8 am: 01 März 2020, 15:51:55 »
 :) 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


« Letzte Änderung: 01 März 2020, 15:59:15 von TomLee »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #9 am: 01 März 2020, 16:11:53 »
Colorpicker oder selectnumbers? (Widget?)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #10 am: 01 März 2020, 16:22:11 »
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.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #11 am: 01 März 2020, 19:08:29 »
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-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #12 am: 01 März 2020, 19:32:35 »
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.

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #13 am: 01 März 2020, 20:49:39 »
Eine Verständnisfrage noch:

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

Kein User braucht doch dieses Reading.

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #14 am: 01 März 2020, 22:15:43 »
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


Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #15 am: 03 März 2020, 13:27:11 »
Ok, das mit jsonMap hat sich ja geradebgeklärt. Jetzt verstehe ich es auch.


Zu dem zweiten Wert in HSBColor nochmal (erster Post der JSON), wenn ich mich da wirklich dran machen wollte.
Das mach ich genau so mit regexp wie bei WLED, richtig.
Darum hast du auf die Beispiele in den Templates verwiesen, weil es keine Funktion gibt die mir diesen Wert zurückgeben wird.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #16 am: 03 März 2020, 13:40:05 »
Zu dem zweiten Wert in HSBColor nochmal (erster Post der JSON), wenn ich mich da wirklich dran machen wollte.
Das mach ich genau so mit regexp wie bei WLED, richtig.
Darum hast du auf die Beispiele in den Templates verwiesen, weil es keine Funktion gibt die mir diesen Wert zurückgeben wird.
Genau  ;) .

Es gilt aber weiter:
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)...
Gemeint war: Du kannst dann auch gleich das rgb-Datenfeld nehmen, das wird ja direkt umgerechnet im JSON geliefert; die drei Angaben für HSBColor1 sind m.E. nur eine andere Darstellung, aber nicht wirklich ein inhaltlicher Mehrwert... (Aber mach' ruhig, zum Lernen ist das sicher eine gute Idee, jetzt liegen ja die Bausteinchen alle auf dem Tisch :) .)

Zu dem noch:
Eine Verständnisfrage noch:

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

Kein User braucht doch dieses Reading.
Kann ich gerne ausbauen, es war allerdings wohl scheinbar übergangsweise sinnvoll, um die weitere Auswertung zu ermöglichen wie jetzt geschehen.
Bitte um ein Signal dazu...


OT: Im Entwicklerbereich habe ich vorhin was zur Spracherkennung+Sensoren gepostet. Vielleicht magst du testen und in "unserem" Spracherkennungs-Thread Rückmelden, ob das funktioniert?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #17 am: 03 März 2020, 14:18:00 »
Einen Mehrwert für das Template sehe ich schon.

Mit saturation:colorpicker,BRI,0,1,100 cmnd/tasmota/HSBCOLOR2 kann man die Sättigung schon setzen, bloss kommt halt nicht HSBCOLOR2 zurück. Der Wert steht ja aber an der zweiten Stelle in HSBColor.

Wenns mich packt versuch ich es umzusetzen.



Ich denke irgendwann wird bei WLED auch auch ein JSON zurückgegeben, solange gibt es jetzt ein Beispiel wie man mit dem XML umgehen kann, darum drin lassen.



Natürlich hab ich das gelesen, interessiert mich auch sehr, schau ich mir auf jedenfall abends mal an.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #18 am: 03 März 2020, 14:45:49 »
OK, dann macht das (viel) Sinn, war wohl wegen der Benennung mit HSBColor_x etwas abgelenkt...

Für Stufe 3 dann noch: Die Readings möglichst nur updaten, wenn was geändert ist, und im Hinterkopf behalten, dass der Rückgabehash auch mehrere key/value-Paare enthalten kann (siehe json2nameValue). Würde evtl. Sinn machen, das in eine Sub auszulagern, die man aus svn-contrib holt, wenn man sie braucht?
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #19 am: 05 März 2020, 10:24:48 »
{"POWER1":"on","Dimmer":12,"Color":"1A1E1F","HSBColor":"189,17,12","Channel":[10,12,12]}


Hab mich ehrlich gesagt noch nie so richtig mit regexp beschäftigt, den fertigen Ausdruck zu WLED findet man unter den ersten Ergebnissen einer Googlesuche, das war kein Problem  :P

Kann man es so machen, ist es denn wirklich so einfach ?

stat/tasmota/RESULT:.* { $EVENT =~ m,(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>"$2"} : undef }
Mit diesem regexp gibts zwei Matches à drei Groups, spricht was dagegen ?

oder besser

"(HSBColor)":"(\d+),(\d+),(\d+)"
damit wärs weiter eingegrenzt, mit nur einem Match à 4 Groups.

Allerdings komm ich nicht drauf wie ich das einbaue, weil wegen der " immer gemeckert wird:

stat/tasmota/RESULT:.* { $EVENT =~ m,\\"(HSBColor)\\":\\"(\d+),(\d+),(\d+)\\", ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>"$2"} : undef }

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #20 am: 05 März 2020, 10:43:26 »
Du bist nahe dran...

Ich bevorzuge die eindeutige Variante und versuche, "schwierige" Zeichen eher zu vermeiden. Das ergäbe (ungetestet):

$EVENT =~ m/HSBColor...(\d+),(\d+),(\d+)/
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #21 am: 05 März 2020, 11:22:56 »
So klappts, Danke.

stat/tasmota/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>"$2"} : undef }
Wenn ich jetzt die saturation ändere, gibt es ein Event bei rgb und saturation.
Ändere ich pct gibt es ein Event bei rgb und pct.
Ändere ich rgb gibt es ein Event bei rgb und saturation.

Das verstehe ich noch nicht, in dem Json sind doch immer alle drei Werte folglich müsste es doch 3 Events bei einer Änderung geben.


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.\
\
stat/tasmota/RESULT:.* { $EVENT =~ m,(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>"$2"} : undef }
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\
stat/tasmota/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>"$2"} : undef }
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 off
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 Channel_1 50
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 Channel_2 39
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 Channel_3 40
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 Color 806467
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 Dimmer 50
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Fade on
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 FallbackTopic cmnd/DVES_0C7A27_fb/
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 GroupTopic cmnd/tasmotas/
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 HSBColor 354,22,50
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Heap 25
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 Hostname tasmota-6695
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 IPAddress 192.168.188.124
setstate MQTT2_DVES_0C7A27 2020-03-03 16:45:01 LWT Online
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 LedTable on
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 LoadAvg 99
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 Module Generic
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 MqttCount 3
setstate MQTT2_DVES_0C7A27 2020-03-04 10:45:20 POWER1 on
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 RestartReason Power on
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Scheme 0
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Sleep 10
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 SleepMode Dynamic
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Speed 20
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Time 2020-03-05T11:05:51
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Uptime 3T13:31:39
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 UptimeSec 307899
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 Version 8.1.0(tasmota)
setstate MQTT2_DVES_0C7A27 2020-02-26 16:09:37 WakeUpDuration 1
setstate MQTT2_DVES_0C7A27 2020-02-26 16:08:30 Wakeup Started
setstate MQTT2_DVES_0C7A27 2020-03-01 21:34:23 WebServerMode Admin
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_AP 1
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_BSSId FC:EC:DA:FD:26:1A
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_Channel 6
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_Downtime 0T00:00:09
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_LinkCount 1
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_RSSI 58
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_SSId FBF
setstate MQTT2_DVES_0C7A27 2020-03-05 11:05:52 Wifi_Signal -71
setstate MQTT2_DVES_0C7A27 2020-03-05 11:08:50 pct 40
setstate MQTT2_DVES_0C7A27 2020-03-05 11:08:50 rgb 66484B
setstate MQTT2_DVES_0C7A27 2020-03-05 11:08:18 saturation 29
setstate MQTT2_DVES_0C7A27 2020-03-03 15:23:05 state off
setstate MQTT2_DVES_0C7A27 2020-03-03 20:54:40 subscriptions cmnd/DVES_0C7A27_fb/# cmnd/tasmota/# cmnd/tasmotas/#

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #22 am: 05 März 2020, 11:39:52 »
Der Zeitstempel sollte auch bei allen (augenommen teilweise: saturation) aktualisiert werden. Ursache für die nicht zu sehenden Updates vermutlich:
attr MQTT2_DVES_0C7A27 event-on-change-reading .*
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #23 am: 05 März 2020, 11:48:31 »
Ja, daran lags, man muss auch schon schauen was genau passiert wenn man einen Wert ändert ::)

Also passt alles für die Rückmeldung bei saturation im Template, oder hast du noch was zu meckern ?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #24 am: 05 März 2020, 12:12:23 »
Also passt alles für die Rückmeldung bei saturation im Template, oder hast du noch was zu meckern ?
Ich werd's in's template einbauen, allerdings in einer leicht reduzierten Form:
stat/tasmota/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>$2} : undef }"meckern" hat einen negativen Beigeschmack  ;D , eigentlich will ich nicht meckern, sondern möglichst "gute" Ergebnisse, tut mir leid, wenn das anscheinend manchmal nicht so positiv rüberkommt, wie es gemeint ist. Ich habe aber schon noch ein Haar in der Suppe, der Punkt geht allerdings eher als Frage/Bitte in Rudi's Richtung:

Wir haben grade immer mehr Fälle, wo wir durch recht komplizierte Abfragen wie die obige versuchen, updates zu unterbinden, wenn es eigentlich nichts neues gibt. "Eleganter" wäre es, wenn wir bei allen Hash-Rückgaben einen generellen (optionalen?) Filter hätte, der verwirft, was nicht aktualisiert wird...

@Rudi: wenn ich die Mechanismen richtig verstanden habe, müßte man dafür schlicht und ergreifend einfach nur in 10_MQTT2_DEVICE.pm#L171 readingsBulkUpdateIfChanged() aufrufen.

Das würde zwar das Verhalten von MQTT2_DEVICE mit JSON grundsätzlich ändern, aber ich bin vom Bauchgefühl her geneigt, genau diese Änderung vorzuschlagen, ohne allerdings darüber allzulange nachgedacht zu haben.
Oder alternativ ein Attribut einzuführen, mit dem man das optional einschaltet (bzw. das alte Verhalten mit "einfachem" readingsBulkUpdate() optional wiederherstellt, was mir besser gefiele, als readingsBulkUpdateIfChanged optional anzuschalten)?

Meinungen? (Müssten wir das irgendwo intensiver diskutieren?)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #25 am: 05 März 2020, 12:40:11 »
Zitat
stat/tasmota/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? undef :{"saturation"=>$2} : undef }

Sehe da nix was reduziert wurde ???

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #26 am: 05 März 2020, 12:45:46 »
...es fehlen zwei """...

(Jetzt hoffe ich mal, das Rudi meinen letzten Beitrag noch zur Kenntnis nimmt, wenn wieder was geschrieben wurde).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22809
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #27 am: 05 März 2020, 13:52:47 »
Zitat
Wir haben grade immer mehr Fälle, wo wir durch recht komplizierte Abfragen wie die obige versuchen, updates zu unterbinden, wenn es eigentlich nichts neues gibt.
Warum eigentlich?
Ich will es wissen, wann zuletzt die Steckdose gemeldet hat, dass es aus ist.
Oder wann sich die Temperatur von 8 auf 9 Grad geaendert hat.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #28 am: 05 März 2020, 14:36:20 »
Also: Ich will es auch wissen, wenn sich die Temperatur von 8 auf 9 Grad geändert hat. Nach meinem Verständnis von readingsBulkUpdateIfChanged() würde das auch weiterhin einen Event geben, genauso, wenn die Steckdose meldet, dass sie grade aus- oder eingeschaltet wurde.

Bis zu diesem Punkt also völlige Übereinstimmung, und es war auch nicht gewollt, dass sich in der Beziehung irgendwas ändert.

Neulich habe ich allerdings festgestellt, dass z.B. Tasmota auch ständig wiederholend mitteilt, dass die Steckdose z.B. immer noch eingeschaltet _ist_. Und das will ich eigentlich nicht wissen, jedenfalls nicht um den Preis, dass mir der Einschaltzeitpunkt dabei verloren geht...
(Und ich brauche das auch nicht, um zu wissen, dass das Ding noch online ist, das sollte der LWT-Mechanismus erledigen). (Soweit ich das richtig verstanden habe, ist das auch bei den Shellys mit Original-firmware so, dass ständig "immer noch on/off" vermeldet wird, das ist also kein singuläres Tasmota-Thema sondern vermutlich eine "großflächige JSON-Nebenwirkung").

Es geht also darum, genau diese unnötigen update-Infos (ohne Änderung) zu verwerfen, ohne hinterher wieder mit "event-on-change" wenigstens die überflüssige Event-Auswertung durch notify&Co. ausschalten zu müssen.
(Ich war zugegebenermaßen angenehm überrascht, dass es dafür sogar Funktionalität in fhem.pl gibt und frage mich einfach, warum wir die nicht "an der Quelle" nutzen (und warum ich diesen Punkt bisher übersehen hatte bzw. keiner kam und "gemeckert" hat)...)

Hoffe, das einigermaßen nachvollziehbar erläutert und die Funktion readingsBulkUpdateIfChanged() nicht falsch verstanden zu haben ::) .

Wie gesagt: Ein Kompromiss könnte sein, das generell auszuschalten, und wer dann ohne "IfChanged" haben will könnte das via Attribut umschalten?
Zur Vorgehensweise: Ich würde es erst mal kommentarlos ohne Attribut umstellen. Wenn sich dann jemand (berechtigt) beschwert, ist der betreffende Schalter schnell installiert und du kannst bei den Reparaturmaßnahmen entschuldigend darauf verweisen, dass es einen bösen Buben gibt, der das so wollte? (Ich würde - nachdem ich jetzt etwas Zeit hatte, das auf mich wirken zu lassen - nämlich eine Wette eingehen, dass es zwar Beschwerden gibt, allerdings nur von Leuten, die LWT nicht verstanden haben und schlicht auf den "falschen" Wert schielen... Aber je länger das noch so ist, desto mehr potentielle "Aspiranten" haben wir...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #29 am: 05 März 2020, 15:00:56 »
Zitat
Neulich habe ich allerdings festgestellt, dass z.B. Tasmota auch ständig wiederholend mitteilt, dass die Steckdose z.B. immer noch eingeschaltet _ist_. Und das will ich eigentlich nicht wissen, jedenfalls nicht um den Preis, dass mir der Einschaltzeitpunkt dabei verloren geht...
(Und ich brauche das auch nicht, um zu wissen, dass das Ding noch online ist, das sollte der LWT-Mechanismus erledigen). (Soweit ich das richtig verstanden habe, ist das auch bei den Shellys mit Original-firmware so, dass ständig "immer noch on/off" vermeldet wird, das ist also kein singuläres Tasmota-Thema sondern vermutlich eine "großflächige JSON-Nebenwirkung").

Würde gerne folgen können, meinst du die teleperiod-Meldungen, die dann PowerX mit beinhalten.
Die kann man auch ausschalten, aber das weißt du ja ?

13:53:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T13:53:49","Uptime":"1T16:50:58","UptimeSec":147058,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
13:58:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T13:58:49","Uptime":"1T16:55:58","UptimeSec":147358,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:03:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:03:49","Uptime":"1T17:00:58","UptimeSec":147658,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:08:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:08:49","Uptime":"1T17:05:58","UptimeSec":147958,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:13:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:13:49","Uptime":"1T17:10:58","UptimeSec":148258,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:18:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:18:49","Uptime":"1T17:15:58","UptimeSec":148558,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":80,"Signal":-60,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:23:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:23:49","Uptime":"1T17:20:58","UptimeSec":148858,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:28:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:28:49","Uptime":"1T17:25:58","UptimeSec":149158,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:33:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:33:49","Uptime":"1T17:30:58","UptimeSec":149458,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:38:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:38:49","Uptime":"1T17:35:58","UptimeSec":149758,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:43:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:43:49","Uptime":"1T17:40:58","UptimeSec":150058,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:48:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:48:49","Uptime":"1T17:45:58","UptimeSec":150358,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}
14:53:49 MQT: tele/sonoffs20/STATE = {"Time":"2020-03-05T14:53:49","Uptime":"1T17:50:58","UptimeSec":150658,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":2,"POWER1":"off","Wifi":{"AP":2,"SSId":"FBF","BSSId":"BC:05:43:CA:4F:AC","Channel":13,"RSSI":82,"Signal":-59,"LinkCount":1,"Downtime":"0T00:00:06"}}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #30 am: 05 März 2020, 15:06:05 »
Und sonst gibts doch nur noch "updates" beim schalten, mehr kommt bei mir nicht in regelmäßigen Abständen.

15:03:02 MQT: stat/sonoffs20/RESULT = {"POWER1":"on"}
15:03:02 MQT: stat/sonoffs20/POWER1 = on
15:03:04 MQT: stat/sonoffs20/RESULT = {"POWER1":"off"}
15:03:04 MQT: stat/sonoffs20/POWER1 = off

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22809
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #31 am: 05 März 2020, 15:11:00 »
Zitat
Es geht also darum, genau diese unnötigen update-Infos (ohne Änderung) zu verwerfen
Diese Infos sind aber fuer _mich_ nicht unnoetig.

Mein Beispiel mit der Temperatur war unvollstaendig: wenn ich nicht weiss, wann zuletzt die Temperatur noch 8 Grad war, dann muss ich annehmen, dass bis kurz vor der 9 Grad Meldung das war. Es kann aber auch sein, dass ich seit Tagen keine Nachrichten bekomme, und ich will das nicht mit zusaetzlicher LWT-Logik pruefen, sondern das Problem _einfach_ im Plot sehen.
Das Entfernen von Events bewirkt zusaetzlich, dass man in den SVG-Plots Workarounds (aka. Luege) einbauen muss, wie letzten Wert vor dem Zeitraum finden, weiterhin muss man statt Linien Steps verwenden, etc.

Ich will nicht sagen, dass man nie Filtern soll, allerdings sollte das der Benutzer entscheiden, und nicht das Modul, und schon gar nicht alternativlos. Meiner Ansicht nach ist das hier beobachtete Bestreben der Benutzer nur Aenderungen als Event weiterzugeben falsch, ich selbst habe keinen einzigen event-on- Attribut im Einsatz.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #32 am: 05 März 2020, 15:59:31 »
OK, das mit dem erweiterten Temperaturbeispiel leuchtet ein, das könnte in der Tat schlicht ein echter und erwünschter Meßwert sein. Den wollte ich auch haben, wenn ich mir das recht überlege...

Was mich stört, sind die Art von updates, die (für mich) gar keinen Mehrwert haben, wie das POWER1 in der tele-Message (da haben wir das aber mit jsonMap bereits "gelöst") und ähnliche Effekte, die es bei Shelly gibt (meine diesbezügliche Frage an die Runde, ob und wie man das ggf. dort ausschalten könnte wurde nicht beantwortet, jedenfalls soweit ich das überblicke: https://forum.fhem.de/index.php/topic,94060.msg1020431.html#msg1020431 (da ist auch der Link zu dem Thread drin, in dem das das erste Mal intensiver Thema war).). Und auch dazu, ob man das bei Tasmota via Backlog ganz ausschalten sollte, habe ich noch keine Meinung, eben weil nicht klar ist, ob man damit zu viel unterdrückt (das bezieht sich auf TomLee's Frage).

Vielleicht noch zur Vervollständigung des Bilds, wo das die Dinge noch vereinfachen könnte:
- Wir hatten es bei dem 8-fach-LAN-Modul (dort aber prinzipbedingt nicht ausschaltbar; aber da kommt der Grundcode her, den TomLee hier modifiziert hat).
- Es würde weiter den wled_controller deutlich vereinfachen, weil man den ganzen Hash übergeben könnte.

Hm, auf die Schnelle fällt mir keine überzeugende Lösung ein.
Eventuell doch ein weiteres Attribut, dann aber im Stile der "event-on-..."-Attribute? "event-on-change-json"? (oder: "noevent-on-update-json"?)
Funktion: Wenn
- gesetzt = alles, was dort auf die dort als space-separated regex angegebenen Argumente paßt, wird an "Bulk-updateIfChanged" übergeben, was nicht paßt an "normales Bulk-update" ? Ein .* würde dann Auswirkungen auf alle Readings haben, mit "state" (bzw. ohne jsonMap/bei den mehrkanaligen "POWER.") könnte man (mAn.) "false positives" rausfiltern...
- nicht gesetzt = "as is" = ReadingsBulkUpdate

Der Name mit "json" wäre dann etwas verengend, aber da json2nameValue() der Hauptanwendungsfall bleiben dürfte, wäre es evtl. verständlich, und die Erweiterung, dass es auf alle Hash-Rückgaben wirkt, kann man ja dazuschreiben?

Muß vermutlich darüber nochmal nachdenken...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22809
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #33 am: 05 März 2020, 16:26:51 »
Ich verstehe immer noch nicht, warum das Modul ein Extra event-on-change Attribut anbieten soll.
Wenn jemand sowas haben will (und ich habe noch keinen Beispiel gesehen, was mich ueberzeugt), der kann den globalen event-on-change verwenden.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11614
  • eigentlich eher "user" wie "developer"
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #34 am: 05 März 2020, 16:52:22 »
Ich schau mir bei Gelegenheit das mit den Zeitstempeln iVm. event-on-change noch mal an, irgendwie werde ich das Gefühl nicht los, was übersehen zu haben...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 2530
Antw:JSON: Wie den Inhalt aus HSBColor in 3 Readings ?
« Antwort #35 am: 05 März 2020, 20:31:50 »
In der Definition von #21 ist noch ein Beispiel für fade, mode und speed, das mein ich gibts auch noch in keinem Template und dachte wird eventuell auch übernommen, egal mit welchem Widget umgesetzt ?

 

decade-submarginal