Bonjour, j’ai un routeur solaire F1ATB et depuis la mise jour du logiciel, je ne reçois plus les messages MQTT de manière lisible.
Sur jMQTT je voie des valeurs ressemblant à ça :
@kaktusatomik effectivement ce site décode correctement le message. @Bison et @Bad , c’est bon je viens de tester la méthode énumérée dans l’autre sujet et ça fonctionne après avoir redémarrer le démon. Maitenant j’ai bien la valeur sous cette forme :
Il faut maintenant que je la décortique pour pouvoir utiliser les valeurs dans des Widgets et/ou scénarios.
De plus, à chaque actualisation MQTT, j’ai une erreur :
Citation :
jMQTTComFromDaemon::msgIn() a levé l’Exception: [MySQL] Error code : 22001 (1406). Data too long for column ‹ value › at row 1 : REPLACE INTO history SET cmd_id=:cmd_id, datetime=:datetime, value=:value
La base de données de Jeedom est plutôt conçue pour stocker des nombres ou booléens, et en plus le texte est limité en longueur et très gourmand en place.
Bonjour, j’ai réussi à parcer les différentes valeurs avec un scénario et un code généré par ChatGPT qui en plus me fait un calcul pour une valeur :
// Récupérer le message JSON depuis la commande
$json = cmd::byString('#[Extérieur][Routeur][routeur1_rms_state]#')->execCmd();
// Nettoyer les caractères spéciaux
$json = clean_json_string($json);
$data = json_decode($json, true);
// Vérifiez que le JSON a été correctement décodé
if (json_last_error() === JSON_ERROR_NONE) {
// Mettre à jour les commandes info avec les valeurs du JSON
if (isset($data['PuissanceS_M'])) {
// Mettre à jour la puissance active
cmd::byString("#[Extérieur][Routeur][Puissance Active]#")->event($data['PuissanceS_M']);
// Calculer la puissance apparente si le facteur de puissance est disponible
if (isset($data['PowerFactor_M']) && $data['PowerFactor_M'] != 0) {
$puissanceApparente = $data['PuissanceS_M'] / $data['PowerFactor_M'];
// Convertir en entier pour supprimer les décimales
$puissanceApparente = intval($puissanceApparente);
cmd::byString("#[Extérieur][Routeur][Puissance Apparente]#")->event($puissanceApparente);
} else {
log::add('scenario', 'error', 'Facteur de puissance non valide ou manquant');
}
} else {
log::add('scenario', 'error', 'Clé "PuissanceS_M" manquante dans le JSON');
}
// Ajoutez les mises à jour pour les autres commandes info ici de la même manière
} else {
// Si le JSON n'est pas valide, écrivez un message de log pour le débogage
log::add('scenario', 'error', 'Erreur de décodage JSON: ' . json_last_error_msg());
}
/**
* Fonction pour nettoyer une chaîne JSON en supprimant les caractères spéciaux.
* @param string $json_string Chaîne JSON à nettoyer.
* @return string Chaîne JSON nettoyée.
*/
function clean_json_string($json_string) {
// Supprimer les caractères non-ASCII et les caractères de contrôle
return preg_replace('/[^\x20-\x7F]/', '', $json_string);
}
Mais ce scénario se lance à chaque fois qu’un message MQTT est reçu. Soit toutes les 5 secondes. Ça ne risque pas de surcharger la domotique ?