Depuis la maj 4.5 Le service client MQTT "Zigbee" est arrêté

Pour cette ligne normalement après le client mqtt se relance dans la seconde après son arrêt.
Et il faut regarder le event autour de cette heure : 2025-12-02 15:55:58

Vous êtes tous dans la dernière version de ZigbeeLinker (celle d’aujourd’hui en stable et d’hier en béta) ?

non je n’étais pas dans la dernière version pour provoquer « volontairement » les erreurs pour les voir.

Depuis j’ai passer les logs mqtt en ALL et installer la dernier maj stable d’aujourd’hui, et forcement depuis 17h, pas une erreur, pas une relance de client :rofl:

1 « J'aime »

Debian 12 Core 4.5 zigbeelinker dernière beta et zigbee2mqtt 2.7.0
3 arrêts aujourd’hui seulement donc il me semble que cela se stabilise, et le service a bien redémarré tout seul contrairement aux autres fois.
Tenir compte que j’ai aussi fais des arrêts volontaire en plus des 3 au moment du rajout du filtre topic.

0017|[2025-12-02 19:45:29] ERROR  ##### Le service Client MQTT "Zigbee vers 228 New" est arrêté #####
0018|[2025-12-02 19:45:29] INFO  ##### Démarrage du service Client MQTT (Zigbee vers 228 New) #####
0019|[2025-12-02 19:45:30] INFO  ##### Connexion avec identification (Zigbee vers 228 New) #####
0020|[2025-12-02 19:45:30] INFO  ##### Le service Client MQTT a démarré (Zigbee vers 228 New) #####
0021|[2025-12-02 19:45:30] INFO  [JMQTT][Zigbee vers 228 New] : Client MQTT subscribe : 1
0022|[2025-12-02 19:45:30] INFO  ##### Le client MQTT Zigbee vers 228 New a reçu un premier message de Zigbee2MQTT #####
0023|[2025-12-02 19:45:31] INFO  ##### Démarrage du service Client MQTT (Zigbee vers 228 New) terminé avec succès #####
0024|[2025-12-02 19:45:40] INFO  ##### Le service Client MQTT "Zigbee vers 228 New" a démarré #####

je suis repartis en 2.6.0 (sans mettre à jour la dernière version de Zigbeelinker d’aujourd’hui)… et depuis 12h35 aucun arrêt à voir après la nuit ! :slight_smile:

Bonjour, aucune coupure ou relance depuis hier 17h …
Je viens de désactiver les log mqtt, si le soucis reviens cela incriminera le niveau de log mqtt :rofl:

c’est a ni rien comprendre, a moins que la version stable d’hier change quelque chose, mais d’après ce que j’avais compris cela permettais juste de relancer le client automatiquement, mais la je n’ai eu aucune relance…

Sinon peut etre est-ce l’installation de la 4.5 qui s’est mieux passé car dans le changelog il y a ca :

**IMPORTANT**

Dû à la refonte des logs et la réinternalisation de bibliothèques, lors de la mise à jour vous pouvez avoir une erreur type `PHP Fatal error` (rien de grave) il suffit de relancer la mise à jour.

le PHP Fatal error pourrais coller, mais je ne suis pas vraiment sur de l’interprétation de cette phrase, sans doute que ce soucis empêche plus probablement l’installation de la 4.5 et donc aucun liens…

1 « J'aime »

La dernière mise à jour de ZigbeeLinker améliore beaucoup le redémarrage du client MQTT en cas de crash. Il redémarre dans la seconde et apparemment à tous les coups maintenant.

1 « J'aime »

Hello,

Ma config avec 2.6.0 a craché cette nuit vers 02h00… pas moyen d’avoir les logs ad hoc (truncated)
Donc j’ai mis à jour ce matin finalement à distance la version de Zigbeelinker et puis les dépendances en 2.7.0… et cela fonctionne… va savoir ! :slight_smile:
depuis 20’ ras tout fonctionne bien…

