Conciencia de UTC y zona horaria

Recientemente fusioné código para refactorizar Home Assistant para usar solo horas UTC internamente. Una refactorización muy necesaria. Agregué cobertura de prueba adicional a piezas sensibles al tiempo para garantizar la estabilidad. El código ha estado activo en la rama de desarrollo durante los últimos 9 días y pronto se publicará en la rama maestra.

A partir de ahora toda la comunicación interna se realizará en UTC: eventos de cambio de hora, atributos de fecha y hora de los estados, etc. Para obtener la hora actual en UTC puedes llamar homeassistant.util.dt.utcnow(). Este es un objeto de fecha y hora UTC que reconoce la zona horaria. homeassistant.util.dt es un nuevo paquete de utilidades con ayudantes de fechas.

También existe la hora local. La hora local se basa en la zona horaria que haya configurado en su configuration.yaml. Las horas locales solo deben usarse para información de cara al usuario: registros, frontend y configuraciones de automatización en configuration.yaml.

Configurando tu zona horaria

La configuración de una zona horaria ocurre en configuration.yaml. Si no tiene configurada la zona horaria, se detectará automáticamente utilizando el código de detección existente usando freegeoip.net. Puede encontrar una lista de zonas horarias compatibles en Wikipedia.

homeassistant:   time_zone: America/Los_Angeles 

Compatibilidad

Los cambios en el código son en su mayoría compatibles con versiones anteriores. El viejo hass.track_time_change y hass.track_point_in_time Utilice ahora internamente dos nuevos métodos: hass.track_utc_time_change y hass.track_point_in_utc_time. El uso de los métodos antiguos no ha cambiado y debería ser compatible con versiones anteriores.

Este refactor agrega una nueva migración para la base de datos agregando un utc_offset columna a eventos y estados. Esta información no se utiliza actualmente, pero puede resultar útil en el futuro cuando comencemos a analizar los datos históricos.

Cosas incompatibles hacia atrás

Todos los componentes integrados se han actualizado. La siguiente lista es solo para personas que ejecutan componentes personalizados:

  • hass.track_time_change y hass.track_point_in_time ahora devolverá un objeto de fecha y hora con reconocimiento de zona horaria. Python no permite comparar un objeto de fecha y hora ingenuo con uno consciente.
  • los atributos del sol para la salida y la puesta ahora están en UTC. Los métodos sun.next_rising(hass) y sun.next_setting(hass) son compatibles con versiones anteriores, solo tenga cuidado si solía leer los atributos sin formato.
  • la API envía todas las horas en UTC. Si usa algo más además de la interfaz para hablar con HA, asegúrese de que lo maneje de manera diferente.