2021.12 - mise à jour majeure de Home Assistant

Bonjour à tous,
Nous nous sommes habitués à une nouvelle version de HA tous les premiers mercredi du mois. Et la, la dernière version de HA de l’année ne devrait sortir qu’à partir de ce soir, à l’occasion de l’événement « State of the Open Home », à suivre sur YouTube si votre anglais le permet.
State of the Open Home 2021 - Home Assistant (home-assistant.io)

Pour information, il n’y aura pas de version en janvier et la prochaine est prévue pour le mercredi 2 février 2022.

C’est une version assez importante. Nabu Casa avait embauché un UX designer, et manifestement, il a pas mal travaillé. L’interface du menu configuration est complétement refondue. Plus synthétique, elle tiens sur un écran et est plus logique. Fini le scroll à chaque redémarrage de HA (ouf !)
Exit également le supervisor dont les fonctions sont maintenant intégrées à la configuration. C’est vrai que quand on démarre sur HA et qu’on n’a pas compris l’architecture de HA (core / supervisor), on ne comprend pas trop la séparation supervisor / configuration. Les écrans étaient des « écrans d’informaticiens » voulant refléter la technique dans l’interface, soit tout le contraire de l’UX.
La gestion des mises à jour est également centralisée, avec accès aux releases notes.

Une belle nouveauté : les zones sont mises en valeur, avec la possibilité de mettre des photos de chaque pièce dans la zone Area de la configuration. Puis une nouvelle carte permet de voir dans Lovelace chaque pièce avec photos et infos / actions disponibles pour la pièce, en incrustation sur la photo. Bien vu et on va encore passer du temps sur nos interfaces !

Une nouvelle entité qui va être très pratique fait son apparition : l’entity button. C’est la possibilité pour les intégrations de fournir un bouton poussoir. Jusqu’à présent, il y avait uniquement des switch avec état on-off. La on pourra avoir dans les listes d’entités des lignes avec juste « presser ». Pratique pour par exemple exposer un service.

Côté utilisateur, possibilité d’avoir des utilisateurs locaux seulement. Un peu plus de sécurité…

Enfin, des changements côté ZWave, avec en particulier la possibilité d’ajouter un périphérique avec son code barre (SmartStart).
Des blueprint pour les scripts et pas que pour les automatisations.
Et plein de petites autres choses…

Vous pouvez retrouver les images et détails ici
https://rc.home-assistant.io/blog/2021/12/03/release-202112

N’hésitez pas à commenter et faire vos retours ou découvertes.
Et pensez a faire tourner l’addon Check Home Assistant configuration, puis vérifier les logs avant toute mise a jour… :disguised_face:

7 « J'aime »

Top résumé ! Merci

Il y a une autre info importante, pas directement en lien avec cette mise à jour mais celle juste après : ça concerne les templates, le nouveau format entre en vigueur sur très vite :

Template warning: 'int' got invalid input 'unavailable' when rendering template '{% set sensor_used = states('sensor.light_level_sensor_being_used') %} {% set light_level_value = states('sensor.' + sensor_used) | int %} {% set sensor_threshold = states('input_number.hall_' + sensor_used +'_sensor_threshold') | int %} {{ light_level_value <= sensor_threshold }}' but no default was specified. Currently 'int' will return '0', however this template will fail to render in Home Assistant core 2022.1

ça veut dire qu’on arrive à la dernière limite avant de se retrouver le bec dans l’eau pour la prochaine version.
A vos claviers et jumelles pour scruter les logs donc !

Sur le forum trainent quelques exemples de corrections
https://forum.hacf.fr/t/valeur-par-defaut-dans-un-template-nouvelle-version-de-ha/7259

Et la partie technique est expliquée ici

1 « J'aime »

Bonsoir,

@Argonaute, Merci pour cette synthèse

Enfin! ça c’est une bonne nouvelle, cela va permettre une plus grande interaction avec les automatisations et les scripts

1 « J'aime »

Hello,
Effectivement, il faut corriger nos templates. Il est possible dans pas mal de cas de spécifier une valeur pas défaut en forçant le type et en mettant une valeur par défaut entre parenthèses.
Par exemple

{{ states('sensor.value') }}

va devenir

{{ states('sensor.value') }} | float(0)
1 « J'aime »

Bonsoir,

Grande déception ce matin, sur le site HA pour l’entité « button » il est précisé que celui-ci ne peut être implémenté manuellement, mais uniquement par les intérgations, dommage cela aurait été utile…

1 « J'aime »

Oui effectivement plus que dommage. Il faudra peut peut-être attendre la prochaine version…

De mon côté, j’ai des réserves sur le menu de configuration, pas toujours logique. Ils ont gardé toutes les fonctions du superviseurs ensemble. Du coup, la gestion du host n’a rien a faire dans les modules supplémentaires. Le redémarrage du serveur est lui caché dans paramètres. On aurait du avoir une section système avec le redémarrage du serveur, de la machine, les logs…

