Toggle Button von "extern" aktualisieren

Hallo,

ich habe nach der Anleitung von RWN einen Toggle Button angelegt.

  • Integer Variable
  • Wert 0
  • Skript hinzugefügt

Das Funktioniert auch super.

Jetzt ist es bei mir aber so, dass die Aktion, welche der Button ausführt - auch in Notfällen von einem anderem Skript ausgeführt wird.

In meinem Fall ist es eine Pumpe, welche durch einen Sensor (Wassereinbruch) ausgeschaltet wird.

Wenn ich diesen Fall habe, schaltet der Schaltaktor die Pumpe einfach aus (würde manuell ansonsten über den Toggle Button durchgeführt werden).

Mein Problem - der Togglebutton zeigt den falschen Status an, wenn die Aktion nicht durch ihn ausgeführt wird.

Wenn ich jetzt den Wert der Integervariable des Toggle Buttons durch ein Skript ändere passiert nix. ergo der Status wird nie aktualisiert. Erst wenn ich den Button ein paar mal von Hand drücke. Das ist aber irreführend! :frowning:

Hier das Skript des Buttons…

<?
if($IPS_SENDER == "WebFront")
{
    switch($IPS_VALUE)
    {
        case 1:
        IPS_SetVariableProfileAssociation("Toggle", 0, "Ein", "", 0xFF0033);
        IPS_SetVariableProfileAssociation("Toggle", 1, "", "", -1);
        HM_WriteValueBoolean(28027  /*[Geräte\Steckdose Brunnenpumpe]*/, "STATE", true);
        break;
        case 0:
        IPS_SetVariableProfileAssociation("Toggle", 1, "Aus", "", 0x00FF00);
        IPS_SetVariableProfileAssociation("Toggle", 0, "", "", -1);
		  HM_WriteValueBoolean(28027  /*[Geräte\Steckdose Brunnenpumpe]*/, "STATE", false);
        break;
    }
}

Ich kann dir jetzt nicht so ganz folgen. Du willst den Wert der Variable über ein Script ändern. Hab ich das richtig verstanden.

Das wird aber nix, da der Wert ja vom Script vorgegeben wird und nicht im Profil ist.
Je nach Schaltzustand steht ja nur ein Wert im Profil, entweder 0 oder 1. Wenn jetzt 1 drinnen steht und Du setzt über die Variable 0, passiert nichts, da der Wert nicht exsistent ist.

okay - das verstehe ich

nur wie kann ich das problem lösen?

Ziel: Toggle Button, dessen optischer Zustand auch über ein Skript von aussen geändert werden kann.

kann ich einen Toggle Button denn anders herstellen? Es sieht im WebFront einfach WESENTLICH besser aus! :frowning:

Du könntest hiermit

$value = IPS_GetVariableProfile("Toggle");
echo $value['Associations'][0]['Value'];

den aktuellen Wert abfragen und dann entsprechend die Assoziation setzen.

Könnte dann so aussehen.

if($IPS_SENDER == "RunScript")
{
    $value = IPS_GetVariableProfile("Toggle");
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        IPS_SetVariableProfileAssociation("Toggle", 1, "        Ein       ", "", 0xFFA943);
        IPS_SetVariableProfileAssociation("Toggle", 0, "", "", -1);
        IPS_LogMessage($IPS_SELF, $value['Associations'][0]['Value']);
        break;
        case 1:
        IPS_SetVariableProfileAssociation("Toggle", 0, "       Aus       ", "", 0x555555);
        IPS_SetVariableProfileAssociation("Toggle", 1, "", "", -1);
        IPS_LogMessage($IPS_SELF, $value['Associations'][0]['Value']);
        break;
    }
}

Das ganze kannst Du in ein Script packen.

Aufruf dann mit IPS_RunScript(ID des Scripts);

Und nochmal als komplett Version. :slight_smile:

<?

if($IPS_SENDER == "RunScript")
{
    $value = IPS_GetVariableProfile("Toggle");
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}

