Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Correctif avertissement Home Assistant : WS command recorder avec routeur en V9.01
#1
Lightbulb 
Un petit post pour ceux qui ont cette erreur dans leur Log Home Assistant :
Code :
WS command recorder/import_statistics called without specifying unit_class in metadata, this is deprecated and will stop working in HA Core 2026.11

Correction valide dans les conditions suivantes :
  • version du routeur : v9.01
  • Home assistant version 2025.11.1

A effectuer dans l'ordre :
  • 1. Sauvegarder Home Assistant et le programme du routeur avant toute chose.
  • 2. Modifier le fichier MQTT.ino ou le remplacer par le "MQTT.ino" fourni en pièce jointe a ce message puis recompiler et injecter dans le routeur
  • 3. Forcer la redécouverte dans Home assistant pour cela Supprimer l’appareil dans Home Assistant : Paramètres → Appareils & Services → MQTT → Appareils et supprimer “Routeur - ECS”
  • 4. Redémarrer Home Assistant
  • 5. Redémarrer ESP32 pour republier les topics de découverte
  • 6. Vérifier si tout est ok et créer une sauvegarde

Explications :
  • "mean_type": "arithmetic" (obligatoire depuis 2026.11)
  • "unit_class": "energy" (obligatoire depuis 2026.11)
Le message d’erreur indique que Home Assistant ne reçoit pas le champ "unit_class" dans les métadonnées statistiques, ce qui sera bloquant à partir de la version 2026.11.
Selon les dernières modifications du WebSocket API de Home Assistant : le champ unit_class est désormais obligatoire dans les métadonnées envoyées via recorder/import_statistics ou update_statistics_metadata.
Ce champ permet à Home Assistant de convertir les unités et de générer des statistiques cohérentes.

Solution apportée:
Correction a apporter dans le fichier MQTT.ino (lignes 175 à 232)

Code PHP :
// END OF sendMQTTDiscoveryMsg_global

void DeviceToDiscover(String VarNameString UnitString Class, String Round) {
  
char value[700];
  
char DiscoveryTopic[120];
  
char UniqueID[50];
  
char ValTpl[60];
  
String TitleName String(MQTTdeviceName) + " " String(VarName);

  
sprintf(DiscoveryTopic"%s/%s/%s_%s/%s"MQTTPrefix.c_str(), SSRMQTTdeviceName.c_str(), VarName.c_str(), "config");
  
sprintf(UniqueID"%s_%s"MQTTdeviceName.c_str(), VarName.c_str());
  
sprintf(ValTpl"{{ value_json.%s|default(0)|round(%s)}}"VarName.c_str(), Round.c_str());

  if (
Unit == "Wh" || Unit == "kWh") {
    
sprintf(value,
      
"{\"name\": \"%s\",\"uniq_id\": \"%s\",\"stat_t\": \"%s\",\"device_class\": \"%s\",\"unit_of_meas\": \"%s\",\"state_class\": \"total_increasing\",\"mean_type\": \"arithmetic\",\"unit_class\": \"energy\",\"val_tpl\": \"%s\",\"device\": %s}",
      
TitleName.c_str(), UniqueIDStateTopic, Class.c_str(), Unit.c_str(), ValTplDEVICE);
  } else {
    
sprintf(value,
      
"{\"name\": \"%s\",\"uniq_id\": \"%s\",\"stat_t\": \"%s\",\"device_class\": \"%s\",\"unit_of_meas\": \"%s\",\"val_tpl\": \"%s\",\"device\": %s}",
      
TitleName.c_str(), UniqueIDStateTopic, Class.c_str(), Unit.c_str(), ValTplDEVICE);
  }

  
clientMQTT.publish(DiscoveryTopicvaluetrue);
}

