Webfront anzeige wird nicht aktualisiert

Hallo

Ich baue gerade an meiner Lüftungssteuerung. Da ist normalerweise ein 3-Stufenschalter dran. Den habe ich mit einem HM-LC-Sw4-PCB nachgebildet.
Dazu habe ich eine Integervariable [0…3] angelegt und mit einem Profil 4 Button erzeugt. Geschaltet wird dann mittels Skript laut http://www.ip-symcon.de/forum/f50/stufenschalter-hm-lc-sw4-dr-13870/

Das Schalten klappt super und die Anlage funktioniert. Allerdings werden die Zustände im Webfront bei den Button nicht aktualisiert. Woran kann das liegen?
Ich habe zwar schon einige Threads gefunden wo Leute Probleme mit Images hatten, aber hier geht es um eine einfache Integer-Variable der ein Profil zugewiesen wurde.

Ich habe mal zusätzlich die 3 Einzelschalter des HM-LC-Sw4-PCB eingeblendet und die werden sauber aktualisiert. Nur halt eben nicht die Button der Integervariablen.

Allerdings werden die Zustände im Webfront bei den Button nicht aktualisiert. Woran kann das liegen?

Der Variable hast Du aber dein Script als Aktionsscript übergeben.

Dort wo ich das Profil einstelle unten als „eigene Aktion“. Ja.

Dann wird der Status beim schalten Vorort nicht angezeigt.

Das musst Du im Script noch mit einbauen.

Hallo Rainer

Könntest du mal einem PHP Neuling erklären wie das geht.
Das skript schaut momentan so aus.

<?
switch($IPS_VALUE)
{
    case 0:
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", true);
    break;
    case 1:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
    break;
    case 2:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", true);
    break;
    case 3:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", true);
    break;
}
 //Fügen Sie hier Ihren Skriptquellcode ein
?>

Ich hatte bisher angenommen, dass die hintergelegte VAriable automatisch aaktualisiert wird, wenn ich aud eine der Button Klicke.

Ok ich hab mal SetVariableInteger eingebaut.
Es ist allerdings schon verwirrend, das ich einerseits eine Variable auswerte, die einen bestimmten Wert hat und dann die selbe Variable noch mal auf diesen Wert setzen muss, damit ich etwas sehe. Aber man lernt nie aus.

Versteh nicht ganz was Du meinst. Die Integervariable im Webfront hat ja mit deinen Statevariablen nichts zutun. Woher soll also Webfront wissen wie der State ist. Folglich muss eine Verknüpfung zu den beiden Variablen gemacht werden.

Das Script hängt an der Integer Variablen die durch die 3 Button im Webfront dargestellt wird. Sobald ich im Webfront auf einen der Button klicke, dann ändert sich eben diese Integer-Variable. Dann wird dadurch das Script gestartet. Das Script wertet diese Änderung aus und ändert die State Variablen der einzelnen Schaltaktoren. Damit aber das Webfront die Anzeige aktualisiert muss ich im Script den Wert der Integervariablen auf sich selbt mit SetVariableinteger zurüch schreiben. Das ergibt für mich an dieser Stelle keinen Sinn da die Variable ja schon vor Ausführung des Scriptes den passenden Wert hatte. Weil das eben völlig unlogisch ist bin ich ja gar nicht auf die Idee gekommen das mit SetVaraiableInteger zu machen.

<?
switch($IPS_VALUE)  //hier steht der Wert aus 41181 /*[Klima\Lüftungsanlage\Intensität]*/ drin
{
    case 0:
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", true);
    break;
    case 1:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
    break;
    case 2:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", true);
    break;
    case 3:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", true);
    break;
}
 //und hier die Intensität auf sich selbt zurück schreiben damit sich was tut ???
        SetValueInteger(41181 /*[Klima\Lüftungsanlage\Intensität]*/, $IPS_VALUE);

?> 

Das wäre der korrekte Aufruf über Webfront.

Mit der Übergabe als Aktion, machst Du die Variable erst schaltbar, es wird aber noch kein Wert gesetzt.

<?
if($_IPS['SENDER'] == "WebFront")
{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
   
    switch($_IPS['VALUE'])  //hier steht der Wert aus 41181 /*[Klima\Lüftungsanlage\Intensität]*/ drin
    {
        case 0:
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", true);
        break;
        case 1:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        break;
        case 2:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", true);
        break;
        case 3:
        HM_WriteValueBoolean(51655 /*[Klima\Lüftungsanlage\K1]*/, "STATE", false);
        HM_WriteValueBoolean(55844 /*[Klima\Lüftungsanlage\K2]*/, "STATE", false);
        HM_WriteValueBoolean(31048 /*[Klima\Lüftungsanlage\K3]*/, "STATE", true);
        break;
    )
}

?>

Set Value brauchst Du nur zum zurückschreiben der Werte bei einem anderen Aufruf.

Variablenprofile: IP-Symcon :: Automatisierungssoftware

Ok, ich sehe ich hab noch etwas Verständnisprobleme. Liegt sicher auch daran, dass ich mit PASCAL groß geworden bin und so mit den doch recht kryptischen Gegebenheiten in C, PHP und artverwandten Sprachen so meine Probleme habe.
Aber danke für die Hilfe.