Müll-Reminder: Bring den Müll raus!

Hallo,

damit ich das lästige „Müllen gehen!“ nicht mehr vergesse, habe ich hier einen kleinen Müll-Reminder.

Was macht er:

  1. 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.

  2. 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 :slight_smile:

  1. Das unten stehende Skript per copy&paste in Symcon einfügen.

  2. Irgendwo eine Stringvariable erstellen. Bei mir heisst die „Nächste Abholung“ und ist unter dem Müll-Reminderskript abgelegt.

  3. Instanz-ID der Stringvariable oben im Skript anpassen. Webfront ID anpassen.

  4. Die Datumsangaben aus eurem städtischen Müllkalender in die Arrays (Biomüll, Restmüll, Plastik, Glas) einfügen.

  5. Symcon Push-Notifications einrichten (Notification Control — IP-Symcon :: Automatisierungssoftware)

  6. Skript testen (siehe Debug Meldungen als Skriptausgabe)

  7. 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);
		}
	}
?>


Wenn du nicht alle Termine einzeln pflegen möchtest und sie regelmäßig an festen Tagen in einer geraden/ungeraden Woche sind, dann kannst du z.B. mein Beispiel zur Optimierung nutzen ;).

Hallo ralf,

danke für den Hinweis. Daran habe ich auch schon gedacht. Aber leider ist der Müllplan bei uns nicht so simpel. Bei Wochen mit Feiertagen kommt es beispielsweise zu Verschiebungen. Und die sind nicht immer gleich. Manchmal vor den Feiertag, manchmal danach, etc.

Deshalb habe ich alles einzeln eingegeben. Geht eigentlich auch in 5 Minuten und das muss man ja zum Glück auch nur einmal im Jahr machen :smiley:

Einen Tag Verschiebung nach hinten habe ich mit drin, aber wenn die Verschiebung unterschiedlich ist, dann kann man das nur schwer abfangen.

Hallo ich bekomme folgende mail von meinem Entsorger zugesandt.
Sehr geehrte® Nutzer(in) des ABIKW-Online-Abfallkalenders,

Ihr/-e nächster/-en Abfuhrtermin/-e ist/sind
für die von Ihnen getroffene Ortsauswahl…
Ortsteil, Stadt, Landkreis:

Mo, 23.05.2016: Restabfalltonne

Weitere Informationen zur Abfallentsorgung im Landkreis Anhalt-Bitterfeld
über Abfallwirtschaft im Landkreis Anhalt-Bitterfeld und Startseite.

Das würde ich gern irgendwie grafisch einbauen. Hat wer ne Idee?

Hallo zusammen,

vielen Dank erst einmal für das geniale Script. Ich habe schon immer mal daran gedacht sowas umzusetzen und nun kann ich es einfach „kopieren“ :wink:

Ich habe leider noch das Problem, dass er mit die Tage (Montag, Dienstag, Mittwoch…) in der String Variable in Englisch ausgibt (Monday, Tuesday, Wednesday…). Das Windowssystem ist Deutsch und IPS ist ebenfalls auf Deutsch installiert. Irgendwas in der php.ini? Jemand eine Idee?

EDIT

du hast als erste Zeile „setlocale“. Ich meine mich zu erinnern, dass dies nicht mehr mit IPS 4 geht und nicht übernommen wird, oder verwechsel ich da etwas komplett?

EDIT und LÖSUNG

musste bei mir „setlocale(LC_TIME, „deu_deu“);“ setzen und dann gehts…warum das so geht kann ich aber leider nicht sagen :smiley:

Ja unter Windows ist alles etwas anders :slight_smile: Dort geht auch setlocale(LC_ALL, ‚‘), dann nutzt er die Systemeinstellung des Hostsystems.

Danke für den Hinweis.

Hallo Mesa,

und alle anderen Müllentsorger.
Prima Lösung für die „Müllentsorgung“, naja man muss immer noch selbst Hand anlegen und den Müll raus bringen.
Bei mir sind es 4 Tonnen die befüllt werden müssen und auch an verschiedenen Tagen entsorgt werden. Mit deinem Script bin ich für mich fündig geworden und habe es auf meine Bedürfnisse angepasst. Damit für alle nutzbar, hier meine gepatchte Version mit kleinen Anpassungen an Variablen und Texten und einer vierten Tonne.

