Vamos a configurar Home Assistant utilizando packages. Después de meses de experimentar con Home Assistant y añadir cada vez más elementos, te das cuenta de que, para añadir algo nuevo, tienes que tocar varios archivos. Esto sucede porque la instalación por defecto de Home Assistant agrupa todos los tipos de elementos en el mismo lugar, "obligándote" a mantener todos los sensores juntos, todas las automatizaciones en un mismo sitio, y así con todo.
Esto es así porque declaramos los sensores en un único archivo o en varios archivos dentro de una carpeta específica. Al principio, esto parece conveniente porque sabes exactamente dónde está cada cosa y realmente tienes pocos sensores. Sin embargo, cuando tienes decenas de sensores, interruptores, automatizaciones y binarios, la situación se complica. Si quieres añadir algo nuevo, tienes que editar cada archivo manualmente y copiar las entidades de uno a otro.
Tradicionalmente, sin utilizar packages, lo que hacemos es repartir los elementos por su tipo: todos los sensores juntos, todas las automatizaciones juntas, etc. Por ejemplo, si quiero agregar a mi instalación de Home Assistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de luces, varias automatizaciones para las luces, un script y varios sensores binarios y switches para enchufes, todo eso estaría relacionado con el jardín y, en principio, todo se visualizaría en las mismas tarjetas. Sin embargo, tendría que tocar muchos archivos, colocando los sensores de lluvia junto a los sensores de discos duros de un ordenador, lo cual no tiene mucho sentido.
En la imagen que acompaña esto, podemos ver una instalación típica de Home Assistant donde todos los tipos de elementos están juntos: los sensores dentro de una carpeta de sensores, los binary_sensors juntos en un archivo YAML, y así sucesivamente. Esta estructura puede volverse poco práctica a medida que crece el número de dispositivos y configuraciones en Home Assistant.
Y aquí podéis ver como está hecho el configuration.yaml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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 |
Con packages, puedes unificar en un solo archivo YAML todo lo relacionado con un área específica. Por ejemplo, si quieres agregar a tu instalación de Home Assistant un sensor de lluvia para el jardín, un sensor de temperatura, un par de luces, varias automatizaciones para las luces, un script y varios sensores binarios y switches para enchufes, todo eso estará relacionado con el jardín y se visualizará en las mismas tarjetas. Con packages, tiene sentido agrupar todo esto en el mismo archivo YAML.
Volviendo al ejemplo del jardín, si quisiera poner todo lo que mencioné, tendría que editar múltiples archivos en la configuración tradicional, lo cual implica copiar y pegar sensores, scripts y automatizaciones en diferentes lugares. El mayor problema surge cuando quieres ampliarlo. Con packages, solo necesitas crear un archivo YAML que contenga todo. Si algo deja de funcionar, simplemente borras ese archivo y el error desaparece.
Otro uso de la instalación con packages es que, si ya tienes algo funcionando y quieres mejorarlo, solo necesitas duplicar el archivo YAML que quieras modificar, cambiarle el nombre y experimentar. Si deja de funcionar o no es lo que deseas, simplemente vuelves al archivo anterior y todo quedará como estaba. De la manera tradicional, tendrías que modificar varios archivos, lo que complica mucho el proceso.
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í:
1 2 3 4 5 6 7 8 9 |
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 |
Creamos la carpeta packages dentro del config recordando siempre darle los permisos correspondientes.
group: !include groups.yaml
automation: !include automations.yaml
script: !include_dir_named scripts
switch: !include switch.yaml
!include binary_sensors.yaml
!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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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: |