Min Renovasjon

That would be great!

I’ve started to look into it, but don’t know how I’m supposed to extract specific data. Like from this response, I want the dates for FraksjonId 1.

[
{
“FraksjonId”: 2,
“Tommedatoer”: [
“2019-05-16T00:00:00”,
“2019-06-13T00:00:00”
]
},
{
“FraksjonId”: 3,
“Tommedatoer”: [
“2019-05-16T00:00:00”,
“2019-06-01T00:00:00”
]
},
{
“FraksjonId”: 1,
“Tommedatoer”: [
“2019-06-01T00:00:00”,
“2019-06-27T00:00:00”
]
},
{
“FraksjonId”: 4,
“Tommedatoer”: [
“2019-06-03T00:00:00”,
“2019-07-29T00:00:00”
]
},
{
“FraksjonId”: 7,
“Tommedatoer”: [
“2019-06-03T00:00:00”,
“2019-07-01T00:00:00”
]
}
]

Paste this into Home Assistant’s Template Editor and you can experiment with the template to see how it works:

{% set x = [{   "FraksjonId": 2,
		"Tommedatoer": [
			"2019-05-16T00:00:00",
			"2019-06-13T00:00:00"
		]},
	{	"FraksjonId": 3,
		"Tommedatoer": [
			"2019-05-16T00:00:00",
			"2019-06-01T00:00:00"
		]},
	{	"FraksjonId": 1,
		"Tommedatoer": [
			"2019-06-01T00:00:00",
			"2019-06-27T00:00:00"
		]},
	{	"FraksjonId": 4,
		"Tommedatoer": [
			"2019-06-03T00:00:00",
			"2019-07-29T00:00:00"
		]},
	{	"FraksjonId": 7,
		"Tommedatoer": [
			"2019-06-03T00:00:00",
			"2019-07-01T00:00:00"
	]}] %}

a) {{ x[2] }}
b) {{ x[2].Tommedatoer[0] }}
------
{% for i in range(x | length) %}
  {%- if x[i].FraksjonId == 1 -%}
   c) {{ x[i].Tommedatoer[0] }}
  {%- endif -%}
{% endfor %}

Here are the results in the Template Editor:

1 Like

Awesome, my templates are done with your help, my friend! Thanks

1 Like

Someone has already made a custom component, that’s the one I’m using. https://github.com/eyesoft/home-assistant-custom-components

Hi, how did you find your correct parameters? (streetcode & countyid)

Go to your kommunen tømmekalender website: for example

Assuming you are using Chrome, right click on the website and click inspect. Click on Network tab

Enter your address on the website and press enter

Go back to your Network Inspection panel and Ctril+F search for your street name. It will jump to preview panel but if you go back to Header and scroll to the bottom, you will find everything you need.

1 Like

Update:

It’s better to double check the FraksjonId using the same method as well. The FraksjonId mapping for my kommune is different from the author has written on Github

Thought I’d paste in my setup in case it can be of assistance:)

You will have to get a RenovasjonsAppKey through the developer tools in a browser, in Chrome you can find it in the Network-tab in some of the calls there after you do a search.

sensor:
  - platform: rest
    scan_interval: 1800
    name: Renovasjon Restavfall
    device_class: timestamp
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=926&gatenavn=%C3%98vreberg%20&gatekode=092604000&husnr=4
    headers:
      Content-Type: undefined
      Kommunenr: 926
      RenovasjonAppKey: YOUR-KEY-HERE
    value_template: '{{(as_timestamp(value_json[0].Tommedatoer[0]) + 32400) | timestamp_utc}}'

  - platform: rest
    scan_interval: 1800
    name: Renovasjon Papp og Papir
    device_class: timestamp
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=926&gatenavn=%C3%98vreberg%20&gatekode=092604000&husnr=4
    headers:
      Content-Type: undefined
      Kommunenr: 926
      RenovasjonAppKey: YOUR-KEY-HERE
    value_template: '{{(as_timestamp(value_json[2].Tommedatoer[0]) + 32400) | timestamp_utc}}'

  - platform: rest
    scan_interval: 1800
    name: Renovasjon Våtorganisk
    device_class: timestamp
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=926&gatenavn=%C3%98vreberg%20&gatekode=092604000&husnr=4
    headers:
      Content-Type: undefined
      Kommunenr: 926
      RenovasjonAppKey: YOUR-KEY-HERE
    value_template: '{{(as_timestamp(value_json[1].Tommedatoer[0]) + 32420) | timestamp_utc}}'

  - platform: rest
    scan_interval: 1800
    name: Renovasjon Plast
    device_class: timestamp
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=926&gatenavn=%C3%98vreberg%20&gatekode=092604000&husnr=4
    headers:
      Content-Type: undefined
      Kommunenr: 926
      RenovasjonAppKey: YOUR-KEY-HERE
    value_template: '{{(as_timestamp(value_json[3].Tommedatoer[0]) + 32420) | timestamp_utc}}'

