From 6860ce60bc490bb9eb2f83aeff90887632cf6ffd Mon Sep 17 00:00:00 2001 From: Carl-Christian Salvesen Date: Wed, 10 Aug 2022 12:39:42 +0200 Subject: [PATCH] Plugin for Min Renovasjon in Norway --- .../source/minrenovasjon_no.py | 98 +++++++++++++++++++ doc/source/minrenovasjon_no.md | 30 ++++++ 2 files changed, 128 insertions(+) create mode 100644 custom_components/waste_collection_schedule/waste_collection_schedule/source/minrenovasjon_no.py create mode 100644 doc/source/minrenovasjon_no.md diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/minrenovasjon_no.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/minrenovasjon_no.py new file mode 100644 index 00000000..7f65a8c5 --- /dev/null +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/minrenovasjon_no.py @@ -0,0 +1,98 @@ +import requests +import urllib.parse +import json +import datetime +import re + +from waste_collection_schedule import Collection # type: ignore[attr-defined] +from pprint import pprint + +TITLE = "Min Renovasjon" +DESCRIPTION = "Source for Norkart Komtek MinRenovasjon (Norway)." +URL = "https://www.norkart.no/komtek/renovasjon/" + +# **street_code:** \ +# **county_id:** \ +# Can be found with this REST-API call. +# ``` +# https://ws.geonorge.no/adresser/v1/#/default/get_sok +# https://ws.geonorge.no/adresser/v1/sok?sok=Min%20Gate%2012 +# ``` +# "street_code" equals to "adressekode" and "county_id" equals to "kommunenummer". + +TEST_CASES = { + "Sandvika Rådhus": { + "street_name": "Rådhustorget", + "house_number": 2, + "street_code": 2469, + "county_id": 3024 + } +} + +BASE_URL = "https://komteksky.norkart.no/komtek.renovasjonwebapi/api/" +APP_KEY = "AE13DEEC-804F-4615-A74E-B4FAC11F0A30" + +class Source: + def __init__(self, street_name, house_number, street_code, county_id): + self._street_name = street_name + self._house_number = house_number + self._street_code = street_code + self._county_id = county_id + self._icon_map = { + "": "mdi:trash-can", + "brush": "mdi:trash-can", + "farligavfall": "mdi:trash-can", + "glassogmetallemballasje": "mdi:trash-can", + "hageavfall": "mdi:leaf", + "klaerogsko": "mdi:hanger", + "matavfall": "mdi:trash-can", + "matrestavfall": "mdi:trash-can", + "papir": "mdi:newspaper-variant-multiple", + "plastemballasje": "mdi:trash-can", + "restavfall": "mdi:trash-can" + } + + def fetch(self): + headers = { + 'Kommunenr': str(self._county_id), + 'RenovasjonAppKey': APP_KEY, + 'user-agent': 'Home-Assitant-waste-col-sched/0.1' + } + args = {} + + r = requests.get(BASE_URL + 'fraksjoner', params = args, headers = headers) + + type = {} + for f in json.loads(r.content): + # pprint(f) + icon = self._icon_map[re.sub(r"^.*?/(\w+)\.\w{3,4}$", "\\1", f['Ikon'])] + type[f['Id']] = { + 'name': f['Navn'], + 'image': f['Ikon'], + 'icon': icon + } + + args = { + 'gatenavn': self._street_name, + 'husnr': self._house_number, + 'gatekode': self._street_code, + + } + + r = requests.get(BASE_URL + 'tommekalender', params = args, headers = headers) + + entries = [] + for f in json.loads(r.content): + for d in f['Tommedatoer']: + entries.append( + Collection( + date = datetime.datetime.strptime( + d, "%Y-%m-%dT%H:%M:%S" + ).date(), + t = type[f['FraksjonId']]['name'], + icon = type[f['FraksjonId']]['icon'], + picture = type[f['FraksjonId']]['image'] + ) + ) + + return entries diff --git a/doc/source/minrenovasjon_no.md b/doc/source/minrenovasjon_no.md new file mode 100644 index 00000000..c8371d38 --- /dev/null +++ b/doc/source/minrenovasjon_no.md @@ -0,0 +1,30 @@ +# Min Renovasjon + +This plugin is based on https://github.com/Danielhiversen/home_assistant_min_renovasjon + +`street_code` and `county_id` needs to be looked up at kartverket: + + * Webgui: https://ws.geonorge.no/adresser/v1/#/default/get_sok + * API: https://ws.geonorge.no/adresser/v1/sok?sok=Min%20Gate%2012 + +`street_code` equals to `adressekode` and `county_id` equals to `kommunenummer`. + + +``` +waste_collection_schedule: + sources: + - name: minrenovasjon_no + args: + street_name: "Rådhustorget" + house_number: "2" + street_code: "2469" + county_id: "3024" +``` + + +``` +sensor: + - platform: waste_collection_schedule + name: renovasjon + details_format: generic +```