Einen Lichtwecker mit Home Assistant realisieren

von 09.03.2024Smart Home1 Kommentar

Mit einem normalen Wecker wird man unsanft aus dem Schlaf gerissen. Mit dem langsamen hochdimmen einer Lichtquelle wird man ggf. schon etwas aus dem Tiefschlaf geholt und vielleicht sogar aufgeweckt, wenn das Licht entsprechend hell ist. So einen Lichtwecker kann man natürlich fertig kaufen. Allerdings sind die Geräte überteuert und meist von der Lichtleistung zu gering, so dass es nicht wirklich den Effekt erzielt. Mit Home Assistant und einer LED RGB Lichtleiste, die sich bei mir auf meinem Kleiderschrank befindet, habe ich mir einen sehr effizienten und hellen Lichtwecker gebaut. Mit diesem wird ein Sonnenaufgang simuliert, der sogar die entsprechenden Farben wiedergibt. Erst Rot, dann Orange und Gelb bis hin zu Weiß. Prinzipiell kann man jede LED Lichtquelle verwenden, die dimmbar ist und die Farbe wechseln kann. Ich habe einen Philipps Hue LED Strip (Amazon Affiliate Link), der prima funktioniert. Bei manchen LED Lichtern kann die Transition, d.h. der weiche Übergang zu Helligkeit und Farben ggf. nicht funktionieren, weshalb ich die Phillips Hue Kompenten (Amazon Affiliate Link) empfehle.

Über eine Home Assistant Kachel wird der Wecker gesteuert. Einstellbar ist die Weckzeit und die Fade-in-Dauer, d.h. wie lange der Dimmvorgang bis zur vollen Helligkeit und Lichtfarbe dauern soll. In der Regel machen 10 bis 20 Minuten Sinn. Weiterhin kann eingestellt werden, ob der Wecker gernerell aktiv sein soll, bzw. auch am Wochenende.

 

 

 

 

 

 

 

 

 

Zunächst müssen in der Home Assistant „configuration.yaml“ folgende Sensoren und Input Values definiert werden. Die Input Values können in den aktuellen Home Assistant Versionen auch über Helper per GUI angelegt werden. Danach folgt die Definition der Home Assistant Kachel. Weiterhin wird eine Automatisierung für den Trigger des Alarms angelegt und der eigentliche Fade-In-Lichtwecker wird per Skript gesteuert, welches von der Automatisierung aufgerufen wird. Nachfolgend findet Ihr den gesamten Code.

Home Assistant Sensoren und Input Values in der "configuration.yaml"

sensor:
  - platform: time_date
  - platform: template
    sensors:
      wakeup_alarm_time:
        friendly_name: 'Weckzeit'
        value_template: '{% if states.input_number.wakeup_hour.state|length == 3 %}0{% endif %}{{ states.input_number.wakeup_hour.state | int }}:{% if states.input_number.wakeup_minutes.state|length == 3 %}0{% endif %}{{ states.input_number.wakeup_minutes.state | int }}'

  - platform: template
    sensors:
      wakeup_start_time_lights:
        friendly_name: 'Fade-in Start'
        value_template: >
          {% if states.sensor.wakeup_alarm_time and states.input_number.wakeup_duration %}
          {% set alarmtime = states.sensor.wakeup_alarm_time.state %}
          {% set alarm_hour = alarmtime.split(":")[0] | int %}
          {% set alarm_min = alarmtime.split(":")[1] | int %}
          {% set light_dur = states.input_number.wakeup_duration.state | int %}
          {% set alarm_min_light = alarm_min - light_dur %}
          {% if alarm_min_light  < 0 %}
          {% set alarm_min_light = alarm_min_light + 60 %}
          {% set alarm_hour_light = alarm_hour - 1 %}
          {% if alarm_hour_light < 0 %}{% set alarm_hour_light = 23 %}{% endif %}
          {% if alarm_hour_light < 10 %}0{% endif %}{{ alarm_hour_light}}:{% if alarm_min_light < 10 %}0{% endif %}{{ alarm_min_light }}
          {% else %}
          {% if alarm_hour < 10 %}0{% endif %}{{ alarm_hour }}:{% if alarm_min_light < 10 %}0{% endif %}{{ alarm_min_light }}
          {% endif %}
          {% endif %}

  - platform: template
    sensors:
      wakeup_fadein_duration:
        friendly_name: 'Fade-in Dauer'
        value_template: '{{ states.input_number.wakeup_duration.state | int }}'
        unit_of_measurement: 'min'

input_number:
  wakeup_hour:
    name: 'Stunde'
    icon: mdi:clock-in
    min: 0
    max: 23
    step: 1

  wakeup_minutes:
    name: 'Minute'
    icon: mdi:clock-in
    min: 0
    max: 55
    step: 5

  wakeup_duration:
    name: 'Fade-in Dauer'
    icon: mdi:clock-in
    min: 5
    max: 60
    step: 5

input_boolean:
  wakeup:
    name: 'Wecker einschalten'
    icon: mdi:power
  wakeup_weekends:
    name: 'Auch am Wochenende'
    icon: mdi:power

Home Assistant Kachel zur Steuerung des Lichtweckers

entities:
  - entity: Euer LED Licht
  - entity: sensor.wakeup_alarm_time
  - entity: sensor.wakeup_start_time_lights
  - entity: sensor.wakeup_fadein_duration
  - entity: input_number.wakeup_hour
  - entity: input_number.wakeup_minutes
  - entity: input_number.wakeup_duration
  - entity: input_boolean.wakeup
  - entity: input_boolean.wakeup_weekends
