Problem mit MC_ReloadModule

Hallo in die Runde,

ich bin gerade dabei ein Modul für meinen Deye Hybridwechselrichter zu schreiben. Dabei habe ich ein Problem mit der Funktion MC-ReloadModule, die offensichtlich nicht alles macht, was sie soll:.

Problembeschreibung:
Ich habe in einer ersten Version meines Moduls eine Instanz erstellt und mit dieser gearbeitet. Dabei gab es immer mal Auslesefehler bei einer INteger VAriable, die dann plötzlich anstatt ins negative zu springen einen Wert von 65535-eigentlichen Wert angezeigt hat. Es war also ein signed INteger, den ich aus dem Wechselrichter versehentlich als unsigned ausgelesen habe. Nun habe ich mir gedacht, ich korrigiere das, as ich dann auch im Code getan habe. Ein Update des Moduls in IPSymcon jedoch mittels MC_ReloadModule hat jedoch den Fehler ind er schon bestehenden Instanz nicht beseitigt.
Lege ich jedoch eine neue Instanz an, dann tut er was er soll. In der alten instanz muss also irgendwo noch die falsche Berechnung drin sein.
Wird von einem Modul an jeder Instanz eine Kopie des dahinterliegenden PHP-Codes gehalten, oder warum kann ich eine bestehende Instanz nicht mit MC_ReloadModule aktualisieren.
Klar könnte ch die alte Instanz einfach löschen und eine neue anlegen. Das Problem ist halt, dass ich mit der schon bestehenden instanz im Webfront und im IPSView schon massiv gearbeitet habe und auch etliche Scripte mit den Wechselrichtertdaten arbeiten. Da müsste ich dann die ganzen ObjektIDs neu verlinken und das ist ein immenser Aufwand.

Wie bekomme ich also IPS dazu, dass die alte Instanz meines Wechselrichtermodule mit dem aktuellen Code arbeitet?

Die Instanz arbeitet immer mit dem Aktuellen Code.

Bestehende Variablen werden jedoch weiter verwendet. Ggf hast du da zwei verschiedne Datentypen für die Variablen. Dann kannst du die alter Variable löschen diese sollte neu angelegt werden.

Sonst das Komplette IPS mal durchstarten?
Wenn man beim Programmieren und Modul laden ein Fehler hat könnte irgendwo was “hängen bleiben” dann funktionieren neue Instanzen aber I.d.r. auch nicht.

Verwendest du ReloadModule korrekt? Ich bin mir nicht mehr sicher, was es meldet wenn man eine nicht vorhandene Bibliothek neuladen will, aber lange daran hängen geblieben, dass dieser Befehl bei mir einfach nichts getan hat.

Korrekter Syntax ist MC_ReloadModule($moduleControlID, "BibliotheksName"); und nicht wie zu erwarten der Modulname.

Name vom Ordner auf dem Dateisystem, meine ich.
Michael

2 „Gefällt mir“

Da haben wir es wieder. Bei mir war das zufällig das gleiche…

Ja der Aufruf ist korrekt. ich habe ja die ganze Zeit damit entwickelt und habe mir da extra ein Script geschrieben. Ich hab ja nicht nur lokal nachgeladen, sondern sogar das Modul auf Github aktualisiert und von dort geupdatet.
Allerdings habe ich mich jetzt mal etwas auf Fehlersuche in den setings.json gemacht nd vermute, den Fehler gefunden zu haben. Hab das mal angehängt. Ich habe im laufe der Entwicklung mal den Datentyp der Variable geändert und damit scheint MC_ReloadModule nicht klar zu kommen, bzw scheint dis im Abschnitt „Variables“ der Geräteinstanz nicht nachträglich zu ändern. Schaut man sich die beigefügte Json datei an, dann steht das einmal DataType 2 und einmal Datatype 1 drin.
Jetzt frage ich mich, ob ich den Dienst beenden, das händisch ändern und dann gefahrlos wieder starten kann. Die Variable wird auch geloggt.

Fehlersuche.json (27,3 KB)

Finales Update

Manuelle Änderung des Datentyps in der settings.json hat das Problem gelöst.

1 „Gefällt mir“