Pas logique aussi d’avoir les inputs dans les automatisations. On devrait avoir une section Interface utilisateur qui regroupe dashboard et inputs.
Pas trop compris pourquoi blueprint n’est pas dans automatisation. Peut-être pour le futur…

Bon les techos ont encore manifestement le pouvoir sur l’UX chez Nabu Casa, mais ça avance quand même.

Bonjour Argonaute,

Je suis d’accord avec vous et partage votre logique en ce qui concerne le redémarrage, les logs …et autres réorganisations

1 « J'aime »

Dommage effectivement que cette refonte qui était prometteuse ne soit pas plus aboutie.
J’imagine que comme le Supervisor n’est pas un module obligatoire et est toujours séparé de la partie core, ils ont gardé ça ensemble pour l’instant. C’est un step dans le bonne direction, mais faudra voir 2022.2 pour savoir s’ils continuent.
Point positif pour l’instant c’est la gestion des mises à jours qui s’empilent en haut de la page de config.

Pour ma part j’ai dû repasser en 2021.11 après 10min, pour l’instant une intégration custom n’est pas suportée à cause d’une changement core on dirait.

Pour le restart Hass, j’utilise celui qui est dispo dans l’add-on file editor, ils n’est qu’à 2 clics et aucun scroll du dashboard!

J’ai moi gardé la version 2021.12.0
Par contre, j’ai une erreur sur Netatmo, mais qui ne semble pas gêner la gestion de ma station météo et ma caméra presence.

ERROR (MainThread) [homeassistant.components.select] Error while setting up netatmo platform for select

Enfin les statistics n’affichent plus les attributs (min et max me concernant) alors que la température utilisée est bonne. Autres cas similaires signalés sur le forum US.
Ma config est :

  - platform: statistics
    entity_id: sensor.oregon_thermometer
    name: stats_temperature_exerieur
    state_characteristic: mean
    sampling_size: 2000
    max_age:
      hours: 24

Pour l’instant j’attend un correctif avant de plus chercher… sauf si quelqu’un a une idée (?)

Je cherche également pour ce template:
Sensor:

#############################################################
###     TEMPERATURE MIN/MAX DU JOUR                        ##
#############################################################
  - platform: template
    sensors:
      day_max_temp:
        friendly_name: "Max.temperature"
        unit_of_measurement: "°C"
        #entity_id: weather.ville //deprecated 
        value_template: >
          {% set format = '%Y-%m-%dT%H:%M:%S+00:00' %}
          {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %}
          {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %}
          {% set start = start | timestamp_custom(format, false) %}
          {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='temperature') | list | max }}

  - platform: template
    sensors:
      day_min_temp:
        friendly_name: "Min.temperature"
        unit_of_measurement: "°C"
        #entity_id: weather.ville //deprecated 
        value_template: >
          {% set format = '%Y-%m-%dT%H:%M:%S+00:00' %}
          {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %}
          {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %}
          {% set start = start | timestamp_custom(format, false) %}
          {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='templow') | list | max }}

Erreur:

Logger: homeassistant.helpers.template
Source: helpers/template.py:1291
First occurred: 14:44:53 (836 occurrences)
Last logged: 18:04:00

Template warning: 'timestamp_custom' got invalid input '2022-01-03 00:00:00+01:00' when rendering template '{% set format = '%Y-%m-%dT%H:%M:%S+00:00' %} {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %} {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %} {% set start = start | timestamp_custom(format, false) %} {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='temperature') | list | max }}' but no default was specified. Currently 'timestamp_custom' will return '2022-01-03 00:00:00+01:00', however this template will fail to render in Home Assistant core 2022.1
Template warning: 'timestamp_custom' got invalid input '2022-01-02 00:00:00+01:00' when rendering template '{% set format = '%Y-%m-%dT%H:%M:%S+00:00' %} {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %} {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %} {% set start = start | timestamp_custom(format, false) %} {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='temperature') | list | max }}' but no default was specified. Currently 'timestamp_custom' will return '2022-01-02 00:00:00+01:00', however this template will fail to render in Home Assistant core 2022.1
Template warning: 'timestamp_custom' got invalid input '2022-01-03 00:00:00+01:00' when rendering template '{% set format = '%Y-%m-%dT%H:%M:%S+00:00' %} {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %} {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %} {% set start = start | timestamp_custom(format, false) %} {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='templow') | list | max }}' but no default was specified. Currently 'timestamp_custom' will return '2022-01-03 00:00:00+01:00', however this template will fail to render in Home Assistant core 2022.1
Template warning: 'timestamp_custom' got invalid input '2022-01-02 00:00:00+01:00' when rendering template '{% set format = '%Y-%m-%dT%H:%M:%S+00:00' %} {% set start = now().replace(hour=0,minute=0,second=0, microsecond=0) %} {% set end = (start + timedelta(days=1)) | timestamp_custom(format, false) %} {% set start = start | timestamp_custom(format, false) %} {{ state_attr('weather.ville', 'forecast') | selectattr('datetime', '>=', start) | selectattr('datetime','<=', end) | map(attribute='templow') | list | max }}' but no default was specified. Currently 'timestamp_custom' will return '2022-01-02 00:00:00+01:00', however this template will fail to render in Home Assistant core 2022.1

