Auteur: Peter

Slim omgaan met TTS in Home Assistant

Slim omgaan met TTS in Home Assistant

Slim omgaan met TTS in Home Assistant: één script voor al je speakers

Wie met Home Assistant werkt, weet dat apparaten soms van naam veranderen. Zeker wanneer je Music Assistant gebruikt, kunnen media‑players regelmatig wisselen of opnieuw worden aangemaakt. Het gevolg: automations die ineens niet meer werken omdat een entity niet meer bestaat.

Gelukkig is er een elegante oplossing: gebruik één centraal script voor je TTS‑berichten. Daarmee hoef je nooit meer tientallen automations na te lopen wanneer een speaker verandert. Je past het alleen in het script aan en alles werkt weer.

In deze blog leg ik uit hoe je dat doet.


Waarom een script gebruiken voor TTS?

Veel mensen zetten TTS‑acties rechtstreeks in hun automations. Dat werkt prima, totdat:

  • een speaker een andere entity‑naam krijgt
  • je overstapt op een andere TTS‑engine
  • je een nieuwe speaker wilt gebruiken
  • Music Assistant een device opnieuw aanmaakt

Met een centraal script voorkom je dat probleem. Je automations verwijzen alleen naar het script, en het script bepaalt welke speaker en welke TTS‑engine gebruikt worden.


Stap 1: Maak een helper voor je standaard speaker (optioneel maar handig)

Ga naar:

Instellingen → Apparaten & Services → Helpers → Input Text

Maak een nieuwe helper:

  • Naam: default_tts_player
  • Waarde: bijvoorbeeld media_player.home_mini_groep

Deze helper kun je later eenvoudig aanpassen via de UI, zonder YAML.


Stap 2: Maak het TTS‑script

Dit script bevat een invoerveld voor de tekst die uitgesproken moet worden. Daardoor verschijnt er in de automation‑editor automatisch een tekstveld.

script:
  tts_to_default_speaker:
    alias: "TTS naar standaard speaker"
    fields:
      message:
        name: Bericht
        description: De tekst die uitgesproken moet worden
        required: true
        selector:
          text:
    sequence:
      - service: tts.speak
        data:
          cache: true
          media_player_entity_id: "{{ states('input_text.default_tts_player') }}"
          message: "{{ message }}"
        target:
          entity_id: tts.google_nl_com

Je kunt hier later zonder problemen aanpassen:

  • welke speaker gebruikt wordt
  • welke TTS‑engine je wilt gebruiken
  • extra functies zoals volume instellen of muziek pauzeren

Zolang de scriptnaam hetzelfde blijft, blijven al je automations werken.


Stap 3: Gebruik het script in je automations

In je automation kies je simpelweg:

service: script.tts_to_default_speaker

En je krijgt automatisch een veld Bericht, waarin je bijvoorbeeld kunt zetten:

{{ generated_text.data }}

Of gewoon een vaste tekst.


Waarom dit zoveel fijner werkt

  • Je hoeft nooit meer automations te openen als een speaker verandert
  • Je kunt eenvoudig wisselen tussen TTS‑engines
  • Je kunt het script uitbreiden zonder automations te breken
  • Alles blijft overzichtelijk en centraal beheerd

Voor iedereen die regelmatig met TTS werkt in Home Assistant is dit een enorme kwaliteitsverbetering.


Uitbreiden? Dat kan altijd

Later kun je dit script eenvoudig uitbreiden met:

  • meerdere speakers
  • automatische selectie van beschikbare speakers
  • volumeregeling
  • pauzeren en hervatten van muziek
  • fallback‑speakers

Maar de basis blijft hetzelfde: één script, alle automations blij.

Heb je ideeën voor een vervolgblog, zoals TTS naar meerdere speakers of dynamische volumeregeling? Laat het me weten.

Loading

Een Fool‑Proof Pushover Meldingssysteem in Home Assistant

Een Fool‑Proof Pushover Meldingssysteem in Home Assistant

Stap‑voor‑stap handleiding + volledig script

In een slim huis draait alles om betrouwbaarheid. Een melding die te laat komt, of helemaal niet, kan het verschil maken tussen op tijd reageren of iets belangrijks missen. Daarom wilde ik mijn meldingssysteem in Home Assistant naar een hoger niveau tillen. Niet alleen een simpel berichtje, maar een volledig geautomatiseerde, foutloze Pushover‑melding — mét prioriteiten, camerabeelden, geluiden en een automatische titel.

