Toggle Button

Ne, geht nicht.

wichtig

Zahlen auf der Numerik Tasten eingeben.

Also bei mir funktioniert das. Aber wie bereits gesagt muss die Eingabe über den Ziffernblock erfolgen.

Geht doch, … (NUM_LOCK)

vielen Danktog4.PNG

Jemand einen Tipp für mich, ich teste gerade das Skript bzw. habe es angepasst an die neue Schreibweise der Systemvariablen. (Sind nur zwei gewesen).

Problem: Im Webfront wird alles soweit ausgeführt. Beim betätigen des Buttons erhalte ich jedoch eine Meldung „Fehler“.
Das Skript läuft aber ohne Probleme druch im Debugger bzw. er meldet keine Fehler.


 <?

if($_IPS['SENDER'] == "WebFront")
{
    switch($_IPS['VALUE'])
    {
        case 1:
        IPS_SetVariableProfileAssociation("Heizungsalarm", 0, "Ein", "", 0xFFA943);
        IPS_SetVariableProfileAssociation("Heizungsalarm", 1, "", "", -1);
		SetValue(24670 /*[Test\Button]*/, 0);
        break;
		
        case 0:
        IPS_SetVariableProfileAssociation("Heizungsalarm", 1, "Aus", "", -1);
        IPS_SetVariableProfileAssociation("Heizungsalarm", 0, "", "", -1);
		SetValue(24670 /*[Test\Button]*/, 1);
        break;
    }
}

?> 

Screenshot:
webfrontfehler.png

Wie immer ;), Leerzeichen/-zeile vor oder nach <>.

@Ralf:
Viele Dank. :slight_smile:

Wir sollten einen Counter einführen. :wink:

Ich zähl’ doch schon… ähh… Dreihundertsiebenundneuzieg und 1 oder so :smiley:
Michael

Hallo zusammen,

ich schäm mich. Ich bekomm das scheinbar triviale Script hier nicht zum laufen.

<?

if($_IPS['SENDER'] == "Execute")
{
    $value = IPS_GetVariableProfile("Taster_test");
    echo $value['Associations'][0]['Value'];
    switch($value['Associations'][0]['Value'])
    {
        case 0:
            Ein();
            break;
        case 1:
            Aus();
        break;
    }
}

if($_IPS['SENDER'] == "WebFront")
{
    switch($_IPS['VALUE'])
    {#echo  $_IPS['VALUE'];
        case 0:
            Ein();
            break;
        case 1:
            Aus();
        break;
    }
}

function Ein()
{
    IPS_SetVariableProfileAssociation("Taster_test", 0, "", "", -1);
    IPS_SetVariableProfileAssociation("Taster_test", 1, "  öffnen  ", "", 0xFFA943);
    SetValue(48204 /*[Test\WF-Taster\TasterTest]*/, 1);
}

function Aus()
{
    IPS_SetVariableProfileAssociation("Taster_test", 1, "", "", -1);
    IPS_SetVariableProfileAssociation("Taster_test", 0, "  schliessen  ", "", 0x555555);
    SetValue(48204 /*[Test\WF-Taster\TasterTest]*/, 0);
}

?>

Habs zum testen um die $_IPS[‚SENDER‘] == „Execute“ erweitert.

Egal wie ich das Script ausführ (per Button im WF oder in der Konsole):

Die Variable im WF aktualisiert nicht richtig:

  • beim Klick auf öffnen sollte sich der Button auf schliessen mit einer anderen Buttonfarbe ändern. Leider wird nur der Hintergrund geändert.
    nach Aktualisierung der Seite ists richtig.
  • beim Klick auf schliessen ändert sich der Button garnicht. erst nach Aktualisierung der Seite ists richtig.

Ein Folgefehler ohne WF-Aktualisierung ist dann z.B. (je nach Variablenstatus 0,00 oder 1,00)

Warning: Cannot find association for deletion with value x,00000 in script …

In beiden Fällen wird das WF erst nach Aktualisierung der Seite richtig aktualisiert. Dann kommt natürlich auch der Fehler nicht mehr.

Habs sowohl mit Chrome als auch mit FF gestestet.

Der IPS-Dienst wurde neu gestartet, ein Update auf die aktuelle 4.1 Stable wurde durchgeführt, der IPS-Host wurde neu gestartet.

Bin auf W10Pro, IP-Symcon 4.10, 06.02.2017, ecc696b9a833

Kann mir bitte jemand helfen das Problem zu lösen? Wanns bei allen Anderen funktioniert kanns ja nicht viel sein.

Hallo Wolfgang,

schau mal, ob bei Dir in der Webfront-Konfiguration unter Sicherheit bei „Editor aktivieren“ ein Haken gesetzt ist, dann sollte es funktionieren.