Hello,
Juste des warnings, mais ne marchera plus dans la prochaine version.
D’après l’erreur, il te faut mettre une valeur par défaut dans la fonction timestamp_custom en le spécifiant en dernier paramètre :
timestamp_custom(format_string, local_time=True, default)

Tu retrouvera la référence à la fonction ici :

Merci @Argonaute

J’avoue ne rien avoir compris ou taper le « default » dans le code.
A chaque modification de ma part ou essai ressort une erreur plus important qu’a la base.
Si l’on pouvais m’indiquer comment faire.

Merci d’avance

Bonjour a tous,
je me retrouve avec le même problème et voudrais corrigé ça avant le déploiement de la maj 2022.1 .

voila le log:

2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ (((float(states('sensor.huawei_b715s_23c_current_download_rate')) * 8192) / 10000000000) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ (((float(states('sensor.huawei_b715s_23c_current_download_rate')) * 8192) / 10000000000) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_download_speed'
2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ (((float(states('sensor.huawei_b715s_23c_current_upload_rate')) * 8192) / 10000000000) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ (((float(states('sensor.huawei_b715s_23c_current_upload_rate')) * 8192) / 10000000000) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_upload_speed'
2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ ((float(states('sensor.huawei_b715s_23c_total_upload')) / 1073741824) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ ((float(states('sensor.huawei_b715s_23c_total_upload')) / 1073741824) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_upload_total'
2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ ((float(states('sensor.huawei_b715s_23c_total_download')) / 1073741824) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ ((float(states('sensor.huawei_b715s_23c_total_download')) / 1073741824) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_download_total'
2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ ((float(states('sensor.huawei_b715s_23c_current_month_download')) / 1073741824) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ ((float(states('sensor.huawei_b715s_23c_current_month_download')) / 1073741824) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_download_month'
2022-02-02 05:26:38 WARNING (MainThread) [homeassistant.helpers.template] Template warning: 'float' got invalid input 'unavailable' when rendering template '{{ ((float(states('sensor.huawei_b715s_23c_current_month_upload')) / 1073741824) | round(2)) }}' but no default was specified. Currently 'float' will return 'unavailable', however this template will fail to render in Home Assistant core 2022.1
2022-02-02 05:26:38 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('TypeError: unsupported operand type(s) for /: 'str' and 'int'') while processing template 'Template("{{ ((float(states('sensor.huawei_b715s_23c_current_month_upload')) / 1073741824) | round(2)) }}")' for attribute '_attr_native_value' in entity 'sensor.my_upload_month'

voila le code dans configuration.yaml:

      my_download_speed:
        friendly_name: 'My Download Speed'
        value_template: "{{ (((float(states('sensor.huawei_b715s_23c_current_download_rate')) * 8192) / 10000000000) | round(2)) }}"
        unit_of_measurement: "Mbit/s"

      my_upload_speed:
        friendly_name: 'My Upload Speed'
        value_template: "{{ (((float(states('sensor.huawei_b715s_23c_current_upload_rate')) * 8192) / 10000000000) | round(2)) }}"
        unit_of_measurement: "Mbit/s"

      my_download_month:
        friendly_name: 'My Download Month'
        value_template: "{{ ((float(states('sensor.huawei_b715s_23c_current_month_download')) / 1073741824) | round(2)) }}"
        unit_of_measurement: "GB"

      my_upload_month:
        friendly_name: 'My Upload Month'
        value_template: "{{ ((float(states('sensor.huawei_b715s_23c_current_month_upload')) / 1073741824) | round(2)) }}"
        unit_of_measurement: "GB"

      my_download_total:
        friendly_name: 'My Download Total'
        value_template: "{{ ((float(states('sensor.huawei_b715s_23c_total_download')) / 1073741824) | round(2)) }}"
        unit_of_measurement: "GB"

      my_upload_total:
        friendly_name: 'My Upload Total'
        value_template: "{{ ((float(states('sensor.huawei_b715s_23c_total_upload')) / 1073741824) | round(2)) }}"
        unit_of_measurement: "GB"

Aurait-il une âme charitable pour me corriger le code avec les nouvelles modification , car j’y comprend rien même en lisant la doc.

Il faut que tu convertisse tes variable avant de faire tes opérations mathématiques.
Soit en entier : | int
Soit en float : | float

Et il faudra aussi sûrement mettre une valeur par défaut : int(default=o) , dans le cas où le sensor ne remonte pas d’information.

j’ai tester comme ça dans outils de développement et modèle. Y a pas d’erreur , je verrai au reboot.
avant:

value_template: "{{ (((float(states('sensor.huawei_b715s_23c_current_download_rate')) * 8192) / 10000000000) | round(2)) }}"

après:

value_template: "{{ (states('sensor.huawei_b715s_23c_current_download_rate') | float(0) * 8192 / 10000000000) | round(2) }}"