AutomatiseringIntegrationerJulekalender 2022

HA Jule-tip #7: Påmindelse om affald

I dagens jule-tip, viser jeg, hvordan du kan bruge Home Assistant til at huske dig på tidspunkter for afhentning af affald.

Hent data om affaldsafhentning

For at kunne lave en påmindelse, skal HA kende de tidspunkter, hvor der hentes affald hos dig.

Der er heldigvis flere forskellige muligheder for at få tidspunkter for affaldsafhentning ind i HA.

OPDATERING MARTS 2024
RenoWeb integrationen, der er anvendt nedenfor er ved at blive erstattet af en ny integration: Affaldshåndtering DK. Den nye integration virker endnu ikke med alle de gamle kommuner på RenoWeb platformen, men når du skifter, er det let at rette automatiseringen i nedenstående eksempel.

For de kommuner, som er tilsluttet RenoWeb, er der lavet en integrationHACS. Her indtaster du navn på kommunen og din adresse. Så oprettes der sensorer for hver type affald med tidspunkt for næste afhentning:

Bruger din kommune ikke RenoWeb, kan du i stedet bruge Garbage Collection integrationen, der også kan installeres via HACS. Her skal du selv oprette tidspunkter for de enkelte typer affald ved at angive frekvens for afhentning:

Påmindelse om hentning af affald

Nu har du har fået tidspunkter for hentning af affald ind i HA og kan vælge at vise dem på dit dashboard. Det kan du f.eks. gøre i en kalender, som vist i jule-tip #3. Du kan også bruge et standard entities kort eller hente Garbage Collection Card fra HACS.

Men så skal du selv huske at tjekke dit dashboard. Det er lidt smartere at bruge en automatisering til at sende dig en påmindelse dagen før en planlagt afhentning. Så kan du huske at sætte affald ud.

En automatisering i HA kunne f.eks. se sådan ud, hvis du anvender Garbage Collection Card, som sensor:

alias: Notifikation dagen før afhentning af affald
description: ""
trigger:
  - platform: time
    at: "19:15:00"
condition:
  - condition: template
    value_template: >-
      {{ states.sensor | rejectattr('attributes.device_class', 'undefined') |
      selectattr('attributes.device_class', 'eq',
      'garbage_collection__schedule')  | selectattr('attributes.days', 'eq', 1) |
      map(attribute='attributes.friendly_name') | list | count > 0}}
action:
  - service: notify.notify
    data:
      title: Der hentes affald i morgen
      message: >
        Der hentes følgende skraldspand(e) i morgen:
         
        {{ states.sensor | rejectattr('attributes.device_class', 'undefined') |
        selectattr('attributes.device_class', 'eq',
        'garbage_collection__schedule') | selectattr('attributes.days', 'eq', 1) |
        map(attribute='attributes.friendly_name') | list | join('\n') }} 
         
        Husk at køre skraldespand(e) ud.
mode: single

Automatiseringen kører hver aften kl. 19.15 og sender en besked, hvis én eller flere skraldespande er planlagt til at blive tømt den efterfølgende dag. Notifikationen indeholder navne på alle skraldespande, der vil blive tømt.

Hvis du bruger Renoweb integrationen kan man lave det samme med lidt ændring i automatiseringen:

alias: Notifikation dagen før afhentning af affald
description: ""
trigger:
  - platform: time
    at: "19:15:00"
condition:
  - condition: template
    value_template: >-
      {{ states.sensor | selectattr('entity_id', 'contains', 'renoweb') |
      selectattr('state', 'eq', '1') | selectattr('attributes.data_valid','eq',
      true) | map(attribute='attributes.friendly_name') | list | count > 0 }}
action:
  - service: notify.notify
    data:
      title: Der hentes affald i morgen
      message: >
        Der hentes følgende skraldspand(e) i morgen:
         
        {{ states.sensor | selectattr('entity_id', 'contains', 'renoweb') |
        selectattr('state', 'eq', '1') |
        selectattr('attributes.data_valid','eq', true) |
        map(attribute='attributes.friendly_name') | list | join('\n') }}
         
        Husk at køre skraldespand(e) ud.
mode: single

Hvis du bruger den nye Affaldshåndtering DK integration, skal der rettes lidt i automatiseringen, så den ser sådan her ud:

alias: Notifikation dagen før afhentning af affald
description: ""
trigger:
  - platform: time
    at: "19:15:00"
