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 Dank
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:
Wie immer ;), Leerzeichen/-zeile vor oder nach <>.
Wir sollten einen Counter einführen.
Ich zähl’ doch schon… ähh… Dreihundertsiebenundneuzieg und 1 oder so
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
- 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:
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