Ulanzi✨ Home Assistant – Awtrix 3/Ulanzi TC001 ❤️ – So funktioniert die perfekte Interaktion 🎛️🚀Ulanzi

Diese Uhr ist nicht nur ein stilvolles Accessoire, sondern auch ein wahres Multitalent im Smart Home. Dank ihrer nahtlosen Integration in Home Assistant kannst du die Ulanzi TC001 ganz nach deinen Wünschen anpassen und automatisieren. Stell dir vor, wie sie dir nicht nur die Uhrzeit anzeigt, sondern auch aktuelle Wetterdaten in lebendigen Animationen präsentiert oder dich rechtzeitig an deine nächsten Termine erinnert. Lass deiner Kreativität freien Lauf und gestalte deine Uhr mit individuellen Designs, die deine Persönlichkeit widerspiegeln. Die Ulanzi TC001 Smart Pixel Uhr ist der Schlüssel, um dein Zuhause intelligenter und stilvoller zu machen. Entdecke die unendlichen Möglichkeiten der modernen Technologie und verwandle dein Zuhause in einen Ort, der sowohl funktional als auch ästhetisch ansprechend ist – mit der Ulanzi TC001 wird jeder Tag zu einem besonderen Erlebnis!

In meinem Video habe ich die Installation von awtrix 3 auf dem Pixel Display nicht vorgestellt. Bei mir geht es um die Kommunikation mit awtrix 3 und Home Assistant. Und zwar ohne dem teilweise bekannten Memory Leak.

Matthias vom Kanal haus:automation hat den Installationsvorgang und das Produkt sehr gut erklärt, so dass ich gerne darauf verweise:
https://youtu.be/hsc_yUWwcVY?si=EMikkCt64jbqckt7

Bis zur Nacht vor der Veröffentlichung lag mir auch noch kein Affiliate Link vor. Aber nach nun einigen Wochen Wartezeit habe auch ich tatsächlich einen Link erhalten, wo ihr das Produkt erwerben könnt. Lag wohl doch nicht an der Kanalgröße 🙂

Die Uhr bekommt ihr hier: Ulanzi TV001 smarte Pixel Uhr *

Für die Kommunikation mit dem Pixeldisplay habe ich im Video mehrere Skripte vorgestellt.

Bei der Entwicklung, dem Code und auch beim Bugfixing habe ich mit @Herr Spiegelmann ( Moderator auf meinem Discord Server ) eng zusammengearbeitet. Auch an dieser Stelle meinen herzlichen Dank für die sehr angenehme und konstruktive Zusammenarbeit.

  • awtrix – new app
  • awtrix – delete app
  • awtrix – indicator
  • awtrix – power off
  • awtrix – power on
  • awtrix – reboot

Icons für das Display lassen sich auf der Seite LaMetric Icon Gallery herunterladen. Im Video wurden folgende Icon Numbers verwendet:

  • 3813 – für Tibber
  • 37323 – für PV Leistung
  • 2422 – für Aussentemperatur
  • 389 – für SOC des Hausspeichers
  • 974 – für Youtube Views und Likes
  • 56166 – für Gelbe Tonne
  • 12155 – für Graue Tonne
  • 56626 – für Grüne Tonne

!Hinweis vom 16.12.2024!

Aktuell lässt sich in der awtrix Weboberfläche von LaMetrics kein Icon auf das Display laden. Aber es gibt eine alternative Lösung. Blueforcer , der Entwickler von awtrix 3 hat eine App für Android und IPhone entwickelt, wo ihr auch eine Icon Gallerie zur Verfügung gestellt bekommt und die Icons direkt auf das Display laden könnt. Die App kostet für iOs weniger als 4€ ( Stand: 16.12.2024), was ich für den Funktionsumfang für absolut gerechtfertigt halte. Es gilt zu beachten, wenn man die Icons von awtrix verwendet, dann müssen die Icon ID´s angepasst werden.

awtrix – new app

alias: awtrix - new app
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/custom/{{topicname}}
      payload: |-
        {
          "text": "{{text}}",
          "rainbow": {{rainbow|tojson}},
          "duration": "{{duration}}",
          "icon": "{{icon}}",
          "scrollSpeed": 80,
          "textCase": "{{textcase}}",
          "lifetime": "{{lifetime}}"
        }
  - if:
      - condition: template
        value_template: "{{ showimmediately == true or showimmediately == True}}"
    then:
      - action: mqtt.publish
        metadata: {}
        data:
          evaluate_payload: false
          qos: 0
          retain: false
          topic: awtrix/switch
          payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
  topicname:
    selector:
      text: null
    name: topicname
    required: true
    description: Name of the topic - one topic per app
  text:
    selector:
      text: null
    name: text
    required: true
    description: Text to be displayed
  icon:
    selector:
      number:
        min: 0
        max: 100000
    name: icon
    required: true
    description: Icon ID, needs to be present on the awtrix filesystem - default no icon
    default: 1
  rainbow:
    selector:
      boolean: {}
    name: rainbow
    default: false
    required: true
    description: Rainbow text yes/no
  lifetime:
    selector:
      number:
        min: 0
        max: 86400
        step: 1
    name: lifetime
    default: 0
    description: Discard app after X seconds - default 0 (never expire)
  duration:
    selector:
      number:
        min: 1
        max: 180
        step: 1
    name: duration
    default: 3
    description: How many seconds should the message be displayed - default 3
  textcase:
    selector:
      number:
        min: 0
        max: 2
        step: 1
    name: textCase
    default: 0
    description: >-
      Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
      2=shows as it sent - default 0
  showimmediately:
    selector:
      boolean: {}
    name: showImmediately
    required: false
    description: Jumps the queue and displays the message immediately - default false
mode: parallel
max: 10

awtrix – delete app

alias: awtrix - delete app
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/custom/{{topicname}}
      payload: "{}"
description: ""
icon: mdi:led-strip
fields:
  topicname:
    selector:
      text: null
    name: topicname
    required: true
    description: Name of the app to be deleted
mode: parallel
max: 10

awtrix – indicator

Hinweis zur Verwendung: Wenn man den Indikator wieder deaktivieren ( nicht anzeigen ) lassen will, so muss lediglich die Farbe „schwarz“ selektiert werden.

alias: awtrix - indicator
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/indicator{{indicator}}
      payload: "{\"color\":{{colour}}, \"fade\":{{fade}}}"
description: ""
icon: mdi:led-strip
fields:
  indicator:
    selector:
      number:
        min: 1
        max: 3
        step: 1
    name: indicator
    required: true
    description: Index of the indicator
    default: 1
  colour:
    selector:
      color_rgb: {}
    default:
      - 255
      - 0
      - 0
    name: colour
    description: Colour of the indicator
    required: true
  fade:
    selector:
      number:
        min: 500
        max: 3000
        step: 100
    name: fade
    required: true
    default: 0
    description: >-
      Fade the indicator on and off with a fade interval in milliseconds - 0 is
      don't fade
mode: parallel
max: 10

awtrix – power off

alias: awtrix - power off
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      topic: awtrix/power
      payload: "{\"power\" : false}"
      evaluate_payload: false
      qos: 0
      retain: false
