Funktion welche nur bei Modulinstallation aufgerufen wird

Hallo,

ich versuche gerade eine Statusvariable anzulegen und diese einmalig bei Installation vom Modul zu initialisieren.
Die Funcktion Create() wird leider auch beim IPS neustart aufgerufen.

Momentan habe ich folgende Zielen am Ende von Create():


$varId = $this->RegisterVariableString ( "SerialCode", "Serial Code" );
SetValueString ( $varId, bin2hex ( openssl_random_pseudo_bytes ( 3 ) ) );

So wird mir aber jedes mal ein neuer Code generiert, wenn ich IPS neustarte.

Danke!

Gruß Basti

Ich vermute Mal, du möchtest bestimmt etwas anderes erreichen :smiley:

Was hast du mit dieser Variable vor?
Michael

PS: Nach dem erzeugen ist die Variable leer… Darauf könnte man prüfen :wink:

Naja ich wollte halt die Variable beim Erstellen der Instanz initialisieren :-). Es soll ein Funkcode als Statusvariable generiert werden (wie bei Z-Wave die BaseID). Da man diesen auch ändern können soll, habe ich das jetzt als Property gelöst:
2017-05-02_012718.png

Zusätzlich finde ich trotzdem noch cool, wenn an der Instanz noch ne readonly Variable hängt, wo immer das drin steht, was in dem Property steht. Dazu lasse ich die Variable einfach in ApplyChanges() immer auf das Property aktualisieren. Kann ich die Variable jetzt noch irgendwie auf „Nur lesen“ setzen? Momentan kann man sie über die Konsole noch ändern. Auch ein DisableAction bringt nichts.

In Create() erstelle ich die Statusvariable so:


$this->RegisterVariableString ( "DuoFernCode", "DuoFern Code" );
$this->DisableAction ( "DuoFernCode" );

Gruß Basti

P.S.: Überprüfen ob die Variable leer ist, kam mir auch in den Sinn, aber ich habe vermutet, dass das keine gute Lösung ist.

Davon abgesehen dass die Variable ja keine Funktion und somit sinnlos ist; kannst du Variablen immer über die Console ändern.
Die Warnmeldung ‚nur lesen‘ fehlt noch bei den Modulen.
Wenn der Code eine sicherheitstechnische Funktion hat, ist es sogar eine schlecht Idee ihn in eine Variable zu schreiben.
Property ist ja genau das, was du brauchst.
Michael

Alles klar vielen Dank! allerdings kann ich die Statusvariablen von richtigen Modulen nicht aus der Konsole verändern, dann kommt ne Fehlermeldung das diese Variable als „Nur lesen“ markiert ist.

Dennoch kannst du sie bearbeiten, einfach den richtigen Button drücken.
Michael

Oh du hast recht, wieder was gelernt, gefährlich :slight_smile:

Gut, dann gehts jetzt an die serielle Kommunikation. Da ich buffern und Antworten auswerten muss und diese dann auch noch auf verschiedene Devices verteilen muss, werde ich nicht drum herum kommen, mal dein Modul IPSXBeeZigBee anzuschauen. Das wird spaßig, in der Uni haben wir nie was mit serieller Kommunikation gemacht.

Gruß