condition:
  - condition: template
    value_template: >-
      {{ states.sensor | selectattr('entity_id', 'contains', 'affalddk') |
      selectattr('state', 'eq', '1') | rejectattr('entity_id', 'contains', 'naeste_afhentning') | map(attribute='attributes.friendly_name') | list | count > 0 }}
action:
  - service: notify.notify
    data:
      title: Der hentes affald i morgen
      message: >
        Der hentes følgende skraldspand(e) i morgen:
         
        {{ states.sensor | selectattr('entity_id', 'contains', 'affalddk') |
        selectattr('state', 'eq', '1') | 
        rejectattr('entity_id', 'contains', 'naeste_afhentning') |
        map(attribute='attributes.name') | list | join('\n') }}
         
        Husk at køre skraldespand(e) ud.
mode: single

Jeg har selv lavet en automatisering til det samme i Node-RED, hvor jeg også sender et billede fra et overvågningskamera med i notifikationen. Så kan man se om skraldespanden er kørt ud til vejen:

Det giver denne besked med mulighed for at udskyde påmindelsen til senere:

notification_garbage

Koden til ovenstående flow er her:

[{"id":"37cc98f06d5e6893","type":"tab","label":"Garbage collection notification","disabled":false,"info":"","env":[]},{"id":"9613842e7fa46233","type":"inject","z":"37cc98f06d5e6893","name":"Run at 19.15","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"15 19 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":130,"y":100,"wires":[["214ccb5c47bb45f7"]]},{"id":"214ccb5c47bb45f7","type":"ha-get-entities","z":"37cc98f06d5e6893","name":"Collection tomorrow?","server":"49e64ea71c5ef4d9","version":0,"rules":[{"property":"attributes.days","logic":"is","value":"1","valueType":"num"},{"property":"attributes.device_class","logic":"is","value":"garbage_collection__schedule","valueType":"str"}],"output_type":"split","output_empty_results":false,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":360,"y":100,"wires":[["310cab24d0bc9e1f"]]},{"id":"189c833442505edd","type":"delay","z":"37cc98f06d5e6893","name":"Ask again in 15 mins.","pauseType":"delay","timeout":"15","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"outputs":1,"x":510,"y":180,"wires":[["214ccb5c47bb45f7"]]},{"id":"310cab24d0bc9e1f","type":"template","z":"37cc98f06d5e6893","name":"Entity names","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload.attributes.friendly_name}}","output":"str","x":560,"y":100,"wires":[["d607c127d6c016cc"]]},{"id":"9d1a4351710c42c0","type":"switch","z":"37cc98f06d5e6893","name":"Ready for collection?","property":"payload.event.action","propertyType":"msg","rules":[{"t":"eq","v":"COLLECTION_READY","vt":"str"},{"t":"eq","v":"COLLECTION_ASK_LATER","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":290,"y":180,"wires":[[],["189c833442505edd"]],"outputLabels":["Yes - do nothing","Remind me later"]},{"id":"d607c127d6c016cc","type":"join","z":"37cc98f06d5e6893","name":"combine msgs","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"[92,110]","joinerType":"bin","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":740,"y":100,"wires":[["8daef606e2b63e3d"]]},{"id":"b1aa10b85ca02460","type":"server-events","z":"37cc98f06d5e6893","name":"IOS Action?","server":"49e64ea71c5ef4d9","version":2,"eventType":"mobile_app_notification_action","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":100,"y":180,"wires":[["9d1a4351710c42c0"]]},{"id":"8daef606e2b63e3d","type":"api-current-state","z":"37cc98f06d5e6893","name":"Sun is up?","server":"49e64ea71c5ef4d9","version":3,"outputs":2,"halt_if":"above_horizon","halt_if_type":"str","halt_if_compare":"is","entity_id":"sun.sun","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"cur_state","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":770,"y":180,"wires":[["6c759a470ded0d05"],["0fb0d3fed1f499a9"]],"outputLabels":["Yes","No"]},{"id":"6c759a470ded0d05","type":"api-call-service","z":"37cc98f06d5e6893","name":"Snapshot - lastest","server":"49e64ea71c5ef4d9","version":5,"debugenabled":false,"domain":"camera","service":"snapshot","areaId":[],"deviceId":[],"entityId":["camera.indgang","camera.havesti"],"data":"{\"filename\":\"/config/www/snapshots/havesti.jpg\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"payload","output_location_type":"none","x":1030,"y":100,"wires":[["f115ecacf78ee7d0"]]},{"id":"0fb0d3fed1f499a9","type":"api-call-service","z":"37cc98f06d5e6893","name":"Turn on spotlight","server":"49e64ea71c5ef4d9","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.indgang_spotlight"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"payload","output_location_type":"none","x":980,"y":180,"wires":[["6c759a470ded0d05","9132a0e30ec455de"]]},{"id":"f115ecacf78ee7d0","type":"api-call-service","z":"37cc98f06d5e6893","name":"Send notification","server":"49e64ea71c5ef4d9","version":5,"debugenabled":false,"domain":"notify","service":"notify","areaId":[],"deviceId":[],"entityId":[],"data":"{\"message\":\"Der hentes skrald i morgen: \\n\\n{{payload}}\\n\\nEr skraldespand(e) kørt ud?\",\"data\":{\"actions\":[{\"action\":\"COLLECTION_READY\",\"title\":\"Ja\",\"activationMode\":\"background\",\"authenticationRequired\":\"no\",\"destructive\":\"no\"},{\"action\":\"COLLECTION_ASK_LATER\",\"title\":\"Spørg mig igen lidt senere\",\"activationMode\":\"background\",\"authenticationRequired\":\"no\",\"destructive\":\"no\"}],\"attachment\":{\"content-type\":\"jpeg\",\"image\":\"http://localhost:8123/local/snapshots/havesti.jpg\",\"url\":\"http://localhost:8123/local/snapshots/havesti.jpg\"}}}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"payload","output_location_type":"none","x":1370,"y":100,"wires":[[]]},{"id":"9132a0e30ec455de","type":"delay","z":"37cc98f06d5e6893","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1180,"y":180,"wires":[["f255f92cb1c3f3ac"]]},{"id":"f255f92cb1c3f3ac","type":"api-call-service","z":"37cc98f06d5e6893","name":"Turn off spotlight","server":"49e64ea71c5ef4d9","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.indgang_spotlight"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"payload","output_location_type":"none","x":1370,"y":180,"wires":[[]]},{"id":"9389d473ab0ca725","type":"comment","z":"37cc98f06d5e6893","name":"Alert the day before a scheduled garbage collection","info":"# Notification before garbage collection\n \n---\n<br>\n\n## Purpose\n\n---\n\nSend actionable notification the evening before a scheduled garbage collection with camera snapshot and option to confirm that garbage bins have been taken out","x":220,"y":40,"wires":[]}]

Hvor nyttigt var dette indlæg?

Gennemsnitlig bedømmelse 5 / 5. Bedømmelser: 1

Ingen stemmer indtil videre! Vær den første til at bedømme dette indlæg.

Jeg beklager, at dette indlæg ikke var nyttigt for dig!

Hvordan kan indlægget forbedres?

10 thoughts on “HA Jule-tip #7: Påmindelse om affald

  • Lars Finne-Larsson

    Hej Anders
    Kan se du har lavet besked automatisering til Garbage collection, jeg kan ikke greje hvordan jeg laver YAML koden om så den passer til Renoweb istedet. Kunne du overtales til at poste denne også?

    Med venlig hilsen

    Lars Finne-Larsson

    Besvar
    • Hej Lasse,

      Tak for din kommentar. Jeg har nu opdateret indlægget med et eksempel på en automatisering, der sender en notifikation dagen før en (eller flere) planlagte affaldshentninger i Renoweb integrationen.

      Mvh.

      Anders

      Besvar
  • Thomas Olsen

    Hej Anders.
    Kan du dele dit node-red flow også ?
    MVH. Thomas.

    Besvar
    • Hej Thomas,

      Jeg har nu også opdateret med koden til mi Node-RED flow. Håber du kan bruge den.

      Mvh.

      Anders

      Besvar
  • Hej Anders.

    Meget brugbar guide.
    Takket være den har jeg nu et Renoweb setup i Home Assistant, som sender notificationer på de rigtige tidspunkter.
    Jeg vil også snart følge dine andre guides.
    Det er meget værdsat hvad du deler her.

    Mvh Thomas H.

    Besvar
    • Hej Thomas,

      Tak for din kommentar og godt at høre, at du kunne bruge min guide. Håber du finder mere inspiration i andre indlæg…

      Mvh.

      Anders

      M

      Besvar
  • 🤩 Det er så godt. Tak for skriv!

    Til Aarhus-og-omegn-folket.

    Kredsløb (Tidligere AffaldVarme Aarhus) udstiller tømningsdage i et ics-format.

    Besvar
    • Hej Anders,

      Tak for din kommentar og tippet til dem, der bor i Aarhus-området.

      Besvar
    • Som kan tilføjes som kalender i HA??

      Besvar

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *