[gelöst] Brauche Hilfe beim Setzen von Readings an einem dummy

Begonnen von derFrosch, 15 Oktober 2017, 22:44:40

Vorheriges Thema - Nächstes Thema

derFrosch

Hallo,

ich habe mir einen Dummy-Schalter definiert und mehrere Schaltmöglichkeiten definiert:
define Deckenlampe dummy
attr Deckenlampe genericDeviceType light
attr Deckenlampe setList on off dimup dimdown cw mw ww
attr Deckenlampe webCmd on:off:dimup:dimdown:cw:mw:ww


Dazu existiert ein notify, welches eine eigene sub in 99_myUtils aufruft:
define NFY_SetMyLight notify Deckenlampe {setMyLight("$EVENT")}


Die sub setMyLight sendet abhängig vom übergebenen Wert via Signalduino eine passende raw message (Ich habe bisher keinen return value). Das funktioniert bis hierhin auch alles wunderbar.
Da ich das ganze allerdings auch via homebridge/Siri nutzen möchte, wollte ich zunächst passende userReadings definieren habe ich Readings definiert, die ich später im homebridgeMapping verwenden wollte.

Ziel:
- Die Helligkeit soll im Reading "brightness" gespeichert werden, dazu soll bei jedem Klick auf dimdown der Wert um 10 verringert werden, bei dimup entsprechend um 10 erhöht. Der Startwert steht auf 50. Range sollte 10..100 sein.
- Die "Farbe" soll im Reading "hue" stehen und nur 3 Zustände kennen: Kaltweiß/Mittel/Warmweiß (durch die entsprechenden klicks auf cw/mw/ww). Default ist mw.


Wie muss ich die UserReadings definieren und wie bekomme ich die jeweiligen Werte da rein oder gibt es da bessere Möglichkeiten, die Readings zu setzen?
attr Deckenlampe userReadings brightness:dimdown difference {ReadingsVal("Deckenlampe","brightness")-10;; } \
brightness:dimup difference {ReadingsVal("Deckenlampe","brightness")+10;; }

viegener

Ich denke die Lösung wäre hier wohl eher ein DOIF oder mehrere notifys und zusätzlich mit readingList noch das brightness reading anlegen. Also so etwas wie

define Deckenlampe_dimup Deckenlampe:.*dimup.* { my $dimv = ReadingsVal("Deckenlampe ","brightness",0);; $dimv += 10 if ( $dimv < 100 );; fhem("set Deckenlampe brightness $dimv") }


Allerdings ohne, dass ich das jetzt ausprobiert hätte - Analog dann noch für dimdown
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

derFrosch

Ich steh gerade ein bisschen auf dem Schlauch, kannst du mir die nachfolgende Zeile etwas erläutern? Ist das ein notify oder doif?

Zitat von: viegener am 15 Oktober 2017, 23:51:01
define Deckenlampe_dimup Deckenlampe:.*dimup.* { my $dimv = ReadingsVal("Deckenlampe ","brightness",0);; $dimv += 10 if ( $dimv < 100 );; fhem("set Deckenlampe brightness $dimv") }

Ich habe momentan in meinem dummy Deckenlampe ja schon die Readings 'state', 'brightness' und 'hue'. Der 'state' hat als inhalt immer das zuletzt aktivierte Kommando "on/off/dimup/...". In den beiden anderen Readings stehen momentan nur erstmal statische Werte.

viegener

Wenn Du das Reading brightness setzen willst, musst Du am Dummy das Attribut readingList verwenden (siehe Commandref).
Dann kannst Du mit
set <dummy> brightness <wert>
den Wert setzen. Das verwende ich in dem Codestück.

Die Idee ist auf den Status dimup/dimdown zu reagieren, indem das Reading brightness verändert wird. Wichtig brightness ist dabei kein userreading. Also das Attribute userreading wird hier nicht benötigt.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Thorsten Pferdekaemper

Hi,
um das mit dem Reading etwas zu vereinfachen:

setreading <dummy> brightness <wert>

Das geht ganz ohne irgendwelche userReadings oder readingList.
Bei dem define fehlt irgendwo das Wort "notify", würde ich mal sagen:
define Deckenlampe_dimup notify Deckenlampe:.*dimup.* { my $dimv = ReadingsVal("Deckenlampe","brightness",0);; $dimv += 10 if ( $dimv < 100 );; fhem("setreading Deckenlampe brightness $dimv") }
Gruß,
   Thorsten
FUIP

derFrosch

Danke für eure Hilfe. Das Reading wird nun auch mit Werten gefüllt. Den Rest bekomme ich hin.