merci pour cette maj

1 « J'aime »

Bonjour,
Je confirme, les arrêts sont toujours présents bien que moins fréquents et le client redémarre aussitôt automatiquement. (sans intervention humaine et sans relance du demon qui reste avec son heure de dernier démarrage)
C’est un moindre mal et ça reste exploitable en l’état en attendant que tu ais trouvé l’origine du pb.
Bien cordialement merci,

Ben le soucis, c’est que l’origine du problème vient fort certainement d’une erreur de saisie dans un scénario, une action de commande ou autres :

Je n’ai pas la main la dessus.

Une chose qui fait aussi planter le client, c’est lors d’une sauvegarde Jeedom (je n’ai pas non plus la main là dessus). Mais le client redémarre tout seul du coup.

EDIT : et dans le log démon, les erreurs PHP doivent remonter maintenant (grâce à la dernière version de ZigbeeLinker). A voir si vous en avez?

Tient je vais vous exposer un cas. Sur une box passée en PHP8
A savoir que PHP8 n’accepte plus les String+Int ou String+Float

Donc « 123 »+456 → Provoque une erreur PHP.

Avec la mise à jour ZigbeeLinker d’hier, une erreur qui remonte et le client mqtt ne plante plus :

[2025-12-02 20:32:41][ERROR] [En test][Client MQTT Local] : ERROR dans MQTT_message,
topic=z2mMaison/Prise, payload={"child_lock":"UNLOCK","current":0.14,"device":{"applicationVersion":160,"dateCode":"20210625","friendlyName":"Prise","hardwareVersion":3,"ieeeAddr":"0x70b3d52b600143c5","manufactu,
message=Unsupported operand types: float + string,
trace=#0 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#1 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#2 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#3 /var/www/html/vendor/symfony/expression-language/ExpressionLanguage.php(81): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#4 /var/www/html/core/php/utils.inc.php(1172): Symfony\Component\ExpressionLanguage\ExpressionLanguage->evaluate()
#5 /var/www/html/core/class/jeedom.class.php(1413): evaluate()
#6 /var/www/html/plugins/virtual/core/class/virtual.class.php(553): jeedom::evaluateExpression()
#7 /var/www/html/core/class/cmd.class.php(1933): virtualCmd->execute()
#8 /var/www/html/plugins/zigbee2mqtt/core/class/zigbee2mqtt.class.php(2117): cmd->event()
#9 /var/www/html/plugins/zigbee2mqtt/core/class/zigbee2mqtt.class.php(2168): zigbee2mqtt->ZL_checkAndUpdateCmd()
#10 /var/www/html/plugins/zigbee2mqtt/core/class/zigbee2mqtt.class.php(2071): zigbee2mqtt->MQTT_ReceiveValues()
#11 /var/www/html/plugins/zigbee2mqtt/core/class/zigbee2mqtt.class.php(1805): zigbee2mqtt->MQTT_message()
#12 [internal function]: zigbee2mqtt::{closure:zigbee2mqtt::deamon_client():1803}()
#13 /var/www/html/plugins/zigbee2mqtt/core/class/zigbee2mqtt.class.php(1930): Mosquitto\Client->loop()
#14 /var/www/html/core/php/jeeCron.php(85): zigbee2mqtt::deamon_client()
#15 {main}

On voit l’erreur PHP : Unsupported operand types: float + string,
Ce qui est intéressant, c’est la ligne 7 : virtualCmd->execute()

Dans un virtuel, il était additionné la puissance de cet équipement « Prise » et la puissance d’un autre équipement qui était à rien, c’est à dire une chaine vide «  »

Donc en gros, lors du changement de la puissance de la prise, cela provoque le recalcul de la commande info du virtuel, et bim, ça plante avec une erreur PHP.

Ce n’est pas forcément l’équipement ZigbeeLinker qui pose problème, mais le calcul associé à une commande de l’équipement ZigbeeLinker.

J’ai eu le même cas pour un équipement zwavejs et un scenario :

[03-Dec-2025 11:44:14 Europe/Brussels] PHP Fatal error:  Uncaught TypeError: Unsupported operand types: int + string in /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php:142
Stack trace:
#0 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#1 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#2 /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php(90): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#3 /var/www/html/vendor/symfony/expression-language/ExpressionLanguage.php(81): Symfony\Component\ExpressionLanguage\Node\BinaryNode->evaluate()
#4 /var/www/html/core/php/utils.inc.php(1172): Symfony\Component\ExpressionLanguage\ExpressionLanguage->evaluate()
#5 /var/www/html/core/ajax/scenario.ajax.php(94): evaluate()
#6 {main}
  thrown in /var/www/html/vendor/symfony/expression-language/Node/BinaryNode.php on line 142
1 « J'aime »

Ca va être coton à trouver tout ça :grinning: pour nous les amateurs

moi je suis pas un amateur, mais un pro (de la connerie) j’ai plein plein de virtuels qui calcul des conso, je suis dans une merde noire !

1 « J'aime »

je pense qu’il doit y avoir un moyen de faire un code php dans un scenario pour tester toutes les commandes et les éléments des scénarios pour remonter les endroits des erreurs.

Où peut-être que Jeedom pourrait modifier le code de evaluate pour capturer les erreurs et remonter l’info sur l’équipement, le scénario ou autres

Phpvarious avait donné un petit script dans un autre post pour aider à trouver les divisions (par zéro) dans les virtuels.
Il est peut-être possible d’améliorer si on sait ce qu’on cherche.

$keySearch = '/'; // clé a rechercher
$plugin = 'virtual';
//////////////////////////////////////////////////////////////
foreach (eqLogic::byType($plugin, true) as $eqLogic) {
  foreach ($eqLogic->getCmd() as $cmd) {
    if (strpos($cmd->getValue(), $keySearch) !== false || strpos($cmd->getConfiguration('calcul'), $keySearch) !== false) $scenario->setLog($cmd->getHumanName());
  }
}

J’ai posé la question à chatgpt il m’a pondu ça :
Je l’ai passé sur mon installation et à priori je n’ai rien qui déconne. Mais même si j’ai compris globalement le script, je suis bien incapable de voir s’il correspond complétement à ce qu’on cherche à trouver.
Essayez chez vous pour voir si ça vous ramène qq chose.
Et si un dev passe par là et veut bien y jeter un œil averti, merci d’avance.

Donc en ssh dans root.

sudo nano /root/scan_php8_user_custom_full.sh
#!/bin/bash
# scan_php8_user_custom_full.sh
# Scan complet des scripts et widgets personnalisés Jeedom pour risques PHP 8
# Inclut même les lignes commentées et les calculs dans les commandes

OUTPUT="/tmp/jeedom_php8_custom_full.csv"
CONTEXT=3  # nombre de lignes de contexte avant/après

echo "type;source;ligne;contexte_avant;code;contexte_apres" > "$OUTPUT"

# Fonction pour scanner un dossier
scan_folder() {
    local TYPE="$1"
    local FOLDER="$2"
    local EXTENSIONS="$3"

    if [ ! -d "$FOLDER" ]; then
        echo "=== Dossier $FOLDER absent, passage ==="
        return
    fi

    echo "=== Scan $TYPE ==="
    find "$FOLDER" -type f \( $EXTENSIONS \) | while read FILE; do
        awk -v context="$CONTEXT" -v type="$TYPE" -v file="$FILE" '
        function join_lines(arr, sep, start, end) {
            s = ""
            for (i=start;i<=end;i++) if (i in arr) s = s arr[i] sep
            return s
        }
        {
            lines[NR]=$0
            # Détecte toute addition ou soustraction entre variables, nombres ou floats
            if ($0 ~ /(\$[A-Za-z0-9_]+|#[0-9]+#)[[:space:]]*[-+][[:space:]]*(\$[A-Za-z0-9_]+|#[0-9]+#|[0-9]+(\.[0-9]+)?)/) {
                start = (NR-context > 0 ? NR-context : 1)
                end   = NR+context
                print type ";" file ";" NR ";" "\"" join_lines(lines, "\n", start, NR-1) "\"" ";" "\"" lines[NR] "\"" ";" "\"" join_lines(lines, "\n", NR+1, end) "\"" >> "'"$OUTPUT"'"
            }
        }' "$FILE"
    done
}
# Scan des scripts PHP utilisateurs
scan_folder "SCRIPT" "/var/www/html/data/scripts" "-name '*.php'"

# Scan des widgets personnalisés
scan_folder "WIDGET" "/var/www/html/data/customTemplates" "-name '*.html' -o -name '*.php'"

# Scan des commandes utilisateurs
if [ -d "/var/www/html/data/commandes" ]; then
    echo "=== Scan COMMANDES ==="
    find /var/www/html/data/commandes -type f -name '*.json' | while read FILE; do
        awk -v type="CMD" -v file="$FILE" '
        {
            lines[NR]=$0
            # Cherche calcul dans JSON de valeur de commande
            if ($0 ~ /(\$[A-Za-z0-9_]+|#[0-9]+#)[[:space:]]*[-+*/][[:space:]]*(\$[A-Za-z0-9_]+|#[0-9]+#|[0-9]+(\.[0-9]+)?)/) {
                print type ";" file ";" NR ";" "" ";" "\"" lines[NR] "\"" ";" "" >> "'"$OUTPUT"'"
            }
        }' "$FILE"
    done
fi

echo "Scan terminé ! Résultat → $OUTPUT"

Rendre executable :

sudo chmod +x /root/scan_php8_user_custom_full.sh

Executer :

sudo /root/scan_php8_user_custom_full.sh

Lire résultat :

nano /tmp/jeedom_php8_custom_full.csv

La première version scannait tout et c’était inexploitable le résultat, trop de chose « normale » étaient reportées.

Oliflo

MrGreen

10 h

Hello,

Ma config avec 2.6.0 a craché cette nuit vers 02h00… pas moyen d’avoir les logs ad hoc (truncated)
Donc j’ai mis à jour ce matin finalement à distance la version de Zigbeelinker et puis les dépendances en 2.7.0… et cela fonctionne… va savoir ! :slight_smile:
depuis 20’ ras tout fonctionne bien…

merci pour cette maj

De mon coté: (Toujours Jeedom 4.5)

Cette nuit ( et depuis 18h00 hier ) 2.6.2 avec l’update de hier et presque 0 soucis:
x3 redémarrages automatiques vers 6:00 , puis 7:00 et 8:00. puis RAS .

Je me suis dit l’update à réglé le soucis: Je remonte en 2.7.0: Et là NOK.
→ Le service mqtt s’arrete (message jaune clignotte )…

Je suis repassé en 2.6.3 … ( Ca à l’air de tenir…) :crossed_fingers:

Bon courage a ceux qui mettent les mains dans le camboui pour que ça marche chez tout le monde.
Et MERCI

BOnjour,
Même problème chez moi en 4.5 et en 2.7.0. Comment vous faites pour repasser en 2.6.3 ?
Merci d’avance pour les infos. Bon courage à ceux qui cherchent

hello

dans la configuration de Zigbeelinker, tu scrolles jusqu’à « Avancée » cf copie d’ecran

1- tu choisis custom dans le menu déroulant du 1bleu
2- tu tape 2.6.3 dans la case 2bleu

3- tu remontes en scrollant et tu sauvegardes le bloc

et 4 tu relances tes dépendances

Merci beaucoup. Je suis repasser en 2.6.3 mais ca ne change rien. J’essayerai demain de passer en jeedom 4.4 avec la sauvegarde et on verra bien. Bonne soirée

n 'hésite surtout pas à redémarrer !! parfois cela resoud le problème :slight_smile: