Trigger Rolladen

Hallo,
hab mal ne Frage. Baue mein Dashboard neu auf nach nem Umzug auf den Raspi. Nun versuche ich das Script
// © by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: „Bei Variablenänderung“ > „LEVEL“

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???:confused:
Michael

Das Script wird laufen, wenn du die Fehler beseitigst ;).

Seit gefühlten hundert Jahren gibt es die Variablen $IPS_SENDER, $IPS_… nicht mehr.

Ersetzt du sie gegen $_IPS[‚SENDER‘], … hast du eine gute Chance :D.

https://www.symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

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']


?>


Viele Grüsse
Harald

Hallo und danke für die Unterstützung, damit komme ich klar.!!!
Michael

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.

<?
// © by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: „Bei Variablenänderung“ > „LEVEL“

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‘])

$VarID_52709 = IPS_CreateVariable(3);
IPS_SetName($VarID_52709, „Position“);
IPS_SetParent($VarID_52709, 39212 /[Jalousien\Jalousie Bad\BLIND\LEVEL]/); // Variable einsortieren

$auf = 20;    // bis 20 Prozent &gt; AUF
$zu = 80;    // ab 80 Prozent &gt; ZU
                // sonst &gt; MITTE

$pos = $_IPS['VALUE']*100;

if(($pos &gt; 100) || ($pos &lt; 0))
{
   die("Position out of bounds (".$pos."), Variable: [".IPS_GetLocation($_IPS['VARIABLE'])."]");
}

if ($pos &lt;= $auf) {
    SetValueInteger($vid,0);
} elseif ($pos &gt;= $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;
}

?>
ich weiss nicht was ich unter §VarID eintragen soll. Ich bin einfach zu doof dafür.:banghead:
Michael

Ich denke, Du brauchste einen PHP-Kurs, den gibts aber nicht in diesem Forum:p

Dieses Skript verstehe ich allerdings auch nicht:

if($_IPS['SENDER'] == "Variable")
{
if(!is_float($_IPS['VALUE'])


$VarID_52709 = IPS_CreateVariable(3);
IPS_SetName($VarID_52709, "Position");
IPS_SetParent($VarID_52709, 39212 /*[Jalousien\Jalousie Bad\BLIND\LEVEL]*/); // Variable einsortieren
...

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.


<?
// © by IP-Symcon 2008
// lauffähig ab Version 4.0
// Trigger: „Bei Variablenänderung“ > „LEVEL“

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 &gt; AUF
$zu = 80;    // ab 80 Prozent &gt; ZU
                // sonst &gt; MITTE

$pos = $_IPS['VALUE']*100;

if(($pos &gt; 100) || ($pos &lt; 0))
{
   die("Position out of bounds (".$pos."), Variable: [".IPS_GetLocation($IPS_VARIABLE)."]");
}

if ($pos &lt;= $auf) {
    SetValueInteger($vid,0);
} elseif ($pos &gt;= $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;
}

?>
Habs auch probiert geht. Michael