From 8d3c072a4b00832d36bee68481f9559d36f0ce94 Mon Sep 17 00:00:00 2001 From: Luca Lindhorst Date: Fri, 9 Sep 2022 03:10:01 +0200 Subject: [PATCH] Added source for wermelskirchen --- README.md | 1 + .../source/wermelskirchen_de.py | 86 +++++++++++++++++++ doc/source/wermelskirchen_de.md | 42 +++++++++ info.md | 1 + 4 files changed, 130 insertions(+) create mode 100644 custom_components/waste_collection_schedule/waste_collection_schedule/source/wermelskirchen_de.py create mode 100644 doc/source/wermelskirchen_de.md diff --git a/README.md b/README.md index eea9f27e..2dcf2ffb 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ Currently the following service providers are supported: - [Stadtreinigung.Hamburg](./doc/source/stadtreinigung_hamburg.md) - [Stadtreinigung-Leipzig.de](./doc/source/stadtreinigung_leipzig_de.md) - [WAS Wolfsburg](./doc/source/was_wolfsburg_de.md) +- [Wermelskirchen](./doc/source/wermelskirchen_de.md) ### Netherlands diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/wermelskirchen_de.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/wermelskirchen_de.py new file mode 100644 index 00000000..9bb3aa0f --- /dev/null +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/wermelskirchen_de.py @@ -0,0 +1,86 @@ +import requests +from datetime import datetime +import urllib.parse +from waste_collection_schedule import Collection # type: ignore[attr-defined] +from waste_collection_schedule.service.ICS import ICS + +TITLE = "Abfallkalender Wermelskirchen" +DESCRIPTION = "Source for Abfallabholung Wermelskirchen, Germany" +URL = "https://www.wermelskirchen.de/rathaus/buergerservice/formulare-a-z/abfallkalender-online/" + +TEST_CASES = { + "Rathaus": {"street": "Telegrafenstraße", "house_number": "29"}, + "Krankenhaus": {"street": "Königstraße", "house_number": "100"}, + "Mehrzweckhalle": {"street": "An der Mehrzweckhalle", "house_number": "1"}, +} + +INFOS = { + "Restabfall 2-woechentlich": { + "icon": "mdi:trash-can", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/1/b/csm_Restmuell_6b2b32c774.png" + }, + "Restabfall 4-woechentlich": { + "icon": "mdi:trash-can", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/1/b/csm_Restmuell_6b2b32c774.png" + }, + "Restabfall 6-woechentlich": { + "icon": "mdi:trash-can", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/1/b/csm_Restmuell_6b2b32c774.png" + }, + "Gelber Sack": { + "icon": "mdi:recycle-variant", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/f/4/csm_GelbeTonne_24ffc276b2.png" + }, + "Papier": { + "icon": "mdi:package-variant", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/2/3/csm_Papiertonne_919ed3b5da.png" + }, + "Biotonne": { + "icon": "mdi:leaf", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/6/f/csm_Biotonne_wk_ae1b0e61aa.png" + }, + "Schadstoffsammlung": { + "icon": "mdi:bottle-tonic-skull", + "image": "https://abfallkalender.citkomm.de/fileadmin/_processed_/4/2/csm_sondermuell_62f5701a7b.png" + }, + "Weihnachtsbaum": { + "icon": "mdi:pine-tree", + "image": "" + }, +} + +class Source: + def __init__(self, street, house_number): + self._street = street + self._house_number = str(house_number) + self._ics = ICS() + + def fetch(self): + # the url contains the current year, but this doesn't really seems to matter at least for the ical, since the result is always the same + # still replace it for compatibility sake + now = datetime.now() + url = ( + "https://abfallkalender.citkomm.de/wermelskirchen/abfallkalender-"+ + str(now.year)+ + "/ics/FrontendIcs.html?tx_citkoabfall_abfallkalender%5Bstrasse%5D="+ + urllib.parse.quote_plus(self._street)+ + "&tx_citkoabfall_abfallkalender%5Bhausnummer%5D="+ + urllib.parse.quote_plus(self._house_number)+ + "&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B0%5D=86&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B1%5D=85&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B2%5D=84&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B3%5D=82&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B4%5D=81&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B5%5D=80&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B6%5D=79&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B7%5D=76&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B8%5D=75&tx_citkoabfall_abfallkalender%5Babfallarten%5D%5B9%5D=74" + ) + r = requests.get(url) + r.raise_for_status() + + r.encoding = "utf-8" + dates = self._ics.convert(r.text) + + entries = [] + for d in dates: + info = INFOS.get(d[1], {"icon": "mdi:trash-can", "image": ""}) + entries.append(Collection( + d[0], + d[1], + picture = info['image'], + icon = info['icon'] + )) + return entries diff --git a/doc/source/wermelskirchen_de.md b/doc/source/wermelskirchen_de.md new file mode 100644 index 00000000..a6aab9f6 --- /dev/null +++ b/doc/source/wermelskirchen_de.md @@ -0,0 +1,42 @@ +# Wermelskirchen Abfallkalender + +Support for schedules provided by [Abfallkalender Wermelskirchen](https://www.wermelskirchen.de/rathaus/buergerservice/formulare-a-z/abfallkalender-online/) located in NRW, Germany. + +## Limitations + +The used api (ics) only provides future waste collection dates. + +## Configuration via configuration.yaml + +```yaml +waste_collection_schedule: + sources: + - name: wermelskirchen_de + args: + street: Telegrafenstraße + house_number: "10" + customize: + - type: Restabfall 2-woechentlich + alias: Restabfall + show: false + - type: Restabfall 4-woechentlich + alias: Restabfall + show: true + - type: Restabfall 6-woechentlich + alias: Restabfall + show: false +``` + +### Configuration Variables + +**street**
+*(string) (required)* + +**house_number**
+*(string) (required)* + +## How to get the source arguments + +Set your street and your house number. Should they not work, check on [Abfallkalender Wermelskirchen](https://www.wermelskirchen.de/rathaus/buergerservice/formulare-a-z/abfallkalender-online/) and use the closest entries. + +Depending on your booked schedule for "Restabfall"/"Restmüll" you should set `show` in one of the types to true and the others to false. diff --git a/info.md b/info.md index 39c59c81..94b5f114 100644 --- a/info.md +++ b/info.md @@ -100,6 +100,7 @@ Currently the following service providers are supported: - [Stadtreinigung.Hamburg](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/stadtreinigung_hamburg.md) - [Stadtreinigung-Leipzig.de](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/stadtreinigung_leipzig_de.md) - [WAS Wolfsburg](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/was_wolfsburg_de.md) +- [Wermelskirchen](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/wermelskirchen_de.md) ### Netherlands