Tijdens het bouwen ontdekte ik dat veel standaardoplossingen nét niet doen wat je wilt. File‑selectors werken niet altijd, prioriteit 2 vereist extra parameters, en bijlagen moeten aan strikte voorwaarden voldoen. Daarom besloot ik een eigen script te maken dat:

  • altijd werkt
  • geen fouten toestaat
  • automatisch slimme keuzes maakt
  • en flexibel genoeg is voor elke situatie

In deze handleiding laat ik stap voor stap zien hoe je dit script zelf kunt toevoegen aan Home Assistant. Aan het einde vind je het volledige script dat je direct kunt gebruiken. Hiermee heb je een professioneel, fool‑proof meldingssysteem dat je smart home een stuk slimmer maakt.


Waarom een eigen Pushover‑script?

De standaard Pushover‑integratie is prima, maar beperkt. Ik wilde:

  • een melding sturen met geluid naar keuze
  • prioriteit 2 gebruiken voor urgente meldingen
  • een afbeelding meesturen uit mijn cameramappen
  • een automatische titel wanneer ik er zelf geen invul
  • een systeem dat nooit faalt, ook niet als ik een veld vergeet

Stap 1 — Voorbereiding

1.1 Zorg dat Pushover werkt in Home Assistant

Je moet al een notify‑service hebben, zoals:

notify.entity_id

Zie Pushover - Home Assistant

Pas dit in het script aan als jouw service anders heet.

1.2 Maak een map voor je camerabeelden

Gebruik de map:

/media/cam_captures/

Plaats daar je afbeeldingen, bijvoorbeeld:

  • 1_tuin.jpg
  • 1_voordeur.jpg
  • 2_tuin.jpg
  • 2_voordeur.jpg
  • 3_tuin.jpg
  • 3_voordeur.jpg
  • 4_tuin.jpg
  • 4_voordeur.jpg
  • poort.jpg
  • tuin.jpg
  • voordeur.jpg

Stap 2 — Script toevoegen in Home Assistant

  1. Ga naar Instellingen → Automatiseringen & Scènes → Scripts
  2. Klik op “+ Script toevoegen”
  3. Kies “Script bewerken in YAML”
  4. Verwijder alles wat er staat
  5. Plak het volledige script hieronder
  6. Sla het script op

Stap 3 — Het volledige Pushover‑script

Dit script is fool‑proof:

  • Bericht mag niet leeg zijn
  • Prioriteit heeft standaard waarde 0
  • Titel wordt automatisch gegenereerd (dagnaam + datum + tijd)
  • Bijlagen komen uit een dropdown
  • Priority 2 werkt correct met retry/expire