if($IPS_SENDER == "WebFront")
{
   switch($IPS_VALUE)
   {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}

function Ein()
{
    IPS_SetVariableProfileAssociation("Toggle", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("Toggle", 1, "        Ein       ", "", 0xFFA943);
    HM_WriteValueBoolean(28027  /*[Geräte\Steckdose Brunnenpumpe]*/, "STATE", true);
}

function Aus()
{
    IPS_SetVariableProfileAssociation("Toggle", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("Toggle", 0, "       Aus       ", "", 0x555555);
    HM_WriteValueBoolean(28027  /*[Geräte\Steckdose Brunnenpumpe]*/, "STATE", false);
}

?>

SUUUPER - vielen Dank für die schnelle Hilfe.

es hat perfekt funktioniert und macht genau was ich will :loveips:
das kann ich auch super für ein paar andere Funktionen nutzen - der Hammer!

…jetzt setzte ich mich erstmal hin und versuche zu verstehen wie das funktioniert :rolleyes:

Hallo, vielleicht kann mir jemand helfen.
Habe das letzte Script von dieser Seite am laufen,funktioniert soweit auch,
bis auf halt wenn der Homematic Lichtschalter Manuel betätigt worden ist.
Habe dann einiges versucht und das Script mit „if ($IPS_SENDER == VARIABLE“
versucht zu ergänzen,kam leider nur Müll raus.
Vielleicht hat jemand ein Script fertig was er einstellen könnte,möchte halt gerne im Webfront nur ein Button zum schalten haben und dieser sollte natürlich auch den aktuellen Status haben egal ob ausgelöst im WF,oder Script,oder Manuel.
Oder eine komplette andere Idee wie ich dieses realisieren könnte:(.

if($_IPS['SENDER'] == "WebFront" || $_IPS['SENDER'] == "Variable")

Trigger Taster/Schalter true/false

Hallo und vielen Dank für die Antwort.
Leider weiß ich jetzt auch nicht mehr.
Soll ich diesen Befehl in dem Script ersetzen damit ?.
Hab ich probiert geht nicht.
Oder ein zweites Script anlegen damit, trigger dann über Schalter Status bei Variable Änderung, so gemacht geht auch nicht richtig.
Ich denke bin total auf dem Holzweg, es schaltet zwar aber bei anklicken im WF auf diesen Button schalter er falsch oder Anzeige ist falsch,oder ich muss 2x klicken damit es wieder geht.
Also das alte Script siehe hier:

<?

if($IPS_SENDER == "RunScript")
{
    $value = IPS_GetVariableProfile("Toggle");
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}

if($IPS_SENDER == "WebFront")
{
   switch($IPS_VALUE)
   {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}

function Ein()
{
    IPS_SetVariableProfileAssociation("Toggle", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("Toggle", 1, "        Ein       ", "", 0xFFA943);
    HM_WriteValueBoolean(21062 /*[Schlafz.\Schlaf-Licht]*/ , "STATE", true);
}

function Aus()
{
    IPS_SetVariableProfileAssociation("Toggle", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("Toggle", 0, "       Aus       ", "", 0x555555);
    HM_WriteValueBoolean(21062 /*[Schlafz.\Schlaf-Licht]*/ , "STATE", false);
}

wird über Int-Variable und dann eigenes Profil=Toogle und dann eingene Aktion ausgelöst.

Und nun?

Wenn ich dann selbes Script nochmal auslösen lasse, mit Ereignis: Bei Variablenänderung der Variable „Schlaf.\Schlaf-Licht\STATE“ geht es auch nicht.

Wie gesagt total der Durchblick futsch… finde leider nix komplettes dazu.
Hiiiilllfffeee:(:mad::frowning:

Ich hänge mich mal mitlesen dran, da ich gerade das selbe Problem habe.

Ich möchte eine Liste von Relais im Webfront als Block mit Touchbuttons darstellen und diese sollen entsprechend ihres Schaltzustandes eben ein/aus anzeigen und im Ein-Zustand farblich hervorgehoben sein.
Die Schaltfunktion soll im Webfront erhalten bleiben, die Hauptschaltfunktion erfolgt aber von extern oder per Script ( beides möglich ).

Mit dem Beispiel oben habe ich es nicht hinbekommen. Vielleicht wäre jemand so nett und könnte den Weg dahin mal „Anfängertauglich“ aufschreiben.