Moin, moin,
ich habe ein reading (hsv) in der Darstellung: 278,89,100
Jetzt möchte ich jeweils ein neues reading bekommen, wo ich jede einzelne Zahl in ein separates reading bekomme.
Wie muss dazu das userReading aussehen?
split wäre eine Möglichkeit...
userReadings Teil1:Trigger {(split(',', ReadingsVal($name,'ReadingName','0,0,0')))[0]},Teil2:Trigger {(split(',', ReadingsVal($name,'ReadingName','0,0,0')))[1]},Teil3:Trigger {(split(',', ReadingsVal($name,'ReadingName','0,0,0')))[2]}
Trigger und ReadingName nat. entsprechend anpassen ;)
Gruß, Joachim
Wofür brauchst du die Einzelteile?
Vermutlich wäre es einfacher, die Angabe in was umzusetzen, das "verständlicher" ist, z.B. einen RGB-Wert (der ist aber vermutlich nicht so exakt).
Wenn userReadings: Als trigger kann doch bequem das hsv-Reading verwendet werden...
Wozu brauchst du denn die einzelnen Werte einer Farbdefinition in einzelnen Readings?
Ich würde fast wetten, dass es für Dein Vorhaben einfachere Lösungen gibt.
Zwei Doofe, ein Gedanke 8)
Zitat von: Beta-User am 03 November 2020, 11:51:10
Wenn userReadings: Als trigger kann doch bequem das hsv-Reading verwendet werden...
Ja, klar aber wenn ich das dann wieder nutze/angebe (als Trigger), dann kommt einige Posts später: es tut aber nicht...
...nur weil dann raus kommt: das hsv-Reading heißt dann doch "minimal" anders ;)
EDIT: weil ein list des Devices fhelt ja ;)
So ist eindeutig(er) was angepasst werden muss/sollte... ;)
Und ja, es gibt bestimmt einen Grund und ein Vorgehen, dass das "Aufteilen" in eigene "Unter-Readings" nicht benötigt...
...aber ich bin es (aktuell) leid nach dem eigentlichen Vorhaben zu fragen...
...nur um dann zu hören (sowas gibt es ;) ): ich habe eine simple Frage gestellt und wollte nur GENAU DARAUF eine Antwort, kümmer dich nicht um mein(e) eigentliches Problem ;)
Gruß, Joachim
Tja, die Einzelteile bräuchte ich für die RGB-Werte in Homekit. Das Tasmota-Device liefert mir in Color 8 Ziffern, also ein RGBW-Wert. Dann habe ich mir über das Result aus Json noch den HSBColor geholt, was ja der hsv-Wert ist. Aber auch das akzeptiert Homekit anscheinend nicht... der hue-Wert alleine wird dann hoffentlich zum Erfolg führen, da meine Milight-Devices in Homekit richtig angezeigt werden. Die Syntax, bzw. Perl ist für mich leider immer ganz schön hakelig im Kopf.
Danke schon mal für Eure Tipps, vielleicht kommen wir ja noch auf die perfekte (einfache) Lösung.
... und zu Vollständigkeit halber das list:
Internals:
CID DVES_B517B8
DEF DVES_B517B8
DEVICETOPIC RGBW_Bulb1
FUUID 5f9c14a1-f33f-efb1-d26d-5af9bbe26c1e3453
IODev myBroker
LASTInputDev myBroker
MSGCNT 88
NAME RGBW_Bulb1
NR 626
STATE off
TYPE MQTT2_DEVICE
myBroker_MSGCNT 88
myBroker_TIME 2020-11-03 12:12:43
JSONMAP:
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 white
Dimmer pct
HSBColor hsv
POWER1 0
READINGS:
2020-11-03 12:12:43 Color 5C024100
2020-11-02 19:49:37 Command Unknown
2020-11-03 12:12:43 Fade off
2020-11-03 06:43:24 FallbackTopic cmnd/DVES_B517B8_fb/
2020-11-03 06:43:24 GroupTopic cmnd/tasmotas/
2020-11-02 20:19:05 HSBColor 120,99,100
2020-11-03 12:12:43 Heap 30
2020-11-03 06:43:24 Hostname RGBW_Bulb1-6072
2020-11-03 06:43:24 IPAddress 192.168.44.253
2020-11-03 08:11:07 LWT Online
2020-11-03 12:12:43 LedTable on
2020-11-03 12:12:43 LoadAvg 19
2020-11-03 06:43:24 Module AoycocrA19
2020-11-03 12:12:43 MqttCount 4
2020-11-03 06:43:24 RestartReason Power on
2020-11-03 12:12:43 Scheme 0
2020-11-03 12:12:43 Sleep 50
2020-11-03 12:12:43 SleepMode Dynamic
2020-11-03 12:12:43 Speed 6
2020-11-03 12:12:43 Time 2020-11-03T12:12:43
2020-11-03 12:12:43 Uptime 0T05:47:26
2020-11-03 12:12:43 UptimeSec 20846
2020-11-03 06:43:24 Version 8.1.0.2(tasmota)
2020-11-03 06:43:24 WebServerMode Admin
2020-11-03 12:12:43 White 0
2020-11-03 12:12:43 Wifi_AP 1
2020-11-03 12:12:43 Wifi_BSSId 5C:49:79:E2:9F:40
2020-11-03 12:12:43 Wifi_Channel 11
2020-11-03 12:12:43 Wifi_Downtime 0T00:00:06
2020-11-03 12:12:43 Wifi_LinkCount 1
2020-11-03 12:12:43 Wifi_RSSI 44
2020-11-03 12:12:43 Wifi_SSId Terminus
2020-11-03 12:12:43 Wifi_Signal -78
2020-11-02 19:35:37 attrTemplateVersion 20200522 or prior
2020-11-03 12:12:43 hsv 318,98,36
2020-11-03 09:43:50 hue set
2020-11-03 12:12:43 pct 36
2020-11-03 08:54:58 saturation 98
2020-11-03 09:50:13 state off
2020-11-03 07:16:59 subscriptions cmnd/DVES_B517B8_fb/# cmnd/RGBW_Bulb1/# cmnd/tasmotas/#
2020-11-03 12:12:43 white 0
Attributes:
IODev myBroker
alexaName Signallampe
autocreate 0
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/RGBW_Bulb1/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
devStateIcon {Color::devStateIcon($name,"rgb","Color","pct","state")}
genericDeviceType light
homebridgeMapping On=state,valueOn=on,valueOff=off,cmdOn=on,cmdOff=off
Brightness=pct,minValue=0,maxValue=100,minStep=1,cmd=pct
Hue=hue,cmd=hue
Saturation=Saturation,cmd=Saturation
icon light_control
jsonMap POWER1:0 Dimmer:pct Channel_4:white Channel_1:0 Channel_2:0 Channel_3:0 HSBColor:hsv
model tasmota_rgbw_led
readingList tele/RGBW_Bulb1/LWT:.* LWT
tele/RGBW_Bulb1/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/RGBW_Bulb1/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/RGBW_Bulb1/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/RGBW_Bulb1/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/RGBW_Bulb1/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/RGBW_Bulb1/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? return : { "saturation"=>$2 } : return }
stat/RGBW_Bulb1/POWER1:.* state
room HomeKit,MQTT2_DEVICE
setList off:noArg cmnd/RGBW_Bulb1/POWER1 0
on:noArg cmnd/RGBW_Bulb1/POWER1 1
toggle:noArg cmnd/RGBW_Bulb1/POWER1 2
Color:colorpicker,RGB cmnd/RGBW_Bulb1/COLOR
pct:colorpicker,BRI,0,5,100 cmnd/RGBW_Bulb1/DIMMER
dimup:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+4)/10)*10+10; return qq {cmnd/RGBW_Bulb1/Dimmer $num}; }
dimdown:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+7)/10)*10-10; return qq {cmnd/RGBW_Bulb1/Dimmer $num}; }
white:colorpicker,BRI,0,5,100 { "cmnd/RGBW_Bulb1/COLOR ". sprintf("000000%02X",$EVTPART1*2.55) }
saturation:colorpicker,BRI,0,1,100 cmnd/RGBW_Bulb1/HSBCOLOR2
Speed:colorpicker,BRI,0,1,20 cmnd/RGBW_Bulb1/SPEED
Fade:uzsuSelect,ON,OFF cmnd/RGBW_Bulb1/FADE $EVTPART1
mode:selectnumbers,0,1,4,0,lin cmnd/RGBW_Bulb1/SCHEME
hue:colorpicker,HUE,0,1,360 cmnd/RGBW_Bulb1/HSBCOLOR1
setStateList on off toggle
webCmd pct:white:Color
webCmdLabel Helligkeit
:Weiss
:Farbe:
Na ja, wenn du nur den HUE-Wert extrahieren willst, geht das vermutlich wirklich am einfachsten via userReadings. Kommt mir nur komisch vor, dass es nicht direkt klappen will mit dem RGBW-(Color-) Reading. Eigentlich sollte man mAn. da ansetzen, eventuell muss man das "nur" passend mappen oder ggf. das Reading umbenennen....
Um aus einem hsv Wert einen rgb Wert zu machen, kann man einfach die Funktion hsv2rgb() benutzen.
my ($r,$g,$b) = hsv2rgb(split(/,/, ReadingsVal('RGBW_Bulb1','hsv',''))
Und wenn Du das dann noch als "zusammengesetzten" Wert brauchst
my $rgb = sprintf("%X%X%X", $r,$b,$g);
Übrigens: zwei der drei Werte sind in Deinem device ohnehin schon vorhanden, schau Dir mal die Readings pct und saturation an 8)
Na ja, ich bin jetzt ziemlich bewußt nicht auf Color.pm ausgewichen...
Meine Vermutung ist, dass das "Problem" alle haben, die ein RGB-Tasmota-Device via MQTT2-Device+attrTemplate nutzen. Klingt nach erforderlichen Nacharbeiten in dem Bereich, ich habe nur noch nicht die durchschlagende Idee, an welcher Stelle man es besser machen kann (ohne neue Readings zu erzeugen)...
Zitat von: Beta-User am 03 November 2020, 12:37:14
Na ja, ich bin jetzt ziemlich bewußt nicht auf Color.pm ausgewichen...
äh... Color.pm ist in dem Szenario doch ohnehin schon im Spiel...
devStateIcon {Color::devStateIcon($name,"rgb","Color","pct","state")}
und der ColorPicker wird ja auch verwendet.
Zitat von: betateilchen am 03 November 2020, 12:38:49
äh... Color.pm ist in dem Szenario doch ohnehin schon im Spiel...
Ja, das ist insoweit richtig, aber das Problem ist mAn ein anderes: das mapping für die Sprachsteuerung passt hier (noch) nicht - und das wurde hier via attrTemplate gesetzt. Daher würde ich diesen Teil gerne fixen, weil das bei allen Tasmota-rgb-Devices ein Problem sein müßte. Und zwar sollte dabei möglichst nicht "unnötige Readings aktiviert" oder gar zusätzlich rumgerechnt werden müssen - mit welchen Methoden auch immer. (Im Moment wird HSBColor per default nicht als Reading angezeigt, das filtert jsonMap raus).
Zitat(Im Moment wird HSBColor per default nicht als Reading angezeigt, das filtert jsonMap raus)
Genau! Und deshalb habe ich mir als Computer-Sprache-Noob auch ganz schön die Zähne ausgebissen. Aber je mehr man kämpft, umso mehr lernt man.
Danke nochmals für das intensive Brainstorming zu dem Thema. Ich habe mir jetzt den hue-Wert extrahiert und in Homekit läuft alles wie gewünscht. Alexa hingegen gibt mir die gewählte Farbe nicht zurück. Worauf schaut Alexa, wenn man fragen darf?
Zitat von: elbmarschsurfer am 03 November 2020, 15:01:30
Genau! Und deshalb habe ich mir als Computer-Sprache-Noob auch ganz schön die Zähne ausgebissen. Aber je mehr man kämpft, umso mehr lernt man.
Na ja, ich habe auch recht lange gebraucht, bis ich verstanden hatte, was für ein tolles feature jsonMap ist... Man kann damit die Zahl der Events wenigstens etwas erträglicher machen...
ZitatDanke nochmals für das intensive Brainstorming zu dem Thema. Ich habe mir jetzt den hue-Wert extrahiert und in Homekit läuft alles wie gewünscht. Alexa hingegen gibt mir die gewählte Farbe nicht zurück. Worauf schaut Alexa, wenn man fragen darf?
Was ich noch nicht kapiert habe: Warum genau willst du jetzt unbedingt den Weg weiter in die (mAn. und aus Sicht aller potentiell betroffenen User gesprochen) falsche Richtung weitergehen?
Es wäre besser, wir würden daran arbeiten, dass das über die attrTemplate korrekt so vorbereitet wird, dass alle Sprachsteuerungen damit auch direkt klarkommen... Allerdings habe ich (u.a.) davon genau "0" Plan und habe aus den ganzen Diskussionen mit justme1968 (der in dem Bereich einer der wesentlichen Entwickler ist) eigentlich nur mitgenommen, dass weniger mehr ist. Das wenige muß nur "passen", dann klappt das auch.
Vermutlich hängt es daran, dass das Reading Color heißt, weil "jemand" nicht weit genug gedacht hatte (v.a. ich).
Empfehlung: Neuen Thread im Sprachsteuerungs-Bereich aufmachen und darin hierher verweisen.