Blueprints Tutorial

Blueprints in Home Assistant zijn templates om automatiseringen of scripts te maken. Dit wordt gebruikt om niet telkens een zelfde soort automatisering of script te hoeven maken en veel Home Assistant enthousiastelingen hebben blueprints gemaakt die door iedereen gebruikt mogen worden.

Via het community forum van Home Assistant worden veel blueprints uitgewisseld en de deze vind je hier: https://community.home-assistant.io/c/blueprints-exchange

Uiteraard kun je blueprints ook zelf maken met behulp van yaml-bestanden en die komen dan in de directory /homeassistant/blueprints, verdeeld in automation, script of template.

Zelf maken van een blueprint

Uiteraard is er een tekst editor nodig voor het schrijven van yaml-bestanden en de meest voor de hand liggende is de Studio Code Server add-on.

Blueprint Schema

Een blueprint bevat minimaal de naam en het domain, optioneel gevolgd door een description, author en eventueel inputs. Maak een yaml file nieuw bestand met de volgende inhoud en sla dit op in /homeassistant/blueprints/automation/ als voorbeeld_blueprint.yaml

blueprint:
  name: Voorbeeld blueprint
  domain: automation

Het domain geeft aan waar de blueprint voor bedoeld is, dit kan zijn:

  • automation
  • script
  • template

Blueprint inputs

Een of meerdere inputs kunnen gebruikt worden om aan de gebruiker te vragen om in te vullen of te selecteren. Inputs kunnen van het type tekst, boolean, list of map zijn en vallen altijd onder de blueprint ‘parent‘. Plaats de input in het bestand voorbeeld_blueprint.yaml en sla op.:

blueprint:
  name: Voorbeeld blueprint
  domain: automation

  input:
    mijn_input:
      name: Mijn input

Kies in Automatiseringen voor Nieuwe automatisering en kies voor de voorbeeld-blueprint. Dit zal het volgende weergeven:

Blueprint input met selector

Over het algemeen zal er echter gevraagd worden wat er gebruikt moet gaan worden voor een automatisering, script of template en meestal wordt dan een entiteit van Home Assistant gevraagd. Dit wordt gedaan met een ‘input selector met als kenmerk ‘entity”. Bijvoorbeeld de vraag om een bewegingsmelder te selecteren. Wijzig het voorbeeld nu met de volgende input-selector:

blueprint:
  name: Voorbeeld blueprint
  domain: automation

  input:
    mijn_sensor:
      name: Mijn sensor
      selector:
        entity:
          filter:
            domain: binary_sensor
            device_class: motion

Het resultaat:

Er kunnen meerdere inputs aan de gebruiker worden gevraagd, zoals het doel om een bijvoorbeeld een lamp te kunnen gebruiken in een actie. Doelen zijn input-selectors met het kenmerk ‘target‘. Voeg de lamp-input toe aan het voorbeeld bestand zoals hieronder is weergegeven:

blueprint:
  name: Voorbeeld blueprint
  domain: automation

  input:
    mijn_sensor:
      name: Mijn sensor
      selector:
        entity:
          filter:
            domain: binary_sensor
            device_class: motion
    mijn_lamp:
      name: Mijn lamp
      selector:
        target:
          entity:
            domain: light

Om een doel te kunnen kiezen voor een automatisering of script, dient de input selector een target te zijn. Kies voor de aangepaste blueprint en dan is dit het resultaat:

Triggers en Actions

Nadat de te gebruiken entiteiten zijn geselecteerd, dient in een automatisering aangegeven te worden wat er getriggerd wordt en welke acties daarop moeten volgen. Voeg de volgende code voor triggers toe aan het voorbeeld bestand om de bewegingsmelder uit de input te gaan gebruiken als trigger:

triggers:
  - trigger:
    entity_id: !input mijn_sensor
    from: "off"
    to: "on"

De entity_id is dus vanuit de input en wordt in een blueprint aangegeven met !input [input_naam] .

Voor de Actions geldt hetzelfde, in de blueprint wordt aangegeven met welke input een actie uitgevoerd moet gaan worden. Voeg ook de code voor de actions toe aan het voorbeeld bestand:

actions:
  - action: light.turn_on
    target: !input mijn_lamp

De yaml file van deze blueprint ziet er dan in z’n geheel zo uit:

