Variablen aus anderen Scripten abfragen oder setzen

Hallo Zusammen,

Nachdem ich nun auch auf die V2 gewechselt habe, ich aber noch keine große Erfahrung mit den Scripten habe, bin ich auf folgendes Problem gestoßen.
Ich möchte meine Rolläden Automatisch (gesteuert mit Zeit und Helligkeit) runter und hoch fahren lassen. Das habe ich auch soweit hinbekommen.
Jetzt stellt sich mir nur ein Problem:
Bei der Terassentür möchte ich eine Sicherheitsfunktion einbauen, d.h. hier darf das Rollo nicht einfach runtergehen, da wir zu unterschiedlichen Zeiten noch draußen sitzen. Da ich nun keinen Bewegungsmelder einsetzen und auch keine Taster draußen montieren möchte, kam mir folgende Idee.
Das Rollo fährt zum ersten Zeitpunkt nur ein kleines Stück herunter, dann ist für 2 Min. Stop. Wenn innerhalb dieser Zeit kurz der innere Taster betätigt wird, wird der Schließvorgang abgebrochen und das Rollo fährt ggf. wieder hoch. Falls der Taster nicht betätigt wird, fährt das Rollo wieder ein Stück herunter so das man (zwar gebückt) immer noch die Möglichkeit hat, den inneren Taster zu erreichen und den Vorgang zu beenden. Falls innerhalb der nächsten 2 Minuten der Taster auch nicht betätigt wird, fährt das Rollo ganz runter.

Ich habe mir gedacht, das sich dieses am besten mit mehreren Scripten realisieren läßt.
Das erste wird gestartet und fährt ein kleines Stück runter.
Das zweite wird 2 Minuten später gestartet wenn nicht der Taster gedrückt wurde.
Das dritte wird wiederum 2 Minuten später gestartet wenn der Taster nicht gedrückt wurde.
Ein weiteres Script wird wird gestartet wenn der Taster betätigt wurde und das erste Script schon ausgeführt wurde, und setzt dann eine Variable die verhindert, das die folgenden Scripten (Rollo weiter runter) ausgeführt werden.
Die Abfrage und den Vergleich, der letzten Taster Betätigung und der aktuellen Zeit (daraus ergibt sich ja die verstrichene Zeit seit Tasterbetätigung) habe ich hinbekommen, jetzt habe ich nur das Problem, eine Variable im Script zu setzen und dieses an andere Scripte zu übergeben, bzw. Auszuwerten.
Kann mir jemand sagen wie ich das machen kann ?
Falls jemand eine vergleichbare Situation hat, und dafür eine andere, bessere oder einfachere Lösung gefunden hat, bin ich für Anregungen sehr Dankbar.

Viele Grüße

Olaf

Hallo Olaf,

kennst Du den Unterschied zwischen internen und externen Variablen?

Interne Variablen (die mit dem vorangestellten Dollar-Zeichen) existieren nur zur Laufzeit eines Skripts. Ist das Skript beendet, gehen alle internen Variablen verloren. Wenn Du etwas dauerhaft speichern willst, musst du externe Variablen verwenden.

Auf externe Variablen können alle Skripte in beliebiger Weise zugreifen. Damit ist also problemlos ein Datenaustausch zu realisieren.

Externe Variablen werden mit diesen Funktionen gelesen oder geschrieben:
GetValue(VarID)
SetValue(VarID, VarWert)

Gruß
HJH

Hallo HJH,

super danke für den Hinweis, das werde ich gleich mal am WE probieren.
Wenn ich das richtig sehe werden Ext. Variablen außerhalb der Scripte definieren (also da wo z.B. auch die XComfort Module liegen), oder ?

Viele Grüße

Olaf

Hab das gerade mal probiert,

wenn ich folgendes ausführe:

GetValue(56297);

bekomme ich folgende Fehlermeldung:

Parse error: parse error, unexpected T_STRING, expecting ‚,‘ or ‚;‘ in [xComfort Gateway\Test] on line 2

Was mache ich den jetzt falsch ?

Das gleiche ist auch wenn ich das gleich einer Variablen zuweise:

$temp4 = GetValue(56297);

Kann mir da jemand weiterhelfen ?

Viele Grüße

Olaf

Hallo Olaf,

Wenn ich das richtig sehe werden Ext. Variablen außerhalb der Scripte definieren (also da wo z.B. auch die XComfort Module liegen), oder ?

Ja, die externen Variablen sind von jedem Script aus abrufbar.

Als Beispiel, Temperatur von KS300.

Wäre eine externe Variable (Temperatur) vom Typ Float welche unter KS300 abgelegt wird. Somit ist diese Variable von jedem Script auswertbar.

$Temperatur = GetValue(VarId), ist eine interne Variable.

Hallo Olaf,

poste einfach mal dein Script.

Hab das gerade mal probiert,

wenn ich folgendes ausführe:

GetValue(56297);

bekomme ich folgende Fehlermeldung:

Parse error: parse error, unexpected T_STRING, expecting ‚,‘ or ‚;‘ in [xComfort Gateway\Test] on line 2

Was mache ich den jetzt falsch ?

Das gleiche ist auch wenn ich das gleich einer Variablen zuweise:

$temp4 = GetValue(56297);

Kann mir da jemand weiterhelfen ?

Ansonsten geht es so, sofern deine externe Variable mit dieser ID vorhanden ist.

<?
$temp4 = GetValue(56297);
echo $temp4;

?>

Hallo Rainer,

das ist mein Testscript, alles bis zur Zeile 23 tut ohne Problem, nur der letzte Eintrag bringt immer Fehler, egal was ich mache. Habe schon zig verschieden Variablen außerhalb des Scriptes probiet, gehen alle nicht.

<?

//Start writing your scripts between the brackets
$temp1 = IPS_GetVariable(10914 /[xComfort Gateway\xComfort Remote Rollo Wohnzimmer Tür\Signal Quality]/);
$temp2 = $temp1[‚VariableUpdated‘];
$time = date(„H:i:s“, $temp2);
$date = date(„d.m.Y“, $temp2);
echo $time;
echo „…“;
echo $date;
echo „…“;
$temp3 = time();
$zeit = date(„H:i:s“, $temp3);
echo $temp2;
echo „…“;
echo $temp3;
echo „…“;
echo $zeit;
echo „…“;
if (($temp3 - $temp2) < 120) Echo „keine 2 Min“;
if (($temp3 - $temp2) > 120) Echo „mehr als 2 Min“

$temp4 = GetValue(22685);

?>

Viele Grüße

Olaf

Hallo Olaf,

Semikolon vergessen.

<?

//Start writing your scripts between the brackets
$temp1 = IPS_GetVariable(10914 /*[xComfort Gateway\xComfort Remote Rollo Wohnzimmer Tür\Signal Quality]*/);
$temp2 = $temp1['VariableUpdated'];
$time = date("H:i:s", $temp2);
$date = date("d.m.Y", $temp2);
echo $time;
echo "....";
echo $date;
echo "....";
$temp3 = time();
$zeit = date("H:i:s", $temp3);
echo $temp2;
echo "....";
echo $temp3;
echo "....";
echo $zeit;
echo "....";
if (($temp3 - $temp2) < 120) Echo "keine 2 Min";
if (($temp3 - $temp2) > 120) Echo "mehr als 2 Min"; 

$temp4 = GetValue(22685);


?>

Hallo Rainer,

vielen Dank, hab ich nicht gesehen, hab den Fehler immer in der letzten zeile gesucht…:frowning:

Viele Grüße

Olaf

Hallo zusammen,

dank der Hilfe hier, laufen meine Scripte jetzt problemlos (Großen Dank noch einmal Rainer).
Jetzt habe ich nur noch einen Schönheitsfehler:
Ich sende in den beiden ersten Scripts innerhalb einer If Abfrage, mehrfach „MXC_ShutterStepDown“ hintereinander, hierbei ist mir aufgefallen, das nicht immer die richtige Anzahl an Downsteps gemacht wird. Ich vermute, das die Befehle zu schnell hintereinander verschickt werden, so das der aktor nicht alle richtig mitbekommt.
Kann das sein, und wenn ja, gibt es eine einfache Möglichkeit, den nächsten Befehl erst zu senden, wenn der andere abgearbeitet ist ?
In diesem Fall sehe ich das nur als Schönheitsfehler, da es nicht darauf ankommt, ob 2, 3, 4 Steps gemacht werden, aber in anderen Anwendungsfällen könnte ich mir das doch als kritischer vorstellen.

Viele Grüße

Olaf

Hallo Olaf,

Jetzt habe ich nur noch einen Schönheitsfehler:
Ich sende in den beiden ersten Scripts innerhalb einer If Abfrage, mehrfach „MXC_ShutterStepDown“ hintereinander, hierbei ist mir aufgefallen, das nicht immer die richtige Anzahl an Downsteps gemacht wird. Ich vermute, das die Befehle zu schnell hintereinander verschickt werden, so das der aktor nicht alle richtig mitbekommt.
Kann das sein, und wenn ja, gibt es eine einfache Möglichkeit, den nächsten Befehl erst zu senden, wenn der andere abgearbeitet ist ?
In diesem Fall sehe ich das nur als Schönheitsfehler, da es nicht darauf ankommt, ob 2, 3, 4 Steps gemacht werden, aber in anderen Anwendungsfällen könnte ich mir das doch als kritischer vorstellen.

In welchen Scripten :confused:

Sorry, zeig sie. Wie soll jemand sonst wissen was Du meinst. :slight_smile:

Hallo Rainer,

sorry jetzt mit Script:

<?

//Start writing your scripts between the brackets
$temp1 = GetValue(35691 /[xComfort Gateway\RolloTimerTasterStatus]/);

If ($temp1 <1) {
MXC_ShutterStepDown(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
MXC_ShutterStepDown(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
MXC_ShutterStepDown(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
MXC_ShutterStepDown(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
MXC_ShutterStepDown(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
};

If ($temp1 >0) {
MXC_ShutterMoveUp(42579 /[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]/);
};

?>

Hier werden nicht immer alle Downsteps gemacht.

Viele Grüße

Olaf

Olaf,

eine kleine Bitte. Fasse deine Codes doch bitte in PHP, sofern sie diesem entsprechen.

Danke.

Das macht einfach die Lesbarkeit einfacher. :slight_smile:

Du kannst da immer noch ändern.

Hallo Rainer,

glaube habe gefunden was du damit meintest, sorry bin ganz neu hier und kenne mich noch nicht so aus.

<?

 //Start writing your scripts between the brackets
$temp1 = GetValue(35691 /*[xComfort Gateway\RolloTimerTasterStatus]*/);

If ($temp1 <1) {
   MXC_ShutterStepDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
   MXC_ShutterStepDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
   MXC_ShutterStepDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
   MXC_ShutterStepDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
   MXC_ShutterStepDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
};

If ($temp1 >0) {
MXC_ShutterMoveUp(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
};

?>

Viele Grüße

Olaf

Hallo Olaf,

glaube habe gefunden was du damit meintest, sorry bin ganz neu hier und kenne mich noch nicht so aus.

kein Problem. Nur wenn da nur Text steht, macht sie da keiner Gedanken :wink:

Hallo Olaf,

ich verstehe jetzt nicht ganz deine Zusammensetzung. Mit Temp (Schalter up/down).

Aber MXC ist auch nicht so mein Thema :frowning:

Ich verweisse dich aber gerne mal nach hier: http://www.ipsymcon.de/forum/f28/script-library-sammlung-5275/index2.html

Hallo Rainer,

danke für den Link, habe es jetzt hinbekommen, mache jetzt keine Steps mehr, sondern habe einfach über IPS_Sleep eine Laufzeit definiert.

<?

 //Start writing your scripts between the brackets
$temp1 = GetValue(35691 /*[xComfort Gateway\RolloTimerTasterStatus]*/);

If ($temp1 <1) {
MXC_ShutterMoveDown(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
IPS_SLEEP(1500);
MXC_ShutterStop(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
};

If ($temp1 >0) {
MXC_ShutterMoveUp(42579 /*[xComfort Gateway\xComfort Shutter Rollo Wohnzimmer Tür]*/);
};

?>

Vielen Dank und Grüße

Olaf

Hallo Olaf,

freut mich das es funktioniert.

Eine kleine Anmerkung an IPS_Sleep().

In dieser Zeit steht dein Script, solange bis dieser Befehl in (Zeit) ausgeführt wird.
Sofern nicht Zeitrelevantes anliegt kein Problem, ansonsten gibt es Timerbefehle.

Hallo Rainer,

hab mich zu früh gefreut…:mad:

Wenn ich das Script manuell über Ausführen starte, geht alles Problemlos.
Wenn ich das Script automatisch über einen Timer starte, mach das Rollo Mist.

Aber nun ist mir zu Spät, werde Morgen weiter suchen.

Viele Grüße

Olaf

Hallo Olaf,

wünsch Dir eine Gute Nacht und träum von IPS :smiley:

Es gibt aber auch noch Ereiginsse, recht oben :wink:

Mach das mit frischen Mut.