Wecker nach Routenplaner mit Exchange-Kalender

In der Nacht liest IPS meinen Exchange-Kalender aus. Dann wird der erste Termin „zerhackt“ und liefert mir Terminbeginn und Ort. Danach wird ein Script gestartet, welches die Fahrzeit zum Terminort berechnet, meinen morgentlichen Vorlauf (resp. Anlauf) dazuzählt und mir nach diesen Angaben einen Event auf ein Script legt. Bis gestern war dies eine Push-Note, was nicht ganz befriedigend war. Dann kam mir in den Sinn, dass irgendwo noch ein alter MP-3-Wecker rumliegt, der aber so laut tickt, das man diesen nie gebrauchen konnte. Diesen habe ich nun zerlegt (Uhrwerk raus, Gehäuse weg und alles überflüssige entfernt). So hab ich nun nur noch den „Soundteil“. Diesen hab ich an einen FS20SM4-2 angehängt. Beides in eine Kiste mit dem Lautsprecher, und der neue (strahlenfreie :confused:) Wecker ist fertig. Am Bett haben wir einen Schalter (FS20 Funk-Wandsender S4A ) mit der „Aufstehen-Szene“ und zwei freien Tasten. Diese werden nun für die Schlummerfunktion genutzt und die Aufstehen-Tasten beenden den Schlummermodus. Als nächstes werde ich noch Staumeldungen abfragen und diese in den morgentlichen Vorlauf einbinden.

Unbenannt.png

Sieht ja richtig „heimelig“ aus :wink:

für die Schlummerfunktion

Und woher weiss IPS die Schlummerdauer für die Berechnung des Vorlaufs ? :confused: :loveips:

Gruss
Tinu

Und auch unter Technikfreaks ist der Retro-Look total angesagt… :cool::smiley:

Und woher weiss IPS die Schlummerdauer für die Berechnung des Vorlaufs

die Schlummerfunktion setzte ich nach dem ersten Script-Lauf. Die ist dann fix auf 5 Minuten.

Sieht ja richtig „heimelig“ aus

dies ist ein muss auf dem Lande. :wink:

nun läuft mein Wecker seit 2 Monaten. "Eingebaut hab ich noch die Wochenend- und Feiertagsfunktion sowie die „kein Termin Funktion“. Wenn der Kalender leer ist, wird zu einer vordefinierten Zeit geweckt und sonst zuverlässig nach Routenplaner und Vorlauf (Stauberücksichtigung ist bei uns zum Glück kein Thema). Ich kann’s definitiv nur weiterempfehlen, denn es ist so quasi ein „Schlafphasenwecker“, denn du weisst nicht, in welcher Phase des Schlafes du geweckt wirst. Und mir als ultimativen Morgenmuffel hat es geholfen.

:-)waere der Wecker oder besser die Scripte fuer das Auslesen der Staumeldungen und Berechnung der Fahrdauer etwas für ein Vorzeige-Projekt hier?:slight_smile: gruss aus der Schweiz

das „Hauptscript“ ist zwar eine Riesenkrücke, aber es funktioniert.

So kommen die Daten aus dem Exchange daher:
24.04.2012, 08:30 Uhr - alter Oberländerweg , Gunten

Variable 54524 ist eine Bool
51302 ist eine String

weckerroute.ips.php:

<?

$power = GetValue(54524 /*[Wecker\Variablen\Wecker schalten]*/);
$ort = GetValue(51302 /*[Kalender\Variablen
ächster Termin]*/);
//************wenn Feiertag oder Wochenende ist *****************************************
$datum = date("d.m.Y"); //Datum ermitteln
$datheute = substr($ort,0, 10);

 if ($datheute != $datum)
 {
 IPS_SetEventActive(28391 /*[Wecker\Aktoren\Wecker\]*/, false);
 "ausschlafen";
 }
 else
 {
//------------Variablen setzen nächster Termin ---------------------------------

$uhr = substr($ort,12, 5);
SetValue(33405 /*[Kalender\Variablen\Uhrzeit Termin]*/, $uhr);
$pos = substr($ort, 24, 40);
SetValue(46664 /*[Routenplaner\Routenplaner\Ziel]*/, $pos);

$ziel = GetValue(46664 /*[Routenplaner\Routenplaner\Ziel]*/);
$ziel = preg_replace("/ /", "", $ziel);
$data = Sys_GetURLContent("http://maps.google.ch/maps/api/directions/xml?origin=Gunten,Be&destination=$ziel&sensor=false");

SetValue(47231 /*[Routenplaner\Variablen\Fahrzeit für Wecker]*/, $data);
$data = GetValue(47231 /*[Routenplaner\Variablen\Fahrzeit für Wecker]*/);
$data = stristr($data, 'Das Ziel');
$data = stristr($data, 'duration');
$data = stristr($data, 'value');
$data = stristr($data, '/value');
$data = stristr($data, 'text');
$data = stristr($data, '>');
$data = preg_replace("/>/","",$data);
$data = strrev($data);
$data = stristr($data, 'noitarud/<');
$data = stristr($data, 'txet');
$data = stristr($data, 'netuniM');
$data = strrev($data);
$data = preg_replace("/[Stunde]/", "", $data);
$data = preg_replace("/[A-Z][a-z]/", "", $data);
$data = preg_replace("/,/", ":", $data);
$data = preg_replace("/ /", "", $data);


SetValue(48697 /*[Routenplaner\Variablen\Fahrtzeit]*/, $data);
$fahrzeit = GetValue(48697 /*[Routenplaner\Variablen\Fahrtzeit]*/);
$vorlauf = GetValue(30540 /*[Routenplaner\Variablen\Vorlauf Wecker]*/);
$termin = GetValue(33405 /*[Kalender\Variablen\Uhrzeit Termin]*/);
$time = date("H:i");
//**************** Variable formatieren für Stunden und Minuten ****************
if(strpos($fahrzeit, ":") !== false)
{
    if(strlen($fahrzeit) == 4)
    {
        $fahrzeit = substr_replace($fahrzeit, "0", 0, 0);
    }
    else
    {
        /*echo*/ $fahrzeit;
    }
}
else
{
    $fahrzeit = substr_replace($fahrzeit, "00:", 0, 0);

}
SetValue(15631 /*[Routenplaner\Variablen\Fahrzeit Ausgabe]*/, "Std. $fahrzeit Min.");
//***************** Fahrzeit in Minuten umwandeln ******************************
$fahrstd = floor($fahrzeit);   //Stunde ausfiltern
$fahrstd = $fahrstd*60;       // Stunde in Minuten
$fahrmin = ltrim($fahrzeit, "\x30..\x39");     //Stunden wegschneiden
$fahrmin = preg_replace("/:/", "", $fahrmin);  //Komma wegschneiden
$fahrminuten = $fahrstd + $fahrmin;       // Zeit in Minuten
//***************** Vorlauf in Minuten umwandeln *******************************
$vorlaufstd = floor($vorlauf);   //Stunde ausfiltern
$vorlaufstd = $vorlaufstd*60;       // Stunde in Minuten
$vorlaufmin = ltrim($vorlauf, "\x30..\x39");     //Stunden wegschneiden
$vorlaufmin = preg_replace("/:/", "", $vorlaufmin);  //Komma wegschneiden
$vorlaufminuten = $vorlaufstd + $vorlaufmin;       // Zeit in Minuten
//***************** Zeit in Minuten umwandeln **********************************
$timestd = floor($time);   //Stunde ausfiltern
$timestd = $timestd*60;       // Stunde in Minuten
$timemin = ltrim($time, "\x30..\x39");     //Stunden wegschneiden
$timemin = preg_replace("/:/", "", $timemin);  //Komma wegschneiden
$timeminuten = $timestd + $timemin;       // Zeit in Minuten
//***************** Termin in Minuten umwandeln ********************************
$terminstd = floor($termin);   //Stunde ausfiltern
$terminstd = $terminstd*60;       // Stunde in Minuten
$terminmin = ltrim($termin, "\x30..\x39");     //Stunden wegschneiden
$terminmin = preg_replace("/:/", "", $terminmin);  //Komma wegschneiden
$terminminuten = $terminstd + $terminmin;       // Zeit in Minuten
//***************** Weckzeit berechnen *****************************************
$anlauf = $fahrminuten + $vorlaufminuten;
$wecker = $terminminuten - $anlauf;
$weckstd = floor($wecker / 60);
$weckmin = ($wecker - floor($wecker / 60) * 60);
$weckzeit = "$weckstd:$weckmin";
$wecksek = $wecker *60;
	if ($power == false)
	   {
	   IPS_SetEventActive(28391 /*[Wecker\Aktoren\Wecker\]*/, false);
		}
	else
		{
	IPS_SetEventActive(28391 /*[Wecker\Aktoren\Wecker\]*/, true);
	IPS_Sleep(190);
 	IPS_SetEventCyclicTimeBounds(28391 /*[Wecker\Aktoren\Wecker\]*/, mktime($weckstd, $weckmin, 0), 0);
	SetValue(25538 /*[Wecker\Variablen\Weckzeit]*/, $weckzeit);
		}
	}
?>

Integervariable „Weckerberechnung“ mit folgendem Script als eigene Aktion
weckerdefinition.ips.php:

<?
if($IPS_SENDER == "Execute") return;
SetValue($IPS_VARIABLE, $IPS_VALUE);

       switch ($IPS_VALUE)
    {
        case 0:
          $ecmd = "alter Oberländerweg, Gunten";
            break;

        case 1:
          $ecmd = "Bodenstrasse, Grindelwald";
            break;

        case 2:
          $ecmd = "";
            break;

        default:
           echo "kein Termin";
           exit;
           break;

    }

SetValue(24712 /*[Wecker\Variablen\Weckerberechnung Resultat]*/, $ecmd);


?>

das Script „Schlummerwecker“ schaltet den Verbraucher ein

und hier wird der Schlummermodus reaktiviert:

<?

FS20_SwitchMode(10272 /*[Wecker\Aktoren\Wecker]*/, false);
IPS_Sleep(190);
IPS_SetScriptTimer(33001 /*[Wecker\Scripte\Schlummerwecker]*/, 10*60);

?>

und beim Aufstehen werden alle Timer deaktiviert:

IPS_SetScriptTimer(33001 /*[Wecker\Scripte\Schlummerwecker]*/, 0);
IPS_Sleep(190);
IPS_SetScriptTimer(28476 /*[Wecker\Scripte\Schlummermodus]*/, 0);

Wecker nach Route.zip (2.01 KB)

Ich mag gebastelte Lösungen, und dann in Verbindung mit so interessanten Scripten -wegezeiten…-.

Super:)

Cool danke jbo! Werde mir da auch ein paar Routinen abkupfern, schlau gelöst!