Zeitschaltprogramm

Bildschirmfoto 2012-09-08 um 15.06.32.png

Bildschirmfoto 2012-09-08 um 14.37.44.pngBildschirmfoto 2012-09-08 um 14.37.56.pngSkript Timer als ZSP

enstanden ist das Skript fuer die Zeitsteuerung des Automower der 1 Generation

Der Automower wird einfach über die Steckdose ein oder Ausgeschaltet ,da die Service Schnittstelle keine Daten liefert (Frust) .

Was war das Problem.

Über den Skript Timer habe ich morgens die Steckdose eingeschaltet und Abends wieder Aus also gar kein Problem.

Leider hat der Automower kein Regensensor ist ja auch von 1998 . Aber das wollte ich ihm beibringen . Bei Regen nicht zu arbeiten.

Also musste ich eine Möglichkeit suchen diese beiden Zustande in ein skrtipt zu packen.

Dazu kommt die Hand-Auto-Aus Bedienung .

so hier das Skript

<?

$EreignisIDon = 27448 /*[Zimmer\Garten\Automower\]*/ ;
$EreignisInfoon = IPS_GetEvent($EreignisIDon);
$EreignisIDoff = 12430 /*[Zimmer\Garten\Automower\]*/ ;
$EreignisInfooff = IPS_GetEvent($EreignisIDoff);
$uhrzeit_on = date("H:i","$EreignisInfoon[NextRun]");
$uhrzeit_off = date("H:i","$EreignisInfooff[NextRun]");
$day_zsp= ($EreignisInfoon['CyclicDateDay']);
$binweekday = str_pad(decbin($day_zsp), 7 ,'0', STR_PAD_LEFT);
$time = date("H:i:s:M:D:m:d"); //aktuelle Uhrzeit  H:i:s:M:D:m:d
$szene = GetValueString(24028 /*[Trent\Wetter\Heute]*/ );  // Wetter vorhersage Underground
$betiebsart = GetValue(42529 /*[Zimmer\Garten\Betriebsart]*/ );  // Hand 0 Auto
$timestamp = date("H:i"); //
$uhrzeit_ein = date($timestamp);  // letzter Einschaltbefehl
$uhrzeit_aus = date($timestamp);  // letzter Ausschaltbefehl
$Tag = date("D");  // abfrage welcher Tag
$betriebstunden = time($uhrzeit_aus - $uhrzeit_ein) ;

SetValueString(11573 /*[Zimmer\Garten\Automower\Betriebstunden xTag]*/ , date("H:i",$betriebstunden) );


if (($betiebsart == 0 )||($time > $uhrzeit_off )  || ($time <= $uhrzeit_on) || (($szene == "Leichter Regen") or ($szene == "Regen") or ($szene == "Nieselregen") or ($szene == "Gewitterschauer"))) // bei Bedarf anpassen

	{
     HM_WriteValueBoolean(43162 /*[HomeMatic Socket\Automower]*/, "STATE", false); //Gerät ausschalten
     SetValueString(36114 /*[Zimmer\Garten\Automower\Schaltbefehl aus]*/  ,$uhrzeit_aus);
	}

	else
      {
	
		if (($Tag == $binweekday[6]) || ($Tag == $binweekday[5]) || ($Tag == $binweekday[4]) || ($Tag == $binweekday[3]) || ($Tag == $binweekday[2]) || ($Tag == $binweekday[1]) || ($Tag == $binweekday[1]))
		
       {
     HM_WriteValueBoolean(43162 /*[HomeMatic Socket\Automower]*/, "STATE", true); //Gerät einschalten
     SetValueString(44902 /*[Zimmer\Garten\Automower\Schaltbefehl  Ein]*/  ,$uhrzeit_ein);
       }
 
   }


if ($betiebsart == 1 )

	{
	 
     HM_WriteValueBoolean(43162 /*[HomeMatic Socket\Automower]*/, "STATE", true); //Gerät ausschalten
     SetValueString(36114 /*[Zimmer\Garten\Automower\Schaltbefehl aus]*/  ,$uhrzeit_ein);
	}
if ($betiebsart == 2 )
	{
     HM_WriteValueBoolean(43162 /*[HomeMatic Socket\Automower]*/, "STATE", false); //Gerät einschalten
     SetValueString(44902 /*[Zimmer\Garten\Automower\Schaltbefehl  Ein]*/  ,$uhrzeit_aus);
 	}

?>

Skript wird bei Anderung Wetter und Betriebsart ausgeführt .
Eine andere Möglichkeit flexible Zeitschalt Programme zu benutzen

Skript ist ohne Schleifen da PHP nicht meine Stärke .

MFG JENS

…wäre der richtige Syntax.

$day_zsp= ($EreignisInfoon['CyclicDateDay']); 
print $day_zsp;  

da Du ein array hast, gib mal echo $day_zsp[0] ein. Damit sollte deine Frage beantwortet sein.

Eleganter geht das ganze dann über eine for Schleife.

Hallo,

wenn ich dich richtig verstanden habe, dann steht in $day_zsp eine Zahl zwischen 0 und 64 oder?

Dann könnte dir das hier helfen:


$day_zsp = 35;
$binweekday = str_pad(decbin($day_zsp), 7 ,'0', STR_PAD_LEFT);

echo "Montag: ".$binweekday[6]."
";
echo "Dienstag: ".$binweekday[5]."
";
echo "Mittwoch: ".$binweekday[4]."
";
echo "Donnerstag: ".$binweekday[3]."
";
echo "Freitag: ".$binweekday[2]."
";
echo "Samstag: ".$binweekday[1]."
";
echo "Sonntag: ".$binweekday[0]."
";

Die Funktion decbin rechnet den Wert ins Binäre um… und mit der Funktion str_pad setzt du führende Nullen, damit 7 Stellen sind.

Gruß,
Christian.

Danke das ist die Lösung

Im ersten Beitrag werde ich jetzt mein Skript posten wofür ich die Funktion brauche .

Danke Mfg Jens