Hallo,
damit ich das lästige „Müllen gehen!“ nicht mehr vergesse, habe ich hier einen kleinen Müll-Reminder.
Was macht er:
-
Prüft jeden Abend um 19:00 ob am nächsten morgen der Müll abgeholt wird und schickt entsprechend eine PUSH-Nachricht an eingerichtete Handys.
-
Speichert in einer Stringvariable die nächste Leerung in folgendem Format: „Nächste Leerung am Freitag morgen: Restmüll und Plastik“
Wie wird’s eingerichtet:
Das Ganze ist ne quick and dirty Lösung, also bitte keine Beanstandungen an die architecture stellen
-
Das unten stehende Skript per copy&paste in Symcon einfügen.
-
Irgendwo eine Stringvariable erstellen. Bei mir heisst die „Nächste Abholung“ und ist unter dem Müll-Reminderskript abgelegt.
-
Instanz-ID der Stringvariable oben im Skript anpassen. Webfront ID anpassen.
-
Die Datumsangaben aus eurem städtischen Müllkalender in die Arrays (Biomüll, Restmüll, Plastik, Glas) einfügen.
-
Symcon Push-Notifications einrichten (Notification Control — IP-Symcon :: Automatisierungssoftware)
-
Skript testen (siehe Debug Meldungen als Skriptausgabe)
-
fertig.
<?
setlocale(LC_TIME, "de_DE");
//Einfache String-Variable, speichert Text wie diesen: "Nächste Leerung am Freitag morgen: Restmüll und Plastik"
$naechste_Abholung_Variable = 54518 /*[System\Skripte\Abfallkalender\Nächste Abholung]*/;
$webfront_id = 16219 /*[Webfront]*/;
$bio =
[
new DateTime("2016-01-07"),
new DateTime("2016-01-21"),
new DateTime("2016-02-04"),
new DateTime("2016-02-18"),
new DateTime("2016-03-03"),
new DateTime("2016-03-17"),
new DateTime("2016-04-01"),
new DateTime("2016-04-14"),
new DateTime("2016-04-28"),
new DateTime("2016-05-12"),
new DateTime("2016-05-27"),
new DateTime("2016-06-09"),
new DateTime("2016-06-23"),
new DateTime("2016-07-07"),
new DateTime("2016-07-14"),
new DateTime("2016-07-21"),
new DateTime("2016-07-28"),
new DateTime("2016-08-04"),
new DateTime("2016-08-11"),
new DateTime("2016-08-18"),
new DateTime("2016-08-25"),
new DateTime("2016-09-01"),
new DateTime("2016-09-15"),
new DateTime("2016-09-29"),
new DateTime("2016-10-13"),
new DateTime("2016-10-27"),
new DateTime("2016-11-10"),
new DateTime("2016-11-24"),
new DateTime("2016-12-08"),
new DateTime("2016-12-22")
] ;
$papier_glas =
[
new DateTime("2016-01-07"),
new DateTime("2016-01-21"),
new DateTime("2016-02-04"),
new DateTime("2016-02-18"),
new DateTime("2016-03-03"),
new DateTime("2016-03-17"),
new DateTime("2016-04-01"),
new DateTime("2016-04-14"),
new DateTime("2016-04-28"),
new DateTime("2016-05-12"),
new DateTime("2016-05-27"),
new DateTime("2016-06-09"),
new DateTime("2016-06-23"),
new DateTime("2016-07-07"),
new DateTime("2016-07-21"),
new DateTime("2016-08-04"),
new DateTime("2016-08-18"),
new DateTime("2016-09-01"),
new DateTime("2016-09-15"),
new DateTime("2016-09-29"),
new DateTime("2016-10-13"),
new DateTime("2016-10-27"),
new DateTime("2016-11-10"),
new DateTime("2016-11-24"),
new DateTime("2016-12-08"),
new DateTime("2016-12-22")
];
$rest_lvp =
[
new DateTime("2016-01-14"),
new DateTime("2016-01-28"),
new DateTime("2016-02-11"),
new DateTime("2016-02-25"),
new DateTime("2016-03-10"),
new DateTime("2016-03-24"),
new DateTime("2016-04-07"),
new DateTime("2016-04-21"),
new DateTime("2016-05-06"),
new DateTime("2016-05-20"),
new DateTime("2016-06-02"),
new DateTime("2016-06-16"),
new DateTime("2016-06-30"),
new DateTime("2016-07-14"),
new DateTime("2016-07-28"),
new DateTime("2016-08-11"),
new DateTime("2016-08-25"),
new DateTime("2016-09-08"),
new DateTime("2016-09-22"),
new DateTime("2016-10-07"),
new DateTime("2016-10-20"),
new DateTime("2016-11-04"),
new DateTime("2016-11-17"),
new DateTime("2016-12-01"),
new DateTime("2016-12-15"),
new DateTime("2016-12-30")
];
$today = new DateTime();
$next_bio = "";
$next_papier_glas = "";
$next_rest_lvp = "";
$i=-1;
foreach ($bio as &$d) {
$i++;
// loop through values
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_bio = $bio[$i];
break;
}
}
$i=-1;
foreach ($papier_glas as &$d) {
$i++;
// loop through values
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_papier_glas = $papier_glas[$i];
break;
}
}
$i=-1;
foreach ($rest_lvp as &$d) {
$i++;
// loop through values
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_rest_lvp = $rest_lvp[$i];
break;
}
}
$diff_bio = $today->diff($next_bio, false);
$diff_papier_glas = $today->diff($next_papier_glas, false);
$diff_rest_lvp = $today->diff($next_rest_lvp, false);
$diff_bio_in_tagen = (int)$diff_bio->format("%r%a");
$diff_papier_glas_in_tagen = (int)$diff_papier_glas->format("%r%a");
$diff_rest_lvp_in_tagen = (int)$diff_rest_lvp->format("%r%a");
$wasJunkDayToday = false;
if($next_bio->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
if($next_papier_glas->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
if($next_rest_lvp->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
echo "Today is " . $today->format("y-m-d") ."
";
echo "Next Bio in ". $diff_bio_in_tagen ."
";
echo "Next Papier/Glas in ". $diff_papier_glas_in_tagen ."
";
echo "Next Rest/LVP in ". $diff_rest_lvp_in_tagen ."
";
echo "Was junk day today (this morning): " . ($wasJunkDayToday ? "yes
" : "no
");
//kleinstes Datum ist nächste Leerung
$next_leerung_in_tagen = min($diff_bio_in_tagen, $diff_papier_glas_in_tagen, $diff_rest_lvp_in_tagen);
if($next_leerung_in_tagen == 0){
$txt_leerung_tage = 7;
}
echo "next = " .$next_leerung_in_tagen ."
";
$result = "Error";
if($next_leerung_in_tagen == $diff_bio_in_tagen){
//nächste Leerung ist Biomüll
$result = "Nächste Leerung am ". strftime("%A", $next_bio->getTimestamp()) . " morgen: Biomüll";
if($next_leerung_in_tagen == $diff_papier_glas_in_tagen){
$result .= " und Papier- und Glasmüll";
}
if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
$result .= " und Restmüll und Plastik";
}
}else if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
//nächste Leerung ist Restmüll
$result = "Nächste Leerung am " . strftime("%A", $next_rest_lvp->getTimestamp()) . " morgen: Restmüll und Plastik";
if($next_leerung_in_tagen == $diff_papier_glas_in_tagen){
$result .= " und Papier- und Glasmüll";
}
}else if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
//nächste Leerung ist Papier und Glas
$result = "Nächste Leerung am ". strftime("%A", $next_papier_glas->getTimestamp()) . " morgen: Papier- und Glasmüll";
}
SetValue($naechste_Abholung_Variable, $result);
if($next_leerung_in_tagen == 0){
//push notification
$notification = "Müll Skript fehlerhaft";
if($next_leerung_in_tagen == $diff_bio_in_tagen){
//nächste Leerung ist Biomüll
$notification = "Biomüll";
if($next_leerung_in_tagen == $diff_papier_glas_in_tagen){
$notification .= " und Papier- und Glasmüll";
}
if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
$notification .= " und Restmüll und Plastik";
}
}else if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
//nächste Leerung ist Restmüll
$notification = "Restmüll und Plastik";
if($next_leerung_in_tagen == $diff_papier_glas_in_tagen){
$notification .= " und Papier- und Glasmüll";
}
}else if($next_leerung_in_tagen == $diff_rest_lvp_in_tagen){
//nächste Leerung ist Papier und Glas
$notification = "Papier- und Glasmüll";
}
//Meldung nur abschicken, wenn Leerung "morgen" stattfindet. "Heute um 19:00" ist zu spät, denn es wird immer morgens geleert.
if($wasJunkDayToday == false){
WFC_PushNotification($webfront_id, 'Müllen gehen!', 'Morgen wird '. $notification . " geleert.", 'trickling', 0);
}
}
?>