void DeviceBinToDiscover(String VarNameString TitleName) {
  
char value[700];
  
char DiscoveryTopic[120];
  
char UniqueID[50];
  
char ValTpl[60];
  
String ic "mdi:electric-switch";  // Icône par défaut
  
sprintf(DiscoveryTopic"%s/%s/%s_%s/%s"MQTTPrefix.c_str(), BINSMQTTdeviceName.c_str(), VarName.c_str(), "config");
  
sprintf(UniqueID"%s_%s"MQTTdeviceName.c_str(), VarName.c_str());
  
sprintf(ValTpl"{{ value_json.%s }}"VarName.c_str());

  
sprintf(value,
    
"{\"name\": \"%s\",\"uniq_id\": \"%s\",\"stat_t\": \"%s\",\"device_class\": \"power\",\"icon\": \"%s\",\"val_tpl\": \"%s\",\"device\": %s}",
    
TitleName.c_str(), UniqueIDStateTopicic.c_str(), ValTplDEVICE);

  
clientMQTT.publish(DiscoveryTopicvaluetrue);
}

void DeviceTextToDiscover(String VarNameString TitleName) {
  
char value[600];
  
char DiscoveryTopic[120];
  
char UniqueID[50];
  
char ValTpl[50];
  
sprintf(DiscoveryTopic"%s/%s/%s_%s/%s"MQTTPrefix.c_str(), TXTMQTTdeviceName.c_str(), VarName.c_str(), "config");
  
sprintf(UniqueID"%s_%s"MQTTdeviceName.c_str(), VarName.c_str());
  
sprintf(ValTpl"{{ value_json.%s }}"VarName.c_str());

  
sprintf(value,
    
"{\"name\": \"%s\",\"uniq_id\": \"%s\",\"stat_t\": \"%s\",\"device_class\": \"enum\",\"val_tpl\": \"%s\",\"device\": %s}",
    
TitleName.c_str(), UniqueIDStateTopicValTplDEVICE);

  
clientMQTT.publish(DiscoveryTopicvaluetrue);



Pièces jointes
.zip   MQTT.zip (Taille : 3.51 Ko / Téléchargements : 2)
F4AME - Patoutheone
8 panneaux Recom Sillia Panther 375 Wc Full Black soit 3 KWc
Onduleur Huawei 3KTL-L1 mono et compteur DDSU666-H
Routeur F1ATB + 2 Afficheurs - Home Assistant


Répondre

#2
Merci F4amefaut pour cette info !
faut que je regarde mes logs HA du coup .
Config : 3 routeurs F1ATB en V16.01 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV : 3kw (8*425W + Onduleur SunGrow 3KW) + 1KW (2 *500w + MO Hoymiles HMS-1000W-2T)
Supervision : Home Assistant / Shelly & MQTT
Répondre

#3
Aujourd'hui en V15.12, le fichier MQTT.ino a fortement évolué. Pas facile de reprendre vos suggestions en V9.

André
Répondre

#4
Après vérif., j'ai pas ce message dans mes logs HA..
Config : 3 routeurs F1ATB en V16.01 - 2 routeurs fixes en mode Triacs + 1 routeur mobile polyvalent en mode : Triac+SSR
PV : 3kw (8*425W + Onduleur SunGrow 3KW) + 1KW (2 *500w + MO Hoymiles HMS-1000W-2T)
Supervision : Home Assistant / Shelly & MQTT
Répondre

#5
(09-11-2025, 05:56 PM)F1ATB a écrit : Aujourd'hui en V15.12, le fichier MQTT.ino a fortement évolué. Pas facile de reprendre vos suggestions en V9.

André

Je n'en doute pas André, ce n’était pas dans un but correctif mais plus pour aider ceux qui sont resté comme moi sur une ancienne version Smile
F4AME - Patoutheone
8 panneaux Recom Sillia Panther 375 Wc Full Black soit 3 KWc
Onduleur Huawei 3KTL-L1 mono et compteur DDSU666-H
Routeur F1ATB + 2 Afficheurs - Home Assistant


Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
1 visiteur(s)

Moteur MyBB, © 2002-2025 Melroy van den Berg.