das o.g. Modul wollte ich gerade benutzen. Für Dimmerwerte ungleich 0 oder 1 funktioniert bei mir das Abrufen von Szenen nicht korrekt.
Nach etwas Suchen bin ich auf den vermutlichen Fehler gestoßen: Das Modul serialisiert die Variablenwerte nach XML und verwendet dabei Kommata für den Prozentwert zwischen 0 und 1. Beim Deserialisieren wird jedoch (zumindest bei mir) vermutlich ein Punkt erwartet und somit beispielsweise 0,9 auf 0 deserealisiert.
Hier wird der Variablenwert mit einem Komma serialisert. Verändere ich diesen String manuell und setze einen Punkt ein (also 0.5), wird der Dimmerwert korrekt deserialisiert und gesetzt.
Ursache ist wohl ein unangenehmer Seiteneffekt in der PHP Umgebung. Der Aufruf
setlocale(LC_ALL, 'en_US.utf8');
in einem beliebigen Skript hat bei mir dazu geführt, dass die Gleitkommazahlen vom Modul nun mit einem Punkt als Trennzeichen serialisiert werden. Jetzt funktioniert das Abrufen von Szenen.
Allerdings wäre mir nicht bewusst, diese Einstellung jemals geändert zu haben. Außerdem: wenn die PHP Umgebung mit Komma serialisiert, warum kann sie dann nicht auch mit Komma deserialiseren?
Eine Float in PHP hat immer eine Punkt als Trennzeichen, wenn das mit Komma geht ist das eher Zufall. Auch wenn im Deutschen ein Komma als Trennzeichen benutzt wird so wird in PHP eben ein . benutzt dann ist man auch immer auf der sicheren Seite. Das gilt auch für JSON Encode und Decode hier muss auch ein Float mit . geschrieben werden ansonsten ist es kein Float.
Ich würde einfach kein serialize benutzten statt dessen JSON dann funktioniert das auch zuverlässig. Also wenn das ein Problem ist am besten in der module.php abändern.
Ich musste erst mal nachlesen was wddx überhaupt ist [emoji5]
Jetzt muss ich mal testen ob es sich mit dem ‚normalen‘ serialize genauso verhält.
Das nutzte ich ausgiebig um Daten mittels eines String zu verarbeiten.
Michael
Ja, das mit dem Float ist schon cool
Aber ich nutzte es eh meistens für Objekte, somit ist es die beste Wahl, da automatisch __sleep und __wakeup ausgeführt wird.
Hast du den es auch mit setlocal getestet ?
Michael
Bei unserialize und json_decode lande ich bei den richtigen Ergebnissen, auch ohne locale Änderungen.
Für mich spricht das eindeutig für einen Bug in wddx. Wenn ich ein Float plattform- und länderneutral serialisiere, muss ich mich auf ein Format einigen, und das dürfte korrekterweise mit einem Punkt sein, so wie bei serialize und json auch.
Also durch ein einfaches Ersetzen der Serialisierung durch json_encode und json_decode in den Methoden SaveValues und LoadValues scheint bei mir das Problem behoben zu sein.
@Symcon Team: Wäre es möglich, das generell so ins Modul SymconMisc einzupflegen?
Also durch ein einfaches Ersetzen der Serialisierung durch json_encode und json_decode in den Methoden SaveValues und LoadValues scheint bei mir das Problem behoben zu sein.
Danke für den Tip, hab die 2 Stellen im Modul ersetzt und schon funktioniert es auch mit den Dimmern.