FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: elbmarschsurfer am 03 November 2020, 11:19:17

Titel: Reading in Einzelteile zerlegen
Beitrag von: elbmarschsurfer am 03 November 2020, 11:19:17
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?
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: MadMax-FHEM am 03 November 2020, 11:29:56
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
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 11:51:10
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...
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: betateilchen am 03 November 2020, 11:52:27
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.
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: betateilchen am 03 November 2020, 11:53:31
Zwei Doofe, ein Gedanke  8)
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 11:57:02
Zitat von: betateilchen am 03 November 2020, 11:53:31
Zwei Doofe, ein Gedanke  8)
ymmd ;D
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: MadMax-FHEM am 03 November 2020, 12:06:07
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
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: elbmarschsurfer am 03 November 2020, 12:13:39
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.
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: elbmarschsurfer am 03 November 2020, 12:22:41
... 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:
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 12:26:57
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....
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: betateilchen am 03 November 2020, 12:33:42
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);

Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: betateilchen am 03 November 2020, 12:35:31
Übrigens: zwei der drei Werte sind in Deinem device ohnehin schon vorhanden, schau Dir mal die Readings pct und saturation an  8)
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 12:37:14
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)...
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: betateilchen am 03 November 2020, 12:38:49
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.
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 12:56:02
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).
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: elbmarschsurfer am 03 November 2020, 15:01:30
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?
Titel: Antw:Reading in Einzelteile zerlegen
Beitrag von: Beta-User am 03 November 2020, 15:26:15
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.