Hallo,
WFC_PushNotification hab nun auch hinbekommen . Anfängerfehler „;“
- Müllkalender *.ICS von meinem Entsorger heruntergelden und auf dem Raspi unter dem Ordner /Backup als Muell.ics abgelegt.
- Variable als Stringvariable angelegt.
- Script kopiert von „D.Voss“ und die Bezeichnungen aus meinem ICS angepasst. ID für Variable und Push geändert.
- In dem Script gibt es als Tonne Vier eine Erinnerung am 31.12 und 01.01. die neue ICS zu besorgen. Da musste ich das Datum ändern
- Da kommt jetzt noch ein Ereignis hin, dass das Script täglich um 18 Uhr läuft, wenn ich mal bis dahin nicht an die Tonne gedacht hab.
Ich hänge einige Screen Shots an, was ich eingerichtet habe.
zu Bild 1 : Ich habe einen Müllkalender eingerichtet, dazu eine Variable für das Webfront
wenn ich das Script starte wird die Variable befüllt ==> Anzeige funktioniert
zu Bild 2: Notifications ist eingerichtet
zu Bild 3: für zwei Webfront IDs steht mein Handy drin. Von hier hab ich Button Testnachricht gedrückt, die
kam auf meinem Handy an
zu Bild 4: Variable und Webfront ID im Script eingetragen
zu Bild 5: Eintrag WFC
zu Bild 6: Webfront
Script:
<?
//******************************************************************
// Urheber dieser Version ist 'mesa' Stand 20.05.2016
// https://www.symcon.de/forum/threads/31601-M%C3%BCll-Reminder-Bring-den-M%C3%BCll-raus%21?highlight=m%FCllplan
// überarbeitet von mir D.Voss, da ich mehr als 3 Tonnen habe und die Beschreibungen der Behälter anders sind.
// Danke an 'mesa' ich hätte die Berechnungen in PHP so nicht hinbekommen, lesen, verstehen sowie copy & paste
// sind mir nicht fremd - also auf gehts...
// Meine Umgebung ein Rpi2, der seit Ende 2015 im Livebetrieb ist
// Fragen zu dem eigentlichen Script "Urheber" kann mesa bestimmt besser beantworten
// Danke mesa coole Sache
//******************************************************************
setlocale(LC_ALL, "");
// Einfache String-Variable, speichert Text wie diesen: "Nächste Leerung am Freitag morgen: Wertstoff - gelbe Tonne"
// Die String Variable muss selbst angelegt werden, siehe Zeile "$nächste_termin" und "$webfront_id" anpassen
// Eingabe nötig
// Dieses Script muss mit einem Timer versehen werden, um es jeden Tag um z.B. 18:00 zu starten,
// Ziel ist es dann eine Pushnachricht zu senden um am Abend noch den Müll raus zu bringen
// mein Beispiel 4 Tonnen oder die 4. Tonne als Erinnerung zu nutzen
// z.B. am Jahresende oder Quartalsweise um neue Termine einzutragen
// 1 Wertstoff Tonne
// 2 Altpapier Tonne
// 3 Restabfall Tonne
// 4 Bioabfall > oder neue Termine eingeben erinnern
// Was habe ich geleistet - nicht viel
// anpassen der Variablen damit diese mit meinen Beschreibungen der Entsorgungstonnen zusammen passen
// und eine zusätzliche Tonne "4"
// natürlich noch die "IF" abfragen bei denen ich erst ein wenig geschwitzt habe - in der Hoffnung das
// ein Fehler nicht dabei ist.
// Link zu meinem Entsorger (also eurem Entsorger)
// Link - jedes Jahr vergessen also hier speichern - https://www.meinentsorger.de/info-service.htm
//******************************************************************
//
// Vielen Dank erstmal an den urspruenglichen Verfasser mesa...!
//
// Aenderung fuer das Einlesen einer ICal Datei die von der Hildesheimer Abfallentsorgung (ZAH) angeboten wird.
// Dadurch entfällt die jaehrliche Eingabe der ca. 60 Termine im Jahr in dieses Script...
//
// - Dazu auf die Seite 'https://www.zah-hildesheim.de/Termine/abholtage' gehen
// - Den Ort, Ortsteil und die Strasse auswaehlen
// - Ueber das iCal Icon einen Download anstossen
// - Und die heruntergeladene Datei in das Verzeichnis ablegen das in $icsdatei angegeben ist
//
//******************************************************************
// Eingabe nötig
// Termin "Nächste Leerung" als Stringvariable anlegen
// kann dann im Webfront angezeigt werden
//******************************************************************
$nächste_termin = 37133 /*[#Zusatzmodule\Müllkalender\Müllkalender]*/; // Bitte eigene Werte eintragen*
//******************************************************************
// Eingabe nötig
// Webfront ID zur Pushnachrichten Übertagung
//******************************************************************
$webfront_id = 41910 /*[WebFront]*//*[Pushsafer Notification]*/; // Bitte eigene Werte eintragen*
//******************************************************************
// In diesem Script sind folgende Namen hinterlegt
// Tonne 1 > Wertstoff
// Tonne 2 > Bioabfall
// Tonne 3 > Restabfall
// Tonne 4 > Problemmüll
//
// Die folgende .ics Datei kann man unter xxxxxxxxxxx herunterladen
//
$icsdatei = "/backup/muell.ics";
$zeilen = file( $icsdatei, FILE_IGNORE_NEW_LINES );
if( $zeilen === false )
{
IPS_LogMessage( "Die Abfuhrkalender Datei wurde nicht gefunden!", $icsdatei );
return false;
}
//
// Durchlaufen des Arrays und erzeugen der Datetime Objekte in den entsprechenden Arrays
//
$icssuchbegriff1 = "Biomüll"; // Suchbegriff fuer Tonne 1 -> Wertstoff
$icssuchbegriff2 = "Gelbe und Blaue Tonne"; // Suchbegriff fuer Tonne 2 -> Bioabfall
$icssuchbegriff3 = "Restmüll"; // Suchbegriff fuer Tonne 3 -> Restabfall
$icssuchbegriff4 = ""; // Suchbegriff fuer Tonne 3 -> Restabfall
$zeitpunkt = "";
$NameT1 = "Papier + gelber Sack";
$tonne1 = array();
$NameT2 = "Biomüll";
$tonne2 = array();
$NameT3 = "Restmüll";
$tonne3 = array();
foreach ($zeilen as $zeile) {
if( stristr( $zeile, "DTSTART" ) === False )
{
}
else
{
//
// Datum extrahieren aus...
// Beispielzeile: DTSTART;TZID=Germany/Berlin:20171110T070000
// das gesuchte Datum befindet sich direkt hinter dem Doppelpunkt
// im Format JJJJMMTT
//
$zeitpunkt = substr( $zeile, strpos( $zeile, ":") + 1, 8 );
$zeitpunkt = substr( $zeitpunkt, 0, 4 ) . "-" . substr( $zeitpunkt, 4, 2 ) . "-" . substr( $zeitpunkt, 6, 2 );
}
if( stristr( $zeile, "SUMMARY" ) === False )
{
}
else
{
//
// Abfall Art extrahieren aus...
// Beispielzeile: SUMMARY:Abfuhr Biomüll
//
if( stristr( $zeile, $icssuchbegriff1 ) === False )
{
}
else
{
//
// Tonne 1
//
$tonne1[] = new DateTime( $zeitpunkt );
}
if( stristr( $zeile, $icssuchbegriff2 ) === False )
{
}
else
{
//
// Tonne 2
//
$tonne2[] = new DateTime( $zeitpunkt );
}
if( stristr( $zeile, $icssuchbegriff3 ) === False )
{
}
else
{
//
// Tonne 3
//
$tonne3[] = new DateTime( $zeitpunkt );
}
}
}
// wenn nur 3 Tonnen vorhanden sind kann dies genutzt werden um eine Meldung "neue Werte eintragen"
// per Pushnachricht zu melden, hier als Beispiel 31.12. und 1.1.
// Es müssen zwei Werte eingetragen sein.
// Eingabe nötig bzw. anpassen
$NameT4 = "Neue Müllkalender Datei herunterladen !"; // oder "neue Werte eintragen"
$tonne4 =
[
new DateTime("2019-01-01"),
new DateTime("2018-12-31")
];
$today = new DateTime();
$next_tonne1 = "";
$next_tonne2 = "";
$next_tonne3 = "";
$next_tonne4 = "";
$i=-1;
foreach ($tonne1 as &$d) {
$i++;
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_tonne1 = $tonne1[$i];
break;
}
}
$i=-1;
foreach ($tonne2 as &$d) {
$i++;
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_tonne2 = $tonne2[$i];
break;
}
}
$i=-1;
foreach ($tonne3 as &$d) {
$i++;
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_tonne3 = $tonne3[$i];
break;
}
}
$i=-1;
foreach ($tonne4 as &$d) {
$i++;
$diff = $today->diff($d);
if((int)$diff->format("%r%a") >= 0){
$next_tonne4 = $tonne4[$i];
break;
}
}
$diff_tonne1 = $today->diff($next_tonne1, false);
$diff_tonne2 = $today->diff($next_tonne2, false);
$diff_tonne3 = $today->diff($next_tonne3, false);
$diff_tonne4 = $today->diff($next_tonne4, false);
$diff_tonne1_in_tagen = (int)$diff_tonne1->format("%r%a");
$diff_tonne2_in_tagen = (int)$diff_tonne2->format("%r%a");
$diff_tonne3_in_tagen = (int)$diff_tonne3->format("%r%a");
$diff_tonne4_in_tagen = (int)$diff_tonne4->format("%r%a");
$wasJunkDayToday = false;
if($next_tonne1->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
if($next_tonne2->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
if($next_tonne3->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
if($next_tonne4->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
// echo "Today is " . $today->format("y-m-d") ."
";
// echo "Next Tonne 1 in ". $diff_tonne1_in_tagen ."
";
// echo "Next Tonne 2 in ". $diff_tonne2_in_tagen ."
";
// echo "Next Tonne 3 in ". $diff_tonne3_in_tagen ."
";
// echo "Next Tonne 4 in ". $diff_tonne4_in_tagen ."
";
// echo "Was junk day today (this morning): " . ($wasJunkDayToday ? "yes
" : "no
");
//kleinstes Datum ist nächste Leerung
$next_leerung_in_tagen = min($diff_tonne1_in_tagen, $diff_tonne2_in_tagen, $diff_tonne3_in_tagen, $diff_tonne4_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_tonne1_in_tagen){
$result = "Nächste Leerung am ". strftime("%A", $next_tonne1->getTimestamp()) . " morgen: " . $NameT1;
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$result .= " & " . $NameT2;
}
if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$result .= " & " . $NameT3;
}
if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
$result .= " & " . $NameT4;
}
}else if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
$result = "Nächste Leerung am " . strftime("%A", $next_tonne4->getTimestamp()) . " morgen: " . $NameT4;
if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$result .= " & " . $NameT3;
}
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$result .= " & " . $NameT2;
}
}else if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$result = "Nächste Leerung am ". strftime("%A", $next_tonne3->getTimestamp()) . " morgen: " . $NameT3;
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$result .= " & " . $NameT2;
}
}else if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$result = "Nächste Leerung am ". strftime("%A", $next_tonne2->getTimestamp()) . " morgen: " . $NameT2;
}
// echo $result. "
";
SetValue($nächste_termin, $result);
//push notification
if($next_leerung_in_tagen == 0){
$notification = '"Müll Skript fehlerhaft"';
if($next_leerung_in_tagen == $diff_tonne1_in_tagen){
$notification = $NameT1;
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$notification .= " & " . $NameT2;
}
if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$notification .= " & " . $NameT3;
}
if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
$notification .= " & " . $NameT4;
}
}else if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
$notification = $NameT4;
if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$notification .= " & " . $NameT3;
}
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$notification .= " & " . $NameT2;
}
}else if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
$notification = $NameT3;
if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$notification .= " & " . $NameT2;
}
}else if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
$notification = $NameT2;
}
//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üllabfuhr! - ', 'Morgen wird '. $notification . ' geleert.', 'trickling', 0);
// echo 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.';
}
}
?>