Trigger funktioniert nicht?!?

Hallo Leute,

ich habe mir folgendes Script geschrieben, um bei entsprechender Aussentemp. und Dauer der geöffneten Fenster einen Hinweis auszugeben, um die Fenster zu schließen. Es kommt teilweise vor, dass Fenster in wenig genutzten Räumen vergessen werden. Dann stehen sie bei -5°C die ganze Nacht offen.

Das Script läuft ansich prima aber der Trigger leider nicht. Getriggert wird durch die Variablenänderung State vom HM Fenstersensor. Führe ich das Script manuell aus klappt’s prima. Ändert sich der Status von geschlossen auf gekippt oder geöffnet, startet der Timer nicht. Erst beim zweiten Mal am Fenstergriff rumspielen wird der Timer gestartet.

Kann sich das mal bitte jemand ansehen? Danke!

Was ist hier falsch?

<?
$fenster=GetValueInteger(29240 /*[HM-Komponenten\Couchfenster\STATE]*/);
$aussentemp=GetValueFloat(26197 /*[Makros\Umgebungsklima\Außentemperatur]*/);
$oeffnungszeit=GetValueInteger(55574 /*[Timer & Einstellung\Fensteröffnungsdauer bis Warnung]*/);
$grenztemp=GetValueFloat(57199 /*[Timer & Einstellung\Auslösetemperatur Fensterwarnung]*/);



if((($IPS_SENDER =="TimerEvent") AND ($fenster > 0) AND ($aussentemp < $grenztemp)))
{

TTS_Speak(24293 /*[Status und Sprachscripts\Text To Speech]*/, "Das Wohnzimmerfenster ist seit längerer Zeit geöffnet. Bitte schließen!", true);


IPS_SetScriptTimer($IPS_SELF,5*60);
Echo "Wiederholung alle 5 min";
return;
}
if(GetValue(23900 /*[Hausüberwachung]*/))
{
IPS_SetScriptTimer($IPS_SELF,$oeffnungszeit);
Echo "Timer an";
}
else
{
IPS_SetScriptTimer($IPS_SELF,0);

Echo "Timer aus";
}
?>

Das Problem ist, dass beim ersten Mal über

$IPS_SENDER == "Variable"

getriggert wird - und das beachtest Du nicht. Dein SkriptTimer wird aber gestartet, da der nicht mehr in der ersten if-Abfrage drin ist.
Also, schau nochmal im Detail drüber, eventuell kommst ja selber drauf wie Du es ändern musst. Wenn nicht, meld Dich noch mal.

Oh man, ich frage in der zweiten Schleife die falsche Variable ab, die 23900 statt die 29240.

Danke Dir wenn Du das gemeint hast.

Gruß

Felix

Die if-Bedingung erwartet ein Timer-Event + Fenster >0 + …

Du triggerst aber über eine Variable. Also sagt die if-Bedingung geht mich nix an. :cool:

Gruß
Bruno

So sollte es gehen:

<?
$fenster=GetValueInteger(29240 /*[HM-Komponenten\Couchfenster\STATE]*/);
$aussentemp=GetValueFloat(26197 /*[Makros\Umgebungsklima\Außentemperatur]*/);
$oeffnungszeit=GetValueInteger(55574 /*[Timer & Einstellung\Fensteröffnungsdauer bis Warnung]*/);
$grenztemp=GetValueFloat(57199 /*[Timer & Einstellung\Auslösetemperatur Fensterwarnung]*/);

if ((($IPS_SENDER =="Variable") AND ($fenster > 0) AND ($aussentemp < $grenztemp))) {

TTS_Speak(24293 /*[Status und Sprachscripts\Text To Speech]*/, "Das Wohnzimmerfenster ist seit längerer Zeit geöffnet. Bitte schließen!", true);
IPS_SetScriptTimer($IPS_SELF,5*60);
Echo "Wiederholung alle 5 min";
}

if (GetValue(23900 /*[Hausüberwachung]*/) && $IPS_SENDER == "TimerEvent") {
IPS_SetScriptTimer($IPS_SELF,$oeffnungszeit);
Echo "Timer an";
}

if (!GetValue(23900 /*[Hausüberwachung]*/) && $IPS_SENDER == "TimerEvent") {
IPS_SetScriptTimer($IPS_SELF,0);

Echo "Timer aus";
}
?>

So wie ich das aber zuvor geschrieben habe klappt es doch auch Prima wenn ich nur auf die Variable triggere.

Hier nun das funktionierende Skript:

<?
$fenster=GetValueInteger(29240 /*[HM-Komponenten\Couchfenster\STATE]*/);
$aussentemp=GetValueFloat(26197 /*[Makros\Umgebungsklima\Außentemperatur]*/);
$oeffnungszeit=GetValueInteger(55574 /*[Timer & Einstellung\Fensteröffnungsdauer bis Warnung]*/);
$grenztemp=GetValueFloat(57199 /*[Timer & Einstellung\Auslösetemperatur Fensterwarnung]*/);



if(($IPS_SENDER =="TimerEvent") AND (($fenster > 0) AND ($aussentemp < $grenztemp)))
{

TTS_Speak(24293 /*[Status und Sprachscripts\Text To Speech]*/, "Das Wohnzimmerfenster ist seit längerer Zeit geöffnet. Bitte schließen!", true);


IPS_SetScriptTimer($IPS_SELF,5*60);
Echo "Wiederholung alle 5 min";
return;
}
if(GetValue(29240 /*[HM-Komponenten\Couchfenster\STATE]*/))
{
IPS_SetScriptTimer($IPS_SELF,$oeffnungszeit);
Echo "Timer an";
}
else
{
IPS_SetScriptTimer($IPS_SELF,0);

Echo "Timer aus";
}
?>