Dynamische Formulare, wie reagieren auf externe Änderungen?

Ich sitze grad an einem Modul für meine Lüftungsanlage und komme nicht so recht weiter.

Bei der Lüftungsanlage lassen sich Parameter wie Abluft, Zuluft, Komforttemperatur usw. einstellen, wozu ich in meinem Modul in der form.json unter Elements eine Liste mit den Parametern erstellt habe die angepasst werden können. Da grundsätzlich die Möglichkeit besteht diese Parameter auch direkt an der Anlage zu ändern, hole ich mir beim Aufruf der Form die aktuellen Werte und setze in der Methode GetConfigurationForm diese Werte dann. In ApplyChanges hole ich mir dann die Werte aus der Liste (ReadPropertyString) und schicke sie zur Anlage, was soweit auch funktioniert.

Wenn ich jetzt aber Einstellungen direkt an der Lüftungsanlage vornehme und dann das Konfigurationsformular öffne, werden die persistierten Werte der Liste genommen anstatt der aktuellen Werte die ich in GetConfigurationForm setze.

Wie ist hier die richtige Vorgehensweise um das zu verhindern :confused:

Wenn die Werte persistent in der Anlage sind und in der Instanz ist das doppelt, wie willst du sicherstellen welche Parameter jetzt neuer sind?
Entferne die Propertys aus deinem Modul und verlagere die Liste in den Action Bereich.
Dann kann der User über die Instanz Konfiguration in IPS die Werte setzen und beim öffnen sind immer die gelesenen Werte aus der Anlage enthalten.
Michael

Dann brauche ich aber zusätzlich einen Button unter der Liste der dann eine Methode aufruft die die Daten an die Lüftungsanlage schickt richtig? Also über ApplyChanges dann garnicht gehen?

Genau, der User will ja aktiv etwas in Richtung Gerät senden.
Michael

OK habe damit dann aber noch ein weiteres Problem, im Actions Bereich ist bei einer Liste ja nur die aktuell ausgewählte Zeile als Variable verfügbar, ich benötige aber alle Einträge der Liste in meiner Update Methode damit ich die Werte an die Lüftungsanlage schicken kann. Gibt es dafür auich eine Lösung?

Stimmt, da war etwas.
Da war noch ein FeatureRequest offen, dass man die gesamte Liste als Variable bekommt.
Oder beim ändern eines Eintrages ein onChange ausgelöst wird.
Alternativ statt des Button kannst du eine Spalte definieren und dieser ein onclick und confirm mitgeben.
Dann kommt beim klicken in der Spalte einer Zeile eine Sicherheitsabfrage und dann dein Code zu übertragen dieses Wertes.
Michael

Gute Idee, aber das funktioniert leider auch nur bedingt wie ich eben feststellen musste, denn das onClick Event greift nicht bei Feldern deren Wert 0 ist. Das wäre bei der Lüftungsanlage aber der Fall wenn z.B in der Stufe Abwesend der Lüfter aus ist. Und selbst wenn es gehen würde, dann müsste der Nutzer erstmal erkennen das man einen Wert ändern kann indem man in das betreffende Feld klickt. Ich glaube das ist nicht so benutzerfreundlich.

Irgendwie sehe ich aktuell keine Möglichkeit das sauber umzusetzen. Die beste Lösung aus meiner Sicht wäre sicherlich wie bereits von dir geschrieben, wenn die komplette Liste als Variable übergeben werden könnte oder es ein onChange Event gibt.

@paresy ist da so etwas in Zukunft geplant oder gibt es noch eine andere Möglichkeit?

Mach doch eine separate Spalte und dort steht nur z.b. ‚Speichern‘.
Dann klickt da schon wer drauf.
Michael

Ich denke, dass Statusvariablen hier viel passender wären, als irgendwelche Einstellungen in der Konfiguration. Der Benutzer möchte ja die Wunschtemperatur ja beispielsweise auch über die Visualisierung schalten können. Wenn du die Einstellungen als Statusvariablen hast, kannst du diese übrigens wunderbar als TestCenter in deiner Konfiguration einbinden. Dies aktualisiert sich dann auch bei Änderung der Variablenwerte.

Guter Einwand, an das WebFront hatte ich noch garnicht gedacht.
Ich habe es jetzt so gelöst, dass die Komforttemperatur und die Lüftungsstufe sich über das WebFront schalten lassen und zusätzlich eben im TestCenter. Die Parameter der einzelnen Lüftungsstufen werden eher selten bis garnicht eingestellt (evtl. nach einem Stromausfall mal wieder), diese habe ich jetzt anstatt in einer Liste in ein ExpansionPanel gepackt und dort kann ich ja jeden Wert als Parameter übergeben.