[Modul] Abfallkalender (generisch)

Moin,

für jede Abfallart werden jeweils zwei Variablen angelegt. Z. B. einmal „Biomüll“ und einmal „Biomüll Termin“. In der ersten Variable befinden sich alle Termine dieser Müllart. In der zweiten Variable „Biomüll Termin“ befindet sich der nächste anstehende Termin (siehe Screenshot). Sieht das bei dir auch so aus?

Viele Grüße
Peter

Hallo,

ich finde das Modul ja ganz gut, aber mir fehlen da noch Möglichkeiten, weitere Termin einzutragen, z,.b. Sperrmüll, Elektroschrott und Gefahrgut oder ähnliches.

Aktuell nutze ich deswegen einen ganz normalen Kalender in iCloud, den ich über das Modul in IPS eingebunden habe und somit die Termin vollkommen frei anlegen kann und auch beliebig erweitern.

Leider ist unser Entsorger noch nicht im 21.Jahrhunder angekommen und liefert die Kalenderdaten nicht elektronisch so das man eh manuell den Kalender füllen muss. Da sist dann eine Fleißarbeit am Jahresanfang für Regentage :slight_smile:

Hi Tuxtom,

wenn Bedarf ist, kann ich auch noch andere Abfallarten bzw. Terminarten mit in das Modul packen. Mein Abfallunternehmen ist leider auch noch nicht smart, jedoch bieten sie endlich ics-Files zum Download an, die ich einmal im Monat herunterlade und damit dann die Termine per Script ggf. aktualisiere. Also wenn dein Abfallunternehmen zumindest das anbietet, dann kann ich mein Script hier als Beispiel posten.

Viele Grüße
Peter

Hallo,

oh danke wäre eine gute Sache. Machen die jetzt bei uns auch. ics + csv + xls als Angebot.

Viele Grüße

Andreas

Alles klar. Danke für den Wink mit dem Zaunpfahl. Passt schon, sieht bei mir auch so aus.

Moin,

hier endlich das versprochene Script, welches bei meinem Abfallunternehmen die Termine per ics-File abholt und in meine Variablen packt. Ist bestimmt nicht schön, funktioniert aber:

<?php
class ics {
    /* Function is to get all the contents from ics and explode all the datas according to the events and its sections */
    function getIcsEventsAsArray($file) {
        $icalString = file_get_contents ( $file );
        If (!$icalString) {exit("Abfalltermine konnten nicht heruntergeladen werden!");}
        $icsDates = array ();
        /* Explode the ICs Data to get datas as array according to string ‘BEGIN:’ */
        $icsData = explode ( "BEGIN:", $icalString );
        /* Iterating the icsData value to make all the start end dates as sub array */
        foreach ( $icsData as $key => $value ) {
            $icsDatesMeta [$key] = explode ( "\n", $value );
        }
        /* Itearting the Ics Meta Value */
        foreach ( $icsDatesMeta as $key => $value ) {
            foreach ( $value as $subKey => $subValue ) {
                /* to get ics events in proper order */
                $icsDates = $this->getICSDates ( $key, $subKey, $subValue, $icsDates );
            }
        }
        return $icsDates;
    }

    /* funcion is to avaid the elements wich is not having the proper start, end  and summary informations */
    function getICSDates($key, $subKey, $subValue, $icsDates) {
        if ($key != 0 && $subKey == 0) {
            $icsDates [$key] ["BEGIN"] = $subValue;
        } else {
            $subValueArr = explode ( ":", $subValue, 2 );
            if (isset ( $subValueArr [1] )) {
                $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
            }
        }
        return $icsDates;
    }
}

//Helper function
function getLastLines($string, $n = 1) {
    $lines = explode("\n", $string);
    $lines = array_slice($lines, -$n);
    return implode("\n", $lines);
}

$actualMonth = date("m");
If ($actualMonth == "12") {
    $DataForThisYear = date("Y") + 1;
}
else { $DataForThisYear = date("Y");}

$ModuleId = 57981;
$DataForCity = "MeinOrt";
$DataForStreet = "MeineStrasse";
$Pappe = "";
$Hausmuell = "";
$Biomuell = "";
$Plastik = "";
$PappeID = @IPS_GetObjectIDByIdent("PaperTimes",$ModuleId);
$HausmuellID = @IPS_GetObjectIDByIdent("WasteTimes",$ModuleId);
$PlastikID = @IPS_GetObjectIDByIdent("YellowBagTimes",$ModuleId);
$BioID = @IPS_GetObjectIDByIdent("BioTimes",$ModuleId);
If ($actualMonth == "12") {
    If ($PappeID) {$Pappe = (getLastLines(GetValueString($PappeID), 3))."\n";}
    If ($HausmuellID) {$Hausmuell = (getLastLines(GetValueString($HausmuellID), 3))."\n";}
    If ($BioID) {$Biomuell = (getLastLines(GetValueString($BioID), 3))."\n";}
    If ($PlastikID) {$Plastik = (getLastLines(GetValueString($PlastikID), 3))."\n";}
}

