PHP PHP Müllkalender

Loxley

Active member
Ein Müllkalender ist schon hilfreich. Komfortabel wird er wenn man z.B. in Home Assistant die Waste Collection Schedule verwendet.
Aber was tun wenn man keinen Home Assistant hat aber einen elektronischen Müllkalender möchte.
Für diesen Fall habe ich ein PHP Programm geschrieben. Fall man einen Raspberry Pi mit einem Webserver (Apache) hat kann an es dort ausführen. Auf einem PC kann man z.B. das Programm XAMPP oder Engine X verwenden.
Die meisten Gemeinden stellen den Müllkalender im iCal Format bereit, der Link dort hin (falls vorhanden) lässt sich herausfinden. Im Programm wird das iCal Format verwendet.
Mit ein bisschen Krativität kann man sich Symbole nach eigenem Geschmack erstellen. (Meine Sammlung habe ich beigefügt.)

Die Dateien könnt ihr von Github herunterladen => https://github.com/RichterKe/Muellkalender

Viel Spaß. Gebt mir mal eine Rückmeldung. Für Fragen stehe ich selbstverständlich zur Verfügung.
 
Interessanter Ansatz. Eine kleine Korrektur, <!-- ... --> ist die Auskommentierung für HTML, nicht für CSS, da wäre /* ... */ richtig im style-Block.

Was für manche Personen ohne Programmierkenntnisse vielleicht schwierig sein könnte, so vom Verständnis her, ist die Anpassung der Länge im fgets. Persönlich hätte ich das über Regex gelöst, jetzt nur mal ganz kurz runtergeschrieben:
PHP:
<?php
//Datenabruf
$data = file_get_contents("https://kelkheim.de/mod_abfallkalender/index.php?action=ical&area=B-8%2C+S-8+Mi&datetype=Restm%FCll%2CBlaue+Tonne%2CBio-Tonne%2CGelber+Sack%2CSonderm%FCll%2CSperrm%FCll%2CGr%FCnabfuhr%2CRestm%FCll-Container%2CGr%FCnschnittannahmestelle%2CWertstoffhof%2CSonstige&street=xxx");
//Speicherarrays
$events = $entries = array();
//Alle Events aufsplitten
preg_match_all('/BEGIN:VEVENT.*END:VEVENT/sU', $data, $events);
//Wenn es Events gibt...
if (!empty($events[0])) {
    //...alle durchgehen.
    foreach ($events[0] as $event) {
        //Temporäre Speicherarrays
        $date = $type = array();
        //Datum rausziehen, ist dank Gruppierung in [1][0]
        preg_match_all('/DTSTART\D*(\d*)/', $event, $date);
        //Art rausziehen, ist dank Gruppierung in [1][0]
        preg_match_all('/SUMMARY:(.*)/', $event, $type);
        //Zwischenspeichern
        $entries[] = array("Datum" => date("d.m.Y", strtotime($date[1][0])), "Art" => $type[1][0]);
    }
    echo '<pre>';
    print_r($entries);
    echo '</pre>';
} else {
    echo "Datenabruf fehlgeschlagen oder ungültige ICS-Datei.";
}
 
Hallo @Nival,
Danke für Deine Hinweise. Das mit der Auskommentierug im CSS hat so bei mir funktioniert, aber Du hast Recht.
Ansonsten ist das Programm dafür gedacht dass man mit wenigen Änderungen im Kopfteil das Ganze einfach so verwenden kann wie es ist. Wenn nötig gibt es halt ein Update (wie bei Microsoft).:cool:
Perfekt ist es nicht - das ist mir klar. Ich warte erst einmal auf die Reaktionen hier und ob das überhaupt interessant ist, dann sehen wir mal weiter.
 
Ansonsten ist das Programm dafür gedacht dass man mit wenigen Änderungen im Kopfteil das Ganze einfach so verwenden kann wie es ist.
Ja, genau so hatte ich das verstanden - find ich gut! - deshalb meine Anmerkung, dass man mittels Regex diese eventuell nötige Anpassung im unteren Bereich komplett eliminieren könnte. Also bezogen auf
// Ab Zeile 146 muss eventuell die Anzahl der Zeilen "$moretx .= fgets($handle, 1024);"
// erhöht oder erniedrigt werden. (Infotexte zu den Icons prüfen)
- weil das damit wegfallen würde.

dann sehen wir mal weiter
Ja, da könnte man noch viel machen - responsive damit es auch auf dem Smartphone hübsch aussieht, verwerfen aller schon vergangenen Termine und / oder zum aktuellen Datum springen, Jahres- und Monatsauswahl... :D - aber ich kann auch gut nachvollziehen, wenn Du da vorerst nicht weiter Arbeit reinstecken möchtest. Ist ja eher die Frage, wieviel Spaß Du an der Programmierung ansich hast.
 
Hallo @Nival,
ich habs halt möglich einfach gestaltet. Das mit den Infotexten kann man besser lösen, da gebe ich Dir Recht, aber dieser Text ist auch nicht so wichtig. Aber für ein Update eine gute Idee das zu ändern. Ich könnte ja mal forschen wie die iCal Dateien anderer Städte aussehen.
Ja machen kann man da noch viel. Das mit der Jahresauswahl wird, glaube ich, nicht funktionieren da die Datenmenge in der iCal Datei begrenzt ist (ab heute 6 Monate oder so).
Ist ja auch nicht der Sinn zu wissen ob bei Cristi Geburt die blaue Tonne geholt wurde oder in 100 Jahren am Mittwoch den 10.3. der gelbe Sack :cool:. Deshalb der Ansatz "ab heute x-Tage anzeigen".
Aber Ideen und Anregungen nehme ich gerne entgegen und vielleicht wird ja ein richtig großes Projekt aus so einem bescheidenen Anfang. War schon einmal der Fall als ich "nur" eine Funksteckdose steuern wollte (just for fun). Daraus geworden ist eine Hausautomation für die Steckdosen von Lampen und Geräten mit Webseite, Zeitschaltung etc. (Zusatzelektronik , 433mHz Sender etc. - alles Eigenbau.)
Ich bastel halt gerne und programmiere gerne und wenn es Sinn macht investiere ich auch gerne Zeit.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.709
Beiträge
64.347
Mitglieder
6.976
Neuestes Mitglied
Nodor
Zurück
Oben