Custom-States verwalten

Begonnen von vbs, 10 März 2014, 21:08:54

Vorheriges Thema - Nächstes Thema

vbs

Hi Ihr,

wie würdet ihr am saubersten "Custom-States" verwalten? Also zu Geräten selbst definierte Zustände oder Daten ablegen und abfragen.
Beispielsweise möchte ich, dass XBMC auf Pause gesetzt wird, wenn das Telefon klingelt. Wenn das Telefonat beendet ist, dann soll XBMC weiter abspielen. Der Haken: Jedoch soll 'play' nur an XBMC gesendet werden, wenn auch wirklich dieser Automatismus vorher XBMC auf Pause gesetzt hat. Wenn ich zB XBMC händisch pausiert habe (irgendwann mal), dann soll nicht beim nächsten Beenden eines Telefonats XBMC weiter spielen.

Ich hab das im Moment so gelöst, dass ich das Attribut comment für eigene States missbrauche. Also wenn ein Anruf eingeht UND XBMC gerade einen Film abspielt, dann wird dieser pausiert und das Attribut des XBMC-device auf 'paused' gesetzt. Und nur wenn das Attribut auf 'paused' steht, wenn ein Anruf beendet wird, dann wird XBMC auf Play gesetzt und das Attribut gelöscht.

Ich hoffe, ich konnte das jetzt einigermaßen verständlich erklären. Ich hätte noch andere Beispiele auf Lager, aber ich denke, dieses ist noch am Besten zu erklären :/

Eine andere Möglichkeit wäre es, diese States im Code selbst abzulegen. Also eine eigene Tabelle in Perl zu führen, wo solche Sachen gemanaget werden. Das gute an dem comment-Attribut ist jedoch, dass man damit auch zB diese FILTER-Regeln bei Set bzw. bei devspec nutzen kann.

Wie macht ihr sowas? Andere bzw. bessere Ansätze?

justme1968

du kannst readings dafür verwenden. mit setreading erzeugen. wenn der name ein punkt am anfang hat ist er im frontend automatisch ausgeblendet.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

vbs

Ahh ok, Idee gefällt mir gut. Ich habe das mal ausprobiert, aber leider klappt das nicht so gut wie mit den Attributen. Das Problem scheinen (wieder) die structures zu sein in Verbindung mit FILTER bei set. Die FILTER greifen dabei nicht.

Wenn ich ein Reading einer structure setzte. Etwa so:
{setReadingsVal($defs{"wz_lightCinema"}, "autostate", "off", TimeNow())}

Dann kommt dieses Reading nicht bei den konkreten Devices an, sondern wird nur in dem structure-Device gespeichert.

Wenn ich das gleiche mit nem Attribut mache, dann wird das in die Devices da drunter durchgereicht:
attr wz_lightCinema comment off

Ich denke, daher greift der Filter bei set nicht:
set wz_lightCinema [FILTER=autostate=off] on

So zumindest meine Vermutungen im Moment...