pushover_melding:
  alias: "Pushover melding"
  fields:
    message:
      name: Bericht
      selector:
        text:
      default: ""
    title:
      name: Titel
      selector:
        text:
      default: ""
    sound:
      name: Geluid
      selector:
        select:
          options:
            - pushover
            - bike
            - bugle
            - cashregister
            - classical
            - cosmic
            - falling
            - gamelan
            - incoming
            - intermission
            - magic
            - mechanical
            - pianobar
            - siren
            - spacealarm
            - tugboat
            - alien
            - climb
            - persistent
            - echo
            - updown
            - vibrate
            - none
    priority:
      name: Prioriteit
      selector:
        select:
          options:
            - "-2"
            - "-1"
            - "0"
            - "1"
            - "2"
      default: "0"
    url:
      name: URL
      selector:
        text:
    url_title:
      name: URL titel
      selector:
        text:
    attachment_file:
      name: Bijlage kiezen (uit /media/cam_captures/)
      selector:
        select:
          options:
            - 1_tuin.jpg
            - 1_voordeur.jpg
            - 2_tuin.jpg
            - 2_voordeur.jpg
            - 3_tuin.jpg
            - 3_voordeur.jpg
            - 4_tuin.jpg
            - 4_voordeur.jpg
            - poort.jpg
            - tuin.jpg
            - voordeur.jpg

  sequence:
    - condition: template
      value_template: "{{ message is string and message | trim != '' }}"

    - choose:
        - conditions: >
            {{ priority | int == 2 and attachment_file is string and attachment_file != '' }}
          sequence:
            - service: notify.entity_id
              data:
                message: "{{ message }}"
                title: "{{ title | default(
                  (now().strftime('%A')
                    | replace('Monday','maandag')
                    | replace('Tuesday','dinsdag')
                    | replace('Wednesday','woensdag')
                    | replace('Thursday','donderdag')
                    | replace('Friday','vrijdag')
                    | replace('Saturday','zaterdag')
                    | replace('Sunday','zondag')
                  ) ~ ' ' ~ now().strftime('%d-%m-%Y %H:%M')
                ) }}"
                data:
                  sound: "{{ sound }}"
                  priority: 2
                  retry: 30
                  expire: 300
                  url: "{{ url }}"
                  url_title: "{{ url_title }}"
                  attachment: "/media/cam_captures/{{ attachment_file }}"

        - conditions: "{{ priority | int == 2 }}"
          sequence:
            - service: notify.home_assistant_peter
              data:
                message: "{{ message }}"
                title: "{{ title | default(
                  (now().strftime('%A')
                    | replace('Monday','maandag')
                    | replace('Tuesday','dinsdag')
                    | replace('Wednesday','woensdag')
                    | replace('Thursday','donderdag')
                    | replace('Friday','vrijdag')
                    | replace('Saturday','zaterdag')
                    | replace('Sunday','zondag')
                  ) ~ ' ' ~ now().strftime('%d-%m-%Y %H:%M')
                ) }}"
                data:
                  sound: "{{ sound }}"
                  priority: 2
                  retry: 30
                  expire: 300
                  url: "{{ url }}"
                  url_title: "{{ url_title }}"

        - conditions: >
            {{ priority | int != 2 and attachment_file is string and attachment_file != '' }}
          sequence:
            - service: notify.home_assistant_peter
              data:
                message: "{{ message }}"
                title: "{{ title | default(
                  (now().strftime('%A')
                    | replace('Monday','maandag')
                    | replace('Tuesday','dinsdag')
                    | replace('Wednesday','woensdag')
                    | replace('Thursday','donderdag')
                    | replace('Friday','vrijdag')
                    | replace('Saturday','zaterdag')
                    | replace('Sunday','zondag')
                  ) ~ ' ' ~ now().strftime('%d-%m-%Y %H:%M')
                ) }}"
                data:
                  sound: "{{ sound }}"
                  priority: "{{ priority | int }}"
                  url: "{{ url }}"
                  url_title: "{{ url_title }}"
                  attachment: "/media/cam_captures/{{ attachment_file }}"

      default:
        - service: notify.home_assistant_peter
          data:
            message: "{{ message }}"
            title: "{{ title | default(
              (now().strftime('%A')
                | replace('Monday','maandag')
                | replace('Tuesday','dinsdag')
                | replace('Wednesday','woensdag')
                | replace('Thursday','donderdag')
                | replace('Friday','vrijdag')
                | replace('Saturday','zaterdag')
                | replace('Sunday','zondag')
              ) ~ ' ' ~ now().strftime('%d-%m-%Y %H:%M')
            ) }}"
            data:
              sound: "{{ sound }}"
              priority: "{{ priority | int }}"
              url: "{{ url }}"
              url_title: "{{ url_title }}"

Stap 4 — Script testen

  1. Open het script in Home Assistant
  2. Vul een bericht in (verplicht)
  3. Laat de titel leeg om de automatische titel te testen, dus vinkje weg halen
  4. Kies een geluid
  5. Kies een prioriteit
  6. Selecteer eventueel een bijlage
  7. Klik op Uitvoeren

Je ontvangt nu een nette Pushover‑melding met:

  • jouw bericht
  • automatische titel (dagnaam + datum + tijd)
  • gekozen geluid
  • juiste prioriteit
  • optioneel een camerabeeld

Conclusie

Met dit script heb je een professioneel, foutloos en flexibel meldingssysteem dat perfect integreert met Home Assistant. Het is ontworpen om altijd te werken, ongeacht welke velden je wel of niet invult. Ideaal voor alarmmeldingen, camerabeelden, deurbelnotificaties en alle andere situaties waarin je snel en betrouwbaar geïnformeerd wilt worden.

In een automation kun je nu bij Add action, script.pushover_melding kiezen en invullen.

Loading

AB8SS integreren met Home Assistant via ESPHome: een complete gids

AB8SS integreren met Home Assistant via ESPHome: een complete gids

