Visuelle Einstellungen einer Statusvariable ändern

Hi noch mal,

ich hab noch eine Frage bezüglich der RegisterVariablen:

Ich habe im neuen Modul einige Dinge die nur in bestimmten Situationen geändert werden können (Beispiel der Booster kann nur geschaltet werden, wenn die Anlage eingeschaltet ist). In den öffentlichen Funktionen, welche diese Werte ändern können, ist das natürlich berücksichtigt aber ich hätte das gerne noch automatisch im Webfront angepasst.
Es gäbe die Möglichkeit, wenn nichts geändert werden darf, die ‚DisableAction‘ auszuführen aber das führt dazu, dass bei Integer Variablen die ganze Anzeige von einer Auswahl zu einem einzelnen Wert wechselt - was mehr als unschön ist.

Daher die Idee die visuelle Einstellung „Objekt aktivieren“ entsprechend zu manipulieren. Geht sowas oder ist das nicht möglich aus dem Modul heraus?

Michael

Grundsätzlich geht das.
Aber damit greifst du in die Hoheit des Users ein.
Wäre eine Ausgabe eine sinnvollen Fehlermeldung nicht die bessere Alternative?
Dann weiß der Bediener auch warum es nicht funktioniert.
Michael
PS: Eine RegisterVariable ist eine IPS Instanz, du meinst eine Statusvariable.

Ich hasse es wenn man Dinge tun kann, die dann aber zu einem Fehler führen. Ich persönlich finde es viel besser, wenn ich von vorne herein angezeigt bekomme, das in diesem Modus eben grade nicht geschaltet werden kann. Die original App macht das übrigens ganz genau so.

In dem Zusammenhang hab ich noch ein anderes „Problem“:

Die Einstellmöglichkeiten der Temperatur sind je nach Modus unterschiedlich. Beim Kühlen von 18-32 Grad, beim Heizen von 10-30 Grad und beim Auto Modus von 18-30 Grad.
Ich hab dafür ein eigenes Variablenprofil angelegt das natürlich von 10-32 Grad geht.
Intern werden die Sachen natürlich abgefangen (also wenn jemand eine Temp wählt die kleiner als die min Temp ist wird die Min Temp gesetzt aber auch hier wäre es toll, wenn schon in der Anzeige klar wird welchen Range es gibt.

Musst ja keinen Fehler ausgeben.
Kannst ja auch eine Statusvariable anzeigen lassen ob die Bedienung möglich ist, oder nicht.
Edit: Pass das Variablenprofil doch einfach dynamisch an.
Das Profil welches bei RegisterVariable gesetzt wird, liegt in deiner Hoheit.
Der User kann aber jederzeit sein eigenes Profil ‚drüber legen‘.
Und wenn es dann eine Fehlermeldung gibt… dann weiß er bescheid :slight_smile:
Michael

Wie kann man denn die visuelle Einstellung ändern? Ich könnte es ja konfigurierbar machen, um dem User die Möglichkeit zu geben das zu nutzen oder eben nicht.

Und ich meine die Variable, die ich mit RegisterVariable* anlege

Nicht mit den SDK-Funktionen (also Methoden der ipsmodule-Klasse).
Das geht nur mit den üblichen IPS_* Befehlen.
Wobei ich einfach das Profil anpassen würde.
Michael

1 „Gefällt mir“

Wenn es übrigens einen Mehrwert bietet, dürfen die visuellen Eigenschaften einer Statusvariablen auch ausnahmsweise angepasst werden. Das machen wir beispielsweise auch in der Aktivliste, in welcher alle „aktiven“ Statusvariablen sichtbar und alle „inaktiven“ unsichtbar sind. Je nach Modus kannst du also gerne die aktuell nicht anwendbaren Statusvariablen deaktivieren. Wenn du mir beim Review dann etwas gutes tun möchtest, dann schreibst du aber einen Kommentar daran, warum du das tust :slight_smile:

Ich schau mal was ich so anstelle. Im Moment hab ich zwei Tester, da muss ich erst mal schauen was da so noch kommt. Aber ich denke ich werde das machen.

Kann auch jemand was zu dieser Frage sagen:

  • Die Einstellmöglichkeiten der Temperatur sind je nach Modus unterschiedlich. Beim Kühlen von 18-32 Grad, beim Heizen von 10-30 Grad und beim Auto Modus von 18-30 Grad.
    Ich hab dafür ein eigenes Variablenprofil angelegt das natürlich von 10-32 Grad geht.
    Intern werden die Sachen natürlich abgefangen (also wenn jemand eine Temp wählt die kleiner als die min Temp ist wird die Min Temp gesetzt aber auch hier wäre es toll, wenn schon in der Anzeige klar wird welchen Range es gibt.

Übersehen?
Hatte ich als edit noch schnell nachgeschoben.

Michael

Ah das ist das was ich gerne machen würde. Ich erzeuge das Profil einmalig wenn es noch nicht vorhanden ist beim ApplyChanges. Wie kann ich das jetzt zur Laufzeit ändern.

Und was ist, wenn ich mehr als ein Gerät habe welches das Profil benutzt und grade in einem andern Modus läuft bzw. da hin geschaltet wird? Ziehe ich dem dann das Profil ggf. unter den Füßen weg?

Mit den normalen IPS_SetVariableProfilValues.
https://www.symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/variablenprofile/ips-setvariableprofilevalues/

Dem beugt man vor, indem jede Instanz ihr eigenes Profil hat. Z.b. indem man an den Namen vom Profil die Instanz ID anhängt.
Michael

1 „Gefällt mir“

Wenn Du mir noch sagst, wie ich vom Modul aus die Instanz ID bekomme welche grade erzeugt wird wäre das super.

Schau Mal hier bei ‚Vorlage minimal‘ :
https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/module/
Michael

Alternativ könntest du auch zwei verschiedene Profile erstellen und diese einfach zur Laufzeit wechseln. Das kannst du machen, indem du einfach erneut RegisterVariable* aufrufst. Wenn die Variable dann bereits existiert, dann wird nur das Profil angepasst. Das wäre meiner Meinung nach die einfachere Lösung. Ansonsten bräuchte auch jede Instanz sein eigenes Profil, da die ja verschieden eingestellt sein könnten.

Das klingt deutlich eleganter. Danke für den Tipp. Sähe auch komisch aus in der Profile-Liste alles mehrfach zu haben.