blueprint:
  name: Voorbeeld blueprint
  domain: automation

  input:
    mijn_sensor:
      name: Mijn sensor
      selector:
        entity:
          filter:
            domain: binary_sensor
            device_class: motion
    mijn_lamp:
      name: Mijn lamp
      selector:
        target:
          entity:
            domain: light

triggers:
  - trigger: state
    entity_id: !input mijn_sensor
    from: "off"
    to: "on"

actions:
  - action: light.turn_on
    target: !input mijn_lamp

Deze yaml file wordt vervolgens opgeslagen in /homeassistant/blueprints/automation/ als voorbeeld_blueprint.yaml

Maak een automatisering van de blueprint

Voeg een automatisering toe door de blueprint te kiezen bij Nieuwe automatisering via Instellingen -> Automatiseringen en scènes -> Automatiseringen

of kies de blueprint vanuit Instellingen -> Automatiseringen en scènes -> Blueprints

Kies dan de sensor en de verlichting, en kies Opslaan. Geef het een goede naam en omschrijving, eventueel categorie, ruimte en labels en kies voor Hernoemen.

Aanpassen van een blueprint

Blueprints kunnen uiteraard gewijzigd worden, hetgeen gevolgen heeft voor de gebruikte automatiseringen, scripts of templates.

De voorbeeld blueprint gaan we aanpassen met wat betere omschrijvingen en een intervaltijd waarna het licht weer uit moet gaan. Vervang de code in het yaml-bestand met onderstaande blueprint:

blueprint:
  name: Verlichting aan/uit met timer
  domain: automation
  author: Digital Domo
  description: >
    Kies een sensor waarmee verlichting aangezet gaat worden. 
    De verlichting kan een lamp zijn of een ruimte die verlicht moet worden.

  input:
    mijn_sensor:
      name: Kies sensor
      description: Kies de sensor waarmee het licht aangezet gaat worden.
      selector:
        entity:
          filter:
            domain: binary_sensor
            device_class: motion
          multiple: false
    mijn_lamp:
      name: Kies verlichting
      description: Kies de lamp(en) of de ruimte die verlicht moet gaan worden.
      selector:
        target:
          entity:
            domain: light
    mijn_tijd:
      name: Tijd 
      description: De tijd dat de lamp aan blijft tot de automatisering het weer uit zet
      selector:
        number:
          min: 0
          max: 60
          step: 1
          unit_of_measurement: minutes
          mode: slider
      default: 1

triggers:
  - trigger: state
    entity_id: !input mijn_sensor
    from: "off"
    to: "on"

actions:
  - action: light.turn_on
    target: !input mijn_lamp
  - delay:
      minutes: !input mijn_tijd
  - action: light.turn_off
    target: !input mijn_lamp

Maak een nieuwe automatisering en kies de blueprint

Aangezien bij de sensor-input staat dat multiple: false is, kan er slechts één sensor worden gekozen. Bij de lamp-input is dat niet het geval, dus daar kunnen meerdere lampen worden gekozen.

Sla de nieuwe automatisering op en hernoem het met een treffende naam.

Controleer of de automatisering opgeslagen is onder Automatiseringen

Test nu deze automatisering door de bewegingsmelder te triggeren. De lamp zal aangaan en na de ingestelde tijd weer uit.


Versie beheer met GitLab

Om wijzigingen van blueprints bij te houden en eventueel terug te draaien, is er versie beheer met behulp van een git-repository, in dit voorbeeld via GitHub. Hiervoor is een account bij GitHub nodig en dan kan er een project aangemaakt worden met hierin de blueprints. Bijvoorbeeld de blueprints van Digital Domo:

De links die op GitHub staan kunnen gebruikt worden om de blueprints te importeren in jouw Home Assistant, ‘just click on it!

Eventuele wijzigingen worden dan in de originele blueprint gedaan in de GitHub repository en de gewijzigde blueprint kan dan in Home Assistant opnieuw geïmporteerd worden via de 3-puntjes achter de blueprint Bestandsnaam:

Lokaal aanpassen van een geïmporteerde blueprint

Geïmporteerde blueprints kunnen lokaal aangepast worden door de controle van de blueprint over te nemen. Open de blueprint en vul de inputs in. Selecteer vervolgens de drie puntjes rechtsboven. Kies voor ‘Controle nemen‘:

Er wordt dan gevraagd of je de controle wil overnemen, kies ‘Ja‘ en nu kun je de automatisering aanpassen zoals met een ‘normale’ automatisering.