Afvalwijzer

Afvalwijzer

2 december 2022 19 Door Ivo

Weer vergeten op de afvalwijzer te kijken wanneer het papier aan de straat moest staan 🤔.
Dat moet anders kunnen. Ontvang een WhatsApp bericht of andere notificatie.

Dit werkt alleen in Nederland. 

HACS

Installeer de integratie Afvalwijzer en frontend auto-entities. Die vind je gewoon in de HACS lijsten.
Er zijn veel afvalverwerkers ondersteund.
Onder andere:
mijnafvalwijzer, afvalstoffendienstkalender (all), rova, ACV, almere, areareiniging, avalex, avri, BAR, hellendoorn, meerlanden, meppel, RAD, twentemilieu, waardlanden, westland, ximmio, reinis, alkmaar, alphenaandenrijn, berkelland, blink, cranendonck, cyclus, DAR, denhaag, gad, hvc, lingewaard, middelburgngen, montfoort, peelenmaas, prezero, purmerend, RWM, schouwenand, spaarnelanden, sudwestfryslan, suez, venray, voorschoten, waalre, ZRD, eemsdelta (iCalendar), RD4, deafvalapp

Na installatie start je Home Assistant opnieuw op.

Configuration.yaml

Pas de configuration.yaml aan en voeg deze toe. Pas minimaal de 3 verplichte regels toe met jouw gegevens.

sensor:
  - platform: afvalwijzer
    provider: mijnafvalwijzer         # (verplicht, default = mijnafvalwijzer) kies een afval verwerker
    postal_code: 1111AA               # (verplicht, default = '')
    street_number:  11                # (verplicht, default = '')
#    suffix: ''                       # (optional, default = '')
#    exclude_pickup_today: true       # (optional, default = true) to take or not to take Today into account in the next pickup.
#    default_label: geen              # (optional, default = geen) label if no date found
#    id: ''                           # (optional, default = '') Voor als je meerdere afval verwerkers wilt
#    exclude_list: ''                 # (optional, default = '') comma separated list of wast types (case ignored). F.e. "papier, gft"

Plaatjes als icoontjes

De plaatjes sla je op in de www map, ik heb een aantal plaatjes die je gratis kunt downloaden.

customize.yaml aanpassen

sensor.afvalwijzer_pmd:
  entity_picture: /local/pmd.png
  friendly_name: PMD
sensor.afvalwijzer_takken:
  entity_picture: /local/takken.png
  friendly_name: Takken
sensor.afvalwijzer_restafval:
  entity_picture: /local/rest.png
  friendly_name: Rest
sensor.afvalwijzer_papier:
  entity_picture: /local/papier.png
  friendly_name: Papier
sensor.afvalwijzer_kerstbomen:
  entity_picture: /local/kerst.png
  friendly_name: Kerst
sensor.afvalwijzer_gft:
  entity_picture: /local/gft2.png
  friendly_name: GFT


sensor.afvalwijzer_today:
  friendly_name: Vandaag
sensor.afvalwijzer_tomorrow:
  friendly_name: Morgen
sensor.afvalwijzer_next_item:
  friendly_name: Next pickup item
sensor.afvalwijzer_next_in_days:
  friendly_name: Next pickup in days
input_boolean.waste_reminder:
  icon: mdi:reminder  

afvalwijzer

Herstart Home Assistant en om bovenstaande icons in de LoveLace te krijgen gebruik je de volgende kaart-code.

type: custom:auto-entities
card:
  type: glance
filter:
  include:
    - entity_id: sensor.afvalwijzer_gft
    - entity_id: sensor.afvalwijzer_papier
    - entity_id: sensor.afvalwijzer_pmd
    - entity_id: sensor.afvalwijzer_restafval
    - entity_id: sensor.afvalwijzer_takken
sort:
  method: state
  attribute: Days_until
  reverse: false

Automation

Wil jij berichten krijgen op de dag voordat het afval aan de straat moet staan?

Pas nogmaals de configuration.yaml aan.

input_boolean:
  waste_moved:
    name: Waste has been moved
    initial: 'off'
    icon: mdi:delete-empty
  waste_reminder:
    name: Waste reminder enabled
    initial: 'on'

Maak 3 automations aan

alias: Reset waste notification
trigger:
  - platform: state
    entity_id: input_boolean.waste_moved
    to: "on"
    for:
      hours: 12
action:
  - service: input_boolean.turn_off
    entity_id: input_boolean.waste_moved
  - service: input_boolean.turn_on
    entity_id: input_boolean.waste_reminder

alias: Mark waste as moved from notification
trigger:
  - platform: event
    event_type: ios.notification_action_fired
    event_data:
      actionName: MARK_WASTE_MOVED
action:
  - service: input_boolean.turn_on
    entity_id: input_boolean.waste_moved
  - service: input_boolean.turn_on
    entity_id: input_boolean.trash_outside

Krijg tussen 18:00 en 23:00 elk uur een melding op je telefoon, in mijn geval via Whatsapp.

alias: Waste has not been moved
trigger:
  - platform: time_pattern
    hours: /1
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: input_boolean.waste_moved
        state: "off"
      - condition: state
        entity_id: input_boolean.waste_reminder
        state: "on"
      - condition: time
        after: "18:00:00"
        before: "23:00:00"
      - condition: template
        value_template: "{{ states('sensor.afvalwijzer_tomorrow') != 'Geen' }}"
action:
  - service: notify.mobile_app_ #zend het naar een HA App op een telefoon
    data:
      title: Afval
      message: >-
        Het is vandaag - {{ now().strftime("%d-%m-%Y") }}. Afvaltype(n): {{
        states.sensor.afvalwijzer_tomorrow.state }} wordt opgehaald op: {{
        (as_timestamp(now()) + (24*3600)) | timestamp_custom("%d-%m-%Y", True)
        }}!
      data:
        push:
          badge: 0
          category: afval
    enabled: true
  - service: notify.whatsapp  #Callmebot methode
    data:
      title: Afval
      message: >-
        Het is vandaag - {{ now().strftime("%d-%m-%Y") }}. Afvaltype(n): {{
        states.sensor.afvalwijzer_tomorrow.state }} wordt opgehaald op: {{
        (as_timestamp(now()) + (24*3600)) | timestamp_custom("%d-%m-%Y", True)
        }}!
      data:
        push:
          badge: 0
          category: afval

Gebruik je de Gratis WhatsApp Add-on? Dan heb je onderstaande service nodig.

service: whatsapp.send_message
data:
  clientId: default
  to: 316<rest van je nummer>@s.whatsapp.net
  body:
    text: >-
      Het is vandaag - {{ now().strftime("%d-%m-%Y") }}. Afvaltype(n): {{
      states.sensor.afvalwijzer_tomorrow.state }} wordt opgehaald op: {{
      (as_timestamp(now()) + (24*3600)) | timestamp_custom("%d-%m-%Y", True) }}!

Je wilt natuurlijk geen melding krijg voor als de container niet aan de weg hoeft of hij er al staat.
Je zet dan simpel het schuifje aan van “Afval staat al buiten”, de melding krijg je nu niet meer, de sensor wordt na 12 uur automatisch weer uit gezet.

type: entities
entities:
  - entity: input_boolean.waste_reminder
    name: Afval melding staat
  - entity: input_boolean.waste_moved
    name: Afval staat al buiten

Afvalwijzer staat al buiten

Anders geschreven

Heb je liever een tekst als “volgende week maandag” naast de datum sensors?
Plaats onderstaande code in sensor.yaml of onder het kopje sensor, let op de spaties:

