Toggle-Button

Moin,
ich habe das Script aus diesem Thread https://www.symcon.de/forum/threads/33939-Schalter-visualisieren-nur-ein-Button-f%C3%BCr-An-Aus-nicht-zwei?highlight=toggle+button zum Thema Toggle-Button ausprobiert.

Die Funktionalität stimmt/klappt.

Leider ist der Button bei der Variante „automatisch“ Zwischenablage01.jpgfast durchsichtig, während er bei der Variante „manuell“ Zwischenablage02.jpgkräftig ist. Ich finde den Fehler nicht. Woran liegt es?

Danke für eure Hinweise.

Grß
Michael

if($_IPS['SENDER'] == "Execute")
{
    $value = IPS_GetVariableProfile("EinAus");
    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("EinAus", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("EinAus", 1, "        automatisch       ", "", 0x00FF00);
 //SetValue(HIERDEINEVARIABLE , 1); // hier deine Variable die du EIN schalten möchtest
}

function Aus()
{
   IPS_SetVariableProfileAssociation("EinAus", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("EinAus", 0, "       manuell       ", "", 0xFF0000);
// SetValue(HIERDEINEVARIABLE , 0); // hier deine Variable die du AUS schalten möchtest
}



gelöst - ich weiß zwar nicht warum, aber Phänomen ist weg. :confused::frowning:

Hey vielleicht kannst du mir aber trotzdem helfen.

Kannst du kurz eine kleine Anleitung schrieben wie das mit dem Toggle Button geht?

Ich stehe auf dem Schlauch. Bei mir geht es nicht ;(

Am Beispiel einer schaltbaren Steckdose an der eine kleine Lampe hängt :wink:

  1. Anlegen einer Integer-Variable unterhalb des Objektes:

Bildschirmfoto 2017-09-12 um 11.40.43.png

  1. Variablen-Profil für Integer an die Integer-Variable hängen:

  1. Skript unterhalb der Variable anlegen und Variablen-Profil und Skript verknüpfen:

Bildschirmfoto 2017-09-12 um 11.43.12.png

  1. Im Skript die ID’s der Komponenten anpassen:

<?
/**********************************************************
 *
 * Toggle-Button für Lampen
 * 1. Integer-Variable anlegen unterhalb des Devices (z.B. Lampe)
 * 2. Variablen-Profil anlegen (Integer mit Range 0-1, Schrittweite 1)
 * 3. Skript an Integer-Variable verknüpfen (Eigene Aktion)
 *
 **********************************************************/

 // Variablen-ID der Integer-Variable aus 1.
 $myIntValID = 54049;
 // Names des Variablen-Profils aus 2.
 $myVariableProfile = "ToggleButton";
 // ID eines Homematic-Devices, falls dies gleich geschalten werden soll
 $myHomeMaticDevice = 14286;


if($_IPS['SENDER'] == "Execute")
{
    $value = IPS_GetVariableProfile($myVariableProfile);
    switch($value['Associations'][0]['Value'])
    {
        case 0:
        toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice);
        break;
        
		case 1:
        toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice);
        break;
    }
}

if($_IPS['SENDER'] == "WebFront")
{
   switch($_IPS['VALUE'])
    {
        case 0:
          toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice);
          break;
        case 1:
          toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice);
          break;
    }
}


function toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice)
{
    // Delete VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, 0, "", "", -1);
	// Set new VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, 1, "   An   ", "", 0x00FF00);
	// Switch Bulb
	HM_WriteValueBoolean($myHomeMaticDevice, "STATE", true);
	// Set Value Integer
 	SetValue($myIntValID , 1); 
}

function toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice)
{
    // Delete VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, 1, "", "", -1);
    // Set new VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, 0, "       Aus       ", "", 0xFF0040);
	// Switch Bulb
	HM_WriteValueBoolean($myHomeMaticDevice, "STATE", false);
	// Set Value Integer
    SetValue($myIntValID , 0); 
}

?>

sieht dann bei mir so aus:


Grüsse,

Mike

je nach HM-Device muss diese Zeile angepasst werden:

An/Aus:


HM_WriteValueBoolean($myHomeMaticDevice, "STATE", false);

Dimmer 0% bzw. 100%


HM_WriteValueFloat($myHomeMaticDevice, "LEVEL", 100);

Habe es hinbekommen.

Vielen Lieben Dank für diese Anleitung.

:wink:

jetzt habe ich es kapiert ^^

Danke

Grüße

Hallo zusammen,

in Zusammenarbeit mit der Community ist noch ein zweites Skript entstanden, welches ich gerne mit
euch teile, da ich dieses nun vornehmlich für alle Schalter verwende :wink:

Was ist der Unterschied? Anstatt der Integer-Variable wird eine Boolean-Variable verwendet, damit auch
in der mobile App die Anzeige ansprechend bleibt (siehe Thread: 35670-Toggle-Button-WebFront-iOS).

Viel Spass damit.