Bitte auch den ersten Post lesen - den Punkt 6 habe ich angepasst und die „echos“ entfernt

Jetzt zum Abendessen dann vor die Glotze - EM2016 und Daumen drücken, auch für Euch damit auch alles klappt und es nicht für die Tonne ist.

<?

//******************************************************************
// 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_TIME, "de_DE");

    // 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

// Eingabe nötig
// Termin "Nächste Leerung" als Stringvariable anlegen
// kann dann im Webfront angezeigt werden
//******************************************************************
    $nächste_termin = 12345;        // Bitte eigene Werte eintragen*
//******************************************************************

// Eingabe nötig
// Webfront ID zur Pushnachrichten Übertagung
//******************************************************************
    $webfront_id = 12345;           // Bitte eigene Werte eintragen*
//******************************************************************

// In diesem Script sind folgende Namen hinterlegt
// Tonne 1  > Wertstoff
// Tonne 2  > Altpapier
// Tonne 3  > Restabfall
// Tonne 4  > Bioabfall > bzw. neue Werte eingeben

// Eingabe nötig bzw. anpassen
$NameT1 = "Werstoff - gelbe Tonne";
    $tonne1 =
    [
        new DateTime("2016-01-06"),
        new DateTime("2016-01-20"),
        new DateTime("2016-02-03"),
        new DateTime("2016-02-17"),
        new DateTime("2016-03-02"),
        new DateTime("2016-03-16"),
        new DateTime("2016-03-31"),
        new DateTime("2016-04-13"),
        new DateTime("2016-04-27"),
        new DateTime("2016-05-11"),
        new DateTime("2016-05-25"),
        new DateTime("2016-06-08"),
        new DateTime("2016-06-22"),
        new DateTime("2016-07-06"),
        new DateTime("2016-07-20"),
        new DateTime("2016-08-03"),
        new DateTime("2016-08-17"),
        new DateTime("2016-08-31"),
        new DateTime("2016-09-14"),
        new DateTime("2016-09-28"),
        new DateTime("2016-10-12"),
        new DateTime("2016-10-26"),
        new DateTime("2016-11-09"),
        new DateTime("2016-11-23"),
        new DateTime("2016-12-07"),
        new DateTime("2016-12-21")
]    ;

// Eingabe nötig bzw. anpassen
$NameT2 = "Papier - blaue Tonne";
    $tonne2 =
    [
        new DateTime("2016-01-25"),
        new DateTime("2016-02-22"),
        new DateTime("2016-03-19"),
        new DateTime("2016-04-18"),
        new DateTime("2016-05-17"),
        new DateTime("2016-06-13"),
        new DateTime("2016-07-11"),
        new DateTime("2016-08-08"),
        new DateTime("2016-09-05"),
        new DateTime("2016-10-04"),
        new DateTime("2016-10-31"),
        new DateTime("2016-11-28"),
        new DateTime("2016-12-27")
    ];

// Eingabe nötig bzw. anpassen
$NameT3 = "Restabfall - graue Tonne";
    $tonne3 =
    [
        new DateTime("2016-01-13"),
        new DateTime("2016-01-27"),
        new DateTime("2016-02-10"),
        new DateTime("2016-02-24"),
        new DateTime("2016-03-09"),
        new DateTime("2016-03-22"),
        new DateTime("2016-04-06"),
        new DateTime("2016-04-20"),
        new DateTime("2016-05-04"),
        new DateTime("2016-05-19"),
        new DateTime("2016-06-01"),
        new DateTime("2016-06-15"),
        new DateTime("2016-06-29"),
        new DateTime("2016-07-13"),
        new DateTime("2016-07-27"),
        new DateTime("2016-08-10"),
        new DateTime("2016-08-24"),
        new DateTime("2016-09-07"),
        new DateTime("2016-09-21"),
        new DateTime("2016-10-06"),
        new DateTime("2016-10-19"),
        new DateTime("2016-11-03"),
        new DateTime("2016-11-16"),
        new DateTime("2016-11-31"),
        new DateTime("2016-12-14"),
        new DateTime("2016-12-29")
    ];

// 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 = "Bio - braune Tonne"; // oder "neue Werte eintragen"
    $tonne4 =
    [
        new DateTime("2016-01-01"),
        new DateTime("2016-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, 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.', 'trickling', 0);
// echo 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.';
        }
    }
?>

Vielen Dank für das tolle Skript, funktioniert einwandfrei :loveips:

Erstmal vielen Dank für die Arbeit!

Ich wollte mir das gerade mal für 2017 einbauen… auf meinem IPS 4.1 RASPI…

Könnte jemand ein aktualisiertes Skript einfügen?

mit „Sudo raspi-config“ wird unter den Advanced Settings angezeigt:
„de_DE ISO-8859…“
de_DE.UTF-8…"

Ich habe setlocale in verschiedenen Varianten durchprobiert*(LC_ALL,‚de_DE@euro‘,‚de_DE‘,‚de‘,‚ge‘);
setlocale (LC_TIME, ‚de_DE‘) und so weiter

Dann habe ich zum testen die setlocale-Zeile auskommentiert.
Dann hat er mit der Zeile

$NameT1='Papier'; 

den Fehler:

Parse error:  syntax error, unexpected '$NameT1' (T_VARIABLE) in /var/lib/symcon/scripts/56064.ips.php on line 54

Daraufhin die ’ durch " ersetzt.
Fehler weiterhin:
Parse error: syntax error, unexpected ‚$NameT1‘ (T_VARIABLE) in /var/lib/symcon/scripts/56064.ips.php on line 54

Darum die Frage, ob jemand das ganze nochmals einstellen könnte?

Ich habe bei mir

setlocale(LC_TIME, „deu_deu“);

drinstehen. Funktioniert bei mir. Ebenfalls auf einem Raspberry Pi.

Danke für die Info.

Muss ich Mal probieren… Evtl. Muss ich ja unter raspi-config doch noch was nachtragen…Als schauen…

Gesendet von meinem Redmi Note 2 mit Tapatalk

Ich habe gerade mal nachgeschaut. Ich habe NUR de_DE.UTF-8 aktiv. Mit ISO-8859 hatte ich damals auch Probleme.

danke für den TIPP mit dem entferne von „De_DE ISO…“ auf dem RASPI…
jetzt klappts…

und das weitere Problem war der IPS SKRIPT EDITOR.

Beim reinkopieren (aus Notepad) von "new Datetime(„2017-05-21“);
Wird das „new“ nicht orange markiert… Dann meckert das Skript…

Kopiere ich aus dem IPS EDITOR eine farblich markierte Zeile „new Datetime…“. dann lässt sich das Skript danach ausführen…
Irgendwie ein BUG in dem IPS Skript Editor… Keine Ahnung…

richtig:
richtig.JPG

falsch:
falsch.JPG

Super und vielen Dank für das Script.

Ich hab mir das minimal angepasst, weil ich die Statussies ja per SMS verteile.
Ein Mieter fand die Idee so gut, dass er mir alle Werte der Abfallfiebel im richtigen Format rausgetippt hat.

Somit hatte ich nur noch die Änderungen zum SMS Versand vor mir.
Außer natürlich die Handynummern der Empfänger, war die wichtigste Änderung unten bei den „push notification“ (ab Zeile 278) dort musste ich aus dem „&“ ein „und“ machen, weil das irgendwie nicht per SMS übertragen wird. (es kamen immer leere SMS an)

Also falls das jemand brauchen kann, hier die Kopie von der Kopie von der Kopie :wink: (gab´s das Problem nicht bei Windows 98?:))



<? 

//****************************************************************** 
// 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_TIME, "de_DE"); 

    // 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 

// Eingabe nötig 
// Termin "Nächste Leerung" als Stringvariable anlegen 
// kann dann im Webfront angezeigt werden 
//****************************************************************** 
    $nächste_termin = 29639 /*[Scripte\SMS versenden\Mülltonnen Abholung
ächste Abholung]*/;        // Bitte eigene Werte eintragen* 
//****************************************************************** 

// Eingabe nötig 
// Webfront ID zur Pushnachrichten Übertagung 
//****************************************************************** 
    $webfront_id = 23703 /*[WebFront]*/;           // Bitte eigene Werte eintragen* 
