Flexible Anpassung der neuen Darstellungen von Variablenwerten zur Laufzeit

Guten Morgen,
ich programmiere aktuell eine Lösung, bei der ich je nach vorhanden Sensorwerten, eine Auswahl von Möglichkeiten, in diesm Fall eine List mit verschiedenen Modi anbieten möchte.

Mit dem Funktion " IPS_CreateVariableProfile" lassen sich Profile erstellen und auch zur Laufzeit bzw. währende des Betriebs flexibel Anpassen. (Auswahlmöglichkeiten hinzufügen und entfernen)

Für die Profile nutzt ich haber schon die neuen Darstellungsmöglichkeiten.
(V7.2->V8.0 (Q1/2025) — IP-Symcon :: Automatisierungssoftware)

Gibt es diese Möglichkeit auch für die neue Darestellung

Ein Beispiel bei dem ich eine solche Änderung gerne durchführen möchte.
z.B. möchte ich hier z.B. die Möglichkeit der Auswahl „Automatik“ entfernen, falls diese Option aufgrund von Fehlender Sensoren nicht zur Verfügung stehen soll.

$this->RegisterVariableInteger('select_modus', "Modus", [
            'PRESENTATION'    => VARIABLE_PRESENTATION_ENUMERATION,
            'OPTIONS'         => json_encode([
                [
                    'Value'            => 0,
                    'Caption'          => 'Manuell',
                    'IconActive'       => true,
                    'IconValue'        => 'hand',
                    'Color'            => 52651,
                ],
                [
                    'Value'            => 1,
                    'Caption'          => 'Automatik',
                    'IconActive'       => true,
                    'IconValue'        => 'arrows-rotate',
                    'Color'            => 52651,
                ],
                [
                    'Value'            => 2,
                    'Caption'          => 'Wochenplan',
                    'IconActive'       => true,
                    'IconValue'        => 'calendar-week',
                    'Color'            => 52651,
                ],
            ]
                )
        ], 9);

Ruf die RegisterVariable* Funktion einfach mit einer geänderten Darstellung noch einmal auf :slight_smile:

paresy

2 „Gefällt mir“

Hi paresy,
danke die für die Rückmeldung ich habe jetzt noch bisschen probiert und geschaut und bin auf Befehl:
„IPS_SetVariableCustomPresentation“ gestoßen, das ist glaub ich die noch besser Lösung. :slight_smile:

Nein ist es nicht.
Custom ist dem User vorbehalten um die Darstellung manuell zu überschreiben. Module nutzen niemals Custom für Darstellung oder Profile.
Profile wurden ja auch ausschließlich über Registervariable zugewiesen.
Michael

1 „Gefällt mir“

Danke euch beiden für die Infos.

@Nall-Chan:
Kannst du mir, für mein Verständnis erklären, was es heist „Custom ist dem User vorbehalten“.
heist das das das nur durch z.B. Skripte vom Enduser im Objektbaum genutzt werden soll?

Ich habe das ganze jetzt mit der RegisterVariable* realisiert, wie ursprünglich von paresy vorgeschlagen. Muss Ich hier hier vorher noch ein „UnregisterVariable“ durchführen, ist das notwendig?

Habe es aktuell so umgesetzt:

        $this->UnregisterVariable('select_modus'); // Erst löschen
        $this->RegisterVariableInteger('select_modus', "Modus", [
            'PRESENTATION' => VARIABLE_PRESENTATION_ENUMERATION,
            'OPTIONS'      => json_encode($options)
        ], 8);
        $this->EnableAction('select_modus'); // Aktion erneut aktivieren

Ich hab den Block jetzt im ApplyChanges untergebracht d.h. immer wenn ich „ApplyChanges“ bestätige dann wird der Button neu erstellt, egal ob ich hier eine Änderung der Auswahlmöglichkeiten habe oder nicht und die vorherige auswahl geht verloren.

Meine Lösung dafür wäre, den vorher ausgewählten Wert zu speichern und nach dem erstellen einfach wieder zu setzen. Oder gibt es eine schönere / elegantere Möglichkeit das ganze außerhal von ApplyChanges() durchzuführen?

Das ist meiner Meinung nach die korrekte und einfachste Lösung. Aber bitte keine unregister. Sonst bekommst du immer eine neue ID.

paresy

Danke dir für das Feedback, habe ich jetzt so umgesetzt, ohne unregister.

1 „Gefällt mir“

Inzwischen sieht man es nicht mehr so gut in der Konsole, aber es gibt halt grundsätzlich zwei Werte an einer Variable welche die Darstellung steuern.
Einmal die Darstellung welche von dem Modul kommt und einmal die welche der User selber in der Konsole oder per Skript anpassen kann.
Letzteres ist halt dem User vorbehalten und daran darf ein Modul auch nichts ändern. Das passiert aber wenn du IPS_SetVariableCustomPresentation oder auch IPS_SetVariableCustomProfile benutzt.
Michael