- platform: template
  sensors:
    papier_dagen_tot_afhaal:
      attribute_templates:
        numeric_days: "{{ state_attr('sensor.afvalwijzer_papier', 'days_until_collection_date') }}"
      value_template: >
        {%- set sensor  = 'sensor.afvalwijzer_papier' %}
        {%- set collection_date = as_local(as_datetime(state_attr(sensor, 'year_month_day_date'))).date() %}
        {%- set days = ['maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag' ] %}
        {%- set days_until = state_attr(sensor, 'days_until_collection_date') %}
        {% set ws = (days_until / 7) | int %}
        {% set w = 'een' if ws &lt; 0 else ws %}
        {% set wk = 'week' if w &lt; 2 else 'weken' %}
        {%- if days_until &lt;= 1 %}
          {{ ['Vandaag', 'Morgen'][days_until] }}
        {%- elif days_until &lt; 7 - now().isoweekday() %}
          {{ days[collection_date.weekday()] | title }}
        {%- elif days_until &lt; 14 - now().isoweekday() %}
          {{ 'Volgende week ' ~ days[collection_date.weekday()] }}
        {%- else %}
          {{ days[collection_date.weekday()] | title }} over {%- if w == 1 %} {{'een'}}{% else %} {{ w }}{%- endif %} {{ wk }}
        {%- endif %}
      friendly_name: Dagen tot papier
    restafval_dagen_tot_afhaal:
      attribute_templates:
        numeric_days: "{{ state_attr('sensor.afvalwijzer_restafval', 'days_until_collection_date') }}"
      value_template: >
        {%- set sensor  = 'sensor.afvalwijzer_restafval' %}
        {%- set collection_date = as_local(as_datetime(state_attr(sensor, 'year_month_day_date'))).date() %}
        {%- set days = ['maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag' ] %}
        {%- set days_until = state_attr(sensor, 'days_until_collection_date') %}
        {% set ws = (days_until / 7) | int %}
        {% set w = 'een' if ws &lt; 0 else ws %}
        {% set wk = 'week' if w &lt; 2 else 'weken' %}
        {%- if days_until &lt;= 1 %}
          {{ ['Vandaag', 'Morgen'][days_until] }}
        {%- elif days_until &lt; 7 - now().isoweekday()  %}
          {{ days[collection_date.weekday()] | title }}
        {%- elif days_until &lt; 14 - now().isoweekday()  %}
          {{ 'Volgende week ' ~ days[collection_date.weekday()] }}
        {%- else %}
          {{ days[collection_date.weekday()] | title }} over {%- if w == 1 %} {{'een'}}{% else %} {{ w }}{%- endif %} {{ wk }}
        {%- endif %}
      friendly_name: Dagen tot restafval
    gft_dagen_tot_afhaal:
      attribute_templates:
        numeric_days: "{{ state_attr('sensor.afvalwijzer_gft', 'days_until_collection_date') }}"
      value_template: >
        {%- set sensor  = 'sensor.afvalwijzer_gft' %}
        {%- set collection_date = as_local(as_datetime(state_attr(sensor, 'year_month_day_date'))).date() %}
        {%- set days = ['maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag' ] %}
        {%- set days_until = state_attr(sensor, 'days_until_collection_date') %}
        {% set ws = (days_until / 7) | int %}
        {% set w = 'een' if ws &lt; 0 else ws %}
        {% set wk = 'week' if w &lt; 2 else 'weken' %}
        {%- if days_until &lt;= 1 %}
          {{ ['Vandaag', 'Morgen'][days_until] }}
        {%- elif days_until &lt; 7 - now().isoweekday() %}
          {{ days[collection_date.weekday()] | title }}
        {%- elif days_until &lt; 14 - now().isoweekday() %}
          {{ 'Volgende week ' ~ days[collection_date.weekday()] }}
        {%- else %}
          {{ days[collection_date.weekday()] | title }} over {%- if w == 1 %} {{'een'}}{% else %} {{ w }}{%- endif %} {{ wk }}
        {%- endif %}
      friendly_name: Dagen tot GFT
    pmd_dagen_tot_afhaal:
      attribute_templates:
        numeric_days: "{{ state_attr('sensor.afvalwijzer_pmd', 'days_until_collection_date') }}"
      value_template: >
        {%- set sensor  = 'sensor.afvalwijzer_pmd' %}
        {%- set collection_date = as_local(as_datetime(state_attr(sensor, 'year_month_day_date'))).date() %}
        {%- set days = ['maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag' ] %}
        {%- set days_until = state_attr(sensor, 'days_until_collection_date') %}
        {% set w = (days_until / 7) | int  %}
        {% set wk = 'week' if w &lt; 2 else 'weken' %}
        {%- if days_until &lt;= 1 %}
          {{ ['Vandaag', 'Morgen'][days_until] }}
        {%- elif days_until &lt; 7 - now().isoweekday() %}
          {{ days[collection_date.weekday()] | title }}
        {%- elif days_until &lt; 14 - now().isoweekday() %}
          {{ 'Volgende week ' ~ days[collection_date.weekday()] }}
        {%- else %}
          {{ days[collection_date.weekday()] | title }} over {%- if w == 1 %} {{'een'}}{% else %} {{ w }}{%- endif %} {{ wk }}
        {%- endif %}
      friendly_name: Dagen tot plastic

De bovenstaande code heb ik voor afvalwijzer bijgewerkt en aangepast, de basis komt van de user Toppe op Tweakers

Ook van die sensors kun je het logo aanpassen in de customize.yaml

sensor.gft_dagen_tot_afhaal:
  entity_picture: /local/gft2.png
sensor.papier_dagen_tot_afhaal:
  entity_picture: /local/papier.png
sensor.pmd_dagen_tot_afhaal:
  entity_picture: /local/pmd.png
sensor.restafval_dagen_tot_afhaal:
  entity_picture: /local/rest.png

afvalwijzer