Müllbenachrichtigung mit Home Assistant in 3 Schritten

@olli Hallo Olli mein Problem ist dass nicht der richtige sensor als Message gesendet wird. Da ich ja verschiedene Sensoren habe, wie du in den „conditions“ siehst. Im Code habe ich Beispielhaft mal den Bio Sensor eingefügt. Wie kann man jetzt in der Messge den korrekten Sensor ermitteln? Den „mode:single“ entferne ich.Das ist mir nicht aufgefallen weil die Automation noch nicht aktiv war. Vielen Dank dafür.

@silverwing Versuch mal folgenden Code als Teil deiner Message:

{% set morgen=(now().date() + timedelta(days=1))| string %}
{% if morgen == (states.sensor.biomull_abholung.attributes|list)[0] %} Biomüll
{% elif morgen == (states.sensor.restmull_abholung.attributes|list)[0] %} Restmüll
{% elif morgen == (states.sensor.papiermull_abholung.attributes|list)[0] %} Papier
{% elif morgen == (states.sensor.gelbe_tonne_abholung.attributes|list)[0] %} Gelbe Tonne
{% endif %}

Kannst du mir bitte einen Screenshot aus den Entwicklerwerkzeugen inkl. Spalte Attribute von den Müll-Sensoren geben, wenn mein Code-Vorschlag Probleme macht? Ich bin mir nicht ganz sicher, ob ich dein Setup richtig verstanden habe.

@olli Hallo Olli dein Code-Vorschlag funktioniert hervorragend !!. :grinning_face: 

Vielen Dank

@silverwing Perfekt, so muss das sein! :wink:

Vielen Dank für das Feedback!

Hallo Olli,

ich habe WCS auch installiert, die Automation soweit auch hinbekommen, das sie zumindest beim manuellen auslösen eine Nachricht aufs Handy schickt.

Jedoch beim durchlaufen ohne manuellen Anstubser bleibt das Handy still.

Mein Code sieht folgendermaßen aus:

 

trigger: time
at: "15:30:00"

{{ (now().date + timedelta(days=1)) | string == (states.sensor.nachster_abfuhrtermin.attributes|list)[0] }}

action: notify.mobile_app_sm_s901b
metadata: {}
data:
  message: >-
    Morgen wird folgender Müll abgeholt: {{
    (states.sensor.naechster.attributes.values()|list)[0] }}!

Wo kann da der Hase im Pfeffer liegen?

Hi @marcus !

Kannst du bitte die vollständige Automation als YAML bereitstellen (also im Pflegedialog auf die 3 Punkte oben rechts und im Kontextmenü „In YAML bearbeiten“ auswählen und dann den kompletten YAML-Code hier einfügen bitte)?

 

Hallo Olli,

 

hier der ganze Code:

alias: Benachrichtigung Abfuhrtermin
description: ""
triggers:
  - trigger: time
    at: "17:45:00"
conditions:
  - condition: template
    value_template: >-
      {{ (now().date + timedelta(days=1)) | string ==
      (states.sensor.nachster_abfuhrtermin.attributes|list)[0] }}
actions:
  - action: notify.mobile_app_sm_s901b
    metadata: {}
    data:
      message: >-
        Morgen wird folgender Müll abgeholt: {{
        (states.sensor.naechster.attributes.values()|list)[0] }}!
  - action: notify.mobile_app_pixel_6a
    metadata: {}
    data:
      message: >-
        Morgen wird folgender Müll abgeholt: {{
        (states.sensor.naechster.attributes.values()|list)[0] }}!
mode: single

Scheinbar habe ich die Lösung gefunden:

alias: Benachrichtigung Abfuhrtermin
description: ""
triggers:
  - trigger: time
    at: "19:12:00"
conditions:
  - condition: template
    value_template: >-
      {{ (now().date() + timedelta(days=2)) | string ==
      (states.sensor.naechster.attributes|list)[0] }}
actions:
  - action: notify.mobile_app_sm_s901b
    metadata: {}
    data:
      message: >-
        Morgen wird folgender Müll abgeholt: {{
        (states.sensor.naechster.attributes.values()|list)[0] }}!
  - action: notify.mobile_app_pixel_6a
    metadata: {}
    data:
      message: >-
        Morgen wird folgender Müll abgeholt: {{
        (states.sensor.naechster.attributes.values()|list)[0] }}!

date um () ergänzt.

@marcus Ja, date() ist eine Funktion und da müssen die Klammern. Top, dass du es lösen konntest!

Servus, hoffe hier kann mir jemand helfen, ich habe die “Waste Collection Schedule” installiert. Die Sensoren zeigen aber nichts an, wahrscheinlich ist meine yaml falsch, ich komm aber nicht dahinter was.

Hier die Daten von der ics. Datei

Und hier meine yaml:

waste_collection_schedule:
sources:

  • name: ics
    args:
    file: „local/abfall.ics“ # Das ‚local‘ zeigt auf deinen ‚www‘ Ordner

sensor:

  • platform: waste_collection_schedule
    name: Restmuell_Tage
    details_format: „upcoming“
    value_template: ‚{{ value.daysTo }}‘
    types:
    • ‚Restmülltonne‘
  • platform: waste_collection_schedule
    name: Papiertonne_Tage
    details_format: „upcoming“
    value_template: ‚{{ value.daysTo }}‘
    types:
    • ‚Papiertonne‘
  • platform: waste_collection_schedule
    name: Biotonne_Tage
    details_format: „upcoming“
    value_template: ‚{{ value.daysTo }}‘
    types:
    • ‚Biotonne‘

Bei Zustände wird immer “unknown” angezeigt.

Könnte bitte jemand drüber schauen und bitte sagen was ich falsch eingegeben habe? Hab die yaml mit KI erstellt, da ich ehrliche gesagt nicht so bewandert bin in diesen Themen.

Wäre um Hilfe dankbar…:wink:

Spannende Frage! Ich habe das selbst mit lokaler ICS-Datei über WCS noch nicht umgesetzt, plane es aber tatsächlich auch gerade.

Hast du dir die Doku hierzu schon angeschaut: hacs_waste_collection_schedule/doc/source/ics.md at master · mampfes/hacs_waste_collection_schedule · GitHub

Auf Anhieb fallen mir bei dem KI-Code die sehr auffälligen Anführungszeichen auf. Eigentlich sollte das immer ‘abc‘ oder “abc” sein.

Ich hoffe morgen selbst dazu zu kommen, mir das für mein Setup anschauen zu können.

VG Olli

Servus, danke schonmal für die Antwort. Habs jetzt aber doch hinbekommen, ich hab mir bei youtube nochmal ein Video dazu angeschaut und nun klappt es. :wink:

Magst du das Video hier teilen? Ich will das bei mir nämlich tatsächlich selbst gerade ändern.

Hallo,

ich nutze auch den „hacs_waste_collection_schedule“ mit aber leicht abgewandelter Karte

Hier die Karte. Diese habe ich nicht selbst entwickelt. Ich habe diese ursprünglich von

Wenn man alles ausfüllt bekommt man relativ am Ende den Code für die Karte

War aber nicht ganz das was ich wollte. Z.B. war die Schriftgröße oder Größe der Icons über alle Mülltonnen verteilt. Die Mülltonnen hatten eine feste Reihenfolge,…

Hab dann mal ChatGPT genutzt die Karte etwas zu optimieren :wink: und dabei ist das folgende herausgekommen

Dazu brauch ihr die decluttering-card

Unter „Raw-Konfigurationseditor“:

Den folgenden Code einfügen

button_card_templates:
  waste_picture:
    show_entity_picture: true
    show_state: false
    show_name: false
    size: var(--waste-icon-size)
    styles:
      card:
        - border: none
        - background: transparent
        - padding: 1em 0 0 0
      entity_picture:
        - height: var(--waste-icon-max-height)
        - max-height: var(--waste-icon-max-height)
        - width: auto
        - max-width: var(--waste-icon-size)
        - object-fit: contain
    state:
      - operator: template
        value: |
          [[[
            return entity.state === "Morgen";
          ]]]
        styles:
          entity_picture:
            - animation: blink 1s linear infinite
  waste_date:
    show_name: false
    show_icon: false
    show_state: true
    styles:
      state:
        - font-family: var(--waste-font-family)
        - font-size: var(--waste-font-size)
      card:
        - border: none
        - padding: 0
  waste_state:
    show_name: true
    show_icon: false
    show_state: true
    styles:
      name:
        - font-family: var(--waste-font-family)
        - color: var(--primary-color)
        - font-size: var(--waste-font-size)
      state:
        - font-family: var(--waste-font-family)
        - font-size: var(--waste-font-size)
      card:
        - border: none
        - padding: 0 0 1em 0