Veel gebruikers van de AB8SS audio‑switch lopen vroeg of laat tegen hetzelfde probleem aan: het apparaat werkt betrouwbaar, maar de seriële aansturing is… eigenzinnig. Het protocol verwacht exacte byte‑reeksen, echo’s, en reageert alleen correct als je de juiste state‑machine gebruikt. Standaard integraties werken daarom vaak niet of slechts half.

In deze blog laat ik zien hoe je de AB8SS volledig en stabiel kunt integreren met Home Assistant via ESPHome, inclusief een robuuste YAML‑configuratie die alle protocol‑eigenaardigheden netjes afhandelt.

Deze oplossing is ontwikkeld, getest en verfijnd met echte hardware — en werkt 100% betrouwbaar.

Waarom de AB8SS lastig is om aan te sturen

De AB8SS gebruikt een seriële interface met een aantal bijzonderheden:

  • Elke opdracht moet exact worden opgebouwd uit 4 bytes
  • Het apparaat stuurt een echo terug dat byte‑voor‑byte moet worden gevalideerd
  • Pas daarna volgt een status‑antwoord
  • Het apparaat accepteert geen nieuwe opdrachten zolang de vorige niet volledig is afgerond
  • Foutafhandeling is noodzakelijk om vastlopers te voorkomen

Veel implementaties falen omdat ze deze stappen niet strikt volgen.

Daarom hebben we een state‑machine gebouwd die:

  • elke byte valideert
  • timeouts afhandelt
  • commando’s in een wachtrij zet
  • de AB8SS nooit overspoelt
  • altijd in sync blijft met het apparaat

De oplossing: een robuuste ESPHome‑configuratie

De YAML‑configuratie die we hebben ontwikkeld bevat:

  • Een UART‑configuratie met correcte baudrate en framing
  • Een state‑machine die echo’s en antwoorden valideert
  • Een command‑queue zodat Home Assistant meerdere opdrachten kan sturen
  • Sensors die de actuele status van alle zones en bronnen teruggeven
  • Switches en selects om zones en inputs te bedienen
  • Volledige foutafhandeling en automatische recovery

Deze configuratie maakt de AB8SS net zo betrouwbaar als een native Home Assistant‑integratie.

Hoe het werkt (conceptueel)

  1. Home Assistant stuurt een opdracht (bijv. “Zone 3 → Input 2”).
  2. ESPHome zet het commando in een wachtrij.
  3. De state‑machine stuurt de 4 bytes naar de AB8SS.
  4. De AB8SS stuurt een echo terug → ESPHome valideert elke byte.
  5. Daarna stuurt de AB8SS een statusbericht.
  6. De state‑machine verwerkt het antwoord en werkt de entiteiten bij.
  7. Pas daarna wordt het volgende commando verstuurd.

Dit voorkomt dat de AB8SS “out of sync” raakt — een veelvoorkomend probleem.

De YAML‑configuratie

Klik deze link om de yaml file te downloaden

Hoe de state‑machine werkt

De kern van de oplossing is een compacte maar krachtige state‑machine die:

1. Een commando uit de queue haalt

Bijvoorbeeld: 050001FA* → Zone 1 aan

2. Een ATTENTION‑byte (!) stuurt

De AB8SS antwoordt met ! als hij klaar is.

3. Elke byte van het commando stuurt

En wacht op de echo.

4. Echo valideert

Als de echo niet klopt → retry Na 5 mislukte pogingen → abort

5. Statusframe verwerkt

Bijvoorbeeld: 84xxxxxx* → bitmask van alle zones + input

6. Home Assistant‑entiteiten bijwerkt

Elke zone wordt direct geüpdatet.

7. Automatisch een statuspoll plant

Zodat Home Assistant altijd synchroon blijft.

Home Assistant entiteiten

De YAML maakt automatisch de volgende entiteiten aan:

Zones (switches)

  • Zone 1 t/m Zone 8 → aan/uit

Inputselectie (switch)

  • Input A/B

Debug‑modus

  • Logt alle RX/TX bytes in realtime

Waarom deze implementatie uniek is

Deze oplossing:

  • werkt met echte echo‑validatie
  • heeft retry‑logica
  • voorkomt dat de AB8SS “out of sync” raakt
  • gebruikt een command‑queue zodat Home Assistant meerdere opdrachten tegelijk kan sturen
  • verwerkt statusframes en houdt Home Assistant realtime up‑to‑date
  • bevat timeouts en foutafhandeling
  • is volledig ESPHome‑native (geen custom component nodig)

