Google Kalender Benachrichtigung per Offset nicht möglich

New-Bee

New member
Hallo zusammen,

ich würde mich gerne am Vortag an die Mülltonnen erinnern lassen.
Den Google (Unter)Kalender habe ich eingebunden und bekomme die Termine auch angezeigt:

- cal_id: seltsameID@group.calendar.google.com
entities:
- device_id: Name
ignore_availability: true
name: Name
offset: "!!"
track: true

Nun würde ich mich gerne 8 Stunden vor dem ganztägigen Termin erinnern lassen (zum Test eine Lampe schalten).
Als Auslösertyp habe ich "Zustand", als Entität "Name" aus dem Configfile. Attribut steht auf "offset_reached".
Als Aktion dann das Lampe umschalten.

Der Kalendereintrag sieht so aus:
Restmüll rausstellen !!-08:00
Es sollte also 8 Stunden vorher ausgelöst werden.
Zum Testen habe ich das Offset auf 1 Minute gestellt (!!-00:01) aber es hat sich nichts getan.

Wer kann mir hier weiterhelfen?

Grüße
Jan
 

blurrrr

Well-known member
Hi,

vorab schon mal: ich habe keine Ahnung von HA, also freu Dich nicht zu früh! Allerdings denke ich, dass es wie folgt funktionieren könnte:

Der Kalender bleibt der Kalender... mit einem zusätzlichen Sensor nimmst Du dann Bezug auf Dein gewünschtes Event und berechnest die Restzeit:

- platform: template
sensors:
erinnerung_muell_rausstellen:
friendly_name: Erinnerung Müll rausstellen
unit_of_measurement: minutes
value_template: >-
{% if states.calendar.muell-wird-abgeholt.attributes.start_time %}
# Kalendereintrag-Zeit abzgl. aktuelle Zeit und Umrechnung in Minuten
{{((as_timestamp(states.calendar.muell-wird-abgeholt.start_time) - as_timestamp(now())) / 60) | int }}
{%- else -%}
0
{%- endif %}

Dazu noch eine Automatisierung zur Benachrichtung:

alias: Erinnerung Müll rausstellen!
trigger:
- platform: state
entity_id: erinnerung_muell_rausstellen
# Benachrichtigen ab Restzeit in Minuten
to: '480'
condition: []
action:
# gewünschte Benachrichtigungsart
- service: notify.mobile_app
data:
message: Müll wird in 8 Stunden abgeholt!
title: Müll rausstellen!
mode: single

Habe mir das jetzt aber auch nur ganz grob zusammengestrickt. "Könnte" funktionieren (vllt braucht es auch noch etwas Feintuning), vielleicht funktioniert es auch garnicht und die Idee war völlig daneben, aber vllt auch erstmal besser als "nix" 😅
 

New-Bee

New member
Hey,
danke fürs Antworten.
In welches Konfig File muss ich den oberen Teil denn eintragen? Der untere kommt ja in automations.yaml.

Grüße
 

Nival

-
Moderator
Das obere müsste - soweit ich mich mit der Thematik bislang beschäftigt habe - in der configuration.yaml landen.
 

New-Bee

New member
Copy&Paste hat leider nicht direkt funktioniert.
Leider komme ich erst nächste Woche dazu mich näher damit zu beschäftigen.
 

Nival

-
Moderator
Ein wenig Bastelei später (ich fang echt noch an mich ernsthaft mit HA zu beschäftigen wegen diesem Forum...) - das hier funktioniert soweit bei meinem Test-HA.

In configuration.yaml:
YAML:
sensor:
  - platform: template
    sensors:
      stunden_bis:
        value_template: >-
          {% set cal_date = as_timestamp("2022-04-15") %}
          {{ ((cal_date - as_timestamp(now())) / 60 / 60) | int }}
Hier müsstest Du anstelle meines fest eingestellten Datums natürlich das Datum aus Deinem Kalender auslesen, ich denke, da war @blurrrr schon auf der richtigen Spur mit attributes.start_time (und den Abfragen, ob dieses denn überhaupt anwesend ist).

Wenn Du schon einen Bereich sensor: hast, dann natürlich mit - platform: template darunter beginnen.

In automations.yaml:
YAML:
- id: '1649941543630'
  alias: Alarm
  description: ''
  trigger:
  - platform: state
    entity_id: sensor.stunden_bis
    to: '8'
  condition: []
  action:
  - event: notify.notify
    event_data:
      message: Raus damit
  mode: single
Die id: kannst Du natürlich beliebig setzen, das notify.notify solltest Du noch auf das entsprechende Gerät ändern, z.B. notify.mein_smartphone - je nachdem wie das Gerät eben heisst, auf das die Erinnerung gesendet werden soll.

Bei mir hat diese Automatisierung jetzt jedenfalls ein freundliches "has been triggered by state of sensor.stunden_bis" stehen seitdem es 15 Uhr wurde. Also, prinzipiell in großen Teilen wie schon beschrieben, aber Dinge wie Bindestriche fand HA nicht so lustig und das ist jetzt definitiv erprobt ;)
 
