Tabla de contenidos
INTRODUCCION
Vamos a configurar Homeassistant en packages; después de meses jugando con Homeassistant y de meter cada vez mas y mas cosas, te vas dando cuenta que para meter algo nuevo tienes que tocar varios archivos, ya que la instalación por defecto de Homeassistant te instala todos los tipos de elementos juntos en el mismo sitio y te «obliga» a que todos los sensors los dejes juntos, todos los automations los dejes en el mismo sitio, y así con todo.
Es así porque declaramos los sensores todos juntos en un único archivo, o en varios archivos declarando una carpeta.
Esto cuando empiezas te parece bien, ya que vas sin pensarlo a donde está cada cosa y realmente tienes pocos sensores; pero cuando tienes decenas de sensores, switch, automations, y binary, la cosa se complica ya que si quieres meter algo nuevo tienes que ir editando cada archivo manualmente e ir copiando de uno a otro las entities.
SISTEMA TRADICIONAL
De la manera tradicional (sin packages), lo que haces es repartir en diferentes sitios los elementos por su tipo, todos los sensores juntos, todos los automations juntos, etc.
Si por ejemplo quiero meter en mi instalación de Homeassistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de light, varios automation para la luces, un script y varios binary_sensor y switch para enchufes; todo eso es del jardín y (en principio) todo va a estar junto en las mismas tarjetas, tendría que tocar muchos archivos y poner los sensores de lluvia junto a los sensores de los discos duros de un ordenador, lo que no tiene mucho sentido que esté así.
En esta imagen vemos una instalación típica de un Homeassistant en el que están todos los tipos de elementos juntos, los sensores dentro de una carpeta sensors, los bynary_sensors juntos en un archivo yaml, etc…
Y aquí podéis ver como está hecho el configuration.yaml:
homeassistant:
name: Mi casa
latitude: !secret latitude
longitude: !secret longitude
elevation: !secret elevation
unit_system: metric
time_zone: !secret timezone
customize: !include customize.yaml
customize_glob: !include customize_glob.yaml
frontend:
config:
http:
api_password: !secret api_password
updater:
discovery:
conversation:
history:
logbook:
map:
sun:
tts:
- platform: google
cloud:
group: !include groups.yaml
automation: !include automations.yaml
script: !include_dir_named scripts
switch: !include switch.yaml
binary_sensor: !include binary_sensors.yaml
sensor: !include_dir_merge_list sensors
panel_iframe: !include panels.yaml
camera: !include camaras.yaml
media_player:
- platform: plex
notify:
- name: pushbullet_notify
platform: pushbullet
api_key: !secret pushbullet_token
device_tracker:
- platform: bluetooth_tracker
new_device_defaults:
track_new_devices: True
hide_if_away: False
- platform: ping
hosts:
hostone: 192.168.1.3
mqtt:
broker: !secret mqtt_ip
port: !secret mqtt_port
client_id: casa
username: !secret mqtt_username
password: !secret mqtt_password
xiaomi_aqara:
discovery_retry: 15
gateways:
- key: !secret gateway_key
PACKAGES
Con packages, lo que consigues es unificar en un solo archivo yaml todo lo relacionado con «algo», por ejemplo, quiero meter en mi instalación de Homeassistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de light, varios automation para la luces, un script y varios binary_sensor y switch para enchufes. Todo eso es del jardín y (en principio) todo va a estar junto en las mismas tarjetas, con lo que todo tiene sentido que esté junto en el mismo archivo yaml.
Volviendo al ejemplo del jardín, si quisiera poner todo lo que quiero tendría que editar cada archivo y meterlo dentro para que funcionase bien, lo que te obliga a ir copiando los sensores de uno a otro, y yo el mayor problema que veo es si quieres ampliarlo, con packages solo tienes que crear un archivo yaml con todo dentro, con lo que si deja de funcionar con borrar ese archivo quitarías ese error. Otro uso de la instalación con packages es sk ya tienes funcionando algo y quieres mejorarlo lo único que hay que hacer es duplicar el archivo yaml que quieras cambiándole el nombre y jugar con el, si deja de funcionar o no es lo que quieres con volver al archivo anterior todo lo dejas como estaba, de la manera tradicional tendrías que ir tocando varios archivos, lo que complica mucho hacerlo.
Ahora vamos a pasar ese ejemplo a una instalación en packages, con lo que tenemos que incluir en nuestro configuration.yaml una entrada tal que así:
homeassistant:
name: Mi casa
latitude: !secret latitude
longitude: !secret longitude
elevation: !secret elevation
unit_system: metric
time_zone: !secret timezone
customize: !include customize.yaml
packages: !include_dir_named packages

