Praxis – $IPS_SENDER / $IPS_VARIABLE

Das folgende Beispiel zeigt, wie die beiden globalen Variablen:

$IPS_SENDER und $IPS_VARIABLE sinnvoll einzusetzen sind.

Aufgabe:
Verschiedene Temperaturwerte sollen in nur einem Skript erfasst,
und in einzelne Dateien auf die Festplatte abgespeichert werden.

Lösung:

Die Variable „$IPS_SENDER” in der IF-Bedingung sorgt dafür, dass nur Daten geloggt werden,
wenn eine Variablenänderung oder Update vorliegt.
Wird das Skript manuell (Strg + E) gestartet, ist die IF-Bedingung somit nicht erfüllt und
keine Daten werden abgespeichert.

Der Variable „$IPS_VARIABLE” wird automatisch der Variablenname seitens IP-Symcon zugeordnet,
welches das Skript getriggert hat.
Diese werden in „Triggered Variables“ (Strg + T) hinzugefügt – siehe Bild
und müssen in diesem Beispiel das Format „Float“ haben.


<?
/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/
//File: Temp_Log_All.ips.php

if ($IPS_SENDER=="Variable") {
   $temperatur=GetValueFloat($IPS_VARIABLE);
   $temperatur=number_format($temperatur, 1, ".", "." );
   $handle=fopen("D:\Daten\Log\TEMP_" .$IPS_VARIABLE. ".txt", "a");
   fwrite($handle, date("d.m.y").";". date("H:i:s").";".$temperatur."
");
   fclose($handle);
}
?>

PS:
Die im o.g. Skript verwendete Instance–ID muß für Ihre Umgebung angepasst werden.
Benutzen Sie die Tastenkombination CTRL + I um InstanceID Selector zu öffnen und wählen Sie die entsprechende Instance aus.
Bei Fragen, Unklarheiten, Anregungen usw. bitte hier posten!

temp_trigger.jpg

Ich habe das mal so probiert, und logischerweise sagt mir das script folgende meldung : „Notice: Undefined variable: IPS_VARIABLE in line xx“

Sorry, hier fehlt mir ein Stück vom Film. Irgendwo muss ich diese Variable dem Script mitteilen ??

Ich verweise nochmal gerne hier:

und
http://www.ipsymcon.de/wiki/index.php/Main_Userinterface#Variablen_Trigger

Grüße, paresy :wink:

In Bezug auf meinen Fehler (es war schon spät - billige Ausrede, ich weiss) müsste das von Steiner ja auch falsch sein, nicht? Hier hatte ich nämlich abgekuckt

if ($IPS_SENDER= „Variable“)…

Also, nochmal, ich habe das Grundprinzip verstanden, nur komme ich mit der Syntax nicht klar:

Hier

$variable = GetValueString($IPS_VARIABLE);
echo $variable;

Hier müsste ja dann in der „$variable“ der Name der Variablen stehen, der das Script getriggert hat, oder?

Und dennoch: Notice: Undefined variable: IPS_VARIABLE in line xx

Bin ich dann b´deppert, oder was?

OK, ich stelle die Frage einfach mal anders:

Gehen wir von steiners script aus:

if ($IPS_SENDER= "Variable") {
   $temperatur=GetValueFloat($IPS_VARIABLE); 

wie müsste ich das ändern, sodass in $temperatur jetzt z.B „Temp_POOL“ stehen würde ?

Öhm… ja… steiner Beispiel war irgendwie falsch!?.. Ich habe es mal korrigiert.

Guck mal hier: Olli hatte da mal nen recht tolltes Script:

Grüße, paresy

moment mal:


if ($IPS_SENDER= "Variable") { 

lauft NUR wenn der script uber eine IPS-variabele gesteuert wird.


$temperatur=GetValueFloat($IPS_VARIABLE); 

wieso weisst du das da uberhaupt einem float wert kommt?
besser wäre:


switch $IPS_VARIABELE
case "schrank_ist_temp_meiner_whiskey"):
    //ist ne float wert
    //offne onbedingt die turen
    TTS_speak([TTS-id],"Guyabano  ..  DU HASST DURST");
    break;
case "die_frau_offnet_die_tur":
    //dies ist ein boolean
    SetValueBoolean("deine-frau-hat-ein-problem", "$IPS_VARIABLE"); 
    FS20_SwitchDuration([id-des-repellenter-kicker],true,1);
    break;
case "ich-binn-es":
    //dies ist ein integer
    SetValueString("Darf-ich-mein-haus-noch-verlassen", "Ich bin um : " . GetValueString([id-des-alco-testers (gibt %-werte raus)],$IPS_VARIABELE) . " prozent beschwippst. Neeh besser nicht ;-\)");
    }
}

bestimmt mal sensoren ankaufen und probieren :stuck_out_tongue:

Fredje

Danke Jungs, Paresy und Fredje. Viele tolle hilfe, und ich habe es auch total verstanden, nur leider geht es nicht. Hat jemand mal sein Script selbst getestet?

Fall genommen, du fragst die IPS_VARIABLE auf eine Bool-Variable ab, und diese Bool-Variable triggerst du aus dem IPS-Designer raus über ein Häckchen-Fenster (Check-Box), dann reagiert in deinem Script nix. Auf jeden Fall bei mir !

mfG Franz