Switchduration länger als 256 Minuten - Umweg?

Hi all

ich mächte gerne die Weihnachtsbeleuchtung meiner Frau (ich bin ja der Meinung, die gehört auf den Flughafen, aber was solls) gerne per IPS schalten.
Mein Problem ist un, dass ich aufgrund der „Ausschaltsicherheit“ gerne mit SwitchDuration arbeiten möchte, diese ist allerdings auf 256 Minuten begrenzt.
Sicherlich kann ich das ganze auch mehrfach mit z.B. 2 Stunden einschalten (immer ein neuer Impuls nach 1:59 oder so).
Oder aber per Scripte, allerdings möchte ich nicht meine Timer / Scriptliste vollmüllen, da ich ja jeweils auch noch ein „setze meine Variable zurück“-Script benötige.

Gib es nicht einen Trick, wie man das geschickter realisieren kann? Vielleicht über den IPS internen Timer?

Bin wirklich ein paar Monate raus aus dem Thema, habe aber nichts passendes im Forum gefunden.

Vielen Dank im Voraus.

f0rd42

Gibts. Allerdings benötigst du dafür eine Zählervariable in IPS.

Du könntest dein Script einen Timer auf 60 Minuten setzen lassen. Deine Zählervariable setzt du beim ersten Durchlauf auf Null. Der Timer triggert dein Script erneut. Dein Script verlängert deine Einschaltdauer und setzt nun eine Zählervariable um eins hoch. Wenn die Zählervariable bei X angekommen ist und deine Einschaltdauer immer 120 Minuten beträgt, ist die Gesamteinschaltdauer immer x+1. Wenn du dann noch bei deinem ersten Start und vor dem ersten hochzählen der Zaählervariable die Variable mit 1 initialisierst (statt mit 0) ist X exakt die Dauer der Einschaltzeit.

Toni

Hallo,

zu allererst, eine 100% sichere Lösung wirst du per FS20 sowieso nie bekommen.
Um ehrlich zu sein, weiss ich mal nicht so genau, wie dieser ‚Switchduration‘ Timer funktionniert, ob da auf den internen Timer des FS20 Teil zurückgegriffen wird, oder nicht.
Alle FS20 Schalter haben einen internen Timer, der aber bis max. 4 Stunden geht, und den man per FB programmieren kann. Hier bis zu quasi auf der sicheren Seite, da der Befehl nicht per Funk kommt, sondern intern geschaltet wird.

Die beste Lösung ist, du nimmst 2 interne Timer von IPS, setzt einen TRUE Befehl meinetwegen um 17:00h um Einzuschalten, und z.B. 01:00 Nachts um auszuschalten.
Dabei legst du jeden Befehl TRUE und FALSE doppelt an, d.h du sendest einen Schaltbefehl, wartest 1 sekunde (IPS_SLEEP) , und sendest ihn dann nochmal.
Somit kommst du den 100% schon relativ nahe !

So mache ich es auch.

mfG Franz

Benutzt SwitchDuration nicht genau diesen internen Timer? Ich denke mal ja, denn ansonsten bräuchten wir doch diese ganze „setze mal meine Variable wieder zurück“-Scripte nicht. FS20_SwitchDuration (InstanceID, True, 10 x 60) schaltet meienn Empfänger für 10 Minuten ein und der geht dann automatisch ohne IPS wieder aus, oder habe ich da was falsch verstanden?

Die Variante von Tonic finde ich noch am verständlichsten, denn selbst wenn IPS über die WUpper geht, ist das schlimmste was passieren kann, dass die Lampen halt früher ausgehen und zwar um die Zeit früher, die das Script gestorbenist, oder sehe ich das falsch? Um ehrlich zu sein, ist mir die Programierung allerdings nicht wirklich klar :confused:

Die beste Lösung ist, du nimmst 2 interne Timer von IPS, setzt einen TRUE Befehl meinetwegen um 17:00h um Einzuschalten, und z.B. 01:00 Nachts um auszuschalten.
Dabei legst du jeden Befehl TRUE und FALSE doppelt an, d.h du sendest einen Schaltbefehl, wartest 1 sekunde (IPS_SLEEP) , und sendest ihn dann nochmal.
Somit kommst du den 100% schon relativ nahe !

Und hier verliessen sich mich dann komplett!
Du sagst, Du machst das auch so? Hättest Du mal Script Schnipsel? Ich bin ein besserer Editor als Autor …

Ich hatte bei meiner Frage eher an sowas gedacht, wie die Variable „LastTimer“ zu missbrauchen.
Einfach beim Ausführen abfragen und die gewünschte Zeit in Sekunden aufaddieren lassen und dann bei einem Wert von LastTimer größer als das Podukt des letzten Wertes plus meiner Einschaltzeit den Ausbefehl senden. Aber dann bin ich ja doch auf IPS angewiesen …

Danke

f0rd42

hmm, nach ein bischen tüfteln dachte ich, dass es so doch gehen müsste, oder?

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : test2.ips.php
Trigger  : 
Interval : 
*/
if ( IPS_VariableExists('runde') ) {
   $plus = GetValueInteger('runde');
   $plus = $plus + 1;
   SetValueInteger('runde', $plus);
   } else {
   IPS_CreateVariable('runde', 'Integer');
   SetValueInteger('runde', 1);
   }
   
FS20_SwitchDuration(45907, TRUE, 2);

if $plus <= 5 {
   IPS_SetScriptTimer('test2', 1);
   } else {
   IPS_DeleteVariable('runde');
   }
?>

ich bekomme aber immer:

Parse error</b>: parse error, unexpected T_VARIABLE, expecting ‚(‘ in <b>C:\Programme\IP-SYMCON\scripts.currentscript</b> on line <b>21</b><br />

bin ich nun blöd oder blind, oder vielleicht doch beides? :eek: :confused:

Nich an den Werte stören, die habe ich so niedrig gesetzt, um das beobachten zu können, will ja nicht 4 Stunden warten um zu sehen, ob es funktioniert …

Mist 2 Klammern vergessen, nun gehts ZU GUT :slight_smile:

Die Beleuchtung geht nicht mehr aus, und meine Variable „runde“ zählt bis 5 und fängt dann wieder von 1 an, das ganze in einer Endlosschleife :confused:

f0rd42

:eek: Warum das ganze VariableCreate und Destroy Gedingsda ??

Brauchs du doch gar nicht. Ein kleines Bespiel für einen Zähler der inkrementiert, mit Max. Limit, würde ungefähr so aussehen:

// Loop
$loop = GetValueInteger('COUNTER');

if ($loop < 100) $loop = $loop + 1;
else ($loop = 0);

// Write Loop Value back to Variable
SetValueInteger('COUNTER', $loop);

Wenn du jetzt deinen Scripttimer auf 60 Sekunden setzt, dann hast du ja 60x100 = 6000 Sekunden.

Ich habe leider nicht mehr Zeit, dir ein komplettes Beispiel Skript zu schreiben, ich muss zum Büro. Vielleicht später

mfG Franz