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.
Tellers
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).
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.
{{ 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
Aantal ramen en deuren die open staan
beweging op de 1e verdieping
Waar is de laatste beweging geconstateerd
Deze sensoren worden o.a. gebruikt in het Dashboard. Hier kun je zien hoe ik dat gebruik.