I also made some binary sensors that let me know (through a Google Home automation) when they are picking up the trash tomorrow:

binary_sensor:
  - platform: template
    sensors:
      renovation_general_waste_tomorrow:
        friendly_name: "Varsel Renovasjon Restavfall"
        value_template: "{{((as_timestamp(states('sensor.renovasjon_restavfall')) - (3600 * 13)) | timestamp_local) < (as_timestamp(now()) | timestamp_local)}}"

      renovation_paper_tomorrow:
        friendly_name: "Varsel Renovasjon Papp og Papir"
        value_template: "{{((as_timestamp(states('sensor.renovasjon_papp_og_papir')) - (3600 * 13)) | timestamp_local) < (as_timestamp(now()) | timestamp_local)}}"

      renovation_plastic_tomorrow:
        friendly_name: "Varsel Renovasjon Plast"
        value_template: "{{((as_timestamp(states('sensor.renovasjon_plast')) - (3600 * 13)) | timestamp_local) < (as_timestamp(now()) | timestamp_local)}}"

      renovation_organic_tomorrow:
        friendly_name: "Varsel Renovasjon Bioavfall"
        value_template: "{{((as_timestamp(states('sensor.renovasjon_vatorganisk')) - (3600 * 13)) | timestamp_local) < (as_timestamp(now()) | timestamp_local)}}"

Hello and thank you for the code.
In our kommune we have 5 recyceling fractions. Do you know how to add the fifth?
I have tried the following code without any luck.

  - platform: rest
    scan_interval: 1800
    name: Glass og metall
    device_class: timestamp
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=529&gatenavn=Kl%C3%B8vervegen%20&gatekode=052903600&husnr=10A
    headers:
      Content-Type: undefined
      Kommunenr: 529
      RenovasjonAppKey: CORRECTAPPKEY
    value_template: '{{(as_timestamp(value_json[4].Tommedatoer[0]) + 32420) | timestamp_utc}}'

It’s a little hard to tell without pulling down the JSON reply and having a look, the code you posted should work as from the data I’m getting, every FraksjonID is a separate array item. It is possible that there are more array items in the list that do not have the required data?

My array just looks like this:

[
    {
        "FraksjonId": 1,
        "Tommedatoer": [
            "2019-08-05T00:00:00",
            "2019-08-19T00:00:00"
        ]
    },
    {
        "FraksjonId": 3,
        "Tommedatoer": [
            "2019-08-05T00:00:00",
            "2019-08-12T00:00:00"
        ]
    },
    {
        "FraksjonId": 2,
        "Tommedatoer": [
            "2019-08-20T00:00:00",
            "2019-09-17T00:00:00"
        ]
    },
    {
        "FraksjonId": 7,
        "Tommedatoer": [
            "2019-08-20T00:00:00",
            "2019-09-17T00:00:00"
        ]
    }
]

I had a quick look, and the reply from your kommune should put the fifth fraction at value_json[4].Tommedatoer[0], so I am at a loss as to why it wouldn’t work.

Also, having had a look at it, it turns out the AppId seems to be the same as in my kommune, although I don’t know whether it’s stored in a cookie and unique to every user or just the same for everyone everywhere…

Your kommunes reply:

[
    {
        "FraksjonId": 4,
        "Tommedatoer": [
            "2019-08-12T00:00:00",
            "2019-10-07T00:00:00"
        ]
    },
    {
        "FraksjonId": 7,
        "Tommedatoer": [
            "2019-08-12T00:00:00",
            "2019-09-09T00:00:00"
        ]
    },
    {
        "FraksjonId": 2,
        "Tommedatoer": [
            "2019-08-16T00:00:00",
            "2019-09-13T00:00:00"
        ]
    },
    {
        "FraksjonId": 3,
        "Tommedatoer": [
            "2019-08-16T00:00:00",
            "2019-08-30T00:00:00"
        ]
    },
    {
        "FraksjonId": 1,
        "Tommedatoer": [
            "2019-08-30T00:00:00",
            "2019-09-27T00:00:00"
        ]
    }
]

The index of the dict is different every time after a waste collection. Is it possible to index using the FraksjonID?

I’m not sure I’m afraid, I haven’t really experimented much with parsing logic in HA… To be honest it took me some time to figure out how to just get the value by index. Maybe someone else has an idea?

I’m using this because the index changes randomly. Problably not the most effective way to do it, but it gets the job done.

Probably can make it work for @HansOHG too…?

sensor:
  - platform: rest
    name: Avfall rest
    value_template: >
      {% for entry in value_json %}
        {% if entry.FraksjonId == 1 %}
          {{ entry.Tommedatoer[0] }}
        {% endif %}
      {% endfor %}
    method: GET
    scan_interval: 43200 # once every 12 hours
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=XXX&gatenavn=XXX&gatekode=XXX&husnr=XXX
    force_update: true
    headers:
       Host: norkartrenovasjon.azurewebsites.net
       User-Agent: Home Assistant
       Referer: http://norkartrenovasjon.azurewebsites.net/XXX
       RenovasjonAppKey: XXX
       Kommunenr: XXX
  - platform: rest
    name: Avfall mat
    value_template: >
      {% for entry in value_json %}
        {% if entry.FraksjonId == 3 %}
          {{ entry.Tommedatoer[0] }}
        {% endif %}
      {% endfor %}
    method: GET
    scan_interval: 43200 # once every 12 hours
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=XXX&gatenavn=XXX&gatekode=XXX&husnr=XXX
    force_update: true
    headers:
       Host: norkartrenovasjon.azurewebsites.net
       User-Agent: Home Assistant
       Referer: http://norkartrenovasjon.azurewebsites.net/XXX
       RenovasjonAppKey: XXX
       Kommunenr: XXX
  - platform: rest
    name: Avfall papir
    value_template: >
      {% for entry in value_json %}
        {% if entry.FraksjonId == 2 %}
          {{ entry.Tommedatoer[0] }}
        {% endif %}
      {% endfor %}
    method: GET
    scan_interval: 43200 # once every 12 hours
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=XXX&gatenavn=XXX&gatekode=XXX&husnr=XXX
    force_update: true
    headers:
       Host: norkartrenovasjon.azurewebsites.net
       User-Agent: Home Assistant
       Referer: http://norkartrenovasjon.azurewebsites.net/XXX
       RenovasjonAppKey: XXX
       Kommunenr: XXX
  - platform: rest
    name: Avfall plast
    value_template: >
      {% for entry in value_json %}
        {% if entry.FraksjonId == 7 %}
          {{ entry.Tommedatoer[0] }}
        {% endif %}
      {% endfor %}
    method: GET
    scan_interval: 43200 # once every 12 hours
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=XXX&gatenavn=XXX&gatekode=XXX&husnr=XXX
    force_update: true
    headers:
       Host: norkartrenovasjon.azurewebsites.net
       User-Agent: Home Assistant
       Referer: http://norkartrenovasjon.azurewebsites.net/XXX
       RenovasjonAppKey: XXX
       Kommunenr: XXX
  - platform: rest
    name: Avfall spesial
    value_template: >
      {% for entry in value_json %}
        {% if entry.FraksjonId == 24 %}
          {{ entry.Tommedatoer[0] }}
        {% endif %}
      {% endfor %}
    method: GET
    scan_interval: 43200 # once every 12 hours
    resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=XXX&gatenavn=XXX&gatekode=XXX&husnr=XXX
    force_update: true
    headers:
       Host: norkartrenovasjon.azurewebsites.net
       User-Agent: Home Assistant
       Referer: http://norkartrenovasjon.azurewebsites.net/XXX
       RenovasjonAppKey: XXX
       Kommunenr: XXX
  - platform: template
    sensors:
      avfall_rest_template:
        friendly_name: Rest
        value_template: "{{ as_timestamp(states('sensor.avfall_rest')) | timestamp_custom('%d/%m') }}"
      avfall_mat_template:
        friendly_name: Mat
        value_template: "{{ as_timestamp(states('sensor.avfall_mat')) | timestamp_custom('%d/%m') }}"
      avfall_papir_template:
        friendly_name: Papir
        value_template: "{{ as_timestamp(states('sensor.avfall_papir')) | timestamp_custom('%d/%m') }}"
      avfall_plast_template:
        friendly_name: Plast
        value_template: "{{ as_timestamp(states('sensor.avfall_plast')) | timestamp_custom('%d/%m') }}"
      avfall_spesial_template:
        friendly_name: Spesial
        value_template: "{{ as_timestamp(states('sensor.avfall_spesial')) | timestamp_custom('%d/%m') }}"
2 Likes

Thanks it works great.

In case anyone need them. Here are the FraksjonId mappings

Could someone please give a “complete guide/tutorial” on how to install this?

The key is something like aac8b502-xxxx-yyyy-xxxx-xxxxxxxxxxxx ?
Referer like “Referer: https://www.sirkula.no/hjemme-hos-deg/tommekalender/

Custom component give a error

Log Details (ERROR)
Fri Jan 17 2020 19:51:31 GMT+0100 (Central European Standard Time)
Error during setup of component min_renovasjon
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/setup.py", line 170, in _async_setup_component
    hass, processed_config
  File "/config/custom_components/min_renovasjon/__init__.py", line 48, in async_setup
    min_renovasjon = MinRenovasjon(street_name, street_code, house_no, county_id, date_format)
  File "/config/custom_components/min_renovasjon/__init__.py", line 61, in __init__
    self._kalender_list = self._get_calendar_list()
  File "/config/custom_components/min_renovasjon/__init__.py", line 121, in _get_calendar_list
    kalender_list = self._parse_calendar_list(tommekalender, fraksjoner)
  File "/config/custom_components/min_renovasjon/__init__.py", line 140, in _parse_calendar_list
    for calender_entry in tommekalender_json:
TypeError: 'bool' object is not iterable

Remember to update to new county numbers, btw.

If you want a countdown, instead of dates in the sensors:

  {% for entry in value_json %}
    {% if entry.FraksjonId == 2 %}
      {{ (as_timestamp(entry.Tommedatoer[0]) - as_timestamp(now())) | timestamp_custom("%d")| int }}
    {% endif %}
  {% endfor %}

With new code it gets 401 errors, with old code it gets TypeError: ‘bool’ object is not iterable

Hi!
Trying hard to get this to work, I added the 3 files in ha under custom_components\min_renovasjon.
Then added this to my sensors.yaml

- platform: rest
  scan_interval: 1800
  name: Renovasjon Restavfall
  device_class: timestamp
  resource: https://norkartrenovasjon.azurewebsites.net/proxyserver.ashx?server=https://komteksky.norkart.no/komtek.renovasjonwebapi/api/tommekalender/?kommunenr=xxxx&gatenavn=veinavn&gatekode=xxxxxxxxx&husnr=xx
  headers:
    Content-Type: undefined
    Kommunenr: xxxx
    RenovasjonAppKey: xxxxx-xxxxx-xxxx-xxxxx
    value_template: '{{(as_timestamp(value_json[0].Tommedatoer[0]) + 32400) | timestamp_utc}}'

But i am getting “invalid date” as result.
Any tips will be highly appreciated!