FHEM > Sonstiges

Unterschiedlicher Inhalt des STATE bei "alter" und "neuer" Version

(1/2) > >>

Reinerlein:
Hallo zusammen,

ich habe ein Modul für die Steuerung meines Sonos-Systems (Multiroommusiksystem) geschrieben.

Dort wird mein STATE von einem Hintergrundprozess mit dem gerade laufenden Liedtitel aktualisiert.

Nun habe ich auf meinem Entwicklungsserver mal ein SVN-Update durchgeführt (Stand war vorher 28.12.2012), und seitdem ein anderes Verhalten auf der Oberfläche bemerkt:

Ich habe in der Übersicht Steuerungsschalter (per WebCmd), die ein Set auslösen, und z.B. zum nächsten Lied wechseln oder die Lautstärke verändern.

Nun kommen unterschiedliche Verhaltensweisen von vorher und nachher zum Tragen:
Alte Version: Mein Set-Befehl liefert undef zurück, der State bleibt wie vorher (enthält also den aktuellen Titel) -> Erwartungsgemäß OK
Neue Version: Mein Set liefert immer noch undef. STATE wird nun aber auf den String meiner Set-Anweisung (z.B. VolumeD) geändert -> Das ist unerwartet und nicht so schön

Hat dieses neue Verhalten einen besonderen Grund, oder ist das ein Bug, der sich eingeschlichen hat?

Grüße Reinerlein

rudolfkoenig:
STATE direkt zu aendern ist inzwischen politisch nicht mehr korrekt. Versuch es bitte mit  readingsSingleUpdate($hash, "state", "value"), dann sollte set STATE auch nicht mehr aendern.

Damit wird das Reading state das vom Modulauthor vorgeschlagene Vorlage fuer STATE (globaler Status), der Benutzer kann es aber mit stateFormat ueberschreiben.

Reinerlein:
Hi Rudi,

naja, wenn ich den state ändere, tue ich das in einem Bulk:

--- Code: ---readingsBulkUpdate($hash, 'state', 'Informationen');
--- Ende Code ---

das sollte ja im großen und ganzen identisch zu dem Sigle-Teil sein. Natürlich gibt es auch ein Start und End dazu...

Nur soll nach einem Aufruf z.B. des Setter "VolumeD" gar nichts am State verändert werden, was mein Code auch gar nicht tut. Das passiert durch einen anderen Einfluß ausserhalb meines Codes...
Und ja, ich habe auch ein Reading "state" (kleingeschrieben). Auch dieses wird mit z.B. "VolumeD" gesetzt.

Wenn ich einen String im Setter zurückgebe. z.B. "Success" wird nichts am State angefasst, nur wenn ich undef zurückgebe.

Grüße Reinerlein

rudolfkoenig:
readingsEndUpdate muss mit $dotrigger=1 aufgerufen werden. Falls keine events generiert werden sollten, dann kann man das im vierten Parameter von readingsBulkUpdate so bestimmen.

Reinerlein:
Hi Rudi,

aber es geht doch nicht um meine Aktualisierungen des State. Das funktioniert super.

Es geht darum, das ich genau nichts am State verändere, und in diesem Augenblick auch gar nicht verändern möchte.
Wenn ein Set-Befehl als Ergebnis regulär den State ändern müsste, dann passiert das bei mir grundsätzlich indirekt über ein Callback durch den Player. Manche Anweisungen an den Player resultieren in keiner (indirekten) State-Änderung...

Es geht darum, das ein Set von mir genau nichts am State ändert, und jetzt neu (irgendwann seit dem 28.12 halt) der State durch die Ausführung des Set auf den Namen des Set geändert wird. Vorher blieb der State einfach unangetastet...

Grüße Reinerlein

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln