Zum Ende der Beregnungssaison habe ich nun meine Beregnung im wesentlichen auf Grundlage der „FHT-Steuerung über Google Calender“ an einen Google-Calender angepasst.:rolleyes:
Ich habe die Steuerung mit 2 Skripten realisiert.
Das erste Skript liest den GoogleCalender aus und speichert die Daten in einer Datei:
<?
/*
*************************************************************
* Beregnungssteuerung auf Google Calendar Basis *
* Download der Daten durch dieses Skript *
*************************************************************
************** BEGIN Settings *******************************
Google calendar settings
BEISPIEL für Private XML-Adresse eines zusätzlichen Kalenders:
http://www.google.com/calendar/feeds/sssssddddddddd7777ffffff@group.calendar.google.com/private-aaaaaaaabbbbbbcccc000000111111/basic
|------------- user id --------------------------| |-------- magicCookie -------|
*/
$calendar = "***********";
$userid = '************************@group.calendar.google.com';
$magicCookie = '*********************************';
//********************* END Settings ************************
//*********************** BEGIN Script **********************
//************* read Google Calendar ************************
$time=date("H:i");
//echo "Time ".$time."
";
$feedURL = "http://www.google.com/calendar/feeds/$userid/private-$magicCookie/full";
//echo "feedURL ".$feedURL."
";
$feedParams = "?singleevents=true&max-results=20&orderby=starttime&start-min=".urlencode(date("c"))."&sortorder=a";
$sxml = simplexml_load_file($feedURL.$feedParams);
$date = "";//String variable for $beregnung.txt
foreach ($sxml->entry as $entry)
{
$title = stripslashes(utf8_decode($entry->title));
//echo "Title ".$title."
";
$gd = $entry->children('http://schemas.google.com/g/2005');
$startTime = ''; // read StartTime
if ( $gd->when )
{
$startTime = $gd->when->attributes()->startTime;
}
elseif ( $gd->recurrence )
{
$startTime = $gd->recurrence->when->attributes()->startTime;
}
$startTime = strtotime( $startTime );
//echo $startTime."
";
$endTime = ''; // read EndTime
if ( $gd->when )
{
$endTime = $gd->when->attributes()->endTime;
}
elseif ( $gd->recurrence )
{
$endTime = $gd->recurrence->when->attributes()->endTime;
}
$endTime = strtotime( $endTime );
//echo $endTime."
";
// ********Format für Datei vorgeben****************************
$date .= date("d.m.y", $startTime).";".date("H:i",$startTime).";Start;".$title."
".date("d.m.y", $endTime).";".date("H:i",$endTime).";Ende_;".$title."
";
// ******** write profile-timetable ****************************
$fh = fopen(IPS_GetKernelDir().$calendar.".txt", 'w') or die("can't open file");
fwrite($fh, $date);
fclose($fh);
}
$fh = fopen(IPS_GetKernelDir().$calendar.".txt", 'a+') or die("can't open file");
fclose($fh);
?>
Die Datei, die so entsteht hat in etwa folgenden Aufbau:
11.09.10;06:01;Start;Versenkregner Rasen hinten
11.09.10;06:16;Ende_;Versenkregner Rasen hinten
11.09.10;06:16;Start;Versenkregner Rasen vorne
11.09.10;06:30;Ende_;Versenkregner Rasen vorne
Das zweite Skript öffnet die Datei in kurzen Abständen, geht die einzelnen Termine der Reihe nach durch, und führt am Ende die notwendigen Aktionen aus. Die Steuerung findet anhand des Eintrages in „Was“ im Kalender statt:
<?
/*Dieses Skript überprüft zyklisch die Parameterdatei und schaltet einzelne Aktoren*/
/*Definition der einzelnen Aktoren*/
$aktor_ID[0] = 59059 /*[Beregnung\Aktoren/Sensoren\Aktoren\Versenkregner Rasen hinten]*/ ;
$aktor_name[0] = "Versenkregner Rasen hinten
";
$aktor_ID[1] = 57790 /*[Beregnung\Aktoren/Sensoren\Aktoren\Versenkregner Rasenfläche vorne]*/ ;
$aktor_name[1] = "Versenkregner Rasen vorne
";
$aktor_ID[2] = 32434 /*[Beregnung\Aktoren/Sensoren\Aktoren\Regner Beet Konrad]*/ ;
$aktor_name[2] = "Regner Beet Konrad
";
$aktor_ID[3] = 51609 /*[Beregnung\Aktoren/Sensoren\Aktoren\Regner Beet Klatt]*/ ;
$aktor_name[3] = "Regner Beet Klatt
";
$aktor_ID[4] = 57295 /*[Beregnung\Aktoren/Sensoren\Aktoren\Regner Hecke]*/ ;
$aktor_name[4] = "Regner Beet Hecke
";
$aktor_ID[5] = 20375 /*[Beregnung\Aktoren/Sensoren\Aktoren\Regner Beet Teilkamp]*/ ;
$aktor_name[5] = "Regner Beet Teilkamp
";
/*Definition einer Aktor-Aktions-Variable*/
for($i = 0; $i <= 5; $i++)
{
$aktor_action[$i] = false;
}
/*Öffnen der Parameterdatei*/
$filename = IPS_GetKernelDir()."Beregnung.txt";
$handle = fopen($filename,"r");
$time=date("H:i");
$date=date("d.m.y");
/*Einzelne Zeilen analysieren*/
while ($line = fgets($handle, 1000))
{
$value = explode(";", $line); //[0]-date, [1]-time, [2]-action, [3]-aktor
$day=$value[0];
$switchtime=$value[1];
//echo "Date :".$date."
";
//echo "Day :".$day."
";
if ($date == $day)
{
//echo "Time : ".$time."
";
//echo "Switchtime: ".$switchtime."
";
if($time > $switchtime)
{
//echo $value[2];
if ($value[2] == "Start")
{
for($i = 0; $i <= 5; $i++)
{
//echo "Value[3] :".$value[3];
//echo "Aktor_name:".$aktor_name[$i];
if($value[3] == $aktor_name[$i])
{
$aktor_action[$i] = true;
}
}
}
elseif ($value[2] == "Ende_")
{
for($i = 0; $i <= 5; $i++)
{
if($value[3] == $aktor_name[$i])
{
$aktor_action[$i] = false;
}
}
}
}
}
}
for($i = 0; $i <= 5; $i++)
{
//echo "Aktor ".$i." = ".$aktor_action[$i]."
";
if ($aktor_action[$i] == true)
{
IPS_RunScript(IPS_GetScriptIDByName("Einschalten", $aktor_ID[$i]));
echo "Einschalten: ".$i;
}
elseif ($aktor_action[$i] == false)
{
IPS_RunScript(IPS_GetScriptIDByName("Ausschalten", $aktor_ID[$i]));
}
}
?>
Im Webfront sieht das dann so aus wie im Anhang…
Die Skripte „Einschalten“ und „Ausschalten“ berücksichtigen die Sensoren und sorgen dafür, dass jeweils nur 1 Aktor in Betrieb ist, da ich leider für mehrere nicht genug Druck habe…