//****************************************************************** 


// Eingabe nötig 
// Handynummern für SMS Übertragung 
//****************************************************************** 
$NummerWE1 = +4911111111111 ;	// Bitte eigene Werte eintragen*
$NummerWE2 = +4922222222222 ;	// Bitte eigene Werte eintragen*
$NummerWE3 = +4933333333333 ;	// Bitte eigene Werte eintragen*
//****************************************************************** 


// In diesem Script sind folgende Namen hinterlegt 
// Tonne 1  > Wertstoff 
// Tonne 2  > Altpapier 
// Tonne 3  > Restabfall 
// Tonne 4  > Bioabfall > bzw. neue Werte eingeben 

// Eingabe nötig bzw. anpassen 
$NameT1 = "gelbe Tonne"; 
    $tonne1 = 
    [ 
        new DateTime("2017-01-04"), 
        new DateTime("2017-01-18"), 
        new DateTime("2017-02-01"), 
        new DateTime("2017-02-15"), 
        new DateTime("2017-03-01"), 
        new DateTime("2017-03-15"), 
        new DateTime("2017-03-29"), 
        new DateTime("2017-04-12"), 
        new DateTime("2017-04-26"), 
        new DateTime("2017-05-10"), 
        new DateTime("2017-05-24"), 
        new DateTime("2017-06-07"), 
        new DateTime("2017-06-21"), 
        new DateTime("2017-07-05"), 
        new DateTime("2017-07-19"), 
        new DateTime("2017-08-02"), 
        new DateTime("2017-08-16"), 
        new DateTime("2017-08-30"), 
        new DateTime("2017-09-13"), 
        new DateTime("2017-09-27"), 
        new DateTime("2017-10-11"), 
        new DateTime("2017-10-25"), 
        new DateTime("2017-11-08"), 
        new DateTime("2017-11-22"), 
        new DateTime("2017-12-06"), 
        new DateTime("2017-12-20") 
]    ; 

// Eingabe nötig bzw. anpassen 
$NameT2 = "Papiertonne"; 
    $tonne2 = 
    [ 
        new DateTime("2017-01-11"), 
        new DateTime("2017-02-08"), 
        new DateTime("2017-03-08"), 
        new DateTime("2017-04-05"), 
        new DateTime("2017-05-03"), 
        new DateTime("2017-05-31"), 
        new DateTime("2017-06-28"), 
        new DateTime("2017-07-26"), 
        new DateTime("2017-08-23"), 
        new DateTime("2017-09-20"), 
        new DateTime("2017-10-18"), 
        new DateTime("2017-11-15"), 
        new DateTime("2017-12-13") 
    ]; 

// Eingabe nötig bzw. anpassen 
$NameT3 = "Restabfalltonne"; 
    $tonne3 = 
    [ 
        new DateTime("2017-01-04"), 
        new DateTime("2017-01-18"), 
        new DateTime("2017-02-01"), 
        new DateTime("2017-02-15"), 
        new DateTime("2017-03-01"), 
        new DateTime("2017-03-15"), 
        new DateTime("2017-03-29"), 
        new DateTime("2017-04-12"), 
        new DateTime("2017-04-26"), 
        new DateTime("2017-05-10"), 
        new DateTime("2017-05-24"), 
        new DateTime("2017-06-08"), 
        new DateTime("2017-06-21"), 
        new DateTime("2017-07-05"), 
        new DateTime("2017-07-19"), 
        new DateTime("2017-08-02"), 
        new DateTime("2017-08-16"), 
        new DateTime("2017-08-30"), 
        new DateTime("2017-09-13"), 
        new DateTime("2017-09-27"), 
        new DateTime("2017-10-11"), 
        new DateTime("2017-10-25"), 
        new DateTime("2017-11-08"), 
        new DateTime("2017-11-22"), 
        new DateTime("2017-12-06"), 
        new DateTime("2017-12-20")
    ]; 