<?
/**********************************************************
 *
 * Toggle-Button für Lampen
 * 1. Boolean-Variable anlegen unterhalb des Devices (z.B. Lampe)
 * 2. Variablen-Profil anlegen (TRUE, FALSE schon mal vorbelegen, Icon Power)
 * 3. Skript an Integer-Variable verknüpfen (Eigene Aktion)
 *
 **********************************************************/

 // Variablen-ID der Boolean-Variable aus 1.
 $myBooleanValID = 38086;
 // Names des Variablen-Profils aus 2.
 $myVariableProfile = "ToggleSwitch";
 // ID eines Homematic-Devices, falls dies gleich geschalten werden soll
 $myHomeMaticDevice = 14286;

 $value = IPS_GetVariableProfile($myVariableProfile);
	
 switch(GetValueBoolean($myBooleanValID)){
    case false:
    toggleOn($myBooleanValID, $myVariableProfile, $myHomeMaticDevice);
    break;
    
	case true:
	toggleOff($myBooleanValID, $myVariableProfile, $myHomeMaticDevice);
    break;
 }




function toggleOn($myBooleanValID, $myVariableProfile, $myHomeMaticDevice)
{
    //IPS_LogMessage("toggleIT", "called toggleOn");
	
	// Delete VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, FALSE, " ", "", -1);
	// Set new VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, TRUE, "   An   ", "", 0x00FF00);
	// Switch Bulb
	HM_WriteValueBoolean($myHomeMaticDevice, "STATE", true);
	// Set Value Boolean
 	SetValue($myBooleanValID , TRUE); 
}

function toggleOff($myBooleanValID, $myVariableProfile, $myHomeMaticDevice)
{
    //IPS_LogMessage("toggleIT", "called toggleOff");
	
	// Delete VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, TRUE, " ", "", -1);
    // Set new VariableProfileAssociation
	IPS_SetVariableProfileAssociation($myVariableProfile, FALSE, "       Aus       ", "", 0xFF0040);
	// Switch Bulb
	HM_WriteValueBoolean($myHomeMaticDevice, "STATE", false);
	// Set Value Boolean
    SetValue($myBooleanValID , FALSE); 
}

?>
1 „Gefällt mir“

Super Beispiele!

Thx

G:

Hallo

funktioniert das auch bei KNX Adresen?

Mit freundlichen Grüßen

So wie es dort steht, nicht.

Hilf mir mal etwas auf die Sprünge, Christoph (ich habe ja von KNX keine Ahnung).
Ich kann die (beide) Skripte problemlos auf LCN ‚umbauen‘ indem ich das HomeMaticDevice und das Kommando entsprechend austausche.
Das muss doch auch mit KNX gehen, oder?

Grüße, Uwe - dem solche Skripte (immer noch) einige Stunden „Entwicklung“ ersparen, danke dafür :loveips:

Hallo Uwe,

ich hab mir die Skripte zwar nicht im Detail angeschaut, aber wenn man die Homematic-Kommandos gegen die KNX-Kommandos tauscht. Zb Eib_Switch, dann sollte das genauso gehen.

Viele Grüße,
Jörg

Das beruhigt mich, Jörg. Danke :smiley:
Wobei Christoph’s Aussage ja nicht falsch ist. So wie es da steht geht es nur mit Homematic …

LG, Uwe

Genau so ist es.

Ich war richtig froh diesen Beitrag gefunden zu haben.
Habe alles so gemacht wie beschrieben aber ich bekomme alles andere als einen Toggle Button… :frowning:

Dieses Script braucht diese Integervariable mit dem selbst erstelltem Profil „Taster“ als Actionscript.
Dieses noch mit den Befehlen der zu schaltenden Instanzen in den CASE Bedingungen füllen und es müsste laufen.

  <?

if($_IPS['SENDER'] == "Execute")
{
    $value = IPS_GetVariableProfile("Taster");
	//print_r($value);
    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("Taster", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("Taster", 1, "        automatisch       ", "", 0x00FF00);
 //Set xyz  , 1); // hier deine Instanze die du EIN schalten möchtest
}

function Aus()
{
   IPS_SetVariableProfileAssociation("Taster", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("Taster", 0, "       manuell       ", "", 0x555555);
//Set xyz  , 0); // hier deine Instanze die du AUS schalten möchtest
}

?> 

Hier noch kurz der Abschnitt aus unserem Grundlagen Video, warum wir keine Taster bzw. Toggle Buttons anbieten: IP-Symcon Grundlagen Webinar - Teil 2 - YouTube

paresy

Dann muss in diesen Fall aber noch ein Ereigniss auf den zu schaltenen Ausgang erstellt werden,
denn wenn der Taster direkt geschalten wird ist die Anzeige im Webfront falsch.
In diesen Ereigniss wird nur die neu erstellte Variable geändert und das Profil.

VG
Ralf

Für mich ist es klar, das Beispiel von mir ist im Moment nur ein Tooglebutton ohne Instanz, ich würde es nicht Taster nennen wollen.

Eher ein Button im Webfront mit einer einzigen Anzeige und, meiner einer Meinung, ich finde sowas schon ok und nicht unübersichtlich, oder undefiniert… jeder nach seiner Fashion :wink: man kann muß aber nicht.
Gruß Helmut

@paresy

warum wir keine Taster bzw. Toggle Buttons anbieten

und Antwort :

es hat einen ganz bestimmten Grund

Bei Ansteuerungen von Aktoren sehe ich das noch ein. Aber!

Wie sieht es zum Beispiel mit einem „Resettaster“ aus. Wenn ich z.B. irgendwo einen Fehler habe den ich nur quittieren oder zurücksetzten will ist doch ein EIN/AUS im Webfront irritierend. Ein Reset Schaltfläche die im Fehlerfall rot ist, durch drücken eine Variable zurücksetzt und grün wird ist doch nicht verwirrend.
Wie würdet ihr das denn lösen?