AbfallentsorgungBerlin BSR, ALBA und BerlinRecycling - neue Module

Begonnen von RomanticBoy83, 17 Juni 2017, 00:32:23

Vorheriges Thema - Nächstes Thema

RomanticBoy83

Hallo Community,
ich habe mich an einem Problem versucht, welches für den Anfang klein genug erschien um die Tiefen von Fhem kennenzulernen.
Ausgangslage:
Ich nutze das Modul ABFALL, welches über einen Baikal-KalenderServer die Termine für die Müllabfuhr in Fhem integriert. Erinnern lasse ich mich dann automatisiert auf meinem favorisierten Weg sobald nächsten Tag Abfuhrtermin ist. Leider bekommt man in Berlin für die WertstoffTonne/GelbeSack nur den nächsten Abholtermin, weshalb ich den normalen Zyklus in den Kalender für ein Jahr vorgetragen habe.
Problem:
Daraus ergibt sich das Problem, dass bei eventuellen Verschiebungen mein Kalender nicht mehr stimmt und ich zu falschen Zeiten herausstelle.
Lösungsansatz:
Ein Modul, welches angelehnt an das Abfall-Modul den nächsten Termin für Wertstoff anzeigt. Auf der Webseite wird man nach einiger Zeit und genauerem hinschauen auf eine API aufmerksam. Diese funktioniert mit Straßen, Postleitzahl und Hausnummer.
Lösung:
Ich habe mein erstes Modul geschrieben und möchte diesen natürlich auch gerne frei zur Verfügung stellen. Für eventuelle Fehler stehe ich natürlich auch offen zur Seite. Bitte bedenkt aber, dass ich dieses Modul in erster Linie zum Kennenlernen implementiert habe.
Lösung2:
Ich habe derweil ein zweites Modul geschrieben. Diesmal direkt bei der BSR. Hier ist jedoch die Angabe der Hausnummer nicht notwendig, da diese durch ein Dropdown bestimmt wird um die Abfuhrstelle eventuelle einfacher anpassen zu können.
Lösung3:
Ich lege noch einen nach. Ich habe ein weiteres Modul für Berlin-Recycling geschrieben und damit nun alle meine Abfälle automatisiert im Abruf.
Lösung4...:
Es gibt weitere Module für Interessenten. Cederbaum wollte jemand haben und auch Pappy von Alba direkt sind nun verfügbar.

Über Kommentare und Anregungen würde ich mich sehr freuen - und nun viel Spaß mit diesem kleinen Modul.

Zur Funktionsweise (WerstofftonneBerlin):
define <name> wertstofftonneberlin <plz> <straße>
Example: define wertstoff wertstofftonneberlin 12103 RingbahnStraße

BugFix: Modul arbeitet nach Neustart von Fhem nicht selbständig.
update: kleine Anpassungen und Optimierungen
update: Man kann das Modul jetzt manipulieren und den Key für die Adressauflösung selber bestimmen.
update: Define jetzt ohne Hausnummer -> damit können Straßennamen wie Strasse 42 gesucht werden. Dropdowns für Straßennamen und Hausnummern implementiert
update: Version 1 (Commandref überarbeitet)

Zur Funktionsweise (BSRAbfallkalenderBerlin):
define <name> bsrabfallkalender <plz> <straße>
Example: define abfuhrtermine bsrabfallkalender 12103 Ringbahn Straße

update: Weihnachtsbäume implementiert
BugFix: Lesen der gesetzten Hausnummer funktioniert eventuell nicht - getKeyValue() wurde von mir falsch implementiert.
Änderung von Codierungen: viele Straßen müssen nun als str. geschriben werden. Dafür werden nun auch Straße 42 gefunden.
update: Version 1 (Commandref überarbeitet)
BugFix: Version 2 Termine am selben Tag werden nicht gefunden (arbeitet mit LibXML um Termine zu finden)
BugFix: Version 3 Die Darstellung des Wochentages(außer Weihnachtsbäume) erfolgte ausschließlich an dem ersten auf der Webseite gefundenen Termin. Timer wird durch manuelles update neu gesetzt.
update: Version 4 Das Modul quitiert den Dienst nicht wenn keine Daten empfangen wurden. Das Modul errechnet dann selbständig anhand der vorliegenden Daten den Status und lässt die einzelnen Titel bis auf -1 fallen.
BugFix: Version 5 Das Reading "laub-_und_gartentonne..." wird nicht richtig neuberechnet.

Zur Funktionsweise (BerlinRecycling):
define <name> berlinrecycling <abholtermin>
Example: define abfuhrtermine berlinrecycling 01.01.1970

