diff --git a/README.md b/README.md index c30bb12d..c7f4751a 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ Currently the following service providers are supported: - [Südbrandenburgischer Abfallzweckverband](./doc/source/sbazv_de.md) - [Umweltbetrieb Stadt Bielefeld](./doc/source/bielefeld_de.md) - [WAS Wolfsburg](./doc/source/was_wolfsburg_de.md) +- [Wermelskirchen](./doc/source/wermelskirchen_de.md) ### Lithuania 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..1f2b4b4b --- /dev/null +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/wermelskirchen_de.py @@ -0,0 +1,87 @@ +from datetime import datetime + +import requests +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 = f"https://abfallkalender.citkomm.de/wermelskirchen/abfallkalender-{str(now.year)}/ics/FrontendIcs.html" + params = { + "tx_citkoabfall_abfallkalender[strasse]": self._street, + "tx_citkoabfall_abfallkalender[hausnummer]": self._house_number, + "tx_citkoabfall_abfallkalender[abfallarten][0]": 86, + "tx_citkoabfall_abfallkalender[abfallarten][1]": 85, + "tx_citkoabfall_abfallkalender[abfallarten][2]": 84, + "tx_citkoabfall_abfallkalender[abfallarten][3]": 82, + "tx_citkoabfall_abfallkalender[abfallarten][4]": 81, + "tx_citkoabfall_abfallkalender[abfallarten][5]": 80, + "tx_citkoabfall_abfallkalender[abfallarten][6]": 79, + "tx_citkoabfall_abfallkalender[abfallarten][7]": 76, + "tx_citkoabfall_abfallkalender[abfallarten][8]": 75, + "tx_citkoabfall_abfallkalender[abfallarten][9]": 74, + } + r = requests.get(url, params=params) + 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 94dac79f..b7ad021d 100644 --- a/info.md +++ b/info.md @@ -116,6 +116,7 @@ Currently the following service providers are supported: - [Südbrandenburgischer Abfallzweckverband](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/sbazv_de.md) - [Umweltbetrieb Stadt Bielefeld](https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/bielefeld_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) ### Lithuania