NEWS
ICal Mülltermine
-
Hallo ihr Wissenden
Nachdem die Stadt Köln es https://www.offenedaten-koeln.de/anfragen/abfuhrtermine-im-ical-formatdie Abfuhrtermine im iCal Format bereitzustellen, hat jetzt jemand einen Umwandler gebastelt:
https://asciidisco.github.io/awb2ics/
Da die Touren aber oft kurzfristig immer wieder geändert werden ist so ein heruntergeladener Kalender nicht immer aktuell.
Gibt es eine Möglichkeit diese Daten irgendwie regelmäßig automatisch zu aktualisieren?
Anscheinend gibt es sogar ein npm Paket dafür.
Danke
Rainer
-
Hallo Rainer,
ich bin leider noch nicht so weit, dass ich den Code so ändern kann, dass nicht ständing eine neue ics-Datei geladen wird, sondern die Daten vielleicht als JSON rauskommen.
Du kannst aber vielleicht den ical-Adapter dazu bringen, eine lokal gespeicherte ics-Datei zu laden.
Dann muss man nur noch das npm-Paket in den Javascript-Einstellungen speichern und im Javascript zB täglich oder wöchentlich per schedule die Abfrage starten und die ics-Datei lokal speichern.
Also 'abfuhrkalender-awb-koeln' in die Adapter Einstellungen
Dann vielleicht so:
var awb2ics = require('abfuhrkalender-awb-koeln'); function ermitteleJahr() { var date = new Date(); var y = date.getFullYear(); var m = date.getMonth(); var d = date.getDate(); if (m == 11 && d > 24) y++; // wenn Datum nach dem 24.12\. dann nächstes Jahr einstellen return (y); } var street_name = "Riehler Str.", building_number = "173", year = ermitteleJahr(); zipcode = "50735"; awb2ics(street_name, building_number, year, zipcode, (err, data) => { /* hier fehlt vielleicht noch der Pfad, wo die Datei hingespeichert wird. Da kann ich nicht weiterhelfen. Ist ja auch abhänging von Hardware und Betriebssystem */ log('Neuer Müllkalender geladen'); });
Der Code ist nicht getestet und einfach so in die Codetags geschrieben. Bitte rumprobieren.
Viel Erfolg
Pix
-
Hallo pix,
Danke für deine Mühe.
@pix:Du kannst aber vielleicht den ical-Adapter dazu bringen, eine lokal gespeicherte ics-Datei zu laden. `
Dazu muss ich die Datei nur ins www-Verzeichnis auf dem Iobroker Server legen und von dort aufrufen.@pix:Dann muss man nur… `
Klingt gut, jetzt brauch ich nur noch Zeit. Bei dem schönen Wetter ist im Moment erst mal der Garten und die Schönheitsreparaturen am Haus dran.
Danke nochmals
Rainer
-
Nachdem die Stadt Köln es https://www.offenedaten-koeln.de/anfragen/abfuhrtermine-im-ical-formatdie Abfuhrtermine im iCal Format bereitzustellen, hat jetzt jemand einen Umwandler gebastelt: `
Als was stellt die Stadt Köln denn den Müllkalender zur verfügung? Hier in Dresden gibt es auch kein ical sondern nur ein pdf das man täglich aktualisiert runterladen kann. Dafür hab ich mir ein shell Skript geschrieben das jede nach das pdf runterlädt und dann 'pdf2text" aufruft um Text daraus zu extrahieren und die richtigen Stellen dann zu parsen. Funktioniert seit >2 Jahren hier bereits wunderbar und ohne Probleme. Nur so als Hinweis für Alternativen.
-
Hallo Jens,
@jens.maus:Als was stellt die Stadt Köln denn den Müllkalender zur verfügung? `
Wahlweise als http://awbkoeln.de oder auch als pdf.Das letztere drucke ich mir aus und hänge es an den Kühlschrank
Aber etwa 1x om Quartal ändert sich was manchmal öfter. Zumindest war das eine zeitlang so.
Gruß
Rainer
-
Hallo Jens,
@jens.maus:Als was stellt die Stadt Köln denn den Müllkalender zur verfügung? `
Wahlweise als http://awbkoeln.de oder auch als pdf.Das letztere drucke ich mir aus und hänge es an den Kühlschrank
Aber etwa 1x om Quartal ändert sich was manchmal öfter. Zumindest war das eine zeitlang so. `
Wie gesagt, bei mir parse ich im Grunde das pdf (nachdem ich es mittels "pdftotext" konvertiert habe) mittels eines python skriptes und mache dann daraus eine iCal (ics) datei die ich dann ioBroker zur Verfügung stelle.
Hier der python skript:
! ````
#!/usr/bin/python3Müllkalender Abfragescript
Copyright (c) 2015 Jens Maus mail@jens-maus.de#
Requirements:
- curl: apt-get install curl
- pdftotext: apt-get install pdftotext
! import subprocess
import icalendar
import re
import pytz
from datetime import datetime
! # output path to .ics file generated
output_ics = "/var/www/html/Muellkalender.ics"
! # location identifier
location_id = "XXXXX"
! #################################################Main stuff starts here. No reason to change anything
here
muell_query_url="http://stadtplan2.dresden.de/project/cm3/Detail/STADTRAUM/ABFALL/GA_TONNE/kalender.asp?STANDORT=" + location_id
! task = subprocess.Popen('/usr/bin/curl -s "' + muell_query_url + '" | /usr/bin/pdftotext -raw - -', shell=True, stdout=subprocess.PIPE)
output = task.stdout.read().decode("utf-8").splitlines()
assert task.wait() == 0
! cal = icalendar.Calendar()
cal.add('prod', '-//hm_ddtrash.py//jens-maus.de//')
cal.add('version', '2.0')
! for line in output:
line = line.strip()
res = re.search('.(Gelbe Tonne|Restabfall|Bio-Tonne|Blaue Tonne):., ([0-9]{2}.[0-9]{2}.[0-9]{4})/mail@jens-maus.de>, line)
if res:
event = icalendar.Event()
event.add('summary', res.group(1))
event.add('dtstart', datetime.strptime(res.group(2), "%d.%m.%Y").date())
event.add('dtend', datetime.strptime(res.group(2), "%d.%m.%Y").date())
event['uid'] = res.group(2) + "-" + res.group(1)
cal.add_component(event)
! f = open(output_ics, 'wb')
f.write(cal.to_ical())
f.close()/mail@jens-maus.deDas ganze funktioniert hier bisher recht problemlos seit > 2 Jahren. Aber das ganze setzt natürlich voraus das das pdf auch wohl definiert ist und man den Text nach dem konvertieren mit "pdftotext" auch wirklich geordnet Parsen kann. Daher würde ich an deiner stelle als erstes probieren ob 1.) man das pdf von immer der gleichen URL runterladen kann. Und 2.) ob pdftotext daraus eine brauchbare ausgabe erzeugt die man dann entsprechend mittels regular expressions Parsen kann wie ich das hier in dem python Skript tue.
-
@pix:Hallo Rainer,
Also 'abfuhrkalender-awb-koeln' in die Adapter Einstellungen
Dann vielleicht so:
var awb2ics = require('abfuhrkalender-awb-koeln'); function ermitteleJahr() { var date = new Date(); var y = date.getFullYear(); var m = date.getMonth(); var d = date.getDate(); if (m == 11 && d > 24) y++; // wenn Datum nach dem 24.12\. dann nächstes Jahr einstellen return (y); } var street_name = "Riehler Str.", building_number = "173", year = ermitteleJahr(); zipcode = "50735"; awb2ics(street_name, building_number, year, zipcode, (err, data) => { /* hier fehlt vielleicht noch der Pfad, wo die Datei hingespeichert wird. Da kann ich nicht weiterhelfen. Ist ja auch abhänging von Hardware und Betriebssystem */ log('Neuer Müllkalender geladen'); });
Der Code ist nicht getestet und einfach so in die Codetags geschrieben. Bitte rumprobieren.
Viel Erfolg
Pix `
Hallo Pix,
bin endlich dazu gekommen und habe das Skript getestet.
Läuft ohne Fehler durch und meldet brav: "Neuer Müllkalender geladen"
javascript.0 2017-04-18 11:17:23.623 info script.js.allgemein.muelltermine: Neuer Müllkalender geladen javascript.0 2017-04-18 11:17:22.375 info script.js.allgemein.muelltermine: registered 0 subscriptions and 0 schedules javascript.0 2017-04-18 11:17:22.299 info Start javascript script.js.allgemein.muelltermine javascript.0 2017-04-18 11:17:20.562 info Stop script script.js.allgemein.Skript1
natürlich habe ich den Pfad noch nicht eingegeben, sollte wohl /var/www sein.
Im moment suche ich die neue Datei
Ich weiß nicht mal wonach ich suchen soll
EDIT:
ich verstehe es langsam - laut github sollte es heißen
Usage: awb2ics <options>> my_cal.ics</options>
der letzte Teil fehlt im script, oder?
Gruß
Rainer
-
Hallo,
ich habe von unserer Abfallgesellschaft ein ics Datei vorliegen.
Leider bekomme ich den Kalender nicht in ical eingelesen.
Ich habe die Datei in folgendes Verzeichnis getan und diesen Eintrag auch in der Instanz so eingetragen.
http://192.168.x.xx/opt/iobroker/iobroker-data/files/ical.admin/Abfuhrkalender.ics
Leider ohne erfolg.
Fehlermeldungen:
Error reading from URL "http://192.168.x.xx/opt/iobroker/iobroker-data/files/ical.admin/Abfuhrkalender.ics": Error: connect ECONNREFUSED 192.168.x.x:80
Wie muss ich eine lokale ics Datei angeben ?
-
ich habe von unserer Abfallgesellschaft ein ics Datei vorliegen.
Leider bekomme ich den Kalender nicht in ical eingelesen.
Ich habe die Datei in folgendes Verzeichnis getan und diesen Eintrag auch in der Instanz so eingetragen.
http://192.168.x.xx/opt/iobroker/iobrok … lender.ics
[…]
Wie muss ich eine lokale ics Datei angeben ? `
Einfach den Pfad ohne http und IP Adresse eingeben:
/opt/iobroker/iobroker-data/files/ical.admin/Abfuhrkalender.ics
Dann sollte es gehen.
-
Ich habe ihn jetzt in /opt/iobroker/node_modules/iobroker.admin/www/Abfuhrkalender.ics gelegt und mit
http://192.168.x.xx:8081/Abfuhrkalender.ics in ical angegeben.
Log zeigt jetzt:
processing URL: AWG http://192.168.0.20:8081/AbfuhrkalenderAWGBramstedt.ics
instance system.adapter.ical.0 terminated with code 0 (OK)
Jedoch bekomme ich in in ical0/data/html nichts angezeigt.
Auch dein hinweis führt im Log zum gleichen (positiven) Ausdruck, jedoch auch hier nichts in data/html
-
das hatte ich auch… wieviele Tage vorlauf hast Du im ical-Addapter eingestellt.
eventuell kann nichts angezeigt werden, weil in dem angegebenen Zeitzaum nicht
anliegt...
-
Danke das wars =:-> stand nur auf 7 jetzt bei 14 kommt was ! Sehr gut mache erstmal schluss für heute.
Vielen Dank !
-
Ich möchte diesen Thread nochmal ausgraben.
Ich habe mich die Tage nochmal herangemacht und das Skript von @pix versucht ans laufen zu bekommen.
Zum schluss soll ja eine Datei my_cal.ics erzeugt werden.
Ich finde sie nirgendwo auf dem Tinkerboard, auf dem ich es diesmal teste. Nach wie vor keine Fehlermeldung beim Aktivieren des Skripts.
Daraufhin habe ich mir die ics-Datei online erstellen lassen und habe den ersten Schwachpunkt des awb2ics gefunden: Die Hausnummer darf keine Buchstaben enthalten, dann klappt es online auch nicht.
Also die Hausnummer des Nachbarn ohne Zusatz in das Skript eingegeben, aber auch da war keine Datei zu finden.
Dann habe ich die online generierte Datei heruntergeladen, und ebenso wie @novregen in den Pfad /opt/iobroker/node_modules/iobroker.admin/www/ und in ical den Pfat mit http://192.168.x.xx:8081/abfuhrkalender.ics angegeben.
Leider zeigt mir ical auch jetzt noch nichts an. Anzeigezeitraum ist 28 age
Ich habe mal die ics Datei hinten angehängt, die sieht mir sehr unsortiert aus. Endung ist eigentlich ics, dann klappte der upload aber nicht )
Gruß
Rainer
144_abfuhrkalender_2017.txt -
Hallo zusammen,
und meine ICS-Datei sieht so aus !
! BEGIN:VCALENDAR
! VERSION:2.0
! PRODID:http://mnbvcx.eu/abfallkalender/
! BEGIN:VEVENT
! UID:5a4ba52d15054@mnbvcx.eu
! SUMMARY: Abfuhrtermin Altpapier (BLAU)
! DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Abfuhrtermin Altpapier
! DTSTART:20180105
! DTEND:20180106
! END:VEVENT
! BEGIN:VEVENT
! UID:5a4ba52d177b1@mnbvcx.eu
! SUMMARY: Abfuhrtermin Restmüll (SCHWARZ)
! DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Abfuhrtermin Restmüll
! DTSTART:20180106
! DTEND:20180107
! …
! ...
! ...
Was ist den jetzt richtig ? Weil bei mir in VIS wird auch nichts angezeigt.Die Daten liegt local im Verzeichnis "/opt/iobroker/iobroker-data/files/ical.admin/Abfuhrkalender.ics".
Einstellung unter Instanzen sehen so aus (siehe Anhang).
6198_instanz.jpg -
Hallo zusammen,
und meine ICS-Datei sieht so aus !
! BEGIN:VCALENDAR
! VERSION:2.0
! PRODID:http://mnbvcx.eu/abfallkalender/
! BEGIN:VEVENT
! UID:5a4ba52d15054@mnbvcx.eu
! SUMMARY: Abfuhrtermin Altpapier (BLAU)
! DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Abfuhrtermin Altpapier
! DTSTART:20180105
! DTEND:20180106
! END:VEVENT
! BEGIN:VEVENT
! UID:5a4ba52d177b1@mnbvcx.eu
! SUMMARY: Abfuhrtermin Restmüll (SCHWARZ)
! DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Abfuhrtermin Restmüll
! DTSTART:20180106
! DTEND:20180107
! …
! ...
! ...
Was ist den jetzt richtig ? Weil bei mir in VIS wird auch nichts angezeigt.Die Daten liegt local im Verzeichnis "/opt/iobroker/iobroker-data/files/ical.admin/Abfuhrkalender.ics".
Einstellung unter Instanzen sehen so aus (siehe Anhang). `
Was hast du im Tab Ereignisse hinterlegt?Dort steht bei mir z.B. Restmüll. Damit werden dann die entsprechenden Ereignisse (Kalendereinträge) angezeigt.
-
Hi,
ich habe das Problem jetzt anders gelöst !
Ich habe den Abfallender einfach in Google-Kalender importiert und den Link dann in IOBroker hinterlegt. Jetzt werden die Termine
auch gelesen und angezeigt im VIS.
Für mich ist es damit erst mal gelöst: