Hentedato for avfall i Home Assistant
Når Sirkula henter avfallet neste gang
Her skal vi se nærmere på hvordan vi kan få opplistet neste hentedato i Home Assistant for ulike avfallstyper på din adresse.
I dette innlegget skal vi se nærmere på når søppel blir hentet og hvordan man i Home Assistant kan liste opp når f.eks. neste dato for papiravfall. Dette innlegget er basert på løsning som er diskutert på Home Assistant sitt diskusjonsforum https://community.home-assistant.io/t/min-renovasjon/115406 Koden er ikke min, kun tilpasset mitt bruk.
Det kan være ulike fremgangsmåter for å hente ut data avhengig av din kommune. Ta derfor en titt på nevnte diskusjonsforum hvor det nevnes ulike nettadresser man kan kjøre spørring mot.
Om du synes det er litt i overkant mye å gå løs på koden selv så finnes det noen som har laget en tilsvarende løsning som kan installeres i Home Assistant https://github.com/eyesoft/home-assistant-custom-components
Jeg bor i en av kommunene som sogner til Sirkula IKS. På deres nettsted kan man skrive inn en adresse for å få vite når neste hentedato for ulike avfallstyper.
Ved å inspisere kallet mellom nettleser og Sirkulas nettsider så kjøres det tre ulike kall. Det første gir meg adresseid, gatenavn og husnummer. Det andre kallet baserer seg på opplysningene fra første kallet og gir meg så en JSON tilbake med tømmedatoer et år frem i tid for ulike avfallstype. Det tredje kallet gir en PDF. Det trenger vi ikke.
Men ved å kopiere adressen til kall nr 2, så får vi altså et array med objekter for hver avfallstype. Det er denne som er interessant for meg. For denne vil jeg bruke i Home Assistant for å hente inn datoer for neste gang avfall blir hentet.
Kallet ser slik ut:
https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
Jeg har erstattet adresseid, gatenavn og husnummer. Så her må du sette inn din eget.
Her er et forkortet eksempel på data som kommer i retur. Hver avfallstype har sin fraksjonsid. I eksempelet har jeg en avfallstype.
[{
"FraksjonId":1,
"Fraksjon":{
"Id":1,
"Navn":"Restavfall",
"Ikon":"https://komteksky.norkart.no/komtek.renovasjonwebapi/Ikoner/restavfall.png"},
"Tommedatoer":[
"2021-03-04T00:00:00",
"2021-04-06T00:00:00",
"2021-05-04T00:00:00",
"2021-06-07T00:00:00",
"2021-07-05T00:00:00",
"2021-08-02T00:00:00",
"2021-08-30T00:00:00",
"2021-09-27T00:00:00",
"2021-10-25T00:00:00",
"2021-11-22T00:00:00",
"2021-12-20T00:00:00"
]
},
....
}]
Nå har vi altså funnet korrekt adresse å kjøre et kall mot og får tilbake data. Nå må vi inn i Home Assistant og legge til en ny sensor. I mitt tilfelle har jeg Home Assistant Core og redigerer derfor oppsettet via terminalen. Uansett så er det filen configuration.yaml som er stedet vi skal fortsette.
Her legger vi til en ny sensor. Du kan i hovedsak kopiere koden under (om du bruker Sirkula IKS). Som du ser i JSON-eksempelet over så har hver avfallstype sin egen ID. Der er det en sensor pr. avfallstype.
sensor:
- platform: rest
name: Sirkula Raw Rest
value_template: >
{% for entry in value_json %}
{% if entry.FraksjonId == 1 %}
{{ entry.Tommedatoer[0] }}
{% endif %}
{% endfor %}
method: GET
scan_interval: 43200
resource: https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
force_update: true
- platform: rest
name: Sirkula Raw Mat
value_template: >
{% for entry in value_json %}
{% if entry.FraksjonId == 3 %}
{{ entry.Tommedatoer[0] }}
{% endif %}
{% endfor %}
method: GET
scan_interval: 43210
resource: https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
force_update: true
- platform: rest
name: Sirkula Raw Glass Metall
value_template: >
{% for entry in value_json %}
{% if entry.FraksjonId == 4 %}
{{ entry.Tommedatoer[0] }}
{% endif %}
{% endfor %}
method: GET
scan_interval: 43220
resource: https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
force_update: true
- platform: rest
name: Sirkula Raw Plast
value_template: >
{% for entry in value_json %}
{% if entry.FraksjonId == 7 %}
{{ entry.Tommedatoer[0] }}
{% endif %}
{% endfor %}
method: GET
scan_interval: 43230
resource: https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
force_update: true
- platform: rest
name: Sirkula Raw Papir
value_template: >
{% for entry in value_json %}
{% if entry.FraksjonId == 2 %}
{{ entry.Tommedatoer[0] }}
{% endif %}
{% endfor %}
method: GET
scan_interval: 43240
resource: https://komtek.sirkula.no/aac8b502-cd0c-485c-8ee0-d29a1c41839d/api/komtek/tommekalender?adresseid=XXXX&gatenavn=YYYY&husnr=ZZ
force_update: true
- platform: template
sensors:
avfall_rest_template:
friendly_name: Avfall Restavfall
value_template: "{{ as_timestamp(states('sensor.sirkula_raw_rest')) | timestamp_custom('%d.%m.%Y') }}"
avfall_mat_template:
friendly_name: Avfall Mat
value_template: "{{ as_timestamp(states('sensor.sirkula_raw_mat')) | timestamp_custom('%d.%m.%Y') }}"
avfall_glassmetall_template:
friendly_name: Avfall Glass og metall
value_template: "{{ as_timestamp(states('sensor.sirkula_raw_glass_metall')) | timestamp_custom('%d.%m.%Y') }}"
avfall_plast_template:
friendly_name: Avfall Plast
value_template: "{{ as_timestamp(states('sensor.sirkula_raw_plast')) | timestamp_custom('%d.%m.%Y') }}"
avfall_papir_template:
friendly_name: Avfall Papir
value_template: "{{ as_timestamp(states('sensor.sirkula_raw_papir')) | timestamp_custom('%d.%m.%Y') }}"
Kort forklart: Ca hver 12. time så kjøres det et nytt kall og det hentes ut neste hentedato pr. avfallstype. Dette blir lagt til i Home Assistant som en sensor-verdi. Som du ser så har jeg et lite forskjell på intervallene slik at de ikke skal kjøres samtidig.
Etter at koden er lagt til i configuration.yaml, så kjør en sjekk av fila og start HA på nytt. Etter omstart så kan du legge til et nytt kort.
Jeg har brukt følgende kode for mitt kort:
type: entities
entities:
- entity: sensor.avfall_rest_template
name: Restavfall
icon: 'mdi:trash-can-outline'
- entity: sensor.avfall_mat_template
name: Matavfall
icon: 'mdi:food-off'
- entity: sensor.avfall_glassmetall_template
name: Glass og metall
icon: 'mdi:glass-pint-outline'
- entity: sensor.avfall_papir_template
name: Papiravfall
icon: 'mdi:newspaper-variant-outline'
- entity: sensor.avfall_plast_template
name: Plast
icon: 'mdi:trash-can-outline'
title: Avfall tømmedatoer
state_color: false
show_header_toggle: false
Fordeler og ulemper
Disse dataene er ikke ment å hentes ut på denne måten. Så når som helst kan Sirkula endre enten datamodellen eller punktet (URL-en) for uthenting. Hvis Home Assistant slutter å vise dato så er det stor sjanse for at dette har hendt.
Siden dataene ikke ment å hentes ut slik så kan man jo spekulere i om man har lov til å gjøre det på denne måten. Mitt argument er at dette er data som er offentlige, jeg betaler dyrt for å holde liv i Sirkula og deres tjenester via skatter og avgifter til min kommune. Jeg tjener ikke penger på å hente ut dataene og de brukes kun til privat bruk i mitt hjem.