decluttering_templates:
  waste_column:
    card:
      type: vertical-stack
      cards:
        - type: custom:button-card
          template: waste_picture
          entity: "[[waste_entity]]"
          entity_picture: "[[waste_picture]]"
        - type: custom:button-card
          template: waste_date
          entity: "[[waste_date_entity]]"
        - type: custom:button-card
          template: waste_state
          entity: "[[waste_entity]]"

Hier die eigentliche Karte.

Achtung! Ihr müsst unter custom:auto-entities eure Sensoren und URLs zu den Bildern anpassen.

Die Mülltonnen werden sortiert nach dem Abholdatum der jeweiligen Tonne angezeigt.

type: custom:vertical-stack-in-card
card_mod:
  style: |
    ha-card {
      border-radius: 10px;

      --waste-header-font-size: 1em;
      --waste-font-size: 0.9em;
      --waste-icon-size: 50%;
      --waste-icon-max-height: 80px;
      --waste-font-family: "Arial Rounded MT", Arial, sans-serif;
    }
cards:
  - type: custom:button-card
    entity: sensor.waste_collection_schedule_mullabholung_morgen
    show_icon: false
    show_name: false
    show_state: true
    styles:
      state:
        - font-size: var(--waste-header-font-size)
        - font-family: var(--waste-font-family)
        - color: var(--primary-color)
        - white-space: normal
        - word-break: break-word
        - visibility: |
            [[[
              return entity.state === "none"
                ? "hidden"
                : "visible";
            ]]]
      card:
        - background: transparent
        - border: none
        - padding-bottom: 0
  - type: custom:auto-entities
    card_param: cards
    show_empty: false
    card:
      type: grid
      columns: 3
      square: false
    filter:
      template: |
        {% set waste_items = [
          {
            'entity': 'sensor.waste_collection_schedule_biomuell',
            'date_entity': 'sensor.waste_collection_schedule_biomuell_datum',
            'picture': '/local/muell/gruen.png'
          },
          {
            'entity': 'sensor.waste_collection_schedule_papier',
            'date_entity': 'sensor.waste_collection_schedule_papier_datum',
            'picture': '/local/muell/blau.png'
          },
          {
            'entity': 'sensor.waste_collection_schedule_gelber_sack',
            'date_entity': 'sensor.waste_collection_schedule_gelber_sack_datum',
            'picture': '/local/muell/gelb.png'
          },
          {
            'entity': 'sensor.waste_collection_schedule_sperrmuell',
            'date_entity': 'sensor.waste_collection_schedule_sperrmuell_datum',
            'picture': '/local/muell/sperrabfall.png'
          },
          {
            'entity': 'sensor.waste_collection_schedule_restmuell',
            'date_entity': 'sensor.waste_collection_schedule_restmuell_datum',
            'picture': '/local/muell/schwarz.png'
          },
          {
            'entity': 'sensor.waste_collection_schedule_sondermuell',
            'date_entity': 'sensor.waste_collection_schedule_sondermuell_datum',
            'picture': '/local/muell/sperrabfall.png'
          }
        ] %}

        {% set ns = namespace(items=[]) %}

        {% for item in waste_items %}
          {% set date_value = states(item.date_entity) %}

          {% if date_value | regex_match('^\d{2}\.\d{2}\.\d{4}$') %}
            {% set timestamp = as_timestamp(
              strptime(date_value, '%d.%m.%Y')
            ) %}
          {% else %}
            {% set timestamp = 9999999999 %}
          {% endif %}

          {% set ns.items = ns.items + [{
            'entity': item.entity,
            'date_entity': item.date_entity,
            'picture': item.picture,
            'timestamp': timestamp
          }] %}
        {% endfor %}

        [
        {% for item in ns.items | sort(attribute='timestamp') %}
          {
            "type": "custom:decluttering-card",
            "template": "waste_column",
            "variables": [
              {
                "waste_entity":
                  "{{ item.entity }}"
              },
              {
                "waste_date_entity":
                  "{{ item.date_entity }}"
              },
              {
                "waste_picture":
                  "{{ item.picture }}"
              }
            ]
          }{% if not loop.last %},{% endif %}
        {% endfor %}
        ]

