Timer für Regen Toggle

Hallo alle

Ich habe einen Homematic Regensensor. Wenn der meldet, dass es nicht mehr regnet, dann möchte ich den Regentoggle noch, sagen wir, 10 Minuten nachlaufen lassen. Folgendes Skript habe ich versucht umzubiegen:

<?
if($_IPS['SENDER'] == "TimerEvent") {
//Aus Befehl
SetValueBoolean(50395, false);
//Timer ausschalten
IPS_SetScriptTimer($_IPS['SELF'], 0); } else {
//An Befehl
SetValueBoolean(50395, true);
//Timer anschalten
IPS_SetScriptTimer($_IPS['SELF'], 10*60);
}
?>

Ist das soweit das, was ich will?

44555 = STATE (HM Regensensor), INT, 0=Regen, 1=Trocken
50395 = RegenToggle Variable

Nein, das ist denke ich nicht das was du willst. Wenn es innerhalb des 10 min Script timers wieder anfängt zu regnen wird deine Variable nicht das gewünschte verhalten haben. Oder gibt es noch andere Scripte? Wie wird das Script getriggert ?

Edit: Denkfehler bei mir. Vergiss was ich oben geschrieben habe. Aber wie das Script getriggert wird müsstest du trotzdem noch erläutern.

Der Toggle wird durch ein Ereignis (Wert Sensor = 0, TRUE oder 1 FALSE) getriggert.

Ok, also auf änderung. Aber dann wird doch deine „Toggle“ Variable auf True gesetzt, egal ob es gerade anfängt oder aufhört zu regnen, nach 10 min ohne statusänderung dann auf false, egal wie der status wirklich ist ?!

Gesendet von iPhone mit Tapatalk Pro

So, oder so ähnlich ? Nicht getestet …

<?php

$Delay = 10*60;
$VarIdToggle = 50395; 
$VarIdRegenState = 44555;	//0 Regen, 1 Trocken

if($_IPS['SENDER'] == "TimerEvent")
	{
		if (GetValueBoolean ($VarIdRegenState))
			{
			SetValueBoolean(VarIdToggle, true);
			IPS_SetScriptTimer($_IPS['SELF'], 0);
			}else
			{
			IPS_SetScriptTimer($_IPS['SELF'], 0);
			}
	}else
	{
	if(GetValueBoolean ($VarIdRegenState))
		IPS_SetScriptTimer($_IPS['SELF'], $Delay);
	}else
	{
		SetValueBoolean($VarIdToggle, false);
	}

Ausgeführt auf Änderung von $VarIdRegenState

Du hast natürlich Recht!

Aber Dein Skript ergibt bei mir folgende Meldung, ich bin noch zuwenig fit in PHP um den Fehler selber zu finden…

Oder gibt es den Fehler nur, weil ich das manuell starte?

Ich habe es doch noch herausgefunden. Die eine Klammer musste eine Zeile nach unten… Aber Frage: Der Sensor ist vom Typ INT, kann man dann GetValueBoolean verwenden? Zeile 19

Nein, das geht natürlich nicht, der Typ muss stimmen.
Und ich hatte ja geschrieben, ungetestet, da fehlte glaube ich eine Klammer, war auch schwer zu sehen, weil ichs falsch eingerückt hatte.

so kommen bei mir keine Fehler mehr, ob die Logik jetzt wirklich richtig ist habe ich allerdings nicht mit eigenen Test-Variablen überprüft, ich denke aber schon, viel Spaß beim testen :slight_smile:

<?php

$Delay = 10*60;
$VarIdToggle = 50395; 
$VarIdRegenState = 44555;	//0 Regen, 1 Trocken

if($_IPS['SENDER'] == "TimerEvent")
	{
	if (GetValueInteger ($VarIdRegenState))
		{
		SetValueBoolean(VarIdToggle, true);
		IPS_SetScriptTimer($_IPS['SELF'], 0);
		}
	else
		{
		IPS_SetScriptTimer($_IPS['SELF'], 0);
		}
	}
else
	{
		if(GetValueInteger ($VarIdRegenState))
			{
			IPS_SetScriptTimer($_IPS['SELF'], $Delay);
			}
		else
			{
			SetValueBoolean($VarIdToggle, false);
			}
	}