show_header_toggle: false
title: Schlafzimmer
type: entities

Home Assistant Automatisierung, um den Lichtwecker zu triggern

alias: WakeUp Light Bedroom
trigger:
  - platform: template
    value_template: >-
      {{ states.sensor.time.state ==
      states.sensor.wakeup_start_time_lights.state }}
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: input_boolean.wakeup
        state: "on"
      - condition: or
        conditions:
          - condition: state
            entity_id: input_boolean.wakeup_weekends
            state: "on"
          - condition: time
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
action:
  - service: script.wakeup_bedroom
    data: {}

Home Assistant Skript zum Ablauf des Lichtweckers (Helligkeit und Lichtfarbe)

alias: Wakeup lighting
sequence:
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 0
      rgb_color:
        - 128
        - 0
        - 0
  - delay:
      seconds: 1
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 1
      rgb_color:
        - 128
        - 0
        - 0
  - delay:
      seconds: 1
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 35
      rgb_color:
        - 128
        - 0
        - 0
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 -1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 70
      rgb_color:
        - 192
        - 64
        - 0
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 105
      rgb_color:
        - 224
        - 128
        - 32
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 140
      rgb_color:
        - 255
        - 176
        - 96
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 175
      rgb_color:
        - 255
        - 224
        - 160
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 210
      rgb_color:
        - 255
        - 255
        - 224
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
  - delay: >-
      00:00:{{ (( states.input_number.wakeup_duration.state | float * 60 / 7 ) |
      round ) | int }}
  - service: light.turn_on
    data_template:
      entity_id: Euer LED Licht
      brightness: 255
      rgb_color:
        - 240
        - 255
        - 255
      transition: >-
        {{ (( states.input_number.wakeup_duration.state | float * 60 / 7 - 1 ) |
        round ) | int }}
mode: single

Home Assistant Automation zum Beenden des Skripts wenn man wach ist, d.h. das Licht ausschaltet

alias: Schlafzimmer WakeUp abbrechen
trigger:
  - platform: state
    entity_id:
      - Euer LED Licht
    from: "on"
    to: "off"
condition:
  - condition: state
    entity_id: script.wakeup_bedroom
    state: "on"
action:
  - service: script.turn_off
    data_template:
      entity_id: script.wakeup_bedroom
mode: single

Die perfekte Basis für Euer Home Assistant System ist kein Raspberry Pi, sondern ein Mini PC, der kaum mehr Strom braucht dafür aber viel mehr Leistung hat. Nach meiner Erfahrung läuft Home Assistant dort viel flüssiger. Bei mir sogar mit Proxmox VE als Basis zusammen mit vielen anderen Anwendungen. Weiterhin gibt es eine Vielzahl spannender ZigBee Komponenten, sich prima mit Home Assistant und ZigBee2MQTT verwenden lassen. Für die Kommunikation zwischen ZigBee2MQTT und den ZigBee Geräten wird noch eine Bridge, hier ein günstiger Sonoff USB-Stick, benötigt. Alles könnt Ihr nachfolgend günstig bestellen.

1 Kommentar

  1. Wenn man die home-assistant App auf seinem Telefon installiert hat, wird darüber der Zeitpunkt des frühesten eingestellten Weckers als Sensor verfügbar. Darüber die Zeit zu setzen, zu der die Transition abgeschlossen ist, wäre /richtig/ elegant. Dann bräuchte man überhaupt nicht über deine Kachel gehen.

    Antworten

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Weitere relevante Beiträge:

Home Assistant Benachrichtigungen – Telegramm oder per Home Assistant App

Home Assistant Benachrichtigungen – Telegramm oder per Home Assistant App

Benachrichtigungen sind ein wichtiges Element im Betrieb einer Smart Home Zentrale. Z.B. sollen Benutzer informiert werden, wenn ein Fenster zu lange geöffnet ist oder die Luftfeuchtigkeit zu hoch ist. Entsprechende Nachrichten können Zuhause per WLAN Lautsprecher ausgegeben werden. Wenn man unterwegs ist, muss die Benachrichtigung auf dem Smartphone eingehen. Dafür bietet Home Assistant sehr viele Möglichkeiten. Telegramm war für mich lange das Mittel der Wahl. Nun sehe ich Benachrichtigungen per Home Assistant App als bessere Wahl an.

ZigBee2MQTT per Home Assistant Add-on installieren

ZigBee2MQTT per Home Assistant Add-on installieren

Die Open Source ZigBee Bridge ZigBee2MQTT kann über ein bestehendes Home Assistant System sehr einfach eingebunden werden. Alles was dazu benötigt wird, ist ein kompatibler ZigBee Sender bzw. Empfänger. Die Konfiguration selbst ist sehr einfach und in wenigen Schritten erledigt.

Alarmanlage mit Home Assistant und ZigBee Sensoren konstruieren

Alarmanlage mit Home Assistant und ZigBee Sensoren konstruieren

Mit dem Open Source Hausautomatisierungssystem Home Assistant und günstigen Sensoren wie z.B. Magnetkontakten für Fenster und Türen sowie Infrarotbewegungsmeldern lässt sich eine sehr günstige und dennoch zuverlässige Alarmanlage konstruieren. Ergänzt werden kann das ganze ggf. noch mit einer IP Kamera, um noch Bilder oder Videoclips auf das Smart Phone geschickt zu bekommen, wenn Alarm ausgelöst wird.