Moin Moin zusammen,
ich habe sowas Ähnliches auch schon realisiert. Ich werde wenn interresse Besteht mal rausgramen was wir dafür alles brauchen. Allerdingst einst vorweg ich habe es nicht über den Google Kalender direkt gemacht. Da ich dort dann ja erst die Daten inporttieren muss jedes Jahr. Das kann ich mir ersparen indem ich nur die Kalenderdatei auf meine HA Instans packe. Von dort aus werden die Sensoren dann ausgelesen und ein bisschen Code erledigt den Rest. Ich habe eine Anzeige in HA was mir die nächsten Abholungen anzeigt und ich bekomme jeden Vortag um 16:00 Uhr ein Telegram wenn eine Tonne rausgestellt werden muss.
1650024393889.png
Ach warum warten wenn man es auch gleich erledigen kann:
Für die Kalender Funktion wird folgendender Eintrag in der configuration.yaml benötigt.
Code:
waste_collection_schedule:
  sources:
    - name: ics
      args:
        file: "www/Abfuhrtermine.ics"
      customize:
        - type: Restabfall
          alias: rest
        - type: GelberSack
          alias: gelbersack
        - type: Papiertonne
          alias: papier
        - type: Bioabfall
          alias: bio
Die *.ics Datei vom Müllentsorger habe ich unter /www/Abfuhrtermine.ics abgelegt.

In den sensor.yaml
YAML:
- platform: waste_collection_schedule
  name: AbfallRestmuell
  details_format: "upcoming"
  value_template: '... wird abgeholt in {{ value.daysTo }} Tag(e)'
  types:
    - rest

- platform: waste_collection_schedule
  name: AbfallGelberSack
  details_format: "upcoming"
  value_template: '... wird abgeholt in {{ value.daysTo }} Tag(e)'
  types:
    - gelbersack

- platform: waste_collection_schedule
  name: AbfallPapier
  details_format: "upcoming"
  value_template: '... wird abgeholt in {{ value.daysTo }} Tag(e)'
  types:
    - papier

- platform: waste_collection_schedule
  name: AbfallBiomuell
  details_format: "upcoming"
  value_template: '... wird abgeholt in {{ value.daysTo }} Tag(e)'
  types:
    - bio

- platform: waste_collection_schedule
  name: AbfallNaechster
  details_format: "upcoming"
  value_template: '{{ value.daysTo }}'

Und die Automatisierung:
YAML:
alias: Abfall Erinnerung
description: ''
trigger:
  - platform: time
    at: '16:00'
condition:
  - condition: numeric_state
    entity_id: sensor.abfallnaechster
    below: '2'
action:
  - service: telegram_bot.send_message
    data:
      message: >-
        Bitte {{ states.sensor.abfallnaechster.attributes.values() | first |
        replace("papier", "Papiermüll") | replace("gelbersack", "Gelber Sack") |
        replace("rest", "Restmüll") }} für Morgen rausstellen.
mode: single
 
Zuletzt bearbeitet:

azrael783

Active member
Ich lasse mich per Telegram infomieren welcher Müll raus gestellt werden will - inkl. der Möglichkeit die Erinnerung zu wiederholen. Eine Beschreibung wie ich das gemacht habe findest du auf meinem Blog (Link über mein Profil).
 

New-Bee

New member
Ich habe den Sensor hinzugefügt, allerdings zeigt er mir nur "nicht verfügbar" an.
Woran könnte das liegen? Der google Kalender ist eingefügt und auch die device ID habe ich abgeglichen. Zum Test habe ich Mal einen anderen Kalender genommen, hier aber das gleiche.

Mein Kalender:
- cal_id: xxx@group.calendar.google.com
entities:
- device_id: mullkalender
ignore_availability: true
name: "M\xFCllkalender"
track: true


Mein Sensor:
- platform: template
sensors:
bins_out_offset:
friendly_name: "Bins out offset"
value_template: >
{% if as_timestamp(states.calendar.mullkalender.attributes.start_time) - as_timestamp(strptime(states.sensor.date_time.state, "%Y-%m-%d, %H:%M" ) ) < 19800 and as_timestamp(states.calendar.mullkalender.attributes.end_time) > as_timestamp(strptime(states.sensor.date_time.state, "%Y-%m-%d, %H:%M" ) ) %}
on
{% else %}
off
{% endif %}
 
Zuletzt bearbeitet:

Nival

-
Moderator
@New-Bee was ist denn die Ausgabe, wenn Du das hier:
YAML:
{{ now() }}
{{ states.calendar.mullkalender.attributes.start_time }}
{{ states.calendar.mullkalender.attributes.end_time }}
in den Entwicklerwerkzeugen als Template hinterlegst?
 

Nival

-
Moderator
Okay, und wenn Du diesen Code eingibst?
Code:
{% if as_timestamp(states.calendar.mullkalender.attributes.start_time) - as_timestamp(now()) < 19800 and as_timestamp(states.calendar.mullkalender.attributes.end_time) > as_timestamp(now()) %}
on
{% else %}
off
{% endif %}
 

Nival

-
Moderator
Dann würde ich das mal als value_template... oh, das ist vermutlich schon der Fehler: Du hast das Minus vergessen. Nicht value_template: > sondern value_template: >-. Mein Code ist zwar kürzer, aber dann kannst Du ja auch mal schaun ob Deiner nicht genausogut funktioniert wenn Du das Minus ergänzt hast :)
 

Zurzeit aktive Besucher

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
956
Beiträge
13.925
Mitglieder
487
Neuestes Mitglied
hendrik2022
Oben