vielleicht hilft es ja jemandem mit einem ähnlichen Problem. Die Ursache / Lösung ist ja jetzt bekannt. Ich schau auch mal ob ich die Kombination IExpr und NoArg im Modul sinnvoll ermöglichen kann.
Hallo Stefan,
aber nur wenn es Sinn macht, man kann es ja auch wie folgt mit einem String machen
attr WR_1_API set2404Name 24__3_Battery_TimeControl_Mi
attr WR_1_API set2404URL http://%IP-WR%/api/v1/settings
attr WR_1_API set2404Header01 authorization: Session %auth_sessionId%
attr WR_1_API set2404Header02 Content-type:application/json, Accept:application/json, Connection:keep-alive
attr WR_1_API set2404Method PUT
attr WR_1_API set2404Hint 0,1,2,Battery_TimeControl_3_Mi
attr WR_1_API set2404TextArg 1
attr WR_1_API set2404IExpr my $x = ReadingsVal($name,$val,"null");; $x=~s/\s//gs;; ($val =~ /^-?\d+$/)? $val x96 : ($x =~ /^-?\d+$/)? $x : 0 x96
attr WR_1_API set2404Data [{"moduleid":"devices:local","settings":[{"id":"Battery:TimeControl:ConfWed","value":"$val"}]}]
attr WR_1_API set2404FollowGet 24_Battery_TimeControl
Bei dieser Konfiguration geht es darum einen Formatierten String in den readings zu haben, der wie folgt aussieht
Battery_TimeControl_3_Mi 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Jede Stelle kann [0-2] annehmen und jeder 4er Block entspricht einer Stunde, somit gibt es 24 Blöcke. Die Trennung in Blöcke habe ich wegen der Lesbarkeit eingeführt.
Zum Senden muss die dann jedoch wieder ohne Blanks sein.
Beim set hat man nun die Möglichkeit
- [0-2] auswählen, was dann wiederum einheitlich 96 mal geschrieben wird.
- Den Text zu wählen, was dann versucht das reading zu lesen
ist das reading nicht vorhanden wird wiederum 96 mal 0 geschrieben, was einem abschalten innerhalb des Gerätes gleich kommt.
- Das jeweilige reading kann jedoch auch aus einem anderen Device in dieses geschrieben werden, was eine Formatierung des gesamten Strings mit [0-2] durch eine Funktion ermöglicht.
Angewendet habe ich es dann hier.VG
Christian