Binnen Home Assistant kunnen stukjes code gebruikt worden om bepaalde situaties te vinden. De code die gebruikt wordt in een template geeft het gewenste resultaat terug en dat kan dan gebruikt worden in dashboards of triggers. Er is een uitgebreide uitleg op de site van Home Assistant maar hier alvast een aantal templates die handig kunnen zijn.
Ik gebruik een aantal templates om sensoren aan te maken die als tellers fungeren ter indicatie op mijn overzicht dashboard.
Verdiepingen
Als eerste de verdieping waar het om gaat. In dit voorbeeld de ‘Eerste verdieping’ die bestaat uit een aantal ruimtes. In Home Assistant, ga naar Instellingen -> Ruimtes, Labels en Zones om te zien wat de namen van de verdiepingen zijn. Deze zijn nodig omdat de entiteiten verbonden zijn aan ruimtes (areas) en deze ruimtes zijn dan weer gekoppeld aan verdiepingen (floors).
Tellers
Aantal lampen die aan staan op de 1e etage
In een template wordt gebruik gemaakt van Jinja-code en voor de ruimtes op de 1e verdieping maken we een variable genaamd ‘FLOOR’ met daarin een array met de betreffende ruimtes:
{% set FLOOR = 'Eerste verdieping' %}
Het gaat dan om het domain voor de verlichting, dus ‘light’:
{% set DOMAIN = 'light' %}
De entiteiten kunnen nu gevonden worden door de area_entiteiten('ruimte') op te vragen. We willen echter alleen de entiteiten van een bepaalde verdieping opvragen en dat kan met een ‘for-loop‘.
Aangezien we een loop willen laten tellen maar niet vervangen, is het noodzakelijk om deze in een namespace op te nemen.
{% set ns = namespace(ent=[]) %}
{% for f in floor_areas(FLOOR) %}
{% set ns.ent = ns.ent + area_entities(f) %}
{% endfor %}
Het resultaat van deze loop met alle entiteiten van de ‘Eerste verdieping‘, staat nu in ‘ns.ent‘.
Met de ‘expand-functie’ kan nu gefilterd worden op het domain ‘light’ en op de status ‘on’. Als we dat in een lijst (‘list‘) uitvoeren kan die geteld worden met ‘count‘:
Mochten er nu ook licht-groepen aangemaakt zijn, dan kunnen we daar een uitzondering voor maken omdat licht-groepen een attribuut ‘entity_id’ hebben en die weigeren we dus.
{{ expand(ns.ent|unique)
| selectattr('domain','equalto', DOMAIN)
| selectattr('state','equalto','on')
| rejectattr('attributes.entity_id',defined)
| list
| count
}}
Helpers
Op deze manier vinden we dus het aantal lampen die aan staan op de 1e verdieping. Deze code zetten we dan in een template-helper van het type sensor:
Aantal beweging sensoren op de begane grond die niet (meer) beschikbaar zijn (batterij op?)
Aantal rookmelders in het gastenverblijf die niet (meer) beschikbaar zijn
beweging op de 1e verdieping
Waar is de laatste beweging geconstateerd
Aantal unavailable beweging sensoren op de 1e verdieping
(in plaats van ‘motion’ kan dus ook ‘door’, ‘window’ of ‘smoke’ gebruikt worden)
Aantal ramen en deuren die open staan
Aantal buitendeuren die open staan op de BGG
Deze template maakt gebruik van een ‘custom’ attribuut genaamd ‘buitendeur‘. Custom attributes kunnen aan entiteiten worden toegevoegd met behulp van een customize.yaml bestand dat opgenomen wordt in de homeassistant-sectie van configuration.yaml. Zie deze pagina voor een uitleg over customized attributes.
Deze template-sensoren worden o.a. gebruikt in het Dashboard. Hier kun je zien hoe ik dat gebruik.









