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 : 0)
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 V15.11 - 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



Atteindre :


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

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