Wann wird Button aktiviert dargestellt

Hallo Spezialisten,
leider sind mir die Webfrontfunktionen nicht ganz klar.
Meine Variable kann sowohl über das Webfront (Toggle Button) gesteuert werden als auch ber einen Sensor.
Wenn ich nur im Webfront oder nur über den Sensor den zustand ändere, wird der Toggle button richtig dargestellt ( ein = aktiviert, aus = inaktiv ).
Der fehler tritt auf, wenn z.B. über das Webfront aktiviert wird und danach der Sensor die Variable deaktiviert. Dann wird die Variable zwar richtig geschaltet, aber der Button zeigt aktiviert aus an.:confused:
Kann mir jemand auf die Sprünge helfen?
richtig-ein.PNGrichti-aus.PNGfalsch.PNG

Hier ist das script


if($IPS_SENDER == "Variable")
{
    $value = IPS_GetVariableProfile("L-Buero");
    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("L-Buero", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("L-Buero", 1, "aus", "", 0x00ffff);
    setValue(45268 /*[Program\vTest]*/,false);
}

function Aus()
{
    IPS_SetVariableProfileAssociation("L-Buero", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("L-Buero", 0, "ein", "", 0x00ff00);
    setValue(45268 /*[Program\vTest]*/,true);
}

Kann mir niemand helfen, oder stelle ich meine Fragen zu blöd?
Vieleicht hilft eine kleine Ergänzung.

Ich möchte die Ingegervariable die das Aktionsscript auslöst über ein anderes Script verändern.

Das tue ich mit setValueInteger(29397 /[Program\Musik\vW-Bad-Laut]/,1);
Und genau dann kommt der oben beschriebene Fehler.

Hat jemand einen Tip für mich wo ich suchen muß?:confused:

Setze bei SetValue anstatt true/false, 1/0 ein, dann ist der Button immer aktiv da ausgewählt.

Hallo Rainer
ich dachte das hätte ich mit dem Befehl
SetValueInteger(…,0);
getan, oder verstehe ich da was falsch?

Davon sehe ich in deinem geposteten Script nichts oder hab ich was übersehen. Dort steht true und false.

Ah, Du meinst das aktionsscript. Ok, das versuche ich heute abend in meiner Steuerung.
In meiner Testumgebung geht Dein Tip.:stuck_out_tongue:
Danke schon mal für die Hilfe! Ich schreibe auf jeden Fall ob es auch da geht.

LG Ralph

Hallo Rainer,
schade das war es scheinbar nicht.
Ich schalte u.a. Hometronicaktoren und die benötigen true / false, mit 0/1 bekomme ich eine Fehlermeldung.

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

if($IPS_SENDER == "WebFront")
{
    $value = IPS_GetVariableProfile("L-Bad");
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}
if($IPS_SENDER == "Variable")
{
    $value = IPS_GetVariableProfile("L-Bad");
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        Ein();
        break;
        case 1:
        Aus();
        break;
    }
}

function Ein()
{
    IPS_SetVariableProfileAssociation("L-Bad", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("L-Bad", 1, "aus", "", 0x00ffff);
    HM_WriteValueBoolean(55389 /*[Hardware\Homematic-Hut-4fach\Bad-Laut]*/, "STATE", false); //Lautsprecher Bad ausschalten
}

function Aus()
{
    IPS_SetVariableProfileAssociation("L-Bad", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("L-Bad", 0, "ein", "", 0x00ff00);
    HM_WriteValueBoolean(55389 /*[Hardware\Homematic-Hut-4fach\Bad-Laut]*/, "STATE", true); //Lautsprecher Bad einschalten
}

Hast Du noch einen Tip für mich?

Was hast Du denn noch anzubieten. Eine klare Aussage wäre hier besser gewesen.

Ich war der Annahme, das dein obiges Script mit SetValue auf deinen Button zeigt. Da dem nun nicht so ist, musst Du dieses eben machen.

Hallo Rainer,
sorry wenn ich mich nicht klar ausgedrückt habe, aber ich verstehe es einfach nicht.
Hier nochmal was ich vorhabe.
Ich benutze das Toggel-Button-Script aus Eurem Forum und möchte damit meine Aktoren ( Hometronic ) steuern. Also habe ich den Befehl, den State zu ändern in die Funktion des Scripts gesetzt. Wenn ich nun über das Webfront schalte, wird der Aktor Zustand gesetzt ( true oder false) und der Button schaltet im Webfornt um. Soweit alles gut.
Nun will ich zusätzlich über ein zeitgesteuretes Script den aktor umschalten. Im Webfront möchte ich den Zusatnd dann auch so sehen, ( also der Toggel Button leutet „ein“, falls der Aktor über das Zeitscript eingeschaltet wurde ). Ich möchte aber die Möglichkeit haben, den Aktor über das Webfront wieder auszuschalten. ( das ganze natürlich auch umgekehrt, als Zeitscript hat ausgeschlatet, Einschaltmöglichkeit über das Webfront).
Lösen wollte ich das, indem ich die Webfrontvariable (Integervariable) über das Zeitscript ändere, also steht SetValueInteger(…,1) im Zeitscript.
Im bisherigen Dashboard waren meine Variablen Boolean und da hat es so funktioniert.
Oder mache ich da einen Denkfehler?

Lg Ralph

Hallo Ralph,

setzt mal das Setvalue hier mit rein.(ID deines IntegerButton im Webfront).

function Ein() 
{ 
    IPS_SetVariableProfileAssociation("L-Bad", 0, "", "", -1); 
    IPS_SetVariableProfileAssociation("L-Bad", 1, "aus", "", 0x00ffff);
    SetValue(49757 /*[Test\Button]*/, 1);
    HM_WriteValueBoolean(55389 /*[Hardware\Homematic-Hut-4fach\Bad-Laut]*/, "STATE", true); //Lautsprecher Bad ausschalten 
} 

function Aus() 
{ 
    IPS_SetVariableProfileAssociation("L-Bad", 1, "", "", -1); 
    IPS_SetVariableProfileAssociation("L-Bad", 0, "ein", "", 0x00ff00);
    SetValue(49757 /*[Test\Button]*/, 0);
    HM_WriteValueBoolean(55389 /*[Hardware\Homematic-Hut-4fach\Bad-Laut]*/, "STATE", false); //Lautsprecher Bad einschalten 
}  

Hallo Rainer,
bin gherade unterwags,probiere es aber morgen umgehend aus, melde mich dann,
Ralph

Hallo Rainer,
hab gerade Deine Vorschlag implementiert.
Leider fängt dann meine aktor an, in einer Endlosschleife ein /auszuschalten. Das kann ich nur unterbinden, wenn ich den Dienst beende.:confused::confused:
Was ich aber überhaupt nicht verstehe ist, wenn ich direkt aus der Baumstruktur den Wert meiner Webvariable schreibe, geht alles perfekt.
Gibt es einen Unterschied zwischen dem Befehl SetValue(…,$Wert) und dem „Wert schreiben“ über die Struktur?
Dabei macht es auch keinen Unterschied, ob ich SetValue() oder SetValueInteger() benutze.
Noch eine Ergänzung der Vollständigkeithalber:
Ich löse das aktionsscript über die Webvariable (im Variablen Profilfenster) aus und habe auch die Webvariable als auslöse Ereignis im Script eingesetzt ( bei Variaben änderung ).
Hast Du noch eine Idee für mich?
Bin echt ratlos.

Hallo Ralph,

Leider fängt dann meine aktor an, in einer Endlosschleife ein /auszuschalten.

Dann stimmt doch hier schon was nicht. Das SetValue, hat mit deinem Aktor überhaupt nichts zutun.

Ich löse das aktionsscript über die Webvariable (im Variablen Profilfenster) aus und habe auch die Webvariable als auslöse Ereignis im Script eingesetzt ( bei Variaben änderung ).

Warum nochmal als Ereignis ? Das macht schon die Übergabe im Profil als Aktion und zudem noch das SetValue.

Nachtrag: Deine Endlosschleife kommt von deiner Statusvariable der HM Instanz, weil Du diese als Trigger eingebunden hast. Das geht so nicht!

Hallo Rainer,
ich bin schonmal froh,dass Du meinen Fehler identifizert hast.

Deine Endlosschleife kommt von deiner Statusvariable der HM Instanz, weil Du diese als Trigger eingebunden hast. Das geht so nicht!

Wie muss ich das dann machen? Ich Triggere mein Aktionsscript über die aktion im Variablenprofil. Das habe ich verstanden.
Was ich aber scheinbar falsch verstanden habe ist der Aufruf „IPS_Sender == Variable“ im Script.
Wie wird in php die dazugehörige Variable identifizert, oder anderstherum gefragt, woher weis das Script welche Variable das ist? Leider versteh ich das auch in der Doku nicht wirklich.
Kannst Du mir das erkären?

Danke aber auf jedendall schonmal für deine Ausdauer!!

Hallo Ralph,

Was ich aber scheinbar falsch verstanden habe ist der Aufruf „IPS_Sender == Variable“ im Script.

Bei einer Variable ist es klar, bei mehreren, muss man hiermit $_IPS[‚VARIABLE‘] die ID festlegen.

Wir kommen so aber nicht weiter, da ich immer noch nicht verstanden habe was, wie Du erreichen willst.

Du hast im WF einen Integerbutton welcher einen HM Aktor ein/aus schaltet. Warum, nimmst Du nicht den Originalen Switchbutton der Instanz. Der hat zwar 2 Schalter aber Du brauchst das ganze Gedönse hier nicht.
Ansonsten, beschreib mal genau was Du erreichen willst, am besten mit allen Scripts/Trigger usw. was dazu gehört.

Ok, hier was ich möchte bzw habe.
Erst mal meine Baumstruktur:


Die Variable vW-Buero-Laut(14659) ist per link mit meinem Webfront verbunden.
Variable.PNG
Diese Variable wird einerseits im Webfront geschaltet. Sie soll als Toggel Button dargestellt werden.

Diese Variable löst dann mein Aktionsscript „as-Buero-Laut (20545)“ aus.

Bis hierher geht alles.

Ferner läuft bei mir u.A. ein Zeitscript sowie auch ein Script, was alles ausschaltet, wenn ich meine Wohnung abschliesse und wieder startet, wenn ich wieder aufschliesse.
Diese Scripte steuern meine Variable 14659 und sollen nun den Lautsprecher zu bestimmte Zeiten ausschalten.

     	case"23:15":	/*Luft1 Sonos Ausschalten*/
 	        setValue(42407 /*[Program\Fritzbox/Serversteckdose\v-WLAN0]*/,false);
           setValue(14659 /*[Program\Musik\vW-Buero-Laut]*/,1);/*Bürolautsprecher aus*/
           SetValue(28455 /*[Program\Musik\vW-Buero-Sonos]*/,1);/*Sonos Büro aus*/
           SetValue(48331 /*[Program\Musik\vW-Kueche-Sonos]*/,1);/*Sonos Küche aus*/

Wenn das Zeitscript die Variable ausgeschaltet hat, soll das im Webfront auch richtig dargestellt werden ( also Lautsprecher „an“ (Button Leutet „ein“, und wenn dann die Variable 14659 wieder auf aus gesetzt wurde, soll der Button „aus“ nicht aktiviert dargestellt sein). Ich möchte aber auch dannach noch den Lautsprecher über das Webfront wieder einschalten können, und auch dann soll der Button richtig dargestellt werden.

Eine dritte Möglichkeit die Variable zu verändern wird über eine Wandtaster ausgelöst.

 //sBuero-Taster schaltet variable durch Tasten RS 17.04.2013
 $Laut=getvalueinteger(14659 /*[Program\Musik\vW-Buero-Laut]*/);
 
 If($Laut == 1)
 {
   setValue(14659 /*[Program\Musik\vW-Buero-Laut]*/,0);
 }
 else
 {
   setValue(14659 /*[Program\Musik\vW-Buero-Laut]*/,1);
 }

Das Script 20545 aht aber bei mir nur auf Variablenänderung eragiert, wenn ich es auch mit der auslösenden Variable als Trigger verbunden habe.
Trigger.PNG
Wie schon gesagt, habe ich das ganze bisher im Dashboard gelöst. Nur waren die im Dashboard angezeigten Knöpfe mit bool. Variablen verbunden
Verstehst Du jetzt, was ich vorhabe?

Lg Ralph