Dit is de meest complete en betrouwbare AB8SS‑integratie die momenteel beschikbaar is.

Installatie‑stappen

Flash een ESP32 met ESPHome

Sluit de AB8SS aan via UART op de ESP32
Ik gebruik hiervoor een RS232 naar TTL module, zoals bijvoorbeeld deze.
En een D1 Mini Live ESP32.

  • TX → RX
  • RX → TX
  • GND → GND

Upload de YAML

Voeg het apparaat toe aan Home Assistant

Bedien zones en inputs direct vanuit HA

Gebruik debug‑modus om communicatie te monitoren

Conclusie

De AB8SS is een fantastisch apparaat, maar het protocol vraagt om een zorgvuldige implementatie. Met deze ESPHome‑configuratie kun je de AB8SS volledig integreren in Home Assistant, zonder instabiliteit of half werk.

Deze oplossing is:

  • robuust
  • getest
  • onderhoudsvrij
  • volledig lokaal
  • makkelijk uit te breiden

State‑machine diagram voor de AB8SS‑implementatie

               ┌──────────────────────────┐
               │          IDLE            │
               │  - Geen actief commando  │
               │  - Queue check           │
               │  - Poll timer check      │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │     ATTENTION_SEND       │
               │  TX: "!"                 │
               │  Deadline = now + 100ms  │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │     ATTENTION_WAIT       │
               │  Wacht op RX: "!"        │
               │  Timeout → ABORT         │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │        CMD_SEND          │
               │  TX: current_cmd[pos]    │
               │  Deadline = 5–10ms       │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │        CMD_WAIT          │
               │  Wacht op echo           │
               │  Echo OK → pos++         │
               │  Echo NOK → "-" + ABORT  │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │          DONE            │
               │  - Command klaar         │
               │  - Poll in queue         │
               │  - next_allowed = +50ms  │
               └───────────┬──────────────┘
                           │
                           ▼
               ┌──────────────────────────┐
               │          ABORT           │
               │  - Retry tot 5x          │
               │  - Daarna drop           │
               │  - next_allowed = +300ms │
               └──────────────────────────┘

Behuizing

De ESP32 en uart zijn eventueel in een 3D geprinte behuizing te plaatsen

Loading

Home Assistant + Logitech Harmony: De Ultieme Integratie (Volledige Handleiding)

Home Assistant + Logitech Harmony: De Ultieme Integratie (Volledige Handleiding)

 

De Logitech Harmony Hub blijft een van de krachtigste universele afstandsbedieningen, ook al wordt hij niet meer actief ontwikkeld. In deze handleiding laat ik zien hoe je de Harmony Hub volledig dynamisch integreert in Home Assistant.

We bouwen:

  • dropdowns per apparaat met alle commando’s
  • automatische activiteitenlijst
  • directe uitvoering van commando’s bij selectie
  • één enkele automation die alle apparaten ondersteunt
  • volledig dynamisch ingelezen uit de Harmony‑config

Deze methode is stabiel, onderhoudsvrij en werkt zonder custom componenten.

 

1. Harmony JSON exporteren

Ga in Home Assistant naar:

Instellingen → Integraties → Harmony Hub → Download config

Sla het bestand op in:

Code
 
config/harmony_5872655.conf
 

2. Helpers aanmaken per apparaat

Maak in Home Assistant per Harmony‑device een input_select helper aan. Laat de opties leeg — die vullen we automatisch.

Voorbeeld helpers:

Code
 
input_select.harmony_commands_av_serre_2
input_select.harmony_commands_av_woonkamer_1
input_select.harmony_commands_blue_ray_speler
input_select.harmony_commands_dvr_formuler
input_select.harmony_commands_dvr_vu
input_select.harmony_commands_eetkamer_3
input_select.harmony_commands_lg_70up7006lb
input_select.harmony_commands_marmitek_av_switch
input_select.harmony_commands_muziekserver_avedio_links
input_select.harmony_commands_sat_dm8000
 

3. Automation: Helpers automatisch vullen met commando’s

Deze automation leest je Harmony‑config in en vult alle helpers met de juiste commando’s.

yaml
 