Viele Grüße…

Hallo, danke für das Script. Funktioniert soweit. Wie kann ich es ermöglichen, dass ich es auch via einem PHP Script befindlich im Webfront/User/Scripts Ordner liegt starten kann? Wenn ich das ganze via IPS_Runscript mache sehe ich zwar, dass das Script gestartet worden ist jedoch schaltet sich das licht nicht an und aus. Wenn ich das manuell in der Management Console starte funktioniert es :O. Hab es gerade mal via Webhook aufgerufen… funktioniert leider auch nicht. Irgendwo muss ich doch was falsch machen.

Was kann ich denn außer if($IPS_SENDER == „Variable“) Webfront und Execute noch einfügen?

Ich hab jetzt mal als IPS Sender WebHook eingetragen und siehe da, es funktioniert =)… Cool

$IPS_SENDER solltest Du heute am Besten gar nicht mehr einfügen.

hat sich erledigt, habe den Fehler gefunden

Kann man den Toogle Button auch mit 3 Werten anlegen?

An / Aus / Automatik

richimaint

  1. April?

Naja, für ne Boolean musst Du Dir nen speziellen Kompressionsmodus entwickeln aber mit einer Integer könnte das erfolgreich sein.

Der Toogle Button ist immer ein Int.
Weil hier ja die Assoziation geändert wird und nur eine Schaltfläche dargestellt wird.
Also noch einen Case 2 und die passenden IPS_SetVariableProfileAssociation für den Wert 2 überall ergänzen.
Außerdem das SetValue so ändern im Case 1 das hier nicht 0 sondern 2 gesetzt wird und im neuen Case 2 dann SetValue auf 0.
Michael

Also irgenwie will das nicht. Ich bitte mal um Hilfe!
Integer Variable (10169) angelegt und auch das Variablen Profil „PhToogleAutomatik“ .

<?php
/**********************************************************
 *
 * 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 = 10169;
 // Names des Variablen-Profils aus 2.
 $myVariableProfile = "PhToogleAutomatik";
 // ID eines Homematic-Devices, falls dies gleich geschalten werden soll
 $myDevice = 21788;


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

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


function toggleOn($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 2, "", "", -1);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 0, "Ph Dosierung An", "", 0xFF0000);
    // Switch Bulb
    //ModBus_WriteCoil($myDevice, TRUE);
    // Set Value Integer
     SetValue($myIntValID , 0); 
}

function toggleOff($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 0, "", "", -1);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 1, "Ph Dosierung Aus", "", 0x00FF00);
    // Switch Bulb
    //ModBus_WriteCoil($myDevice, FALSE);
    // Set Value Integer
    SetValue($myIntValID , 1); 
}

function toggleAuto($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 1, "", "", -1);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 2, "Ph Dosierung Auto", "", 0x3333FF);
    // Switch Bulb
   // ModBus_WriteCoil($myDevice, FALSE);
    // Set Value Integer
    SetValue($myIntValID ,2); 
}

Danke
richimaint

Habe es soweit, nur sieht es im Webfront so aus:

image

image

image

Wie bekomme ich das hin, dass nur 1 Button zu sehen ist?

<?php
/**********************************************************
 *
 * 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 = 10169;
 // Names des Variablen-Profils aus 2.
 $myVariableProfile = "PhToogleAutomatik";
 // ID eines Homematic-Devices, falls dies gleich geschalten werden soll
 $myDevice = 21788;


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

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


function toggleOn($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 0, "", "", 0x000000);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 1, "Ph Dosierung Aus", "", 0xFF0000);
    // Switch Bulb
    //ModBus_WriteCoil($myDevice, TRUE);
    // Set Value Integer
     SetValueInteger($myIntValID , 1); 
}

function toggleOff($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 1, "", "", 0x000000);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 2, "Ph Dosierung Auto", "", 0x00FF00);
    // Switch Bulb
    //ModBus_WriteCoil($myDevice, FALSE);
    // Set Value Integer
    SetValueInteger($myIntValID , 2); 
}

function toggleAuto($myIntValID, $myVariableProfile, $myDevice)
{
    // Delete VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 2, "", "", 0x000000);
    // Set new VariableProfileAssociation
    IPS_SetVariableProfileAssociation($myVariableProfile, 0, "Ph Dosierung An", "", 0x3333FF);
    // Switch Bulb
   // ModBus_WriteCoil($myDevice, FALSE);
    // Set Value Integer
    SetValueInteger($myIntValID ,0); 
}

Ändere im Profil die Schrittweite auf 0.
Damit sind die Pfeile weg.
Und bei dem löschen der Assoziationen vom Profil einmal bei der Farbe -1 anstatt 0x000000 benutzen.
Michael