$file = "https://www.awu-oberhavel.de/fuer-haushalte/zusatzinfos/tourenplan-".$DataForThisYear."/?no_cache=1&export=pap,hm,lvp,bio&city=".$DataForCity."&street=".$DataForStreet;

//Getting events from isc file
$obj = new ics();
$icsEvents = $obj->getIcsEventsAsArray( $file );
unset( $icsEvents [1] );
foreach( $icsEvents as $icsEvent){
    // Getting start date and time
    $start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
    $eventName = $icsEvent['SUMMARY'];
    switch(substr($eventName, 0, 4)) {
        case "Papp": $Pappe .= DateTime::createFromFormat('Ymd', $start)->format('d.m.Y')."\n"; break;
        case "Haus": $Hausmuell .= DateTime::createFromFormat('Ymd', $start)->format('d.m.Y')."\n"; break;
        case "Biom": $Biomuell .= DateTime::createFromFormat('Ymd', $start)->format('d.m.Y')."\n"; break;
        case "Leic": $Plastik .= DateTime::createFromFormat('Ymd', $start)->format('d.m.Y')."\n"; break;
    }
}

If ($PappeID) {SetValueString($PappeID, (trim($Pappe)));}
If ($HausmuellID) {SetValueString($HausmuellID, (trim($Hausmuell)));}
If ($BioID) {SetValueString($BioID, (trim($Biomuell)));}
If ($PlastikID) {SetValueString($PlastikID, (trim($Plastik)));}
?>

Viele Grüße
Peter

PS: Das Modul befindet sich jetzt auch im Symcon-Module-Store! :slight_smile:

Hallo Peter,
dein Script musste ich doch gleich mal testen, vielen Dank hierfür!

Folgende Zeile habe ich angepasst:

  • Module-ID (Zeile51)
  • Stadt (Zeile52)
  • Straße (Zeile53)
  • Link zu den Abfuhrtermine (Zeile69)

Dennoch erhalte ich folgende Fehlermeldungen im Script:

Notice:  Undefined index: DTSTART in /mnt/data/symcon/scripts/29937.ips.php on line 77
Notice:  Undefined index: SUMMARY in /mnt/data/symcon/scripts/29937.ips.php on line 78

Was muss noch beachtet werden bzw. fehlt noch was?

Auch ohne das Script bei manueller Pflege der Termine erhalte ich nach dem drücken von „Update Abfuhrtermine“ folgenden Fehler:

<br />
<b>Warning</b>:  Instance does not implement this function in <b>/mnt/data/symcon/modules/.store/de.po.symcon.module/Abfallkalender/module.php</b> on line <b>233</b><br />

Gruß Yansop

Edit:
Die folgende Fehlermeldung erscheint nur nach dem auswählen der ID für Push-Benachrichtigungen und anschließendem Update der Abfuhrtermine.
Für Push-Benachrichtigungen verwende ich das Modul Pushover welches zuverlässig seinen Dienst verrichtet, funktioniert Pushover nicht beim Abfallkalender? Welcher Pushdienst ist hier vorgesehen?

<br />
<b>Warning</b>:  Instance does not implement this function in <b>/mnt/data/symcon/modules/.store/de.po.symcon.module/Abfallkalender/module.php</b> on line <b>233</b><br />

Nachträgliche Lösung:
Die korrekte ID für Push-Benachrichtigungen ist das WebFront.

Mit dem Script Klappt es bei mir leider auch nicht. Ich bekomme immer ein