Es gibt ein neues Portal. Leider ist dieses nach zwei Wochen noch immer voller Fehler und liefert keine Daten. Die neue Version arbeitet deshalb nach einer festen(einstelbar) Periode und gleicht das Ergebnis mit der öffentlichen Webseite ab.
Update: Version 20 (arbeitet Periodisch und ruft alle veränderten Abholtermine ab.)
Update: Version 21 (Webseite wurde leicht verändert und alte Abhängigkeit wurde entfernt)
Fix: Version 22 (Modul hängt beim Abrufen der verlegten Termine -> Anpassung der Regex)

Zur Funktionsweise (Cederbaum blaueTonne):
define <name> cederbaum
Example: define blauetonne cederbaum

BugFix: Lesen der gesetzten Adresse funktioniert nicht immer - getKeyValue() wurde von mir falsch implementiert.
update: Version 1 (Commandref überarbeitet)

Zur Funktionsweise (Pappy von Alba blaueTonne):
define <name> albapappy
Example: define blauetonne albapappy

BugFix: Dezember wird in englischer Sprache nicht erkannt
BugFix: Version 2 Behebung eines Fehlers durch falsche Codierung von Straßennamen mit Sonderzeichen. Durch zusätzliches Setzen der Hausnummer führte das Modul zu einem Systemabsturz (Hausnummer kann nicht mehr ohne erfolgreiche Straße gesetzt werden)

RomanticBoy83

Noch immer keine weiteren Nutzer in Berlin - :(
Ich habe nun zusätzlich die Abholung der Weihnachtsbäume von der BSR implementiert.

Gigafix

Die beiden Module sehen ganz interessant aus, gerade bei den verschobenen Terminen an den Feiertagen.
Ich hatte seinerzeit das Problem, das die BSR den Onlinekalender für meinen Standort nicht richtig auf ihrer Website angezeigt hatte. Deshalb hatte ich Dein Modul aus dem Auge verloren...
Werde das jetzt aber mal aktiv beobachten - Danke schon mal.

Viele Grüße sendet
Gigafix
VM Synology DS918 | CubieTruck |2x HMLAN | HMUSB | 3x HMWLAN | CCU2 | MAX-Cube | nanoCUL | ZWDongle |

RomanticBoy83

Was bedeutet denn nicht richtig angezeigt? Bei mir gibt es nur Hausmüll und Weihnachtsbäume.
Biogut findet er auch an den Hausnummern wo eine Biotonne steht.
Wertstofftonne konnte ich an ganz anderen Adressen leider nur Sporadisch sehen. Auf der Webseite steht aber der Hinweis, dass man auch andere Hausnummern probieren soll um die Abholstelle heraus zu finden.

Gigafix

#4
Nicht richtig angezeigt bedeutete: die BSR hatte in der Übersicht für alle einen falschen Termin stehen, in meinem privaten Account war er aber richtig. Deshalb war der Support der BSR damals auch nicht einsichtig, obwohl ich es mehrfach mit Bildschirmfotos erklärt hatte. Aber egal, es lag in keinem Fall am Modul, und jetzt sehen die Termine auch wieder gut aus nachdem etwas Zeit ins Land gegangen ist.
VM Synology DS918 | CubieTruck |2x HMLAN | HMUSB | 3x HMWLAN | CCU2 | MAX-Cube | nanoCUL | ZWDongle |

RomanticBoy83

Ich habe noch einmal einen nachzulegen - für BerlinRecycling habe ich nun die Webseite durchackert um an das Datum für die nächste Papiertonne zu kommen.

rakete123

Hey, ggf passt das hier nicht ganz, aber kannst du ein Module bauen für Cederbaum?
http://www.cederbaum.de/blaue-tonne/abfuhrkalender/

Das wäre genial ;-)

Danke

mfg
Marcel
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

RomanticBoy83

Weil du so nett gefragt hast und es nicht viel Aufwand ist, habe ich dir ein Modul geschrieben.
PS: Das ginge auch mit HTTPMOD und ein wenig Regex eigentlich schon.

rakete123

Zitat von: RomanticBoy83 am 11 März 2018, 19:46:26
Weil du so nett gefragt hast und es nicht viel Aufwand ist, habe ich dir ein Modul geschrieben.
PS: Das ginge auch mit HTTPMOD und ein wenig Regex eigentlich schon.

Hey cool danke dir! Die Adresse habe ich mir set address gesetzt, aber beim update passiert nichts außer das im state "wait on select address" steht.
Verbose 5 vom update:

2018.03.26 15:46:25 5: [updateCederbaum]
2018.03.26 15:46:25 5: [requestCederbaum]http://www.cederbaum.de/blaue-tonne/abfuhrkalender/
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

RomanticBoy83

Die Adressen sind vorgegeben in einem Dropdown. Welche hast du denn ausgewählt? Vielleicht hab' ich irgendwo ein Sonderzeichen über sehen.

