Script zum Erkennen von Waschmaschiene und Trockner Status

Hi hab mal da ein Problem… :wink:
Also ich frage im Keller per LCN den Stromverbrauch von Trockner und Waschmaschiene ab. Also bei Fertig Variable = 0 bzw. Binärwert.
Jetzt musste ich feststellen, hab mal den Status der Variablen mitgeschnitten, dass es sowohl beim Trockner als auch bei der Waschmaschiene abhängig vom Programm Pausenzeiten gibt. Jetzt würde ich eine Funktion benötigen die bei der ersten Betätigung Aktiv wird und dann meldet, wenn sich die Variable auf 0 setzt und sich länger als 10 Minuten nicht verändert hat… Hat einer ne Idee??

MfG,
Martin

frag den Zustand der Variable über GetVariable (IPS_GetVariable: IP-Symcon :: Automatisierungssoftware) ab und werte VariableChanged aus.

Hallo Matin,

du mußt mit einem Timer arbeiten. Den du jedesmal neustarten wenn ein Impuls kommt.
Wenn der Timer abläuft ist die Wachmaschine fertig.

Hallo Martin,
mit dieser schweren Nuss habe ich auch schon gekämpft.:wink:

Schau Dir mal mein Skript an:

<?

$status = GetValueBoolean(46888 /*[Zuhaus\LCN\Licht\KG\Modul 8 SH2/3\B3 Waschmaschine\Status]*/);
$schaltungen = GetValue(46579 /*[Überwachung\Waschmaschine\Schaltungen]*/);
$zaehlerstand = GetValueFloat(38046 /*[Zuhaus\LCN\Stromzähler\Zählerstand]*/);
$start = GetValue(19664 /*[Überwachung\Waschmaschine\Zählerstand bei Start]*/);

if($IPS_SENDER == "Variable")
{
	//echo (int)$status;

		if ($status == 1)
		{
			//WFC_SendNotification(42002 /*[WebFront Configurator]*/,$IPS_VARIABLE,date("H:i:s")."Waschmaschine ein","",0);
  			IPS_SetScriptTimer($IPS_SELF,45);
			SetValue(19664 /*[Überwachung\Waschmaschine\Zählerstand bei Start]*/,$zaehlerstand);
			//IPS_SetEventActive(38441 /*[Überwachung\Waschmaschine\]*/, false);

		}

		if ($status == 0)
		{
		 //	WFC_SendNotification(42002 /*[WebFront Configurator]*/,$IPS_VARIABLE,date("H:i:s")."Waschmaschine aus","",0);
       
		}


}
if($IPS_SENDER == "TimerEvent")
{
	//echo (int)$status;

		if ($status == 0 and $schaltungen >= 8)
		{
			IPS_SetEventActive(59179 /*[Überwachung\Waschmaschine\]*/, false);
			WFC_SendNotification(42002 /*[WebFront Configurator]*/,$IPS_EVENT,date("H:i:s")." Waschmaschine fertig","Speaker",120);
			TTS_Speak(49696 /*[Sonstiges\Text To Speech]*/,"Achtung: Waschmaschine ist fertig", false);
			SetValue(46579 /*[Überwachung\Waschmaschine\Schaltungen]*/ , 0);
         IPS_SetScriptTimer($IPS_SELF,0);
			//SetValue(42993 /*[Überwachung\Warnung (aktuell)]*/,"Waschmaschine fertig");
			IPS_SetEventActive(38441 /*[Überwachung\Waschmaschine\]*/, true);
			
		}

		if ($status == 0 and $schaltungen < 8 )
		{
			//WFC_SendNotification(42002 /*[WebFront Configurator]*/,$IPS_EVENT,date("H:i:s")."Waschmaschine aus <=3","",0);

			SetValue(46579 /*[Überwachung\Waschmaschine\Schaltungen]*/ , $schaltungen +1);
		}
		
		if ($status == 1  )
		{
			//WFC_SendNotification(42002 /*[WebFront Configurator]*/,$IPS_EVENT,date("H:i:s")."Waschmaschine aus <=3","",0);

			SetValue(46579 /*[Überwachung\Waschmaschine\Schaltungen]*/ , 0);
		}


		

}


?>

Ich werte das ganze über die Datenbank aus. Strom oder Wirkleistung mit Timer.

als Beispiel.

<?
IPS_SetScriptTimer($_IPS['SELF'], 11*60);

// Verbindungsaufbau und Auswahl der Datenbank
$dbconn = pg_connect("host=192.168.1.51 port=5432 dbname=ipsgraphenlogging user=ips password=ips") or die ('Verbindungsaufbau fehlgeschlagen: ' . pg_last_error());

$startZeit = date("Y-m-d H:i", time());
$endZeit = date("Y-m-d H:i", time() - 600);

$query = "SELECT varvalue, updatezeit from varID25430 WHERE updatezeit BETWEEN "."'$endZeit'"." and "."'$startZeit'"." ORDER BY updatezeit ASC";

$result = pg_query($query) or die ('Abfrage fehlgeschlagen: ' .pg_last_error());

while($data = pg_fetch_assoc($result))
{
    //print_r($data);
    $value[] = $data['varvalue'];
}
pg_close($dbconn);

if(array_sum($value) == 0)
{
   HM_WriteValueBoolean(59563 /*[Homematic CCU wired\Signalmeldungen\Rot]*/, "PRESS_SHORT", true);
   HM_WriteValueBoolean(14531 /*[Homematic CCU wired\Signalmeldungen\Fertigmeldung Waschmaschine]*/, "PRESS_SHORT", true);
   FS20_SwitchMode(59512 /*[Fertigmeldung WA\WA fertig OSD]*/, true);
   SMTP_SendMail(25036 /*[Mails\Mail Gabi]*/, "Waschmaschine", "Ich bin fertig. Räum mich aus!");
   IPS_SetScriptTimer($_IPS['SELF'], 0);
    //echo array_sum($value);
}


?>

Also die Scripte sehen sehr intressant aus, gerade das auch mit der Datenbank. Werd die Geschichte vorläufig erstmal über das jeweilige Starten eines Timers lösen aber an der Datenbank lösung basteln…

Ich ärgere michgrad über ein ähnliches Problem. Zuvor hatte ich die Pausenzeiten mittels eine Hilfsvariable abgefangen. Das ging auch war aber keine optimale Lösung also solte ein Timer her mittels dem ich die Pause ausblenden kann.

Muss dazu sagen ich nutze einen FS20 Lastsensor der mir den Standby des Geschirrspülers meldet. Wenn dieser fertig ist wartet er ca. 10 - 15min das das Geschirrabgetropft ist und pummt dann ab. Die zweite Standby Meldung bekomme ich dann nach der Abpumpphase…

Irgendwie fängt mein Script die erste Meldung schon ab aber ich bekomme immer noch zwei Meldungen, ich vermute ich habe ein Fehler im Timerbereich… vielleicht findet einer von euch ja meinen Fehler… Steh da grad wie der Ochse vorm Berg… :slight_smile:

<?
include('ProwlPHP.php'); // Ausführen der Datei ProwlPHP.php

$Var_Lastmelder = 12820 /*[Datenbank Holodeck-51\Zimmer\Küche\.Scripts\Meldung Geschirrspüler\Hilfsvariable: Zählt die Meldungen]*/;
$var_info = IPS_GetVariable ($Var_Lastmelder); //hole alle Variableninformationen
$var_timestamp = $var_info["VariableUpdated"]; // gebe mir den Wert des Parameters "VariableChanged" zurück
$Laufzeit = time() - $var_timestamp;// berechne die Laufzeit in Sec

SetValueInteger(12820 /*[Datenbank Holodeck-51\Zimmer\Küche\.Scripts\Meldung Geschirrspüler\Hilfsvariable: Zählt die Meldungen]*/, +1);

// Abfangen einer Doppelmeldung nach 3sec.
If (($Laufzeit > 10) and ($Laufzeit < 45*60)) // Prüfe ob die Variable innerhalb der letzten 45min ausgelöst hat, so überspringst du die Abpumpphase
		{
		$prowl = new Prowl('xxxxxxxxxxxxxxxxxxxxxx');  //  Magic-Key
		$prowl->push(array(
 		'application'=>'IP-Symcon',
 		'event'=>'Meldung',
 		'description'=>utf8_encode("Geschirrspuler fertig"),
 		'priority'=>'0'
		));

		$prowl = new Prowl('xxxxxxxxxxxxxxxxxxxxxx');  	//  Magic-Key
		$prowl->push(array(                                               
 		'application'=>'IP-Symcon',
 		'event'=>'Meldung',
 		'description'=>utf8_encode("Geschirrspuler fertig"),
 		'priority'=>0
		));

      SetValueInteger(12820 /*[Datenbank Holodeck-51\Zimmer\Küche\.Scripts\Meldung Geschirrspüler\Hilfsvariable: Zählt die Meldungen]*/, 0);

		$HomeSilentMode = GetValue (23962 /*[Datenbank Holodeck-51\Sonstiges Scripte/Labor\Main Skripte\Zentrale Variablen\HomeSilentMode - Paul schläft]*/);
		if ($HomeSilentMode == false) //Stummschaltum im KonfigModul / true = Meldung stumm
	   	{
			TTS_Speak(53873 /*[Datenbank Holodeck-51\Sonstiges Scripte/Labor\Main Skripte\Multimedia\Text To Speech - Ausgabe der Statusmeldungen]*/, "Servicemeldung! Der Geschirrspüler ist nun fertig, und kann ausgeräumt werden!", true); //Warten bis zu Ende gesprochen wurde
			}
		}

?>