Warning: file_get_contents(https://www.awu-oberhavel.de/fuer-haushalte/zusatzinfos/tourenplan-2021/?no_cache=1&export=pap,hm,lvp,bio&city=Meine Stadt mit ä&street=Meine Strasse): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
in C:\ProgramData\Symcon\scripts\49130.ips.php on line 5
Abfalltermine konnten nicht heruntergeladen werden!

  • Module-ID (Zeile51)
  • Stadt (Zeile52)
  • Straße (Zeile53)

sind angepasst. Link müsste stimmen. Kann es sein das es Probleme mit Umlauten gibt?

Edit: Wenn ich den Link direkt in den Browser eingebe kommt auch ein brauchbares ICS zurück. Muss daher irgend ein Fehler im file_get_contents - Bereich sein.
Der Link enthält Leerzeichen. Kann das ein Problem sein? Schon der Editor hier im Forum kommt damit nicht klar.
Edit II Es sind die Leerzeichen. Ein Birkenwerder/Ahornallee funktioniert!

Und hier die Lösung: Die Zeile (69?) ersetzen mit
$file = „https://www.awu-oberhavel.de/fuer-haushalte/zusatzinfos/tourenplan-".$DataForThisYear."/?no_cache=1&export=pap,hm,lvp,bio&city=".urlencode($DataForCity)."&street=“.urlencode($DataForStreet);

@dampflok2000
Hallo Peter. Wird das Modul noch betreut? Ich habe das Modul ausprobiert und hatte nun die ersten Abfuhr Termine. Insbesondere mit dem ICS Script (für AWU Oberhavel) eine feine Sache.

In der Ansicht der Abfalltermine stimmt leider noch etwas nicht. Die Termine wurden korrekt eingetragen und einen Tag vorher mit MORGEN markiert. Dabei bleibt es aber. Am direkten Tag kein HEUTE und danach kein nächster Termin. Pape- und Bio- Termin war Donnerstag 25.3.21

Warum die Biomüll Termine heute hintereinander stehen weiß ich nicht. Die letzten Tage waren sie korrekt untereinander.

Wenn du dich mit de Anzeige der Abfalltermine beschäftigst hätte ich noch eine Bitte. Schreibe vor dem Datum den Wochentag. Also ‚Gelber Sack: Freitag 26.03.2021‘. Das ist zwar über das Jahr fast gleich, aber um Feiertage herum kann man schneller erkennen ob z.B. statt Freitag an Samstag oder Montag geleert wird.

Hi,

klar betreue ich das Modul noch! Nur mache ich das in der Freizeit und die ist natürlich nicht immer vorhanden. Ich schaue mir das wahrscheinlich erst gegen Ostern an.

Viele Grüße
Peter

Es sollte auch kein hetzen sein.
Ich habe das Modul mal neu gestartet, jetzt stimmt es wieder. Ich lasse jetzt mal Debug laufen und schon nach einem Tag sieht es komisch aus. Mal ist die Zeit zum nächsten UpdateTimer in Millisekunden, mal in Sekunden. Und mal wird es nochmal gestartet.

Hallo zusammen,

ich wollte das Modul eben nutzen mit dem Skript für die ICS Datei.
Leider stellt uns Abfallunternehmen das Online nur zum Download zur Verfügung, der Link jedoch auch nicht aufrufbar, unter Downloads finde ich nur das:

https://api.abfall.io/?key=b3b6d7b73b7be61117fedc1dd5ec255a&modus=d6c5855a62cf32a4dadbc2831f0f295f&waction=export_ics

Jetzt habe ich die ics Datei als Dokument in Symcon hinzugefügt, wie kann ich diese mit dem Skript in das Modul übergeben ?

Ich müsste ja quasi einen http Link hinterlegen… oder?

Grüße,
Adrian

Hallo,
ich würde auch gerne das Modul nutzen und es im Neo Creator visualisieren. Über das IP-Symcom Plugin kann ich den Wert „Abfalltermine Status“ auch auswählen.
Leider weiß ich nicht, wie ich dort die Termine anzeigen lassen kann. Die Einbindung als Button, oder Grafik macht ja keinen Sinn. Als Text lässt sich keine Aktion einstellen. Nur als Status. Das funktioniert leider nicht.
Vielleicht hat ja jemand beides in der Verknüpfung schon umgesetzt.

Viele Grüße
marvus

Ich würde es ebenfalls begrüßen, wenn zu dem Datum der Wochentag mit eingeblendet wird. Bzw. müsste ich mir dann was eigenes bauen.

Einfach dem Status entweder einem Textfeld zuweisen, besser ist es ein Element vom Typ Webseite zu nutzten und dort dann den Status zuzuweisen, dann bekommst Du das in NEO auch angezeigt. Falls Du da Probleme haben solltest kannst Du ja mal einen Screenshot posten wo es hängt.

Je nachdem Wo Du genau wohnst kannst Du eventuell die Mülltermine auch online auslesen oder ein Modul dafür nutzten. Das hängt aber von dem Müllabfuhr Unternehmen ab bzw. vom Wohnort ob die Daten auch Online zur Verfügung gestellt werden.

Perfekt. Danke! Ich habe es jetzt als Websiteelement eingebunden und den Hintergrund transparent gemacht. Sieht schick aus :wink:

Die Schriftgröße, Schriftfarbe, Schattenwurf usw. kannst Du dann in NEO anpassen, indem Du im HTML Grundgerüst im Kopfteil das CSS individuell anpasst, so dass es zum restlichen Layout im Stil passt.

Hi AdrianS,

Das Modul stellt für jede Abfallart eine String-Variable zur Verfügung, in der dann pro Zeile jeweils ein Abfuhrtermin eingesetzt werden muss. Entweder du schreibst dir selbst ein Script, was das aus deinen ics-File/Content erledigt, oder du fügst die Termine über das Webfrontend hinzu. Mein ics-Script ist ja nur ein Beispiel gewesen.

Viele Grüße
Peter

Hi zusammen,

ich kenne mich mit dem Neo Creator leider gar nicht aus. Wenn es hilft: Es werden von dem Modul für jede Abfallart eine eigenständige Variable mit dem nächsten anstehenden Abfuhrtermin befüllt. So können die Termine auch komplett nach eigenen Wünschen weiter verarbeitet werden. Hilft Dir/Euch das?

Viele Grüße
Peter