From b515123e6fcec7dbcff778c7abf9cf1bb61cada9 Mon Sep 17 00:00:00 2001 From: DaM Date: Tue, 7 Jan 2025 19:41:55 +0100 Subject: [PATCH] =?UTF-8?q?New=20Source:=20Kiedy=20=C5=9Bmieci,=20Poland?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../waste_collection_schedule/sources.json | 6 + .../translations/de.json | 26 +++ .../translations/en.json | 26 +++ .../translations/it.json | 26 +++ .../source/kiedysmieci_info.py | 154 ++++++++++++++++++ doc/source/kiedysmieci_info.md | 48 ++++++ info.md | 2 +- 8 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 custom_components/waste_collection_schedule/waste_collection_schedule/source/kiedysmieci_info.py create mode 100644 doc/source/kiedysmieci_info.md diff --git a/README.md b/README.md index 17f5ca65d..b6b1128f6 100644 --- a/README.md +++ b/README.md @@ -1967,6 +1967,7 @@ If your service provider is not listed, feel free to open a [source request issu - [Gminne Przedsiębiorstwo Komunalne Sp. z o.o. w Skarszewach](/doc/source/sims_pl.md) / sisms.pl - [Gospodarka Odpadami - Pelplin](/doc/source/sims_pl.md) / sisms.pl - [Gospodarka Odpadami - Starogard Gdański](/doc/source/sims_pl.md) / sisms.pl +- [Kiedy śmieci](/doc/source/kiedysmieci_info.md) / kiedysmieci.info - [Klient Szablonowy - Ekostrażnik](/doc/source/sims_pl.md) / sisms.pl - [Klient Szablonowy - Karty Usług](/doc/source/sims_pl.md) / sisms.pl - [KOMUS](/doc/source/sims_pl.md) / sisms.pl diff --git a/custom_components/waste_collection_schedule/sources.json b/custom_components/waste_collection_schedule/sources.json index 141011df3..f7c1e5025 100644 --- a/custom_components/waste_collection_schedule/sources.json +++ b/custom_components/waste_collection_schedule/sources.json @@ -12736,6 +12736,12 @@ }, "id": "sims_pl" }, + { + "title": "Kiedy \u015bmieci", + "module": "kiedysmieci_info", + "default_params": {}, + "id": "kiedysmieci_info" + }, { "title": "Klient Szablonowy - Ekostra\u017cnik", "module": "sims_pl", diff --git a/custom_components/waste_collection_schedule/translations/de.json b/custom_components/waste_collection_schedule/translations/de.json index 0ca7723cd..af1a6c3cc 100644 --- a/custom_components/waste_collection_schedule/translations/de.json +++ b/custom_components/waste_collection_schedule/translations/de.json @@ -10948,6 +10948,32 @@ }, "data_description": {} }, + "args_kiedysmieci_info": { + "title": "Quelle konfigurieren", + "description": "Konfiguriere deinen Service Provider. Mehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md", + "data": { + "calendar_title": "Kalender Titel", + "district": "Bezirk", + "municipality": "Gemeinde", + "street": "Straße", + "voivodeship": "Voivodeship" + }, + "data_description": { + "calendar_title": "Ein lesbarerer oder benutzerfreundlicherer Name für den Müllkalender. Wenn nichts angegeben wird, wird der Name der Quelle verwendet." + } + }, + "reconfigure_kiedysmieci_info": { + "title": "Quelle Neu Konfigurieren", + "description": "Konfiguriere deinen Service Provider. Mehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md", + "data": { + "calendar_title": "Kalender Titel", + "district": "Bezirk", + "municipality": "Gemeinde", + "street": "Straße", + "voivodeship": "Voivodeship" + }, + "data_description": {} + }, "args_sepan_remondis_pl": { "title": "Quelle konfigurieren", "description": "Konfiguriere deinen Service Provider. Mehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/sepan_remondis_pl.md", diff --git a/custom_components/waste_collection_schedule/translations/en.json b/custom_components/waste_collection_schedule/translations/en.json index ada2c07c6..2c3a93f56 100644 --- a/custom_components/waste_collection_schedule/translations/en.json +++ b/custom_components/waste_collection_schedule/translations/en.json @@ -10979,6 +10979,32 @@ }, "data_description": {} }, + "args_kiedysmieci_info": { + "title": "Configure Source", + "description": "Configure your service provider. More details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md.", + "data": { + "calendar_title": "Calendar Title", + "district": "District", + "municipality": "Municipality", + "street": "Street", + "voivodeship": "Voivodeship" + }, + "data_description": { + "calendar_title": "A more readable, or user-friendly, name for the waste calendar. If nothing is provided, the name returned by the source will be used." + } + }, + "reconfigure_kiedysmieci_info": { + "title": "Reconfigure Source", + "description": "Configure your service provider. More details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md.", + "data": { + "calendar_title": "Calendar Title", + "district": "District", + "municipality": "Municipality", + "street": "Street", + "voivodeship": "Voivodeship" + }, + "data_description": {} + }, "args_sepan_remondis_pl": { "title": "Configure Source", "description": "Configure your service provider. More details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/sepan_remondis_pl.md.", diff --git a/custom_components/waste_collection_schedule/translations/it.json b/custom_components/waste_collection_schedule/translations/it.json index 9c46d49ae..89ea6e921 100644 --- a/custom_components/waste_collection_schedule/translations/it.json +++ b/custom_components/waste_collection_schedule/translations/it.json @@ -10909,6 +10909,32 @@ }, "data_description": {} }, + "args_kiedysmieci_info": { + "title": "Configurazione Sorgente", + "description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. Maggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md.", + "data": { + "calendar_title": "Nome Calendario", + "district": "Distretto", + "municipality": "Municipality", + "street": "Strada", + "voivodeship": "Voivodeship" + }, + "data_description": { + "calendar_title": "Puoi cambiare il nome del calendario della raccolta dei rifiuti, altrimenti di default verra' utilizzato il nome del tuo fornitore di servizi." + } + }, + "reconfigure_kiedysmieci_info": { + "title": "Riconfigurazione Sorgente", + "description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. Per maggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/kiedysmieci_info.md.", + "data": { + "calendar_title": "Nome Calendario", + "district": "Distretto", + "municipality": "Municipality", + "street": "Strada", + "voivodeship": "Voivodeship" + }, + "data_description": {} + }, "args_sepan_remondis_pl": { "title": "Configurazione Sorgente", "description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. Maggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/sepan_remondis_pl.md.", diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/kiedysmieci_info.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/kiedysmieci_info.py new file mode 100644 index 000000000..aaa20ec8f --- /dev/null +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/kiedysmieci_info.py @@ -0,0 +1,154 @@ +import datetime +import ssl, urllib, json, requests +from waste_collection_schedule import Collection +from waste_collection_schedule.exceptions import ( + SourceArgumentNotFoundWithSuggestions, +) + +TITLE = "Kiedy śmieci" +DESCRIPTION = "Source script for Kiedy śmieci, Poland" +URL = "https://kiedysmieci.info" +COUNTRY = "pl" +TEST_CASES = { + "Nadolany, podkarpackie, sanocki, Bukowsko": { + "voivodeship": "podkarpackie", + "district": "sanocki", + "municipality": "Bukowsko", + "street": "Nadolany", + }, + "Kędzierz, podkarpackie, dębicki, Dębica": { + "voivodeship": "podkarpackie", + "district": "dębicki", + "municipality": "Dębica", + "street": "Kędzierz", + }, +} + +API_URL = "https://cloud.fxsystems.com.pl:8078/odbiory_smieci/%s" + +ICON_MAP = { + "zmieszane": "mdi:trash-can", + "metale i tworzywa sztuczne": "mdi:recycle", + "papier i tektura": "mdi:file-outline", + "szkło": "mdi:glass-fragile", + "biodegradowalne": "mdi:leaf", +} + +def get_json(url): + #workaround to establish ssl connection to this host + ssl_ctx = ssl.create_default_context() + ssl_ctx.set_ciphers("DEFAULT") + + response = urllib.request.urlopen(API_URL % url, context=ssl_ctx) + return json.loads(response.read().decode("utf-8")) + +def get_municipalities(): + try: + municipalities = get_json("dostepne_gminy/v5")["gminy"] + except: + municipalities = None + + return municipalities + +municipalities = get_municipalities() + +''' +def EXTRA_INFO(): + return [ + { + "title": "Gmina %s [woj. %s, pow. %s]" % (m["gmina"], m["wojewodztwo"], m["powiat"]), + "default_params": { + "voivodeship": m["wojewodztwo"], + "district": m["powiat"], + "municipality": m["gmina"] + } + } for m in municipalities + ] +''' + +class Source: + def __init__(self, voivodeship: str, district: str, municipality: str, street: str): + self.voivodeship = voivodeship + self.district = district + self.municipality = municipality + self.street = street + + voivodeships_list = self.get_voivodeships_list() + + if voivodeship.lower() not in [v.lower() for v in voivodeships_list]: + raise SourceArgumentNotFoundWithSuggestions( + "voivodeship", + voivodeship, + suggestions = voivodeships_list, + ) + + districts_list = self.get_districts_list() + + if district.lower() not in [c.lower() for c in districts_list]: + raise SourceArgumentNotFoundWithSuggestions( + "district", + district, + suggestions = districts_list, + ) + + municipalities_list = self.get_municipalities_list() + + if municipality.lower() not in [m.lower() for m in municipalities_list]: + raise SourceArgumentNotFoundWithSuggestions( + "municipality", + municipality, + suggestions = municipalities_list, + ) + + streets_list = self.get_streets_list() + + if street.lower() not in [s.lower() for s in streets_list]: + raise SourceArgumentNotFoundWithSuggestions( + "street", + street, + suggestions = streets_list, + ) + + self.schedule = self.get_schedule() + + def get_voivodeships_list(self): + return list(set(m["wojewodztwo"] for m in municipalities)) + + def get_districts_list(self): + return list(set([m["powiat"] for m in municipalities if m["wojewodztwo"].lower() == self.voivodeship.lower()])) + + def get_municipalities_list(self): + return [m["gmina"] for m in municipalities if m["wojewodztwo"].lower() == self.voivodeship.lower() and m["powiat"].lower() == self.district.lower()] + + def get_streets_list(self): + try: + streets = get_json("dostepne_gminy?wojewodztwo=%s&powiat=%s&gmina=%s" % (urllib.parse.quote(self.voivodeship), urllib.parse.quote(self.district), urllib.parse.quote(self.municipality)))["listaUlic"] + streets = [s["ulica"] for s in streets] + except: + streets = None + + return streets + + def get_schedule(self): + try: + schedule = get_json("lista_terminow/v6?wojewodztwo=%s&powiat=%s&gmina=%s&ulica=%s" % (urllib.parse.quote(self.voivodeship), urllib.parse.quote(self.district), urllib.parse.quote(self.municipality), urllib.parse.quote(self.street)))["listaTerminow"] + + except: + schedule = None + + return schedule + + def fetch(self) -> list[Collection]: + + entries = [] + + for entry in self.schedule: + entries.append( + Collection( + date = datetime.datetime.strptime(entry["dataOdbioru"], "%Y-%m-%d").date(), + t = entry["nazwaTypuSmieci"], + icon = ICON_MAP.get(entry["nazwaTypuSmieci"], "mdi:trash-can"), + ) + ) + + return entries diff --git a/doc/source/kiedysmieci_info.md b/doc/source/kiedysmieci_info.md new file mode 100644 index 000000000..aed62c7e5 --- /dev/null +++ b/doc/source/kiedysmieci_info.md @@ -0,0 +1,48 @@ +# Kiedy śmieci + +Support for schedules provided by [Kiedy śmieci](https://kiedysmieci.info/), serving multiple municipalities, Poland. + +## Configuration via configuration.yaml + +```yaml +waste_collection_schedule: + sources: + - name: kiedysmieci_info + args: + voivodeship: voivodeship (województwo) + district: district (powiat) + municipality: municipality (gmina) + street: street (ulica) + +``` + +### Configuration Variables + +**voivodeship** +*(String) (required)* + +**district** +*(String) (required)* + +**municipality** +*(String) (required)* + +**street** +*(String) (required)* + +## Example + +```yaml +waste_collection_schedule: + sources: + - name: kiedysmieci_info + args: + voivodeship: podkarpackie + district: sanocki + municipality: Bukowsko + street: Nadolany +``` + +## How to get the source argument + +The parameters can be found by using the apps ([GooglePlay](https://play.google.com/store/apps/details?id=com.fxsystems.KiedySmieci_info), [AppStore](https://apps.apple.com/pl/app/kiedy-%C5%9Bmieci/id1539957094?l=pl)) or on the [website](https://kiedysmieci.info/index.html#harmonogram) by providing your municipality in the search form. \ No newline at end of file diff --git a/info.md b/info.md index ed7d9ff51..54722e617 100644 --- a/info.md +++ b/info.md @@ -33,7 +33,7 @@ Waste collection schedules from service provider web sites are updated daily, de | Netherlands | 's-Hertogenbosch, ACV Group, Afval Wijzer, Afvalstoffendienst.nl, Alpen an den Rijn, Altena, Area Afval, Avalex, Avri, Bar Afvalbeheer, Bernheze, Circulus, Cyclus NV, Dar, Den Haag, Edam-Volendam, GAD, Gemeente Almere, Gemeente Berkelland, Gemeente Cranendonck, Gemeente Hellendoorn, Gemeente Lingewaard, Gemeente Meppel, Gemeente Middelburg + Vlissingen, Gemeente Peel en Maas, Gemeente Schouwen-Duiveland, Gemeente Sudwest-Fryslan, Gemeente Venray, Gemeente Voorschoten, Gemeente Waalre, Gemeente Westland, Goes, Heusden, HVC Groep, Meerlanden, Mijn Blink, Oisterwijk, PreZero, Purmerend, RAD BV, Rd4, Reinis, Spaarnelanden, Twente Milieu, Vught, Waardlanden, Ximmio, ZRD, Ôffalkalinder van Noardeast-Fryslân & Dantumadiel | | New Zealand | Auckland Council, Christchurch City Council, Dunedin District Council, Gore, Invercargill & Southland, Hamilton City Council, Horowhenua District Council, Hutt City Council, Napier City Council, Porirua City, Rotorua Lakes Council, Tauranga City Council, Waipa District Council, Wellington City Council | | Norway | Avfall Sør, Kristiansand, BIR (Bergensområdets Interkommunale Renovasjonsselskap), Fosen Renovasjon, IRiS, Min Renovasjon, Movar IKS, Oslo Kommune, ReMidt Orkland muni, Sandnes Kommune, Stavanger Kommune, Trondheim | -| Poland | ABRUKO PLUS, App Moje Odpady, Bydgoszcz Pronatura, Czerwonak, Murowana Goślina, Oborniki, Ecoharmonogram, Gmina Bardo, Gmina Bartniczka, Gmina Brzeg Dolny, Gmina Brzeziny, Gmina Cedry Wielkie, Gmina Chojnów, Gmina Czechowice- Dziedzice, Gmina Czernichów, Gmina Daleszyce, Gmina Dobra, Gmina Dygowo, Gmina Gaworzyce, Gmina Gać, Gmina Gniew, Gmina Gorlice, Gmina Gorzyce, Gmina Gościno, Gmina Grabów nad Prosną, Gmina Grodków, Gmina Grodzisk Mazowiecki, Gmina i Miasto Dzierzgoń, Gmina i Miasto Nowe Skalmierzyce, Gmina Inowrocław, Gmina Jeżewo, Gmina Kamionka Wielka, Gmina Kluczbork, Gmina Kolbudy, Gmina Kozy, Gmina Krotoszyce, Gmina Kruszwica, Gmina Krzanowice, Gmina Legnickie Pole, Gmina Lubrza, Gmina Miedziana Góra, Gmina Miejska Hrubieszów, Gmina Miejska Kowal, Gmina Mielec, Gmina Międzybórz, Gmina Miękinia, Gmina Mogilany, Gmina Mokrsko, Gmina Mysłakowice, Gmina Nowa Ruda, Gmina Nowa Słupia, Gmina Nowy Staw, Gmina Olsztynek, Gmina Osiecznica, Gmina Osiek, Gmina Ostrowiec Świętokrzyski, Gmina Pajęczno, Gmina Pawłowice, Gmina Polanica-Zdrój, Gmina Porąbka, Gmina Pruszcz, Gmina Przeworno, Gmina Przykładowa, Gmina Pyskowice, Gmina Radoszyce, Gmina Reda, Gmina Rumia, Gmina Skarszewy, Gmina Sobótka, Gmina Sośno, Gmina Starogard Gdański, Gmina Staszów, Gmina Stawiguda, Gmina Strzelin, Gmina Szczytna, Gmina Sztum, Gmina Szumowo, Gmina Słupca, Gmina Słupno, Gmina Topólka, Gmina Ulan-Majorat, Gmina Wieluń, Gmina Wierzchlas, Gmina Wilkowice, Gmina Wisznia Mała, Gmina Wiązów, Gmina Wodzisław, Gmina Wojcieszków, Gmina Wołów, Gmina Wąchock, Gmina Władysławowo, Gmina Zaleszany, Gmina Zbrosławice, Gmina Zduńska Wola, Gmina Złoty Stok, Gmina Łęczyce, Gmina Świdnica, Gmina Świecie, Gmina Żmigród, Gminne Przedsiębiorstwo Komunalne Sp. z o.o. w Skarszewach, Gospodarka Odpadami - Pelplin, Gospodarka Odpadami - Starogard Gdański, Klient Szablonowy - Ekostrażnik, Klient Szablonowy - Karty Usług, KOMUS, Koziegłowy/Objezierze/Oborniki, Miasto i Gmina Morawica, Miasto i Gmina Łasin, Miasto Inowrocław, Miasto Malbork, Miasto Rejowiec Fabryczny, Miasto Rydułtowy, Miasto Wałbrzych, MPGK Katowice, Parafia św. Wojciecha Biskupa i Męczennika w Nidzicy, Polkowice, Poznań, Przedsiębiorstwo Gospodarki Komunalnej w Wołowie Sp. z o.o., SISMS.pl / BLISKO, Strzelce Krajeńskie, Warsaw, Wrocław, ZGPD-7 | +| Poland | ABRUKO PLUS, App Moje Odpady, Bydgoszcz Pronatura, Czerwonak, Murowana Goślina, Oborniki, Ecoharmonogram, Gmina Bardo, Gmina Bartniczka, Gmina Brzeg Dolny, Gmina Brzeziny, Gmina Cedry Wielkie, Gmina Chojnów, Gmina Czechowice- Dziedzice, Gmina Czernichów, Gmina Daleszyce, Gmina Dobra, Gmina Dygowo, Gmina Gaworzyce, Gmina Gać, Gmina Gniew, Gmina Gorlice, Gmina Gorzyce, Gmina Gościno, Gmina Grabów nad Prosną, Gmina Grodków, Gmina Grodzisk Mazowiecki, Gmina i Miasto Dzierzgoń, Gmina i Miasto Nowe Skalmierzyce, Gmina Inowrocław, Gmina Jeżewo, Gmina Kamionka Wielka, Gmina Kluczbork, Gmina Kolbudy, Gmina Kozy, Gmina Krotoszyce, Gmina Kruszwica, Gmina Krzanowice, Gmina Legnickie Pole, Gmina Lubrza, Gmina Miedziana Góra, Gmina Miejska Hrubieszów, Gmina Miejska Kowal, Gmina Mielec, Gmina Międzybórz, Gmina Miękinia, Gmina Mogilany, Gmina Mokrsko, Gmina Mysłakowice, Gmina Nowa Ruda, Gmina Nowa Słupia, Gmina Nowy Staw, Gmina Olsztynek, Gmina Osiecznica, Gmina Osiek, Gmina Ostrowiec Świętokrzyski, Gmina Pajęczno, Gmina Pawłowice, Gmina Polanica-Zdrój, Gmina Porąbka, Gmina Pruszcz, Gmina Przeworno, Gmina Przykładowa, Gmina Pyskowice, Gmina Radoszyce, Gmina Reda, Gmina Rumia, Gmina Skarszewy, Gmina Sobótka, Gmina Sośno, Gmina Starogard Gdański, Gmina Staszów, Gmina Stawiguda, Gmina Strzelin, Gmina Szczytna, Gmina Sztum, Gmina Szumowo, Gmina Słupca, Gmina Słupno, Gmina Topólka, Gmina Ulan-Majorat, Gmina Wieluń, Gmina Wierzchlas, Gmina Wilkowice, Gmina Wisznia Mała, Gmina Wiązów, Gmina Wodzisław, Gmina Wojcieszków, Gmina Wołów, Gmina Wąchock, Gmina Władysławowo, Gmina Zaleszany, Gmina Zbrosławice, Gmina Zduńska Wola, Gmina Złoty Stok, Gmina Łęczyce, Gmina Świdnica, Gmina Świecie, Gmina Żmigród, Gminne Przedsiębiorstwo Komunalne Sp. z o.o. w Skarszewach, Gospodarka Odpadami - Pelplin, Gospodarka Odpadami - Starogard Gdański, Kiedy śmieci, Klient Szablonowy - Ekostrażnik, Klient Szablonowy - Karty Usług, KOMUS, Koziegłowy/Objezierze/Oborniki, Miasto i Gmina Morawica, Miasto i Gmina Łasin, Miasto Inowrocław, Miasto Malbork, Miasto Rejowiec Fabryczny, Miasto Rydułtowy, Miasto Wałbrzych, MPGK Katowice, Parafia św. Wojciecha Biskupa i Męczennika w Nidzicy, Polkowice, Poznań, Przedsiębiorstwo Gospodarki Komunalnej w Wołowie Sp. z o.o., SISMS.pl / BLISKO, Strzelce Krajeńskie, Warsaw, Wrocław, ZGPD-7 | | Slovakia | fcc Environment | | Slovenia | Moji odpadki, Ljubljana, Snaga Maribor | | Sweden | Affärsverken, Avfallsapp.se - Multi Source, Boden, Borås Energi och Miljö, EDPEvent - Multi Source, Gästrike Återvinnare, Jönköping - June Avfall & Miljö, Kretslopp Sydost, Kristianstad Renhållning, Landskrona - Svalövs Renhållning, Lerum Vatten och Avlopp, Linköping - Tekniska Verken, Luleå, Lund Waste Collection, Mölndal, Norrtalje Vatten & Avfall, North / Middle Bohuslän - Rambo AB, Region Gotland, Ronneby Miljöteknik, Roslagsvatten, Samverkan Återvinning Miljö (SÅM), Skellefteå, SRV Återvinning, SSAM (Deprecated), SSAM Södra Smalånds Avfall & Miljö, Sysav Sophämntning, Söderköping, Uppsala Vatten, Uppsala Vatten och Avfall AB (Deprecated), VA Syd Sophämntning, VIVAB Sophämtning, Västervik Miljö & Energi |