// 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 Werte eintragen Herr Verantwortlicher"; // oder "neue Werte eintragen" 
    $tonne4 = 
    [ 
        new DateTime("2017-01-01"), 
        new DateTime("2017-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 .= " und " . $NameT2; 
            } 
            if($next_leerung_in_tagen == $diff_tonne3_in_tagen){ 
               $notification .= " und " . $NameT3; 
            } 
            if($next_leerung_in_tagen == $diff_tonne4_in_tagen){ 
               $notification .= " und " . $NameT4; 
            } 

        }else    if($next_leerung_in_tagen == $diff_tonne4_in_tagen){ 

            $notification = $NameT4; 
            if($next_leerung_in_tagen == $diff_tonne3_in_tagen){ 
               $notification .= " und " . $NameT3; 
            } 
            if($next_leerung_in_tagen == $diff_tonne2_in_tagen){ 
               $notification .= " und " . $NameT2; 
            } 

        }else    if($next_leerung_in_tagen == $diff_tonne3_in_tagen){ 

            $notification = $NameT3; 
            if($next_leerung_in_tagen == $diff_tonne2_in_tagen){ 
               $notification .= " und " . $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){ 
		
		exec("echo Morgen wird die $notification geleert.|/usr/bin/gammu-smsd-inject TEXT $NummerWE1");
		exec("echo Morgen wird die $notification geleert.|/usr/bin/gammu-smsd-inject TEXT $NummerWE2");
		exec("echo Morgen wird die $notification geleert.|/usr/bin/gammu-smsd-inject TEXT $NummerWE3");
		
		//echo $notification;
		
		
            //WFC_PushNotification($webfront_id, 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.', 'trickling', 0); 
// echo 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.'; 
        } 
    } 
?> 


Hallo,

erst auch einmal Danke an den Urheber für dieses wunderbare Script.
Ich habe nur eine kleines Problem damit und komme aufgrund meiner noch minimalen PHP Kenntnisse nicht wirklich weiter.

An sich funktioniert das Script bei mir einwandfrei, allerdings wenn der Müll an zwei auf einander folgenden Tagen , zb Dienstags Papier und Mittwochs Plastik abgeholt wird kommt er wohl durcheinander.
Heisst: Es wird angezeigt „nächste Leerung am Dienstag Papier…“ soweit so gut.
Diese Meldung bleibt allerdings bis 00:00 am Dienstag stehen , die Meldung für die Tonne am Mittwoch integriert er dann zwar im Webfront , sieht komisch aus, da ich dann für Mittwoch Papier und Plastik stehen haben aber eigentlich ja nur Plastik abgeholt wird… die Push Notification bekomme ich allerdings dann für den Mittwoch überhaupt nicht.
Hat jemand ein ähnliches Problem oder eventuell ne Lösung … wie gesagt bin leider noch PHP Anfänger :slight_smile:

MFG Dennis

Das geht mit dem Skript wenn Du Dir die Arbeit sparen willst und bereit bist eine kleine Spende zu tätigen kannst Du auch die Module von Bayaro nutzten, da ist unter anderem auch eines für die Müllabfuhr dabei.
Müllabfuhr

wenn ich die Arbeit könnte würde ich sie mir nicht sparen :slight_smile:
die kleine Spende sollte kein Problem darstellen … müsste dir ja eigentlich schon eine zukommen lassen , so oft wie du mir schon geholfen hast …
Ich sehe bei dem Script eher das Problem das es jede Menge Variablen benötigt , die ich allerdings nicht benötige :wink:
Und hab nur noch 50 frei dann muss ein Upgrade für unlimited her … irgendwann sowie so ,aber jetzt nur für ne bessere Anzeige der Müllabfuhr Termine …
Also falls noch jemand ne Lösung für das bestehende Script hat … immer gerne :wink:

Gesendet von iPhone mit Tapatalk

danke für den Hinweis. Daran habe ich auch schon gedacht. Aber leider ist der Müllplan bei uns nicht so simpel. Bei Wochen mit Feiertagen kommt es beispielsweise zu Verschiebungen. Und die sind nicht immer gleich. Manchmal vor den Feiertag, manchmal danach, etc.


cot sheets

Hallo Mesa,

Danke für das Script, klappt wunderbar. Eine Frage, ist es möglich hier noch eine Bool Variable einzubauen die auf True setzt wenn ein Ereignis Heute vorhanden ist?
Weis nicht so recht wo ich hier ansetzen soll.