alias: Harmony – Fill Per‑Device Helpers
triggers:
- event: start
trigger: homeassistant
- minutes: /10
trigger: time_pattern
actions:
- action: file.read_file
data:
file_name: harmony_5872655.conf
file_encoding: JSON
response_variable: harmony_data
- variables:
harmony: "{{ harmony_data.data }}"
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_av_serre_2
options: |
{{ [''] + harmony.Devices['AV-Serre 2'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_av_woonkamer_1
options: |
{{ [''] + harmony.Devices['AV-Woonkamer 1'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_blue_ray_speler
options: |
{{ [''] + harmony.Devices['Blue-Ray speler'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_dvr_formuler
options: |
{{ [''] + harmony.Devices['DVR Formuler'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_dvr_vu
options: |
{{ [''] + harmony.Devices['DVR Vu+'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_eetkamer_3
options: |
{{ [''] + harmony.Devices['Eetkamer 3'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_lg_70up7006lb
options: |
{{ [''] + harmony.Devices['LG 70UP7006LB'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_marmitek_av_switch
options: |
{{ [''] + harmony.Devices['Marmitek AV Switch'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_muziekserver_avedio_links
options: |
{{ [''] + harmony.Devices['Muziekserver Avedio Links'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_northern_lichtbediening
options: >
{{ [''] + harmony.Devices['Northern International
Lichtbediening'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_sat_dm8000
options: |
{{ [''] + harmony.Devices['SAT DM8000'].commands }}
- action: input_select.set_options
data:
entity_id: input_select.harmony_commands_homeseer
options: |
{{ [''] + harmony.Devices['homeseer'].commands }}
 

4. Eén automation die ALLE commando’s verstuurt

Zodra je een commando kiest in een dropdown, wordt het direct uitgevoerd.

yaml
 
alias: Harmony – Send Command From Any Device Helper
triggers:
- entity_id:
- input_select.harmony_commands_av_serre_2
- input_select.harmony_commands_av_woonkamer_1
- input_select.harmony_commands_blue_ray_speler
- input_select.harmony_commands_dvr_formuler
- input_select.harmony_commands_dvr_vu
- input_select.harmony_commands_eetkamer_3
- input_select.harmony_commands_lg_70up7006lb
- input_select.harmony_commands_marmitek_av_switch
- input_select.harmony_commands_muziekserver_avedio_links
- input_select.harmony_commands_sat_dm8000
trigger: state
actions:
- action: file.read_file
data:
file_name: harmony_5872655.conf
file_encoding: JSON
response_variable: harmony_data
- variables:
harmony: "{{ harmony_data.data }}"
device_id: "{{ harmony.Devices[device_name].id }}"
- target:
entity_id: remote.huiskamer
data:
device: "{{ device_id }}"
command: "{{ command }}"
action: remote.send_command
- action: input_select.select_option
data:
entity_id: "{{ changed_helper }}"
option: ""
variables:
changed_helper: "{{ trigger.entity_id }}"
device_name: |
{% set map = {
'input_select.harmony_commands_av_serre_2': 'AV-Serre 2',
'input_select.harmony_commands_av_woonkamer_1': 'AV-Woonkamer 1',
'input_select.harmony_commands_blue_ray_speler': 'Blue-Ray speler',
'input_select.harmony_commands_dvr_formuler': 'DVR Formuler',
'input_select.harmony_commands_dvr_vu': 'DVR Vu+',
'input_select.harmony_commands_eetkamer_3': 'Eetkamer 3',
'input_select.harmony_commands_lg_70up7006lb': 'LG 70UP7006LB',
'input_select.harmony_commands_marmitek_av_switch': 'Marmitek AV Switch',
'input_select.harmony_commands_muziekserver_avedio_links': 'Muziekserver Avedio Links',
'input_select.harmony_commands_sat_dm8000': 'SAT DM8000'
} %} {{ map[changed_helper] }}
command: "{{ states(changed_helper) }}"
 

5. Activiteiten dropdown automatisch vullen

yaml
 
alias: Harmony – Update Activity Helper
trigger:
  - platform: homeassistant
    event: start
  - platform: time_pattern
    minutes: "/10"

action:
  - action: file.read_file
    data:
      file_name: harmony_5872655.conf
      file_encoding: JSON
    response_variable: harmony_data

  - variables:
      harmony: "{{ harmony_data.data }}"

  - action: input_select.set_options
    data:
      entity_id: input_select.harmony_activity
      options: >
        {{ harmony.Activity.keys() | list + ['PowerOff'] }}
 

6. Activiteit starten bij selectie

yaml
 
alias: Harmony – Start Activity On Selection
trigger:
  - platform: state
    entity_id: input_select.harmony_activity

action:
  - action: file.read_file
    data:
      file_name: harmony_5872655.conf
      file_encoding: JSON
    response_variable: harmony_data

  - variables:
      harmony: "{{ harmony_data.data }}"
      activity_name: "{{ states('input_select.harmony_activity') }}"
      activity_id: >
        {% for id, name in harmony.Activities.items() %}
          {% if name == activity_name %}
            {{ id }}
          {% endif %}
        {% endfor %}

  - service: remote.turn_on
    target:
      entity_id: remote.huiskamer
    data:
      activity: "{{ activity_id }}"
 

7. Activiteit stoppen bij PowerOff

yaml
 
alias: Harmony – Stop Activity On Selection
trigger:
  - platform: state
    entity_id: input_select.harmony_activity
    to: "PowerOff"

action:
  - service: remote.turn_off
    target:
      entity_id: remote.huiskamer
 

Resultaat

Met deze setup heb je:

  • volledig dynamische Harmony‑integratie
  • dropdowns per apparaat met alle commando’s
  • directe uitvoering bij selectie
  • één automation voor alle devices
  • automatische activiteitenlijst
  • start/stop activiteiten via dropdown

Dit is de meest complete en onderhoudsvrije Harmony‑integratie voor Home Assistant.

Loading

Let’s Encrypt

Let’s Encrypt

Via HACS Home Assistant Community Store) vind je de Integration om Letsencrypt te installeren.

Ik wil alleen Let’s Encrypt gebruiken, omdat ik al een domein naam voor Home Assistant heb.

Na het installeren liep ik tegen het probleem aan, dat bij het uitvoeren er geen verbinding gemaakt kon worden met de map waar de domein controle plaats vindt.

Ik had de volgende poorten in mijn router doorverwezen naar het IP adres van HA:
poort 8123 doorverwezen naar poort 8123
poort 80 doorverwezen naar poort 8123 en
poort 443 doorverwezen naar poort 8123.

De addon blijkt na gestart te zijn, zelf een webserver op te zetten op poort 80 om de verificatie te kunnen doen.
Maar die ging via mijn router dus naar poort 8123.
Daarom ging het mis.
Na poort 80 door te verwijzen naar poort 80 ging het goed en waren files voor het certificaat geïnstalleerd.
Er werd keurig aangegeven waar ze staan:

Certificate is saved at: /data/letsencrypt/live/ohhpcgsm.nl/fullchain.pem
Key is saved at: /data/letsencrypt/live/ohhpcgsm.nl/privkey.pem

In Configuration.yaml deze regels onder http: ingevuld, maar na een herstart van HA werkte het niet.
Het blijkt, dat de addon de bestanden naar ergens anders kopieert en moet dit in configuration.yaml staan:


http:
   ssl_certificate: /ssl/fullchain.pem
   ssl_key: /ssl/privkey.pem


HA weer herstart en nu werkt https:\
Let wel op, dat je dit nu voortaan overal moet gaan gebruiken.
Dus ook in de app op je telefoon.
Of op een pc, waar je eerst het ip adres gebruikte!

Het certificaat is maar 60 dagen geldig.
Om deze te vernieuwen moet je de add-on weer starten en gaat deze kijken of er vernieuwd moet worden.
Is dat niet nodig, dan staat er dit in de log:
Certificate not yet due for renewal; no action taken.
Je kunt hiervoor een automation aanmaken in bijvoorbeeld
home-assistant/automation/system.yaml

  • alias: “System – Let’s Encrypt Renewal”
    trigger:
    platform: time
    at: ’01:25:00′
    action:
    • service: hassio.addon_restart
      data:
      addon: core_letsencrypt


Dit script staat op github.

Verder kun je ook nog een entity maken die aangeeft wanneer je certificaat verloopt:


https://www.home-assistant.io/integrations/cert_expiry

Er is ook een blueprint om dit automatisch te doen:

https://community.home-assistant.io/t/blueprint-for-automatic-renewal-of-a-lets-encrypt-certificate/300533



Loading