Hier noch den Code für den Helper „waste_collection_schedule_mullabholung_morgen“

Achtung ist

if is_state('calendar.haus', 'on')

enthalten. Die müsst ihr noch entfernen.

{# ('Sperrmuell', 'SAMMLUNG', states.sensor.waste_collection_schedule_sperrmuell.state), #}
{# ('Gruenabfall', 'SAMMLUNG', states.sensor.waste_collection_schedule_gruenabfall.state), #}
{# ('Sondermuell', 'SAMMLUNG', states.sensor.waste_collection_schedule_sondermuell.state) #}

{%- set SENSORSTATE = [
    ('Biomuell', 'TONNE', states.sensor.waste_collection_schedule_biomuell.state),
    ('Papier', 'TONNE', states.sensor.waste_collection_schedule_papier.state),
    ('GelberSack', 'TONNE', states.sensor.waste_collection_schedule_gelber_sack.state),
    ('Restmuell', 'TONNE', states.sensor.waste_collection_schedule_restmuell.state)
] %}

{%- set DAY = 'Morgen' %}
{%- set SACKS = namespace(values=[]) %}
{%- set TONNEN = namespace(values=[]) %}
{%- set SAMMLUNGEN = namespace(values=[]) %}

{# Trenne Einträge basierend auf der zweiten Spalte #}
{%- for ITEM in SENSORSTATE %}
    {%- if ITEM[1] == 'SACK' and ITEM[2] == DAY %}
        {%- set SACKS.values = SACKS.values + [' den ' ~ ITEM[0]] %}
    {%- elif ITEM[1] == 'TONNE' and ITEM[2] == DAY %}
        {%- set TONNEN.values = TONNEN.values + [' die ' ~ ITEM[0]] %}
    {%- elif ITEM[1] == 'SAMMLUNG' and ITEM[2] == DAY %}
        {%- set SAMMLUNGEN.values = SAMMLUNGEN.values + [' die ' ~ ITEM[0]] %}
    {%- endif %}
{%- endfor %}

{# Nur ausgeben, wenn calendar.haus eingeschaltet ist #}
{%- if is_state('calendar.haus', 'on') %}

    {%- if SACKS.values | length > 0
        or TONNEN.values | length > 0
        or SAMMLUNGEN.values | length > 0 %}

Du musst {{ DAY | lower }}
        {%- for ITEM in SACKS.values %}
            {%- if not loop.first %}
                {%- if loop.last %} und
                {%- else %},
                {%- endif %}
            {%- endif %}
            {{- ITEM }}
        {%- endfor %}

        {%- if SACKS.values | length > 0 %}
            Sack
        {%- endif %}

        {%- if TONNEN.values | length > 0
            and SACKS.values | length > 0
            and SAMMLUNGEN.values | length > 0 %},
        {%- elif TONNEN.values | length > 0
            and SACKS.values | length > 0
            and SAMMLUNGEN.values | length == 0 %}, sowie
        {%- endif %}

        {%- for ITEM in TONNEN.values %}
            {%- if not loop.first %}
                {%- if loop.last %} und
                {%- else %},
                {%- endif %}
            {%- endif %}
            {{- ITEM }}
        {%- endfor %}

        {%- if TONNEN.values | length > 0 %}
            Tonne
        {%- endif %}

        {%- if SAMMLUNGEN.values | length > 0
            and (TONNEN.values | length > 0 or SACKS.values | length > 0) %}, sowie
        {%- endif %}

        {%- for ITEM in SAMMLUNGEN.values %}
            {%- if not loop.first %}
                {%- if loop.last %} und
                {%- else %},
                {%- endif %}
            {%- endif %}
            {{- ITEM }}
        {%- endfor %}

        {%- if SAMMLUNGEN.values | length > 0 %}
            Sammlung
        {%- endif %} rausstellen!

    {%- else %}

Du musst {{ DAY | lower }} keine Tonne rausstellen.

    {%- endif %}

{%- endif %}

und ich komme weiterhin mit ICS ohne Waste Collection Schedule aus :slightly_smiling_face:

→ siehe hier

VG Micha