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