description: power off device
icon: mdi:led-strip
fields: {}
mode: parallel
max: 10

awtrix – power on

alias: awtrix - power on
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      topic: awtrix/power
      payload: "{\"power\" : true}"
      evaluate_payload: false
      qos: 0
      retain: false
description: power on device
icon: mdi:led-strip
fields: {}
mode: parallel
max: 10

awtrix – reboot

alias: awtrix - reboot
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      topic: awtrix/reboot
      payload: "{}"
      evaluate_payload: false
      qos: 0
      retain: false
description: reboot device
icon: mdi:led-strip
fields: {}
mode: parallel
max: 10

Für die Müllanzeige werden ein Input Button Helfer und ein Template Helfer benötigt.

Der Input Button Helfer übernimmt bei Betätigung einen aktuellen Zeitstempel, welcher im Template „Müllinformation“ verwendet wird.

Das Template Müllinformation liest aus einem Kalender Zeitpunkte für die jeweiligen Müllabholungstermine aus und differenziert in diesem Beispiel nach

  • Gelber Sack
  • Grüne Tonne
  • Graue Tonne

Template Helfer Sensor „Müllinformation“

{% set last_pressed = as_datetime(states('input_button.mulltonne_rausgestellt')).date() %}
{% set start_time = state_attr('calendar.abfall', 'start_time') %}
{% if start_time %}
  {% set event_datetime = as_datetime(start_time) %}
  {% set event_date = event_datetime.date() %}
  {# Wenn der Button innerhalb des gültigen Zeitraums (heute oder gestern) gedrückt wurde und das Ereignis noch nicht vorbei ist #}
  {% if (last_pressed == event_date or last_pressed == event_date - timedelta(days=1))  %}
    Tonne wurde rausgestellt.
  {% else %}
    {# Am Tag vor dem Ereignis #}
    {% if (event_date - now().date()).days == 1 %}
      {{ state_attr('calendar.abfall', 'message') }} rausstellen!

    {# Am Tag des Ereignisses #}
    {% elif event_date == now().date() %}
      {{ state_attr('calendar.abfall', 'message') }} rausstellen!

    {# Ansonsten kein Termin #}
    {% else %}
      Kein Müll
    {% endif %}
  {% endif %}
{% else %}
  Kein Termin
{% endif %}

1 Tag vor dem Abholungstermin bis zum Tag der Abholung, wird der Termin mit der jeweiligen herauszustellenden Tonne über das Template angezeigt. Ich verwende dafür die HACS Mushroom Cards .

Tonne rausstellen (Mushroom Template-Badge)

Yaml Code:

type: custom:mushroom-template-badge
content: "{{ states('sensor.mullinformation') }}"
icon: mdi:trash-can
color: |-
  {% if states('sensor.mullinformation') == 'Gelber Sack rausstellen!' %}
  yellow
  {% elif states('sensor.mullinformation') == 'Grüne Tonne rausstellen!' %}
  green
  {% elif states('sensor.mullinformation') == 'Graue Tonne rausstellen!' %}
  grey
  {% else %}
  white
  {% endif %}

Wurde die Tonne herausgestellt, kann über den Input Button quittiert werden, dass die Mülltonne herausgestellt wurde.

Wird der Vorgang quittiert, wird die Anzeige aktualisiert und auch auf dem Display die Nachricht entfernt.

Müll quittieren (Mushroom Template-Badge)

type: custom:mushroom-template-badge
content: Müll quittieren
icon: mdi:trash-can
color: >-
  {% set last_pressed =
  as_datetime(states('input_button.mulltonne_rausgestellt')).date() %}

  {% set start_time = state_attr('calendar.abfall', 'start_time') %}

  {% if start_time %}
    {% set event_datetime = as_datetime(start_time) %}
    {% set event_date = event_datetime.date() %}
    {# Wenn der Button innerhalb des gültigen Zeitraums (heute oder gestern) gedrückt wurde und das Ereignis noch nicht vorbei ist #}
    {% if (last_pressed == event_date or last_pressed == event_date - timedelta(days=1))  %}
      green
    {% else %}
      blue
    {% endif %}
  {% endif %}
label: |2-


    
entity: input_button.mulltonne_rausgestellt
tap_action:
  action: toggle
visibility:
  - condition: and
    conditions:
      - condition: state
        entity: sensor.mullinformation
        state_not: Kein Müll
      - condition: state
        entity: sensor.mullinformation
        state_not: Tonne wurde rausgestellt.
      - condition: and
        conditions: []

Die Automatisierung sieht dann wie folgt aus. Hier bitte die eigenen Entitäten verwenden und nicht benötigte Anzeigen entfernen.

alias: awtrix Zustandstrigger
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.evcc_tariff_grid
      - sensor.evcc_pv_power
      - sensor.aussentemperatur_ds18b20_temperature
      - sensor.evcc_battery_soc
      - sensor.smart_home_more_views
      - sensor.mullinformation
    for:
      hours: 0
      minutes: 0
      seconds: 10
  - trigger: state
    entity_id:
      - sensor.smart_home_more
    attribute: stars
    for:
      hours: 0
      minutes: 0
      seconds: 10
conditions: []
actions:
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 3813
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: Tibber
      text: "{{ states('sensor.evcc_tariff_grid') | round(3) }}"
    alias: "Skript new App : Tibber"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 37323
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: PV
      text: "{{ states('sensor.evcc_pv_power') }}"
    alias: "Skript new App : Solar Power"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 2422
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: Temperatur
      text: "{{ states('sensor.aussentemperatur_ds18b20_temperature') }} °"
    alias: "Skript new App : Aussentemperatur"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 389
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: SOC
      text: "{{ states('sensor.evcc_battery_soc') }} %"
    alias: "Skript new App : SOC Hausspeicher"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 974
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 2
      topicname: Youtube
      text: >-
        {{ states('sensor.smart_home_more_views') }} -
        {{state_attr('sensor.smart_home_more', 'stars')}}
    alias: "Skript new App : YT Views und Likes"
  - alias: Indikator für genügend PV oder günstiger Preis
    if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.evcc_pv_power
            above: 1500
          - condition: numeric_state
            entity_id: sensor.evcc_tariff_grid
            below: 0.28
    then:
      - action: script.awtrix_indicator
        metadata: {}
        data:
          indicator: 1
          colour:
            - 30
            - 255
            - 0
          fade: 0
    else:
      - action: script.awtrix_indicator
        metadata: {}
        data:
          indicator: 1
          colour:
            - 255
            - 0
            - 0
          fade: 0
  - alias: Abfall Anzeige
    choose:
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Gelber Sack rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 56166
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Graue Tonne rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 12155
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Grüne Tonne rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 56625
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
    default:
      - action: script.awtrix_delete_app
        metadata: {}
        data:
          topicname: Abfall
  - alias: Abfall Anzeige
    choose:
      - conditions:
          - condition: or
            conditions:
              - condition: state
                entity_id: sensor.mullinformation
                state: Gelber Sack rausstellen!
              - condition: state
                entity_id: sensor.mullinformation
                state: Graue Tonne rausstellen!
              - condition: state
                entity_id: sensor.mullinformation
                state: Grüne Tonne rausstellen!
            alias: Wenn eine der Tonnen rausgestellt werden muss
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 56166
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
    default:
      - action: script.awtrix_delete_app
        metadata: {}
        data:
          topicname: Abfall
    enabled: false
  - alias: Reboot, wenn RAM knapp wird
    if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.awtrix_b3dc90_free_ram
            below: 50000
          - condition: numeric_state
            entity_id: sensor.awtrix_bebc10_free_ram
            below: 50000
    then:
      - action: script.awtrix_reboot
        metadata: {}
        data: {}
mode: single

Für Müll quittieren, verwende ich ein Mushroom Template Badge.

Update vom 27.11.2024 dynamische Wetter-Icons

Das Thema beschäftigt mich weiterhin, so dass ich euch noch weitere Ergänzungen und Updates zum awtrix 3 zur Verfügung stellen möchte.

Angeregt durch einige Kommentare bzgl. einer in Abhängigkeit vom aktuellen Wetter anzuzeigendes Icon , möchte ich euch eine Erweiterung der Automatisierung, bzw. des Skripts vorstellen, so dass ihr ohne eine zusätzliche Automatisierung oder Skript den Zustand des Wetters als Icon ( z.B. Sonnig, Regnerisch, Bewölkt etc.. ) nutzen könnt. Grundvoraussetzung dafür ist eine Wetterintegration wie z.B. der Deutsche Wetterdienst (GitHub – FL550/dwd_weather: Deutscher Wetterdienst integration for Home-Assistant)

Partly Cloudly

Rainy

Snowy

Bei dieser Lösung wird der aktuelle Zustand der Wetter Entität ausgelesen und in der Automatisierung verwendet.

Wir benötigen dazu ein Template, welches den aktuellen Zustand des Wetters ausgibt. Die Ausgaben des Wetter Templates sind in jeder Integration identisch und können auf der Home Assistant Dokumentationsseite nachgelesen werden.

In meinem Beispiel heißt die Entität “ weather.lahr „.

{{ states('weather.lahr') }}

Rückgabe ist in diesem Beispiel bewölkt, also cloudy.

Es gibt nach der Home Assistant Dokumentation 15 unterschiedliche Wetter Zustände. Für jeden der Zustände habe ich uns ein Icon von der Seite LaMetric Icon Gallery herausgesucht und auf der awtrix 3 Weboberfläche heruntergeladen.

ICON-IDWetter Zustand
2283cloudy
13505clear-night
8551fog
52386hail
21174lighting (thunderstorm)
51457lightning-rainy
2286partlycloudy
56677pouring
56548rainy
58081snowy
49301snowy-rainy
11201sunny
15618windy
62874windy-variant
56705exceptional

Ladet diese Icons über die awtrix 3 Weboberfläche herunter und speichert die Einstellungen.

Nachdem die Icons alle heruntergeladen sind, geht zum Tab Files und lasst euch dort alle Dateien im Verzeichnis ICONS anzeigen.

Dort gebt ihr den Dateien mit der jeweiligen ID den Namen aus der obigen Tabelle.

Die Beispiel ID 2283.gif, wird somit aus der Datei cloudy.gif umbenannt. Dieser Vorgang wird für alle in der Tabelle enthaltenen IDs wiederholt.

Ist der Vorgang abgeschlossen, sollten folgende Bilddaten im Verzeichnis ICONS vorhanden sein.

Im Skript awtrix – new app muss eine Änderung vorgenommen werden.

Unter dem Feld icon, muss Zahl in Text geändert und gespeichert werden.

Ändern in Text:

Nach dem Speichern ist das Skript nun in der Lage ein Icon über einen Namen ( wie z.B. cloudy oder sunny ) zu laden.

Hier nochmal das vollständige Skript awtrix – new app

alias: awtrix - new app
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/custom/{{topicname}}
      payload: |-
        {
          "text": "{{text}}",
          "rainbow": {{rainbow|tojson}},
          "duration": "{{duration}}",
          "icon": "{{icon}}",
          "scrollSpeed": 80,
          "textCase": "{{textcase}}",
          "lifetime": "{{lifetime}}"
        }
  - if:
      - condition: template
        value_template: "{{ showimmediately == true or showimmediately == True}}"
    then:
      - action: mqtt.publish
        metadata: {}
        data:
          evaluate_payload: false
          qos: 0
          retain: false
          topic: awtrix/switch
          payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
  topicname:
    selector:
      text: null
    name: topicname
    required: true
    description: Name of the topic - one topic per app
  text:
    selector:
      text: null
    name: text
    required: true
    description: Text to be displayed
  icon:
    selector:
      text: {}
    name: icon
    required: true
    description: Icon ID, needs to be present on the awtrix filesystem - default no icon
  rainbow:
    selector:
      boolean: {}
    name: rainbow
    default: false
    required: true
    description: Rainbow text yes/no
  lifetime:
    selector:
      number:
        min: 0
        max: 86400
        step: 1
    name: lifetime
    default: 0
    description: Discard app after X seconds - default 0 (never expire)
  duration:
    selector:
      number:
        min: 1
        max: 180
        step: 1
    name: duration
    default: 3
    description: How many seconds should the message be displayed - default 3
  textcase:
    selector:
      number:
        min: 0
        max: 2
        step: 1
    name: textCase
    default: 0
    description: >-
      Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
      2=shows as it sent - default 0
  showimmediately:
    selector:
      boolean: {}
    name: showImmediately
    required: false
    description: Jumps the queue and displays the message immediately - default false
mode: parallel
max: 10

In der Automatisierung kann nun das Skript für die dynamischen Wettericons wie folgt aufgerufen werden, ich verwende es zusammen mit einem Außentemperatursensor und übergebe als Icon den aktuellen Zustand der Wetter Entität.

action: script.awtrix_new_app
metadata: {}
data:
  icon: "{{ states('weather.lahr') }}"
  rainbow: false
  lifetime: 0
  duration: 5
  textcase: 0
  topicname: Temperatur
  text: "{{ states('sensor.aussentemperatur_ds18b20_temperature') }} °"
alias: "Skript new App : Aussentemperatur"

Zur Vollständigkeit hier nochmal die gesamte Automatisierung:

alias: awtrix Zustandstrigger
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.evcc_tariff_grid
      - sensor.evcc_pv_power
      - sensor.aussentemperatur_ds18b20_temperature
      - sensor.evcc_battery_soc
      - sensor.smart_home_more_views
      - sensor.mullinformation
      - weather.lahr
    for:
      hours: 0
      minutes: 0
      seconds: 10
  - trigger: state
    entity_id:
      - sensor.smart_home_more
    attribute: stars
    for:
      hours: 0
      minutes: 0
      seconds: 10
conditions: []
actions:
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 3813
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: Tibber
      text: "{{ states('sensor.evcc_tariff_grid') | round(3) }}"
    alias: "Skript new App : Tibber"
  - if:
      - condition: numeric_state
        entity_id: sensor.evcc_pv_power
        above: 0
    then:
      - action: script.awtrix_new_app
        metadata: {}
        data:
          icon: 37323
          rainbow: false
          lifetime: 0
          duration: 5
          textcase: 0
          topicname: PV
          text: "{{ states('sensor.evcc_pv_power') }}"
        alias: "Skript new App : Solar Power"
    else:
      - action: script.awtrix_delete_app
        metadata: {}
        data:
          topicname: PV
    alias: "PV Ertrag vorhanden "
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: "{{ states('weather.lahr') }}"
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: Temperatur
      text: "{{ states('sensor.aussentemperatur_ds18b20_temperature') }} °"
    alias: "Skript new App : Aussentemperatur"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 389
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: SOC
      text: "{{ states('sensor.evcc_battery_soc') }} %"
    alias: "Skript new App : SOC Hausspeicher"
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 974
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 2
      topicname: Youtube
      text: >-
        {{ states('sensor.smart_home_more_views') }} -
        {{state_attr('sensor.smart_home_more', 'stars')}}
    alias: "Skript new App : YT Views und Likes"
  - alias: Indikator für genügend PV oder günstiger Preis
    if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.evcc_pv_power
            above: 1500
          - condition: numeric_state
            entity_id: sensor.evcc_tariff_grid
            below: 0.28
    then:
      - action: script.awtrix_indicator
        metadata: {}
        data:
          indicator: 1
          colour:
            - 30
            - 255
            - 0
          fade: 0
    else:
      - action: script.awtrix_indicator
        metadata: {}
        data:
          indicator: 1
          colour:
            - 255
            - 0
            - 0
          fade: 0
  - alias: Abfall Anzeige
    choose:
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Gelber Sack rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 56166
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Graue Tonne rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 12155
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
      - conditions:
          - condition: state
            entity_id: sensor.mullinformation
            state: Grüne Tonne rausstellen!
        sequence:
          - action: script.awtrix_new_app
            metadata: {}
            data:
              icon: 56625
              rainbow: false
              lifetime: 0
              duration: 10
              textcase: 2
              topicname: Abfall
              text: "{{ states('sensor.mullinformation')}}"
    default:
      - action: script.awtrix_delete_app
        metadata: {}
        data:
          topicname: Abfall
  - alias: Reboot, wenn RAM knapp wird
    if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.awtrix_b3dc90_free_ram
            below: 50000
          - condition: numeric_state
            entity_id: sensor.awtrix_bebc10_free_ram
            below: 50000
    then:
      - action: script.awtrix_reboot
        metadata: {}
        data: {}
mode: single

Update vom 03.12.2024 Textfarbe

Ich habe das Script noch erweitert, so dass auch eine RGB Farbe übergeben werden kann. Defaultwert ist „weiß“ , es muss auch keine Farbe angegeben werden.

Der neue Parameter nennt sich textcolor. Im Beispiel ist die Schriftfarbe auf „rot“ gesetzt worden.

alias: awtrix - new app
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/custom/{{topicname}}
      payload: |-
        {
          "text": "{{text}}",
          "rainbow": {{rainbow|tojson}},
          "duration": "{{duration}}",
          "icon": "{{icon}}",
          "scrollSpeed": 80,
          "textCase": "{{textcase}}",
          "lifetime": "{{lifetime}}",
          "color": {{textcolor or [255, 255, 255] | tojson}}
        }
  - if:
      - condition: template
        value_template: "{{ showimmediately == true or showimmediately == TRUE }}"
    then:
      - action: mqtt.publish
        metadata: {}
        data:
          evaluate_payload: false
          qos: 0
          retain: false
          topic: awtrix/switch
          payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
  topicname:
    selector:
      text: null
    name: topicname
    required: true
    description: Name of the topic - one topic per app
  text:
    selector:
      text: null
    name: text
    required: true
    description: Text to be displayed
  icon:
    selector:
      text: {}
    name: icon
    required: true
    description: Icon ID, needs to be present on the awtrix filesystem - default no icon
  rainbow:
    selector:
      boolean: {}
    name: rainbow
    default: false
    required: true
    description: Rainbow text yes/no
  lifetime:
    selector:
      number:
        min: 0
        max: 86400
        step: 1
    name: lifetime
    default: 0
    description: Discard app after X seconds - default 0 (never expire)
  duration:
    selector:
      number:
        min: 1
        max: 180
        step: 1
    name: duration
    default: 3
    description: How many seconds should the message be displayed - default 3
  textcase:
    selector:
      number:
        min: 0
        max: 2
        step: 1
    name: textCase
    default: 0
    description: >-
      Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
      2=shows as it sent - default 0
  showimmediately:
    selector:
      boolean: {}
    name: showImmediately
    required: false
    description: Jumps the queue and displays the message immediately - default false
  textcolor:
    selector:
      color_rgb: {}
    name: textcolor
    default:
      - 255
      - 255
      - 255
    required: false
    description: set text color
mode: parallel
max: 10

Update vom 05.12.2024 : Fortschrittsanzeige

Desto mehr man mit dem Display arbeitet, desto mehr Dinge fallen einem ein, was man damit alles realisieren kann. Ich habe das Script ergänzt um eine Fortschrittsanzeige, so dass ihr z.B. den Fortschritt eures Waschvorgangs oder eurer Geschirrspülmaschine anzeigen lassen könnt. Dann hat man im Blick, wann man die Wäsche aufhängen darf, oder das Geschirr ausräumen:-)

In diesem Beispiel habe ich einen Geschirrspüler dargestellt, der gerade ca. 80% seines Vorgangs beendet hat.

Ein neues Feld wurde dazu im Script ergänzt. Im Feld „progress“ übergebt ihr eure Entität , die einen Fortschritt in Prozent enthält ( 0-100% ).

Als Icon habe ich dafür die Nr. 55848 verwendet.

Das Feld muss nicht zwingend übergeben werden, so dass eure Automatisierungen davon nicht betroffen sind. Wird kein Wert übergeben, wird der Default Wert auf -1 gesetzt und kein Fortschritt wird angezeigt.

Das aktualisierte Script awtrix – new app

alias: awtrix - new app
sequence:
  - action: mqtt.publish
    metadata: {}
    data:
      evaluate_payload: false
      qos: 0
      retain: false
      topic: awtrix/custom/{{topicname}}
      payload: |-
        {
          "text": "{{text}}",
          "rainbow": {{rainbow|tojson}},
          "duration": "{{duration}}",
          "icon": "{{icon}}",
          "scrollSpeed": 80,
          "textCase": "{{textcase}}",
          "lifetime": "{{lifetime}}",
          "color": {{textcolor or [255, 255, 255] | tojson}},
          "progress": {{ progress or -1 }}
        }
  - if:
      - condition: template
        value_template: "{{ showimmediately == true or showimmediately == True}}"
    then:
      - action: mqtt.publish
        metadata: {}
        data:
          evaluate_payload: false
          qos: 0
          retain: false
          topic: awtrix/switch
          payload: "{\"name\": \"{{topicname}}\"}"
description: ""
icon: mdi:led-strip
fields:
  topicname:
    selector:
      text: null
    name: topicname
    required: true
    description: Name of the topic - one topic per app
  text:
    selector:
      text: null
    name: text
    required: true
    description: Text to be displayed
  icon:
    selector:
      text: {}
    name: icon
    required: true
    description: Icon ID, needs to be present on the awtrix filesystem - default no icon
  rainbow:
    selector:
      boolean: {}
    name: rainbow
    default: false
    required: true
    description: Rainbow text yes/no
  lifetime:
    selector:
      number:
        min: 0
        max: 86400
        step: 1
    name: lifetime
    default: 0
    description: Discard app after X seconds - default 0 (never expire)
  duration:
    selector:
      number:
        min: 1
        max: 180
        step: 1
    name: duration
    default: 3
    description: How many seconds should the message be displayed - default 3
  textcase:
    selector:
      number:
        min: 0
        max: 2
        step: 1
    name: textCase
    default: 0
    description: >-
      Changes the Uppercase setting. 0=global setting, 1=forces uppercase;
      2=shows as it sent - default 0
  showimmediately:
    selector:
      boolean: {}
    name: showImmediately
    required: false
    description: Jumps the queue and displays the message immediately - default false
  textcolor:
    selector:
      color_rgb: {}
    name: textcolor
    default:
      - 255
      - 255
      - 255
    required: false
    description: set text color
  progress:
    selector:
      number:
        min: 0
        max: 99
        step: 1
    name: progress
    description: "shows a progress bar (value range from 0-100) "
    default: 0
mode: parallel
max: 10

Die Automatisierung dazu habe ich so gestaltet, dass mir die Meldung und der Fortschritt nur dann angezeigt werden, wenn der Fortschritt > 0 % ist. Ansonsten wird die Meldung wieder entfernt. Getriggert wird auf Änderung des Fortschritts.

Der Teilabschnitt für die Wenn/Dann Bedingung unter den Aktionen sieht wie folgt aus:

alias: Geschirrspüler läuft
if:
  - condition: numeric_state
    entity_id: sensor.geschirrspuler_program_progress
    above: 0
then:
  - action: script.awtrix_new_app
    metadata: {}
    data:
      icon: 55848
      rainbow: false
      lifetime: 0
      duration: 5
      textcase: 0
      topicname: Dishwasher
      text: Geschirrspüler läuft!
      progress: "{{ states('sensor.geschirrspuler_program_progress') | int }}"
    alias: "Skript new App : Fortschritt Geschirrspüler"
    enabled: true
else:
  - action: script.awtrix_delete_app
    metadata: {}
    data:
      topicname: Dishwasher

Home Assistant : Frigate NVR installieren für ultimative Sicherheit und tolle Automatisierungen!

Tauche ein in die Welt der Sicherheit! Erfahre in diesem Video, wie du Frigate NVR problemlos unter Home Assistant einrichtest. Von der nahtlosen Integration bis zur stylischen Lovelace Card – alles, was du für ultimativen Schutz brauchst! 🛡️🏡

Hier kannst du den Coral AI beziehen*:

Google Coral USB Edge TPU ML Beschleunigungscoprozessor für Raspberry Pi und andere eingebettete Einzelboard-Computer
  • Spezifikationen: Arm 32-Bit Cortex-M0+ Mikroprozessor (MCU): bis zu 32 MHz max 16 KB Flash-Speicher mit ECC 2 KB RAM-Anschlüsse: USB 3.1 (Gen 1) Port und Kabel (SuperSpeed, 5 Gb/s Übertragungsgeschwindigkeit)

Links aus dem Video:

Frigate: Introduction | Frigate

Coral AI: Get started with the USB Accelerator | Coral

Hinweis:

Bitte beachtet, dass man Frigate NVR nicht auf einem Raspberry Pi mit Micro SD Karte laufen lassen sollte. Durch die häufigen Schreib-/Lesezyklen kann es zu einem schnellen Defekt der Dateisystems kommen. Verwendet hier besser eine SSD !

Für die Verwendung des Coral AI Stick mit einem Raspberry PI, empfehle ich einen separat versorgten USB 3.0 HUB.

Netzwerkspeicher

Für das dauerhafte Recording empfehle ich die Verwendung eines Netzwerkspeichers. Die Einrichtung unter Home Assistant für die Verwendung eines Netzwerkspeichers ist hier beschrieben:

HA Network Storage | Frigate

Wie sich grundsätzlich unter HA ein Netzwerkspeicher z.B. über eine Synology NAS Freigabe einrichten lässt, habe ich in dem Video Backup & Restore erklärt. Hier wäre lediglich als Medium -> Media zu wählen und nicht Backup. Die Media Freigabe muss unter Home Assistant „frigate“ genannt werden.

YouTube player

Konfigurationen:

Hier findest du die frigate.yml :

mqtt:
  enabled: True
  host: 172.16.0.14
  user: smarthome
  password: smarthome
  topic_prefix: frigate
  # Optional: client id (default: shown below)
  # WARNING: must be unique if you are running multiple instances
  client_id: frigate
  # Optional: interval in seconds for publishing stats (default: shown below)
  stats_interval: 1


# Optional: Detectors configuration. Defaults to a single CPU detector
detectors:
  # Required: name of the detector
  detector_name:
    # Required: type of the detector
    # Frigate provided types include 'cpu', 'edgetpu', and 'openvino' (default: shown below)
    # Additional detector types can also be plugged in.
    # Detectors may require additional configuration.
    # Refer to the Detectors configuration page for more information.
    type: cpu 

birdseye:
  enabled: True
  restream: True
  mode: objects

objects:
  track:
    - person
    - car
  filters:
    person:
      min_area: 5000
      max_area: 100000


go2rtc:
  streams:
    Treppenhaus: 
      - rtsp://smarthome:Smarthome&More@192.168.101.185:554/h264Preview_01_main
      - "ffmpeg:rtsp_cam#audio=opus"
    Treppenhaus_sub: 
      - rtsp://smarthome:Smarthome&More@192.168.101.185:554/h264Preview_01_main
      - "ffmpeg:rtsp_cam#audio=opus"

cameras:
  Treppenhaus_CAM:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/Treppenhaus?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/Treppenhaus_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
    detect:
      width: 1280 
      height: 720 
      fps: 5
    snapshots:
      enabled: True
    record:
      enabled: True
      retain: 
        days: 7
      events:
        retain: 
          default: 14

Möchtest du weitere Kameras einbinden, habe ich dir das Beispiel frigate.yml um eine weitere Beispielkamera erweitert ( Beispiel für eine Reolink Kamera z.B. 410, 520, 520a, 511wa). Dieser Vorgang kann für die Anzahl eurer Kameras wiederholt werden. Achtet darauf, dass jede Kamera auch Kapazität von eurem Host-System in Anspruch nimmt.

Weitere Konfigurationsbeispiele für Kameras findest du an dieser Stelle auf der Frigate Dokumentation:

Camera Specific Configurations | Frigate

Beispiel für die Erweiterung um eine weitere Kamera.

mqtt:
  enabled: True
  host: 172.16.0.14
  user: smarthome
  password: smarthome
  topic_prefix: frigate
  # Optional: client id (default: shown below)
  # WARNING: must be unique if you are running multiple instances
  client_id: frigate
  # Optional: interval in seconds for publishing stats (default: shown below)
  stats_interval: 1


# Optional: Detectors configuration. Defaults to a single CPU detector
detectors:
  # Required: name of the detector
  detector_name:
    # Required: type of the detector
    # Frigate provided types include 'cpu', 'edgetpu', and 'openvino' (default: shown below)
    # Additional detector types can also be plugged in.
    # Detectors may require additional configuration.
    # Refer to the Detectors configuration page for more information.
    type: cpu 

birdseye:
  enabled: True
  restream: True
  mode: objects

objects:
  track:
    - person
    - car
  filters:
    person:
      min_area: 5000
      max_area: 100000


go2rtc:
  streams:
    Treppenhaus: 
      - rtsp://smarthome:Smarthome&More@192.168.101.185:554/h264Preview_01_main
      - "ffmpeg:rtsp_cam#audio=opus"
    Treppenhaus_sub: 
      - rtsp://smarthome:Smarthome&More@192.168.101.185:554/h264Preview_01_main
      - "ffmpeg:rtsp_cam#audio=opus"
    zweite_Kamera: 
      - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus"
    zweite_Kamera_sub: 
      - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password"


cameras:
  Treppenhaus_CAM:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/Treppenhaus?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/Treppenhaus_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
    detect:
      width: 1280 
      height: 720 
      fps: 5
    snapshots:
      enabled: True
    record:
      enabled: True
      retain: 
        days: 7
      events:
        retain: 
          default: 14

  zweite_Kamera_CAM:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/zweite_Kamera?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
        - path: rtsp://127.0.0.1:8554/zweite_Kamera_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
    detect:
      width: 1280 
      height: 720 
      fps: 5
    snapshots:
      enabled: True
    record:
      enabled: True
      retain: 
        days: 7
      events:
        retain: 
          default: 14
  

Möchtest du den Coral AI verwenden, dann setze an der Stelle Detectors folgende Zeilen ein und ersetzte damit die Zeilen mit dem CPU-Detector:

detectors:
  coral:
    type: edgetpu
    device: usb

Coral Edge TPU Proxmox :

Um den Coral AI unter Proxmox durchzureichen, führe folgende Zeilen in deiner PVE-Node Shell aus (nicht in der VM !) :

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update
sudo apt-get install libedgetpu1-std

Nun kannst du in deiner VM den USB Edge TPU Adapter wie folgt durchreichen:

Achte dabei darauf ,dass du den Port wählst, wo der Coral AI Stick eingesteckt ist. Bei mir wurde „Ausgesteckt“ angezeigt. Lass dich davon nicht irritieren, wenn das bei dir ebenfalls so sein sollte.

Für die Verwendung der TPU musst du zwingend einen USB 3.x Port verwenden.

Zuletzt muss die Home Assistant VM neu gestartet werden und die Änderung in der friagte.yml durchgeführt werden ( siehe oben ).

In eigener Sache:

Frigate bietet noch viele weitere Möglichkeiten. Diese lassen sich nicht alle in nur einem Video darlegen. Falls dich Frigate mit Home Assistant interessiert, kannst du mir gerne in den Kommentaren des Videos auf Youtube eine Nachricht hinterlassen. Wenn genügend Interesse besteht, werde ich gerne noch weitere Features von Frigate vorstellen ( Masken, Zonen, Beispielautomatisierungen etc. ) .

Home Assistant Templates: Startklar ins Smart Home mit einem einfachen Einstieg!

In diesem Video erlebt ihr den einfachen Einstieg in die Nutzung von Home Assistant Templates. Wir gehen Schritt für Schritt durch die Grundlagen von Templates bis zu einer unkomplizierten Beispielautomatisierung. Dies schafft eine solide Basis für zahlreiche weitere Automatisierungen mit Templates. Entdeckt jetzt die Welt der Smart Home Automatisierung!

Link zur Dokumentation von Home Assistant Templates: https://www.home-assistant.io/docs/configuration/templating/

Template Beispiel Temperatursensoren:

{{ (float(states.sensor.temperatur_mia_temperature.state) + float(states.sensor.temperatur_mia_temperature.state) ) /2  }}

Template Beispiel Liste einer Gruppe mit allen ausgeschalteten Lichtern:

{{ expand('light.gruppe_lichter_template') | selectattr("state","eq","off") | map(attribute="entity_id") | list }}

Template Beispiel Liste von allen Lichtern die eingeschaltet sind:

{{ states.light | selectattr("state","eq","on") | map(attribute="entity_id") | list }}

Template Beispiel Anzahl aller Lichter die eingeschaltet sind:

{{ states.light | selectattr("state","eq","on") | map(attribute="entity_id") | list | count }}

Komplette Automatisierung aus dem Video:

alias: Video_Template_Beispiel
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.entfernung_tobias_von_daheim
    below: 0.2
condition: []
action:
  - service: light.turn_on
    data:
      entity_id: >-
        {{ expand('light.gruppe_lichter_template') |
        selectattr("state","eq","off") | map(attribute="entity_id") | list }}
mode: single

Template Beispiel Distanz Device Tracker zum Haus:

{{ distance('device_tracker.iphone_von_tobias_4') | round(2)}}

Effektives Dimmen: 3 praktische Home Assistant Automatisierungen für deine Beleuchtung!

Entdecke die Magie der Lichtautomatisierung! In diesem Video zeige ich dir 3 faszinierende Wege, wie du das Dimmen von Lichtern mit nur einer Fernbedienung in deinem Smart Home automatisieren kannst. Tauche ein in die Welt der Beleuchtungshacks und erfahre, wie du mit Leichtigkeit die perfekte Atmosphäre in jedem Raum schaffst. Verpasse nicht die Gelegenheit, deinem Zuhause einen Hauch von Smartness zu verleihen – schau jetzt rein und erlebe, wie einfach es sein kann, Licht auf ein neues Level zu heben!

Meine ZigBee Produkte, die ich einsetze *:

Die Fernbedienung findet ihr hier:

STYRBAR Fernbedienung, smart Edelstahl – IKEA Deutschland

Links aus dem Video:

ZigBee2MQTT Devices: Home | Zigbee2MQTT

Automatisierung Dimmer_01:

alias: Dimmer_01_Video
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: "on"
    id: "on"
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: "off"
    id: "off"
condition: []
action:
  - if:
      - condition: trigger
        id:
          - "on"
    then:
      - device_id: fbb93a7f058686a3b2f0591978fb3497
        domain: light
        entity_id: c4823f315d11423717ef48fe24a15196
        type: brightness_increase
  - if:
      - condition: trigger
        id:
          - "off"
    then:
      - device_id: fbb93a7f058686a3b2f0591978fb3497
        domain: light
        entity_id: c4823f315d11423717ef48fe24a15196
        type: brightness_decrease
mode: single

Automatisierung Dimmer_02:

alias: Dimmer_02_Video
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_move_up
    id: brightness_move_up
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_move_down
    id: brightness_move_down
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_stop
    id: brightness_stop
condition: []
action:
  - repeat:
      sequence:
        - if:
            - condition: trigger
              id:
                - brightness_move_up
          then:
            - device_id: fbb93a7f058686a3b2f0591978fb3497
              domain: light
              entity_id: c4823f315d11423717ef48fe24a15196
              type: brightness_increase
            - delay:
                hours: 0
                minutes: 0
                seconds: 0
                milliseconds: 400
        - if:
            - condition: trigger
              id:
                - brightness_move_down
          then:
            - device_id: fbb93a7f058686a3b2f0591978fb3497
              domain: light
              entity_id: c4823f315d11423717ef48fe24a15196
              type: brightness_decrease
            - delay:
                hours: 0
                minutes: 0
                seconds: 0
                milliseconds: 400
      while: []
mode: restart

Automatisierung Dimmer_03 :

alias: Dimmer_03_Video
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_move_up
    id: brightness_move_up
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_move_down
    id: brightness_move_down
  - platform: state
    entity_id:
      - sensor.remote_studio_action
    to: brightness_stop
    id: brightness_stop
condition: []
action:
  - repeat:
      sequence:
        - if:
            - condition: trigger
              id:
                - brightness_move_up
          then:
            - service: light.turn_on
              metadata: {}
              data:
                brightness_step_pct: 1
              target:
                entity_id: light.buro_klavinova_oben
            - delay:
                hours: 0
                minutes: 0
                seconds: 0
                milliseconds: 400
        - if:
            - condition: trigger
              id:
                - brightness_move_down
          then:
            - service: light.turn_on
              metadata: {}
              data:
                brightness_step_pct: -1
              target:
                entity_id: light.buro_klavinova_oben
            - delay:
                hours: 0
                minutes: 0
                seconds: 0
                milliseconds: 400
      while: []
mode: restart

Effizient und Individuell: Home Assistant Blaupause in nur 20 Minuten erstellen!

Smart ohne Stress: Deine individuelle Home Assistant Blaupause in 20 Minuten – Keine Programmierkenntnisse erforderlich! Bonus: Lade den Blueprint von meiner Blog-Seite herunter, wenn du dir die Arbeit sparen möchtest!

Diese ZigBee Produkte verwende ich* :

Die Anleitung zu den Home Assistant Selectors findest du hier:

Selectors – Home Assistant (home-assistant.io)

Verwendete Automatisierungsvorlage:

alias: Bewegung_Blueprint
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.bewegungsmelder_buro_kuhlschrank_occupancy
    to: "on"
    id: Bewegung erkannt
  - platform: state
    entity_id:
      - binary_sensor.bewegungsmelder_buro_kuhlschrank_occupancy
    to: "off"
    for:
      hours: 0
      minutes: 2
      seconds: 0
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Bewegung erkannt
      - condition: numeric_state
        entity_id: sensor.bewegungsmelder_buro_kuhlschrank_illuminance_lux
        below: 50
    then:
      - service: light.turn_on
        metadata: {}
        data: {}
        target:
          entity_id:
            - light.buro_klavinova_oben
      - service: switch.turn_on
        target:
          entity_id: switch.sonoff_octo_print
        data: {}
    else:
      - service: light.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: light.buro_klavinova_oben
      - service: switch.turn_off
        target:
          entity_id: switch.sonoff_octo_print
        data: {}
mode: single

Beispiel Blueprint :

Wenn du die Blaupause verwenden möchtest, würde ich mich sehr darüber freuen, wenn du meinen Kanal abonnierst. Danke 🙂

blueprint:
  name: Bewegungserkennung
  description: Schaltet Lichter ein, wenn Bewegung erkannt wird und eine Helligkeit unterschritten ist
  domain: automation
  author: smart home & more
  input:
      lichter_input:
        name: Lichter
        default: {}
        selector:
            entity:
              domain:
                - light    
      schalter_input:
        name: Schalter
        default: {}
        selector:
            entity:
              domain:
                - switch
      bewegungsmelder_input:
        name: Bewegungsmelder
        selector:
            entity:
              domain:
                - binary_sensor
              device_class: motion
      lichtsensor_input:
        name: Licht Sensor
        selector:
          entity: 
            domain:
              - sensor
            device_class: illuminance
      lichtsensor_value_input:
        name: Licht Intensität
        description: Licht wird eingeschaltet, wenn der Wert unter dem Eingabewert liegt
        default: 400
      triggerzeit_input:
        name: Einschalt-Zeit
        description: Zeitspanne , wie lange das Licht eingeschaltet sein soll
        selector:
          number:
            min: 0
            max: 60
            unit_of_measurement: minutes
mode: single
trigger:
  - platform: state
    entity_id: !input bewegungsmelder_input
    to: "on"
    id: Bewegung erkannt
  - platform: state
    entity_id: !input bewegungsmelder_input
    to: "off"
    for:
      hours: 0
      minutes: !input triggerzeit_input
      seconds: 0
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Bewegung erkannt
      - condition: numeric_state
        entity_id: !input lichtsensor_input
        below: !input lichtsensor_value_input
    then:
      - service: light.turn_on
        target:
          entity_id: !input lichter_input
      - service: switch.turn_on
        target:
          entity_id: !input schalter_input
    else:
      - service: light.turn_off
        target:
          entity_id: !input lichter_input
      - service: switch.turn_off
        target:
          entity_id: !input schalter_input


Mit Home Assistant eine automatische Arbeitszeiterfassung umsetzen

YouTube player

Dieses Video soll Einblicke im erweiterten Umgang mit Home Assistant , ApexChartCard, Templates und Abfragen und die Nutzung von Device Tracking Diensten geben. Wie automatisiere ich meine persönliche Dokumentation einer Arbeitszeiterfassung. Wie das mit Automatisierung funktionierten kann, erklärt dieses Video.

Beschreibung Home Assistant History Stats: History Stats – Home Assistant (home-assistant.io)

Wie du HACS installierst wird dir hier erklärt:

YouTube player

HACS Integration Apex Charts-Card: GitHub – RomRider/apexcharts-card: 📈 A Lovelace card to display advanced graphs and charts based on ApexChartsJS for Home Assistant

Code Beispiel configuration.yaml für history_stats

sensor: 

  - platform: history_stats
    name: "Tobias ist auf der Arbeit (heute)"
    entity_id: device_tracker.tobias  # Eure Entitäts ID eines Device Trackers
    state: 'Arbeit' # die Entität muss den Status Arbeit haben 
    type: time
    start: '{{ now().replace(hour=0, minute=0, second=0) }}' # Startzeitpunkt der Aufnahme
    end: '{{ now() }}' # geht immer so lange, wie der Status Arbeit ist
    
  - platform: history_stats
    name: "Tobias ist im Home Office" 
    entity_id: input_boolean.home_office # Entität Schalter - Home Office 
    state: 'on' # Der Schalter muss umgelegt sein
    type: time
    start: '{{ now().replace(hour=0, minute=0, second=0) }}' # ist der Schalter umgelegt, beginnt die Aufzeichnung der Zeit
    end: '{{ now() }}' # sie endet, wenn der Schalter wieder umgelegt wird.

ApexCharts-Kartenkonfiguration:

type: custom:apexcharts-card
stacked: true
apex_config:
  char:
    height: 180px
header:
  show: true
  title: Arbeitzeiten (heute)
  show_states: true
  colorize_states: true
graph_span: 7d
span:
  end: day
series:
  - entity: sensor.tobias_ist_auf_der_arbeit_heute
    type: column
    color: green
    opacity: 0.7
    unit: h
    group_by:
      func: last
      duration: 1d
      fill: zero
  - entity: sensor.tobias_ist_im_home_office
    type: column
    color: blue
    opacity: 0.7
    unit: h
    group_by:
      func: last
      duration: 1d
      fill: zero

Home Assistant Helfer Template ( Summe der Arbeitszeiten) :

{% set total = states('sensor.tobias_ist_auf_der_arbeit_heute')|float + states('sensor.tobias_ist_im_home_office')|float %}
{{ total }}

Automatisierung Arbeitzeit senden (hier ist die Message wichtig. Diese könnt ihr für WhatsApp, Email etc.. verwenden )

alias: Arbeitszeit senden
description: ""
trigger:
  - platform: time
    at: "00:00:00"
condition: []
action:
  - service: notify.persistent_notification
    data:
      message: >-
        {{ now().strftime('%d.%m.%Y') }} : Summe: {{
        states('sensor.summe_der_arbeitzeiten') }}h Office: {{
        states('sensor.tobias_ist_auf_der_arbeit_heute')}} h Home-Office: {{
        states( 'sensor.tobias_ist_im_home_office') }}h 
      title: Arbeitzeit am Tag
mode: single

Lädt er schon ? Mit Home Assistant & OpenWB , Wechselrichter, Wallbox und Speicher abfragen

YouTube player
PV-Anlage, Wallbox, Speicher, Wechselrichter, E-Auto , alle diese Komponenten haben gemeinsam, dass in der Regel eine eigene Software/ App zur Visualisierung oder Steuerung verwendet wird. Mit Home Assistant in Kombination mit der OpenWB Software und entsprechender Integration lassen sich diese Prozesse übersichtlich darstellen und für weiterführende Automatisierungen verwenden.

Links: Infos zur Software openWB & Wallbox: https://openwb.de/main/

Installation Proxmox Mosquitto LXC Container:

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mqtt.sh)"

Integration openWB MQTT HomeAssistant : https://github.com/a529987659852/openwbmqtt

MQTT Explorer https://mqtt-explorer.com/

Home Assistant Fenster abfragen, aber genau bitte !

YouTube player
Mit Home Assistant Fenster abzufragen ist grundsätzlich nicht schwierig. Aber vielleicht möchte ich mehr wissen als, „es ist noch ein Fenster geöffnet“ ? ! Manchmal möchte man wissen, welches Fenster im Haus noch geöffnet ist. Dieses Video erklärt die Schritte, die dazu nötig sind.

Diese ZigBee Produkte verwende ich*:

Yaml Code Benachrichtigung :

service: notify.persistent_notification
data:
  message: " {{ expand('binary_sensor.gruppe_alle_fenster_im_haus') | selectattr('state', 'eq', 'on') | map(attribute='name') | list | join (',  ') }} "

Proxmox Monitoring & Control mit Home Assistant

YouTube player
Hypervisor Monitoring ? Mit Home Assistant lässt sich komfortabel der Status von Proxmox Nodes , VMs und LXC Containern überwachen und sogar steuern. Eine VM fällt aus, kann mit der Hausautomatisierungslösung Home Assistant schnell eine Nachricht geschickt werden oder ein Prozess angestoßen werden um das betroffene System wieder automatisch zu starten. So lassen sich einfach die Zustände der angebundenen Speichergeräte, CPU und RAM Auslastung erfassen. Du fragst dich wie das funktioniert ? Dann schau dieses Video 🙂

Orbsmart AW-13 aus dem Video*:

Orbsmart AW-13 4K Mini-PC Windows 11 Pro Desktop PC | Computer | lüfterlos | lautlos (Intel N5100 CPU, 16GB RAM, 256GB int. Speicher, 2.5″ Festplattenschacht, HDMI 2.0), schwarz
  • Leistungsstarker & lüfterloser 4K Mini-PC auf Windows 11 Pro Basis inklusive 2.5″ Festplattenschacht – flexibel einsetzbar als stromsparender Büro-PC, Medienzentrale, Streaming-Client etc.
  • Vollwertiges Windows 11 Professional vorinstalliert / Auflösung bis zu 4K ULTRA HD (2160p@60Hz) möglich
  • Aktuelle Intel Chip-Generation „Jasper Lake“: Quad-Core CPU N5100 (Burst freq: 2.80 GHz) / 16GB DDR4-RAM / 256GB int. Speicher / Autostart-Funktion (direktes Hochfahren nach Stromzufuhr), WOL + PXE + RTC-Support
  • Dank HTML5 & Silverlight Support volle Kompatibilität zu allen IPTV Streaming Inhalte (Youtube, Netflix, Prime Video, Disney+, Skygo, Magenta TV & Co.) – Webrowsing wie an jedem Windows PC
  • Dualband WLAN-AC + Bluetooth 4.2 / HDMI 2.0, Displayport 1.2, VGA / Gigabit-LAN / 2x USB 3.1 (Gen1) + 1x USB 3.1 Typ-C (Gen1), 2x USB 2.0, 1x 3.5mm Audio / microSD-Slot (max. 512GB) / Kensington Lock / TV-Halterung (VESA 75×75 / 100×100) inklusive

Für mein Hauptsetup verwende ich diese Konfiguration *:

MINIS FORUM Venus UM790 Pro Mini-PC AMD Ryzen 9 7940HS, genau 5,2 GHz, 64 GB DDR5 1 bis SSD mit AMD Radeon 780M, 4X USB3.2, 2X USB4, 2X HDMI 2.1, 2X PCIe4.0, Wi-FI 6E /BT5.3, RJ45 2,5 G
  • 【Leistungsstarker Prozessor】 AMD Ryzen 9 7940HS, 8 Kerne/16 Threads (16 MB Cache, bis zu 5,2 GHz Taktfrequenz), gefertigt im 4-Nanometer-Prozess von TSMC, AMD Radeon 780M (Grafikfrequenz 2,8 GHz), ausgestattet mit AMD Ryzen AI-Technologie, die eine effiziente und energieeffiziente Unterstützung für verschiedene KI-Anwendungen bietet, ohne die Leistung von CPU und GPU zu beeinträchtigen.

Befehl zu Installation von HACS im Terminal:

wget -O - https://get.hacs.xyz | bash -

Proxmox VE Custom Integration für Home Assistant: https://github.com/dougiteixeira/proxmoxve

Helfer Proxmox Smarthome VMs (Templatesensor)

{{ expand('binary_sensor.proxmox_smarthome_vms') | selectattr('state', 'eq' , 'off') | list | count }}

Automatisierung Proxmox Smarthome VM ausgefallen:

alias: Proxmox Smarthome VM ausgefallen
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.zahler_vms_proxmox
    above: 0
condition: []
action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
  - service: notify.persistent_notification
    data:
      title: Proxmox Smarthome VM ausgefallen
      message: >-
        {{ expand('binary_sensor.proxmox_smarthome_vms') | selectattr('state',
        'eq', 'off')  | map(attribute='name')  | list  | join (', 

        ') }}
  - service: button.press
    data: {}
    target:
      entity_id: button.qemu_win11vm_106_starten
mode: single