Initial draft for calendar on eopaperframe by qwen3.6-30b
This commit is contained in:
+132
-67
@@ -139,6 +139,10 @@
|
|||||||
trigger: time
|
trigger: time
|
||||||
conditions: []
|
conditions: []
|
||||||
actions:
|
actions:
|
||||||
|
- action: notify.mobile_app_apollo
|
||||||
|
data:
|
||||||
|
message: Lodere es, Lustknabe.
|
||||||
|
title: 420!
|
||||||
- data:
|
- data:
|
||||||
title: 420!
|
title: 420!
|
||||||
message: Lodere es, Lustknabe.
|
message: Lodere es, Lustknabe.
|
||||||
@@ -179,10 +183,6 @@
|
|||||||
topic: awtrix_desk/notify
|
topic: awtrix_desk/notify
|
||||||
payload: '{"text": "420, lodere es, Lustknabe!"}'
|
payload: '{"text": "420, lodere es, Lustknabe!"}'
|
||||||
action: mqtt.publish
|
action: mqtt.publish
|
||||||
- action: notify.mobile_app_apollo
|
|
||||||
data:
|
|
||||||
message: Lodere es, Lustknabe.
|
|
||||||
title: 420!
|
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1623911524804'
|
- id: '1623911524804'
|
||||||
alias: TV Anti-Reflexion (undo)
|
alias: TV Anti-Reflexion (undo)
|
||||||
@@ -227,28 +227,28 @@
|
|||||||
action: light.turn_on
|
action: light.turn_on
|
||||||
- data:
|
- data:
|
||||||
cache: true
|
cache: true
|
||||||
media_player_entity_id: media_player.home_assistant_voice_0a7c6b_media_player
|
media_player_entity_id: media_player.home_assistant_voice_0a7c6b
|
||||||
message: Ab ins Bett, Schlafenszeit.
|
message: Ab ins Bett, Schlafenszeit.
|
||||||
target:
|
target:
|
||||||
entity_id: tts.piper
|
entity_id: tts.piper
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
action: tts.speak
|
||||||
|
enabled: true
|
||||||
- data:
|
- data:
|
||||||
cache: true
|
cache: true
|
||||||
media_player_entity_id: media_player.home_assistant_voice_09c0e7_media_player
|
media_player_entity_id: media_player.home_assistant_voice_09c0e7_media_player_2
|
||||||
message: Ab ins Bett, Schlafenszeit.
|
message: Ab ins Bett, Schlafenszeit.
|
||||||
target:
|
target:
|
||||||
entity_id: tts.piper
|
entity_id: tts.piper
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
action: tts.speak
|
||||||
|
enabled: true
|
||||||
- data:
|
- data:
|
||||||
cache: true
|
cache: true
|
||||||
media_player_entity_id: media_player.m5stack_atom_echo
|
media_player_entity_id: media_player.m5stack_atom_echo
|
||||||
message: Ab ins Bett, Schlafenszeit.
|
message: Ab ins Bett, Schlafenszeit.
|
||||||
target:
|
target:
|
||||||
entity_id: tts.piper
|
entity_id: tts.piper
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
action: tts.speak
|
||||||
|
enabled: true
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1623954512941'
|
- id: '1623954512941'
|
||||||
alias: Licht im Schlafzimmer zum Aufwachen einschalten
|
alias: Licht im Schlafzimmer zum Aufwachen einschalten
|
||||||
@@ -278,10 +278,8 @@
|
|||||||
alias: 'Anruf: Beim Klingeln grün blinken'
|
alias: 'Anruf: Beim Klingeln grün blinken'
|
||||||
description: ''
|
description: ''
|
||||||
triggers:
|
triggers:
|
||||||
- entity_id:
|
- entity_id: sensor.fritz_box_7490_call_monitor_dem_commander1024_seine_cloud
|
||||||
- sensor.fritz_box_7690_anrufmonitor_dem_commander1024_seine_cloud
|
to: ringing
|
||||||
to:
|
|
||||||
- ringing
|
|
||||||
trigger: state
|
trigger: state
|
||||||
- entity_id:
|
- entity_id:
|
||||||
- sensor.le2123_phone_state_2
|
- sensor.le2123_phone_state_2
|
||||||
@@ -303,8 +301,8 @@
|
|||||||
- 0
|
- 0
|
||||||
target:
|
target:
|
||||||
entity_id:
|
entity_id:
|
||||||
- light.awtrix_b8658c_indicator_1
|
- light.awtrix_desk_indicator_1
|
||||||
- light.awtrix_528bd4_indicator_1
|
- light.awtrix_kitchen_indicator_1
|
||||||
action: light.turn_on
|
action: light.turn_on
|
||||||
- data:
|
- data:
|
||||||
scene_id: wled_last_state
|
scene_id: wled_last_state
|
||||||
@@ -337,18 +335,16 @@
|
|||||||
- data: {}
|
- data: {}
|
||||||
target:
|
target:
|
||||||
entity_id:
|
entity_id:
|
||||||
- light.awtrix_b8658c_indicator_1
|
- light.awtrix_desk_indicator_1
|
||||||
- light.awtrix_528bd4_indicator_1
|
- light.awtrix_kitchen_indicator_1
|
||||||
action: light.turn_off
|
action: light.turn_off
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1625481640348'
|
- id: '1625481640348'
|
||||||
alias: 'Anruf: Beim Telefonieren Musik pausieren'
|
alias: 'Anruf: Beim Telefonieren Musik pausieren'
|
||||||
description: ''
|
description: ''
|
||||||
triggers:
|
triggers:
|
||||||
- entity_id:
|
- entity_id: sensor.fritz_box_7490_call_monitor_telefonbuch
|
||||||
- sensor.fritz_box_7690_anrufmonitor_dem_commander1024_seine_cloud
|
to: talking
|
||||||
to:
|
|
||||||
- talking
|
|
||||||
trigger: state
|
trigger: state
|
||||||
- entity_id:
|
- entity_id:
|
||||||
- sensor.le2123_phone_state_2
|
- sensor.le2123_phone_state_2
|
||||||
@@ -366,8 +362,9 @@
|
|||||||
- data:
|
- data:
|
||||||
scene_id: media_last_state
|
scene_id: media_last_state
|
||||||
snapshot_entities:
|
snapshot_entities:
|
||||||
- media_player.wohnzimmer
|
- media_player.wohnzimmer_main
|
||||||
- media_player.lg_webos_smart_tv
|
- media_player.lg_webos_smart_tv
|
||||||
|
- media_player.ccze
|
||||||
- media_player.spotify_marcus_scholz
|
- media_player.spotify_marcus_scholz
|
||||||
- media_player.xboxonex
|
- media_player.xboxonex
|
||||||
action: scene.create
|
action: scene.create
|
||||||
@@ -388,7 +385,7 @@
|
|||||||
trigger: state
|
trigger: state
|
||||||
- target:
|
- target:
|
||||||
entity_id:
|
entity_id:
|
||||||
- scene.wled_last_state
|
- scene.media_last_state
|
||||||
action: scene.turn_on
|
action: scene.turn_on
|
||||||
data: {}
|
data: {}
|
||||||
mode: single
|
mode: single
|
||||||
@@ -618,33 +615,12 @@
|
|||||||
action: notify.mobile_app_le2123
|
action: notify.mobile_app_le2123
|
||||||
- data:
|
- data:
|
||||||
cache: true
|
cache: true
|
||||||
media_player_entity_id: media_player.home_assistant_voice_0a7c6b_media_player
|
media_player_entity_id: media_player.raspiaudio_muse_luxe
|
||||||
message: '{{message}}
|
message: '{{message}}
|
||||||
|
|
||||||
'
|
'
|
||||||
target:
|
target:
|
||||||
entity_id: tts.piper
|
entity_id: tts.piper
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
|
||||||
- data:
|
|
||||||
cache: true
|
|
||||||
media_player_entity_id: media_player.home_assistant_voice_09c0e7_media_player
|
|
||||||
message: '{{message}}
|
|
||||||
|
|
||||||
'
|
|
||||||
target:
|
|
||||||
entity_id: tts.piper
|
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
|
||||||
- data:
|
|
||||||
cache: true
|
|
||||||
media_player_entity_id: media_player.m5stack_atom_echo
|
|
||||||
message: '{{message}}
|
|
||||||
|
|
||||||
'
|
|
||||||
target:
|
|
||||||
entity_id: tts.piper
|
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
action: tts.speak
|
||||||
variables:
|
variables:
|
||||||
message: 'Die Außentemperatur ist mit {{states(''sensor.aussentemperatur'')}}
|
message: 'Die Außentemperatur ist mit {{states(''sensor.aussentemperatur'')}}
|
||||||
@@ -689,33 +665,12 @@
|
|||||||
action: notify.mobile_app_le2123
|
action: notify.mobile_app_le2123
|
||||||
- data:
|
- data:
|
||||||
cache: true
|
cache: true
|
||||||
media_player_entity_id: media_player.home_assistant_voice_0a7c6b_media_player
|
media_player_entity_id: media_player.raspiaudio_muse_luxe
|
||||||
message: '{{message}}
|
message: '{{message}}
|
||||||
|
|
||||||
'
|
'
|
||||||
target:
|
target:
|
||||||
entity_id: tts.piper
|
entity_id: tts.piper
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
|
||||||
- data:
|
|
||||||
cache: true
|
|
||||||
media_player_entity_id: media_player.home_assistant_voice_09c0e7_media_player
|
|
||||||
message: '{{message}}
|
|
||||||
|
|
||||||
'
|
|
||||||
target:
|
|
||||||
entity_id: tts.piper
|
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
|
||||||
- data:
|
|
||||||
cache: true
|
|
||||||
media_player_entity_id: media_player.m5stack_atom_echo
|
|
||||||
message: '{{message}}
|
|
||||||
|
|
||||||
'
|
|
||||||
target:
|
|
||||||
entity_id: tts.piper
|
|
||||||
enabled: true
|
|
||||||
action: tts.speak
|
action: tts.speak
|
||||||
mode: single
|
mode: single
|
||||||
variables:
|
variables:
|
||||||
@@ -1438,3 +1393,113 @@
|
|||||||
device_id: 6d1be741876624a70ab5b01b54c6fd6f
|
device_id: 6d1be741876624a70ab5b01b54c6fd6f
|
||||||
entity_id: 621e4377a089b7f5d92c7c9f2cc171a1
|
entity_id: 621e4377a089b7f5d92c7c9f2cc171a1
|
||||||
domain: switch
|
domain: switch
|
||||||
|
- id: '1773000000001'
|
||||||
|
alias: epaperframe - Kalender Events laden
|
||||||
|
description: Ruft alle Events von calendar.privat und calendar.tkrz_kalender für heute und morgen ab und schreibt sie in input_text-Helfer.
|
||||||
|
triggers:
|
||||||
|
# Täglich um 00:01 neu holen
|
||||||
|
- trigger: time
|
||||||
|
at: '00:01:00'
|
||||||
|
id: daily
|
||||||
|
actions:
|
||||||
|
# ── Events für heute (00:00 bis 23:59) holen ──
|
||||||
|
- action: calendar.get_events
|
||||||
|
target:
|
||||||
|
entity_id:
|
||||||
|
- calendar.privat
|
||||||
|
- calendar.tkrz_kalender
|
||||||
|
data:
|
||||||
|
start_date_time: "{{ now().replace(hour=0, minute=0, second=0) }}"
|
||||||
|
end_date_time: "{{ (now().replace(hour=0, minute=0, second=0) + timedelta(days=1)) }}"
|
||||||
|
response_variable: today_evts
|
||||||
|
|
||||||
|
# ── Events für morgen (00:00 bis 23:59) holen ──
|
||||||
|
- action: calendar.get_events
|
||||||
|
target:
|
||||||
|
entity_id:
|
||||||
|
- calendar.privat
|
||||||
|
- calendar.tkrz_kalender
|
||||||
|
data:
|
||||||
|
start_date_time: "{{ (now() + timedelta(days=1)).replace(hour=0, minute=0, second=0) }}"
|
||||||
|
end_date_time: "{{ (now() + timedelta(days=1)).replace(hour=0, minute=0, second=0) + timedelta(days=1) }}"
|
||||||
|
response_variable: tomorrow_evts
|
||||||
|
|
||||||
|
# ── Helper: Events als kompakte Liste formatieren ──
|
||||||
|
|
||||||
|
# Privat heute
|
||||||
|
- set_var:
|
||||||
|
name: fmt_today_privat
|
||||||
|
value: >-
|
||||||
|
{%- set evts = today_evts['calendar.privat']['events'] if 'calendar.privat' in today_evts else [] %}
|
||||||
|
{%- set items = [] %}
|
||||||
|
{%- for e in evts[:5] %}
|
||||||
|
{%- set s = (e['summary'] | default('', true) | string)[:40] if e is mapping and 'summary' in e else '-' %}
|
||||||
|
{%- set st = e['start'] if e is mapping and 'start' in e else '' %}
|
||||||
|
{%- set hhmm = st[11:16] if st|length >= 16 else '??' %}
|
||||||
|
{%- set items = items + [hhmm ~ ' - ' ~ s] %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ items | join('│') if items else '-' }}
|
||||||
|
|
||||||
|
# Arbeit heute
|
||||||
|
- set_var:
|
||||||
|
name: fmt_today_arbeit
|
||||||
|
value: >-
|
||||||
|
{%- set evts = today_evts['calendar.tkrz_kalender']['events'] if 'calendar.tkrz_kalender' in today_evts else [] %}
|
||||||
|
{%- set items = [] %}
|
||||||
|
{%- for e in evts[:5] %}
|
||||||
|
{%- set s = (e['summary'] | default('', true) | string)[:40] if e is mapping and 'summary' in e else '-' %}
|
||||||
|
{%- set st = e['start'] if e is mapping and 'start' in e else '' %}
|
||||||
|
{%- set hhmm = st[11:16] if st|length >= 16 else '??' %}
|
||||||
|
{%- set items = items + [hhmm ~ ' - ' ~ s] %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ items | join('│') if items else '-' }}
|
||||||
|
|
||||||
|
# Privat morgen
|
||||||
|
- set_var:
|
||||||
|
name: fmt_tomorrow_privat
|
||||||
|
value: >-
|
||||||
|
{%- set evts = tomorrow_evts['calendar.privat']['events'] if 'calendar.privat' in tomorrow_evts else [] %}
|
||||||
|
{%- set items = [] %}
|
||||||
|
{%- for e in evts[:5] %}
|
||||||
|
{%- set s = (e['summary'] | default('', true) | string)[:40] if e is mapping and 'summary' in e else '-' %}
|
||||||
|
{%- set st = e['start'] if e is mapping and 'start' in e else '' %}
|
||||||
|
{%- set hhmm = st[11:16] if st|length >= 16 else '??' %}
|
||||||
|
{%- set items = items + [hhmm ~ ' - ' ~ s] %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ items | join('│') if items else '-' }}
|
||||||
|
|
||||||
|
# Arbeit morgen
|
||||||
|
- set_var:
|
||||||
|
name: fmt_tomorrow_arbeit
|
||||||
|
value: >-
|
||||||
|
{%- set evts = tomorrow_evts['calendar.tkrz_kalender']['events'] if 'calendar.tkrz_kalender' in tomorrow_evts else [] %}
|
||||||
|
{%- set items = [] %}
|
||||||
|
{%- for e in evts[:5] %}
|
||||||
|
{%- set s = (e['summary'] | default('', true) | string)[:40] if e is mapping and 'summary' in e else '-' %}
|
||||||
|
{%- set st = e['start'] if e is mapping and 'start' in e else '' %}
|
||||||
|
{%- set hhmm = st[11:16] if st|length >= 16 else '??' %}
|
||||||
|
{%- set items = items + [hhmm ~ ' - ' ~ s] %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{{ items | join('│') if items else '-' }}
|
||||||
|
|
||||||
|
# ── input_text Helfer schreiben ──
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.kalender_heute_privat
|
||||||
|
data:
|
||||||
|
value: "{{ fmt_today_privat }}"
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.kalender_heute_arbeit
|
||||||
|
data:
|
||||||
|
value: "{{ fmt_today_arbeit }}"
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.kalender_morgen_privat
|
||||||
|
data:
|
||||||
|
value: "{{ fmt_tomorrow_privat }}"
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.kalender_morgen_arbeit
|
||||||
|
data:
|
||||||
|
value: "{{ fmt_tomorrow_arbeit }}"
|
||||||
|
|||||||
+3
-5
@@ -49,6 +49,9 @@ sql:
|
|||||||
# calendar integration
|
# calendar integration
|
||||||
calendar: !include calendars.yaml
|
calendar: !include calendars.yaml
|
||||||
|
|
||||||
|
# Helpers for epaperframe calendar display
|
||||||
|
input_text: !include text_helpers.yaml
|
||||||
|
|
||||||
# DB-recorder configuration
|
# DB-recorder configuration
|
||||||
recorder: !include recorder.yaml
|
recorder: !include recorder.yaml
|
||||||
|
|
||||||
@@ -82,8 +85,3 @@ generic_hygrostat:
|
|||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
themes: !include_dir_merge_named themes
|
themes: !include_dir_merge_named themes
|
||||||
|
|
||||||
freedns:
|
|
||||||
url: !secret freedns6_url
|
|
||||||
# - name: IPv4
|
|
||||||
# url: !secret freedns4_url
|
|
||||||
|
|||||||
+661
-153
File diff suppressed because it is too large
Load Diff
+27
-2
@@ -143,5 +143,30 @@
|
|||||||
state: >
|
state: >
|
||||||
{{ (( states('sensor.wan_out_derivative') | float * 8 / 1000000 ) | round(2)) }}
|
{{ (( states('sensor.wan_out_derivative') | float * 8 / 1000000 ) | round(2)) }}
|
||||||
unit_of_measurement: 'Mbps'
|
unit_of_measurement: 'Mbps'
|
||||||
attributes:
|
|
||||||
last_reset: '1970-01-01T00:00:00+00:00'
|
# ── Kalender-Ereignisse für epaperframe ──
|
||||||
|
# Alle Events werden per Automation (automations.yaml) in input_text Helfer geschrieben.
|
||||||
|
# Diese template sensors lesen nur noch daraus. Das verhindert doppelte Logik und garantiert,
|
||||||
|
# dass sowohl "heute" als auch "morgen" Events mit Titeln, Uhrzeiten und Beschreibungen verfügbar sind.
|
||||||
|
- text_sensor:
|
||||||
|
# ── HEUTE ──
|
||||||
|
- name: "Kalender heute Privat"
|
||||||
|
unique_id: kalender_heute_privat
|
||||||
|
state: "{{ states('input_text.kalender_heute_privat') }}"
|
||||||
|
icon: mdi:calendar-account
|
||||||
|
|
||||||
|
- name: "Kalender heute Arbeit"
|
||||||
|
unique_id: kalender_heute_arbeit
|
||||||
|
state: "{{ states('input_text.kalender_heute_arbeit') }}"
|
||||||
|
icon: mdi:calendar-account
|
||||||
|
|
||||||
|
# ── MORGEN ──
|
||||||
|
- name: "Kalender morgen Privat"
|
||||||
|
unique_id: kalender_morgen_privat
|
||||||
|
state: "{{ states('input_text.kalender_morgen_privat') }}"
|
||||||
|
icon: mdi:calendar-calendar-today
|
||||||
|
|
||||||
|
- name: "Kalender morgen Arbeit"
|
||||||
|
unique_id: kalender_morgen_arbeit
|
||||||
|
state: "{{ states('input_text.kalender_morgen_arbeit') }}"
|
||||||
|
icon: mdi:calendar-calendar-today
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Helpers for epaperframe calendar display
|
||||||
|
input_text:
|
||||||
|
- name: "Kalender heute Privat"
|
||||||
|
initial: "-"
|
||||||
|
icon: mdi:calendar-account
|
||||||
|
mode: text
|
||||||
|
- name: "Kalender heute Arbeit"
|
||||||
|
initial: "-"
|
||||||
|
icon: mdi:calendar-account
|
||||||
|
mode: text
|
||||||
|
- name: "Kalender morgen Privat"
|
||||||
|
initial: "-"
|
||||||
|
icon: mdi:calendar-calendar-today
|
||||||
|
mode: text
|
||||||
|
- name: "Kalender morgen Arbeit"
|
||||||
|
initial: "-"
|
||||||
|
icon: mdi:calendar-calendar-today
|
||||||
|
mode: text
|
||||||
Reference in New Issue
Block a user