Zeitverzögerung

Guten Abend,
Als Neuling erstmal ein Hallo an alle!

Ich bin seit Gestern Besitzer der Version 2.5 und einiger Homematic Komponenten um mich in das ganze mal ein wenig einzuarbeiten, da das Thema der Hausautomatisierung und PHP für mich Neuland ist.

Ich werde momentan aus dem IPS Timer nicht ganz schlau. Hab auch schon das Forum gewälzt und vieles Ausprobiert aber irgendwie komme ich nicht weiter. Die Idee war es die Dachluke vom Bad die per HM Jalousieaktor gesteuert wird nach einer gewissen Zeit wieder Automatisch zu zufahren. Hierzu hab ich ein Skript das Ereignis in meinem fall Dachluke über 95% auf aufgerufen wird. Dieses Sollte dann 10min warten und dann die Luke wieder zufahren. Später soll das ganze per Luftfeuchte Zeitverzögert auf und zu gefahren werden.

Aber genau bei dieser Zeitverzögerung komme ich nicht weiter? Wie bekomme ich diese hin?
Das ist mein Skript bisjetzt:

if($IPS_SENDER == "TimerEvent")
    {
        HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0);
        IPS_SetScriptTimer($IPS_SELF, 0);
    }
    else
    {
        IPS_SetScriptTimer($IPS_SELF, 10*60);
    }
?>

Danke schonmal für eure Hilfe!
Gruß Daniel

Es fehlt ein <? am Anfang… Aber ich vermute da eher den Copy&Paste Fehlerteufel…

Ähmm… kurz gefragt… Was geht denn nicht?

paresy

Hallo Daniel,

habs nicht ganz kapiert, 95% … was

<?

if($_IPS['SENDER'] == "TimerEvent")
 {
  //Zu
  HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0.0);
  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
 }
 else
 {
  //Auf
  HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0.95);
  //Timer anschalten
  IPS_SetScriptTimer($_IPS['SELF'], 10*60);
 }

?>

Gruß
Bruno

@Parsey
Ja ist ein Kopierfehler. Na die Zeitverzögerung funktioniert nicht. Die Luke fährt nach Ablauf der Zeit nicht zu.

@Powerfreddy
Mit den 95% mein ich die Öffnung der Dachluke die ich ja von HM zurückgemeldet bekomme. Diese nutz ich um mein Skript zu starten.

gruß

<?

HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0.95);
  //Timer anschalten
IPS_SetScriptTimer($_IPS['SELF'], 10*60);
  
if($_IPS['SENDER'] == "TimerEvent")
{
  //Zu
  HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0.0);
  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}
?>

Also ich hab mal das Script von Rainer in Benutzung. Wenn ich das Script Manuell starte funktioniert das mit der Zeitverzögerung.
Wenn ich das Script per Ereignis Starte funktioniert es allerdings nicht.

Gruß Daniel

Ganz einfach… Das Ereignis ist ja auch ein TimerEvent. :wink:

Teste also noch innerhalb des IF, ob $_IPS[‚EVENT‘] == 21174 ist.

Etwa so:


if(($_IPS['SENDER'] == "TimerEvent") && ($_IPS['EVENT'] == 21174))
{
  HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0);
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else
{
  IPS_SetScriptTimer($_IPS['SELF'], 10*60);
}

paresy

PS: Der Königsweg ist jetzt noch die fixe ID gegen was dynamisches zu tauschen… sowas hier… http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/ereignisverwaltung/ips-geteventidbyname/

Also Irgendwie komme ich nicht weiter. Das ergibt zwar langsam alles einen Sinn aber es will nicht wie es soll.
Mal ne Nacht drüber Schlafen dann gibts vll ne neue Idee =)

Gruß Daniel

Der Timer soll doch bei 21174 erst die 10 min. laufen, oder ?

Na der Timer soll laufen wenn das Script über das ereignis gestartet wird, und nach ablauf soll geschalten werden.

21174 ist der ScriptTimer

Was gefällt dir an meinem Script nicht ?

Nimm deinen HM Befehl raus. Wenn deine Variable größer 95 ist wird das Script gestartet und nach dieser Zeit der Timer zurück gesetzt und die Luke geschlossen.

Der Wert muss größer sein wie der eingestellte, ansonsten startet dein Script nicht!

  //Timer anschalten
IPS_SetScriptTimer($_IPS['SELF'], 10*60);

if($_IPS['SENDER'] == "TimerEvent")
{
  //Zu
  HM_WriteValueFloat(21670 /*[Erdgeschoss\Bad\Dachluke]*/, "LEVEL", 0.0);
  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}

Hallo Rainer,
an deinem Script habe ich nichts auszusetzten. Bei Manueller Ausführung funktioniert es wunderbar. Ich denke das Problem liegt an meinem Ereignis. Wenn ich inder Spalte " Aktualisiert’" nachschaue steht da nie. Das würde ja heisen das, das Ereignis noch nie aufgetreten ist.
Oder liegt ich da jetzt falsch?

Ich hatte einen kleinen Denkfehler. :rolleyes:

Dein Wert muss größer wie 95 sein bei 95 wird das Script nicht gestartet. Setz ihn auf 94.

Hier die neue Version.

if($_IPS['SENDER'] == "Variable")
{
  //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 10*60);
}

if($_IPS['SENDER'] == "TimerEvent")
{
  //Zu
  HM_WriteValueFloat(21670 /*[Objekt #21670 existiert nicht]*/, "LEVEL", 0.0);
  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}

Also wenn ich die erste Zeile:

if($_IPS['SENDER'] == "Variable")

stehen lasse Reagiert das Script nichtmehr, lösch ich sie Raus geht es Manuell wieder.
Das Ereignis auf 94% zu ändern hat auch nichts geholfen, bekomme langsam das Gefühl das es mit der Variable nicht geht.

Das Script funktioniert, so wie es dort steht.

Leg dir doch mal eine Floatvariable an. Diese als Ereignis mit Grenzwert 94 hinzufügen. Den Scripttimer mal auf 10 Sekunden gestellt und der Wert der Floatvariable per Hand mal ändern.

Könnte dann so aussehen.

Das Ergebnis siehst Du dann nach 10sek in den Meldungen.

if($_IPS['SENDER'] == "Variable")
{
  //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 10);
}

if($_IPS['SENDER'] == "TimerEvent")
{
  
  echo "Fahre Luke zu!";
  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}

Also mit einer Selbstangelegten Variable funktioniert das ganze wunderbar, ich stell die Variable auf 100% das ereignis wird Aktualisiert und das Skript richtig Abgearbeitet. Ich denke es liegt an der Level Variable der HM. Da diese ja eig. genutzt wird um den Aktor seinen Wert vorzugeben.
Mein Luftfeuchte Sensor ist leider noch nicht da sonst hätte ich es mit ihm schnell Probiert.

Was steht denn in der Variable, wenn sie auf 95% steht 95% oder 0,95%

In der Variable steht nur 95 kein , und kein %

Stört das ereignis vll das das Level mit % angegeben wird?

Deine STATE Variable hat doch %.

Hab mal ein Screenshot gemacht wie das Momentan bei mir aussieht. Hoffe es Hilft vll ein wenig. Das Ereignis hab ich Testweise mal auf 95 gestellt um mal zu Probieren ob sich was ändert. Gleiche Funktion bei 95 wie bei 94.