+ Antworten
Ergebnis 1 bis 4 von 4
  1. #1
    Registriert seit
    Apr 2019
    Beiträge
    49

    Standard Code nur bei Modul-Update ausführen

    Hallo zusammen,

    ich habe mein Modul unter "unter der Haube" ziemlich stark überarbeitet und diverse Dinge optimiert.
    Nun gibt es aber in der neuen Version auch eine neue Property, welche abgefüllt werden soll.
    Dabei würde ich gerne beim Update aus dem Modul-Store eine bereits vorhandene Property auslesen und die neue Porperty basierend auf Werten aus der alten Registrieren.

    Nun frag ich mich, was der beste Weg dazu ist. Einfach mit
    PHP-Code:
    public function create(){
        ....
        
    $alt $this->ReadPropertyString("Alte Eigenschaft");
        
    $neu $alt " zusätzlicher Text oder was auch immer";
        
    $this->RegisterPropertyString("Neue Eigenschaft"$neu);
        ....

    Dann würde "die Ableitung" aus der alten Eigenschaft beim ersten Aufruf umgesetzt und danach bei jedem Start von IPS gemacht, jedoch nicht mehr in die neue Eigenschaft gespeichert, da diese ja nach dem ersten Aufruf bereits vorhanden ist?

    Gibt es eine bessere Alternative, wie z.B. eine Funktion oder eine Nachricht, welche nur beim Modul-Update und danach nicht mehr aufgerufen wird?

    Gleichzeitig habe ich bestehenden Eigenschaften, welche teilweise "bereinigt" werden müssen, da diese so nicht mehr benötigt werden. Ist es möglich, beim Update-Prozess "alte Propertys" zu löschen?

    Als letztes gibt es noch Eigenschaften, welche angepasst werden müssen. Dies sollte ebenfalls beim Update geschehen. Im Moment würde ich das so lösen
    PHP-Code:
    $pollIdents $this->ReadPropertyString("PollIdents");
    $knownIdents "Angepasste Liste"//Werte, welche nicht mehr möglich sind werden herausgefiltert
    IPS_SetProperty($this->InstanceID"PollIdents"$knownIdents);
    IPS_ApplyChanges($this->InstanceID); 
    Dieses Vorgehen ist aber gemäss Best Practice für PHP-Modul Erstellung von paresy "nicht erwünscht". Darf ich hier eine Ausnahme machen oder gibt es eine andere Lösung?

    Danke für eure Tipps
    Grüsse aus der Schweiz
    jotata


    IPS 5.5 (Docker auf Synology) | HomeMatic & HomeMatic IP | ModBus

  2. #2
    Registriert seit
    Feb 2017
    Beiträge
    2,223

    Das ist konzeptionell so in Ordnung. Um uns den Review zu vereinfachen, schreibe da gerne erörternde Kommentare dran, damit wir wissen, warum du hier ausnahmsweise Eigenschaften setzt und warum das in diesem Falle in Ordnung ist. Bei mir zuckt sonst ziemlich schnell der "Ablehnen"-Finger, wenn ich IPS_SetProperty lese

    Im Create kannst du den Inhalt der Eigenschaften nicht lesen. Du müsstest das also in ApplyChanges machen. Hier kannst du die Properties dann überführen. Stelle nur sicher, dass du das nicht mehrfach tust, beispielsweise indem du die alte Eigenschaft danach auf "leer" setzt und nur überführst, wenn diese nicht leer ist. Wir haben in der Szenensteuerung beispielsweise eine Funktion um die alte Struktur mit Links in eine Liste zu überführen, vielleicht hilft dir das ja: https://github.com/symcon/SzenenSteu...module.php#L38

  3. #3
    Registriert seit
    Apr 2019
    Beiträge
    49

    Hallo Dr Niels,

    danke für die Tipps. Das funktioniert so hervorragend. Ich habe da so viele Kommentare reingepackt, dass ihr das einfach durchgehen lassen müsst

    Nun wollte ich noch die alte Property aus Create entfernen. Bei einer neuen Instanz wird sie ja nicht mehr benötigt und funktioniert auch. Bei einer vorhandenen Instanz führt das aber direkt zu einem Crash von IPS, wenn ich ein Modul-Reload durchführe

    Aktuell lasse ich es halt einfach drin, wäre aber schön, wenn man das irgendwie "aufräumen" könnte.
    Grüsse aus der Schweiz
    jotata


    IPS 5.5 (Docker auf Synology) | HomeMatic & HomeMatic IP | ModBus

  4. #4
    Registriert seit
    Feb 2017
    Beiträge
    2,223

    Wenn du die Eigenschaften nicht registrierst, dann sind sie nicht mehr da. Um also die Legacy-Daten zu transferieren musst du diese weiterhin registrieren, verwendest sie aber halt abgesehen von der Transformation nicht.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 20.03.20, 16:32
  2. Modul Update schlägt fehl bei lokal geändertem Modul
    Von bumaas im Forum Allgemeine Diskussion
    Antworten: 15
    Letzter Beitrag: 13.03.19, 14:05
  3. Module Action: Status Code 101 und Zugriffsverletzung bei Adresse ... in Modul
    Von pendergrass im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 5
    Letzter Beitrag: 31.01.16, 18:35
  4. Code Abfragen vor ausführen eines Scriptes
    Von kitejack im Forum WebFront
    Antworten: 5
    Letzter Beitrag: 20.11.15, 10:25
  5. Script nur ausführen bei Abruf über Client?
    Von Hagbard235 im Forum Skripte, PHP, SQL
    Antworten: 6
    Letzter Beitrag: 17.10.11, 09:55