if($IPS_SENDER == „Execute“)
{
echo "Diese Skript kann so nicht ausgeführt werden.
";
echo „Bitte triggern sie das Skript über eine Float Variable“;
}
if($IPS_SENDER == „Variable“)
{
if(!is_float($IPS_VALUE))
{
die(„Skript kann nur Float Variablen verarbeiten!“);
}
$vid = CreateVariableByName($IPS_VARIABLE, „Position“, 1);
$auf = 20; // bis 20 Prozent > AUF
$zu = 80; // ab 80 Prozent > ZU
// sonst > MITTE
$pos = $IPS_VALUE*100;
if(($pos > 100) || ($pos < 0))
{
die("Position out of bounds (".$pos."), Variable: [".IPS_GetLocation($IPS_VARIABLE)."]");
}
if ($pos <= $auf) {
SetValueInteger($vid,0);
} elseif ($pos >= $zu) {
SetValueInteger($vid,2);
} else {
SetValueInteger($vid,1);
}
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, „This Variable was created by Script #$IPS_SELF“);
}
return $vid;
}
zu verwenden und erhalte für Zeile 6 und 12 Fehlermeldungen undefiened Variable???
Läuft das Script in dieser Form auf dem PI nicht mehr???
Michael
Hallo Ralf,
Danke erstmal für die Antwort. Hab aber leichte Probleme mit dem Syntax. Kannst du mir vielleicht mal helfen?
$_IPS…
Wäre sehr nett.
Michael
Beim Start eines PHP-Skriptes unter IPS steht immer das Array ‚$_IPS‘ zur Verfügung mit unterschiedlichen Keys, je nachdem wie und von welcher Komponente es gestartet wurde, siehe Systemvariablen
Wurde z.B. das Skript von einem anderen Skript mit IPS_RunScriptEx aufgerufen, sind auch darin die Keys des übergebenen Array enthalten.
Ich hab mir mal ein Gerüst für ein solches Skript zusammengestellt, sollte weiterhelfen:
<?php
/*
* @file Status.ips.php
* @author Harald Hertlein
* @version
* Version <br/>
*
*
*/
// für Testlauf:
// $_IPS['SENDER'] = 'RunScript';
// $_IPS['Cmd'] = 'BewegungsAlarm';
// $_IPS['SubCmd'] = 'AUS';
// print_r($_IPS);
switch ($_IPS['SENDER']) { // woher aufgerufen ??
// ---- A. Skriptauslöser Socket (RegisterVariable)
case "RegisterVariable": /* Wenn das Skript durch eine RegisterVariable Instanz ausgeführt wurde
Systemvariable Bedeutung
$_IPS['VALUE'] Wert des Puffers, der vom Splitter oder I/O Modul empfangen wurde
$_IPS['INSTANCE'] ID der auslösenden RegisterVariable Instanz
*/
break;
// ---- B. Skriptauslöser Konsole (Direktausführung)
case "Execute":
break;
// ---- X. Skriptauslöser ein Variablenereignis
case "Variable": /* Wenn das Skript durch ein Variablenereignis ausgeführt wurde
Systemvariable Bedeutung
$_IPS['VALUE'] Wert der auslösenden Variable zum Auslösezeitpunkt
$_IPS['OLDVALUE'] Wert der auslösenden Variable vor Auslösezeitpunkt
$_IPS['VARIABLE'] ID der auslösenden Variable
$_IPS['EVENT'] ID des auslösenden Ereignisses
$_IPS['TRIGGER'] Typ des auslösenden Ereignisses
*/
break;
// ---- X. Skriptauslöser ein zyklisches Ereignis
case "TimerEvent": /* Wenn das Skript durch ein zyklisches- oder Wochenplan-Ereignis ausgeführt wurde
Systemvariable Bedeutung
$_IPS['EVENT'] ID des auslösenden Ereignisses
$_IPS['TARGET'] ID der übergeordneten Instanz
$_IPS['ACTION'] ID der aufzurufenden Aktion (nur Wochenplan Ereignis)
*/
break;
// ---- X. Skriptauslöser eine Statusveränderung einer Instanz
case "StatusEvent": /* Wenn das Skript durch eine Statusveränderung einer Instanz ausgeführt wurde
Systemvariable Bedeutung
$_IPS['INSTANCE'] InstanzID zur Statusänderung
$_IPS['STATUS'] Status der Instanz. Eine Auflistung ist hier zu finden: IPS_GetInstance
$_IPS['STATUSTEXT'] Kurztext passend zum Status
*/
break;
// ---- X. Skriptauslöser durch Abrufen des Skriptes über den Webserver
case "WebInterface": /* Wenn das Skript durch den Webserver ausgeführt wurde
Systemvariable Bedeutung
$_IPS['INSTANCE'] ID der auslösenden WebServer Instanz
$_SERVER['PHP_SELF'] Datei/Pfad des gestarteten Skriptes
$_SERVER['PHP_AUTH_USER']....
*/
break;
// ---- X. Skriptauslöser Beim Aufruf eines Skriptes
case "WebFront": /* Wenn das Skript durch das WebFront ausgeführt wurde
Systemvariable Bedeutung
$_IPS['INSTANCE'] ID der auslösenden WebServer Instanz
$_IPS['CONFIGURATOR'] ID des aktuell genutzten Konfigurators
$_IPS['VALUE'] Neuer Wert der Variable
$_IPS['VARIABLE'] ID der zu ändernden Variable
*/
break;
// ---- C. Skriptauslöser anderes Skript, ggf. Scheduler
case "RunScript": /* Wenn das Skript durch eine IPS_RunScript Funktionen ausgeführt wurde
*/
switch ($_IPS['Cmd']) {
case 'BewegungsAlarm' :
//BewegungsAlarm.SubCmd
switch ($_IPS['SubCmd']) {
//BewegungsAlarm.EIN
case 'EIN' :
break;
//BewegungsAlarm.AUS
case 'AUS' :
break;
//BewegungsAlarm....
default:
}
// noch switch ($_IPS['SubCmd'])
//BewegungsAlarm.Ende
case 'HB-FBF' :
break;
default:
} // Ende Switch $_IPS['EvtNa'
break; // Ende RunScript
default:
} // Ende switch $_IPS['SENDER']
?>
Hallo leider eine Fehlaussage schaffe es nicht das Script umzustricken.
Bin etwas sauer aber naja habs ja selbst gewollt.
Jetzt liegt der Fehler in Zeile 18.
if($_IPS[‚SENDER‘] == „Execute“)
{
echo "Diese Skript kann so nicht ausgeführt werden.
";
echo „Bitte triggern sie das Skript über eine Float Variable“;
}
Anscheinend besteht die Absicht, jedesmal wenn sich eine Variable meldet nochmal eine neue Variable anzulegen (???)
Funktioniert aber so sowieso nicht:
Dem ersten Statement ‚if($_IPS[‚SENDER‘] == „Variable“)‘ folgt eine öffnende geschweifte Klammer ({), d.h. beim Zutreffen der Bedingung wird der Block bis zur schliessenden geschweiften Klammer (}) ausgeführt
Nach dem Statement ‚if(!is_float($_IPS[‚VALUE‘])‘ steht aber keine öffnende geschweifte Klammer; beim Zutreffen der Bedingung wird nur das nächste Statement (oder das in der nächsten Zeile ?) ausgeführt.
Das ist doch wohl nicht gewollt!
Das Anlegen von Variablen bin ich außerdem nur im „Execute“-Block gewohnt: das Skript wird einmalig von der Konsole gestartet und damit die Variablen initiiert.
Hallo,
so für alle die auch Probleme mit PHP haben. Ich habe mir nach viel Mühe erlaubt das alte Steiner Script Status Jalousien im Dashboard an die neue Version anzupassen.
Die Moderatoren könne es ja dann gegen das alte austauchen.
if($_IPS[‚SENDER‘] == „Execute“)
{
echo "Diese Skript kann so nicht ausgeführt werden.
";
echo „Bitte triggern sie das Skript über eine Float Variable“;
}
if($_IPS[‚SENDER‘] == „Variable“)
{
if(!is_float($_IPS[‚VALUE‘]))
{
die(„Skript kann nur Float Variablen verarbeiten!“);
}
$vid = CreateVariableByName($_IPS[‚VARIABLE‘], „Position“, 1);
$auf = 20; // bis 20 Prozent > AUF
$zu = 80; // ab 80 Prozent > ZU
// sonst > MITTE
$pos = $_IPS['VALUE']*100;
if(($pos > 100) || ($pos < 0))
{
die("Position out of bounds (".$pos."), Variable: [".IPS_GetLocation($IPS_VARIABLE)."]");
}
if ($pos <= $auf) {
SetValueInteger($vid,0);
} elseif ($pos >= $zu) {
SetValueInteger($vid,2);
} else {
SetValueInteger($vid,1);
}
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, „This Variable was created by Script #$IPS_SELF“);
}
return $vid;
}