- group: dentro de packages, se elimina la entrada:
group: !include groups.yaml
- automation: dentro de packages, se elimina la entrada:
automation: !include automations.yaml
- script: dentro de packages, se elimina la entrada:
script: !include_dir_named scripts
- switch: dentro de packages, se elimina la entrada:
switch: !include switch.yaml
- binary_sensor: dentro de packages, se elimina la entrada:
!include binary_sensors.yaml
- sensor: dentro de packages, se elimina la entrada:
!include_dir_merge_list sensors
Luego hay algún tipo de elemento que se puede dejar con el include, como los panel_iframe, eso no tiene sentido que esté en los packages, ya que es algo global y lo suyo es que esté en un yaml suelto y con su include. Diferente es con la entrada camera, esa cada uno tiene que decidir donde lo deja, depende si tienes varias cámaras y quieres que estén juntas o cada una en su zona, si quieres organizarlas juntas puedes dejarlo como está, si quieres ponerlas cada una en su zona, tendrías que borrar el include y meter su entrada correspondiente en cada package donde quieras declarar las camaras. Algo parecido pasa con los media_player y los device_tracker, puedes dejarlos así o en un package, además cada instalación de Homeassistant es diferente, puedes querer dejar en un package llamado dormitorio.yaml todo lo relacionado con esa estancia, incluido los media_player y camera, o dejarlas fuera en un package juntos o incluso en el configuration.
El archivo configuration.yaml de una instalación con packages sería algo parecido a esto:
homeassistant:
name: Mi casa
latitude: !secret latitude
longitude: !secret longitude
elevation: !secret elevation
unit_system: metric
time_zone: !secret timezone
customize: !include customize.yaml
customize_glob: !include customize_glob.yaml
packages: !include_dir_named packages
frontend:
config:
http:
api_password: !secret api_password
updater:
discovery:
conversation:
history:
logbook:
map:
sun:
tts:
- platform: google
cloud:
panel_iframe: !include panels.yaml
notify:
- name: pushbullet_notify
platform: pushbullet
api_key: !secret pushbullet_token
device_tracker:
- platform: bluetooth_tracker
new_device_defaults:
track_new_devices: True
hide_if_away: False
- platform: ping
hosts:
hostone: 192.168.1.3
mqtt:
broker: !secret mqtt_ip
port: !secret mqtt_port
client_id: casa
username: !secret mqtt_username
password: !secret mqtt_password
xiaomi_aqara:
discovery_retry: 15
gateways:
- key: !secret gateway_key
homeassistant:
customize:
automation.luz_jardin_encendida_de_noche:
friendly_name: Luz jardin solo de noche
icon: mdi:theme-light-dark
switch.luz_jardin:
icon: mdi:track-light
sensor.plantas_temperature:
friendly_name: Temperatura
icon: mdi:temperature-celsius
sensor.plantas_light_intensity:
friendly_name: Luminosidad
icon: mdi:white-balance-sunny
sensor.plantas_moisture:
friendly_name: Humedad
icon: mdi:water-percent
sensor.plantas_conductivity:
friendly_name: Conductividad
icon: mdi:car-battery
sensor.plantas_battery:
friendly_name: Bateria
icon: mdi:battery
group:
garden:
name: Jardin
view: no
icon: mdi:pine-tree
control: hidden
entities:
- binary_sensor.puerta_jardin #puerta jardin
- binary_sensor.motion_jardin #sensor movimiento jardin
- sensor.temperatura_jardin_temperature #temperatura jardin
- sensor.temperatura_jardin_pressure #presion jardin
- sensor.temperatura_jardin_humidity #humedad jardin
- switch.luz_jardin
- automation.luz_jardin_encendida_de_noche
plantas:
name: Plantas
view: no
icon: mdi:flower
control: hidden
entities:
- sensor.plantas_temperature
- sensor.plantas_light_intensity
- sensor.plantas_moisture
- sensor.plantas_conductivity
- sensor.plantas_battery
sensor:
- platform: miflora
mac: 'C1:5C:8D:87:57:C2'
name: Plantas
force_update: false
median: 3
monitored_conditions:
- moisture
- light
- temperature
- conductivity
- battery
switch:
- platform: mqtt
name: "Luz jardin"
state_topic: "stat/sonoff_s20_1/POWER"
command_topic: "cmnd/sonoff_s20_1/POWER"
qos: 1
payload_on: "ON"
payload_off: "OFF"
retain: true
automation:
- alias: Luz jardin encendida de noche
trigger:
- platform: sun
event: sunset
- platform: sun
event: sunrise
action:
service: switch.toggle
entity_id: switch.luz_jardin
camera:
script:
input_boolean:
Pingback: Como crear un Termostato Inteligente DIY en Home Assistant | Domology 2.0