rakete123

Ja das mit dem Dropdown klappt auch. Ich hab mehrere probiert, z.b. "Abtstr."
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

RomanticBoy83

#11
Ich habe das jetzt einmal getestet. Verbose=5 sollte so aussehen:
2018.03.27 19:32:01 5: [updateCederbaum]
2018.03.27 19:32:01 5: [requestCederbaum]http://www.cederbaum.de/blaue-tonne/abfuhrkalender/
2018.03.27 19:32:01 5: Termin kommt in Frage: 20.04.2018
2018.03.27 19:32:01 5: Termin vergangen: 23.02.2018
2018.03.27 19:32:01 5: Termin vergangen: 23.03.2018
2018.03.27 19:32:01 5: Termin kommt in Frage: 18.05.2018
2018.03.27 19:32:01 5: 1524182400

Das Problem kann nur an einer Stelle liegen. Geh mal in den Quellcode und nimm die Zeile 152 wieder auf (Raute entfernen).
#Log3($name,5,"[requestedJSON]".$json);
Anschließend speichern und in fhem den Befehl (reload 57_cederbaum.pm) ausführen. Der Log sollte jetzt das gesamte Datenobjekt enthalten, welches man sich auch auf der Webseite im Quellcode ansehen kann.
Ich vermute mal, dass das JSON nicht gefunden wird auf der Webseite. Die Frage ist nur weshalb ist es bei mir vorhanden???

PROBLEM gelöst: Ich habe einen Fehler in der Implementierung gefunden. Die neue Datei ist oben im Anhang zu finden.

rakete123

Sorry für die späte Antwort. Feiertage kamen dazwischen. Jetzt läuft es, danke!

mfg
Marcel
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

castor.srs

Moin RomanticBoy,

vielen Dank für die drei Module. Das Modul BSRAbfallkalender funktioniert für die Nachbarstraße prima und zeugt genau das an, was man wissen muss. Mit ungewöhnlichen Straßennamen wie "Straße 42" (+ Hausnr. x) zeigt gibt er aber state="wrong_address" aus. In Deinem Modul scheint aus "...straße" die Kurzform "...str." zu werden. An welcher Stelle kann ich das für mich abstellen?

Beim Modul wertstofftonneberlin gibt er auch bei "normalen" Straßennamen wrong adress als state aus. Ich habe es auch mit Deiner Beispiel-define-Anweisung zur Ringbahn Straße 96-97 versucht - mit demselben Ergebnis. Wie finde ich heraus, woran der Fehler bei mir liegt?

Besten Dank vorab und liebe Grüße


RomanticBoy83

#14
Ich schau mal nach. Ich gebe die Eingabe einfach an die Webseite weitet. Dort erhalte ich eine Auswahl, welche hoffentlich nur noch eine Möglichkeit hat. Versuche mal eine eindeutige Eingabe auf der Webseite der BSR zu finden. Das Modul versucht genau das und über nimmt die gefundene.

Ich habe etwas an der Codierung bei bsr_abfallkalender geändert. Getestet habe ich Straße 42 in 13127 Pankow
Für die Wertstofftonne finde ich auf die Schnelle keinen Ansatz. Da versagt einfach mal die Webseite (Angabe ohne Hausnummer steht dort) -> eventuell haben die ein problem und erkennen diese Angabe genau so.


Lösungsansatz:
Ich habe eine Lösung auch für Wertstofftonne gefunden: Auf der Webseite sieht man das nicht, aber man bekommt bei Eingabe von str 13127 ALLE. Diese Straße im Objekt geliefert, könnte man mit Fhem dann die richtige Straße suchen und zur weiteren Verarbeitung bringen. Das war jedoch mein erster Gehversuch in Fhem. Ich müsste dafür mehr Logik reinbringen und wie bei der BSR dann eine Auswahl erstellen. Werde ich auf meine Todoliste bringen und das Modul bei Gelegenheit umschreiben!

Bis dahin: Habe ich eine Möglichkeit geschaffen, dass man den "adreskey" manipulieren kann. Es gibt jetzt ein set in welchen man eine 7stellige Nummer eintippen kann.
Herausfinden kann man diese Nummer nur mit dem Debugger des Browsers.

  • Öffnet den Debugger auf der Webseite mit [F12].
  • Gebt als Straße [str] ein und die Postleitzahl
  • führt jetzt die Suche aus
  • Ihr erhaltet jetzt nur eine Straße zur Auswahl
  • In der Antwort im Debugger [api-abfuhr.php?str=str&plz=13127&step=1] seht ihr jedoch im JSON-Format alle verfügbaren Straße
  • ich habe dann einen jsonviewer über google bemüht um straße 42 zu suchen und mir den adrkey zu notieren