Creation automatique d'ID?

Re, dsl, mais juste pour info
Comme le LOG était vraiment trop gros (bcp bcp de requetes :slight_smile: ) j’ai prefere filtrer sur cmd

 if (stripos($_query, 'cmd') !== false || stripos(json_encode($_params), 'cmd') !== false) {
...
}

C’est mieux comme ca

Je viens de lire ce log et il n’y a rien de vraiment probant dedans…
Tu as constaté une augmentation des IDs lors de cette prise de logs ?

Peux-tu rajouter un log dans DB::getLastInsertId() : https://github.com/jeedom/core/blob/188f89b4eaae29df4de75aad435b5d00fdf9434a/core/class/DB.class.php#L45 ?

@bad, @Mips , @ddelec24

On avance , on avance … Je viens d’intercepter les INSERT dans la table CMD
C’est bien lié au redemarrage de z2m lorsque je considere qu’il est planté

requetes.log (223,5 Ko)

Je ne vois pas les suppressions car dans le filtre j’ai mis cmd et je suppose que la requete pour la suppression est différente. je vais creuser

Donc, a priori, z2m supprime les ID puis les recréer ? Pour tous les équipements Zigbee ?

Concernant le redemarrage de z2m j’ai reussi a chopé ca hier

Zigbee2MQTT:debug 2024-01-08 22:00:24: Publishing 'set' 'force' to 'douche'
Zigbee2MQTT:info  2024-01-08 22:00:28: MQTT publish: topic 'zigbee2mqtt/Prise2', payload '{"child_lock":"UNLOCK","current":0,"device":{"applicationVersion":192,"dateCode":"","friendlyName":"Prise2","hardwareVersion":1,"ieeeAddr":"0xa4c138ed8079e3c8","manufacturerID":4417,"manufacturerName":"_TZ3000_gjnozsaz","model":"TS011F_plug_1","networkAddress":64040,"powerSource":"Mains (single phase)","stackVersion":0,"type":"Router","zclVersion":3},"energy":0,"indicator_mode":"off/on","last_seen":"2024-01-08T21:00:21.511Z","linkquality":208,"power":0,"power_outage_memory":"restore","state":"OFF","update":{"installed_version":192,"latest_version":192,"state":"idle"},"voltage":236}'
Zigbee2MQTT:info  2024-01-08 22:00:29: MQTT publish: topic 'zigbee2mqtt/Prise2', payload '{"child_lock":"UNLOCK","current":0,"device":{"applicationVersion":192,"dateCode":"","friendlyName":"Prise2","hardwareVersion":1,"ieeeAddr":"0xa4c138ed8079e3c8","manufacturerID":4417,"manufacturerName":"_TZ3000_gjnozsaz","model":"TS011F_plug_1","networkAddress":64040,"powerSource":"Mains (single phase)","stackVersion":0,"type":"Router","zclVersion":3},"energy":0,"indicator_mode":"off/on","last_seen":"2024-01-08T21:00:21.511Z","linkquality":208,"power":0,"power_outage_memory":"restore","state":"OFF","update":{"installed_version":192,"latest_version":192,"state":"idle"},"voltage":236}'
Error: {"frameId":"stackStatusHandler","sequence":null} after 10000ms
at Timeout._onTimeout (/var/www/html/plugins/z2m/resources/zigbee2mqtt/node_modules/zigbee-herdsman/src/utils/waitress.ts:64:35)
at listOnTimeout (node:internal/timers:569:17)
at processTimers (node:internal/timers:512:7)
> zigbee2mqtt@1.34.0 start
> node index.js
Zigbee2MQTT:debug 2024-01-08 22:04:26: Loaded state from file /var/www/html/plugins/z2m/data/state.json
Zigbee2MQTT:info  2024-01-08 22:04:26: Logging to console and directory: '/var/www/html/plugins/z2m/data/log/2024-01-08.22-04-26' filename: log.txt
Zigbee2MQTT:debug 2024-01-08 22:04:26: Removing old log directory '/var/www/html/plugins/z2m/data/log/2024-01-08.06-42-28'

Quand cela se produit, je ne peux plus commander mes equipements Zigbee, et je suis obligé de redemarrer le plugin par mon scenario (ci dessus dans les posts precedents)

Log_z2m.log (583,1 Ko)

Des idées ?
Merci

N’oublie pas d’utiliser le bouton </> pour formater tes logs/commandes stp.
(Pour info, de mon point de vu, moins de 50Mo de log, c’est petit)

En effet, z2m semble demander un très grand nombre de création de cmd au démarrage !

Dsl @Bad, pas trop l’habitude de faire ce genre de modif
C’est où qu’il faut mettre le </> ?

$dateTime = date('Y/m/d H:i:s');
$logMessage = $dateTime;$_query . json_encode($_params) .\n;

Je vais essayé de choper les delete sur cette table pour voir lesquels sont supprimés

Sinon une idée pour z2m et ce message d’erreur ? ou je dois ouvrir un nouveau poste pour ca ?

@bad, @mips, @ddelec24 ,

Alors, alors, je commence a y voir un peu plus clair…

Donc c’est bien au moment où je relance z2m que les ID sont « crées »… mais a priori en fait NON pas vraiment

Je m’explique :

Je vois bien des INSERT INTO cmd dès que le plugin redemarre
Quand je regarde un peu les details d’une insertion, par exemple, pour l’eqLogic_id 129, quand je fais un SELECT * FROM cmd WHERE eqLogic_id=129, je me rends compte que les valeurs insérées existent déjà !! comme « state », « state on », « state off » etc… Mais visiblement il n’y a pas toutes les propriétés de l’équipement Zigbee, uniquement ceux la « state xxx » pour « windows_detection », « valve_detection », etc…
par exemple pour cet equipement 129, l’ID pour « windows_detection » et « state toggle » est 25412 !
Alors que les ID actuels commencent a etre numéroté a partir de 77345 au moins !!

J’ai l’impression que l’insertion se passe mal (?) et mais que les ID sont bien incrementés (?)

Que pensez vous de mon analyse ?

Ci joint le fichier avec les requetes
AnalyseID.log (16,0 Ko)

Si besoin d’infos complémentaires n’hesitez pas
Merci

Et pour chaque redemarrage il y a env. 500 ID qui sont « crées » mais qui n’existent pas dans la base
je n’ai pas lu le code apres dans la fonction prepare, mais peut etre y a t il une suppression si ca se passe mal, car je ne vois jamais de DELETE sur la table cmd

Les captures des INSERT et des DELETE
requetes.log (679,3 Ko)

Tu n’as aucune erreur ou message étrange dans les logs de z2m en debug ?

Je pense qu’il essaye de les insérer, mais que SQL l’en empêche, car une contrainte échoue (duplicate), par exemple sur le champ logicalId. Dans les logs, les logicalId sont toujours window_detection, valve_detection, child_lock, away_mode et auto_lock, éventuellement avec ::ON, ::OFF, ::LOCK, ::UNLOCK, ::MANUAL ou ::AUTO à la fin…

@Bad, en effet ce sont tjrs les memes infos qui sont crées

Il doit y avoir bien une contrainte, mais ce que je ne comprends c’est que normalement la base ne devrait pas créer l’ID puisqu’il y a une erreur non ? Si l’ID est crée c’est qu’a priori il est bien supprimé ensuite, sinon il faut chercher coté BD ?

Je viens de regarder le log z2md et je vois bien ca (payload) mais pas d’erreur ou truc bizarre :

Je n’ai rien vu dans z2m. Mais j’ai augmenter la taille du LOG (10000 lignes) pour essayer d’avoir plus d’infos avant que je n’intervienne

Donc dans z2m il y a bien des erreurs de creation des ID au moment de la relance du plugin

Pour rappel, dans mon scenario ce n’est pas z2m que je relance mais bien mqtt2, pour debloquer mon zigbee

je fais juste un daemon_start de z2m mais a priori il tourne encore (c’etait au cas ou il est arrete)

J’ai rajouté un log dans la fonction prepare lorsqu’il y a une exception… et Bingo ! c’est bien ca

Error Code : Duplicate entry … et j’en ai des pages !

Donc pour resoudre le souci , il faut juste verifier que l’enregistrement n’existe pas avant de faire le INSERT, non ?

Ok, on est plus très loin.

Maintenant il faudrait savoir si tu es un cas isolé ou si le plugin essayes de créer des commandes déjà existantes pour tout le monde, puis qu’un dev du plugin se penche sur le correctif

1 « J'aime »

@Bad, en effet il faut en savoir plus…
J’ai rajouté les infos sur les fonctions appellantes :
Ca tourne tjrs autour de
/var/www/html/core/class/cmd.class.php à la ligne 1014
/var/www/html/plugins/z2m/core/class/z2m.class.php à la ligne 838
/var/www/html/plugins/z2m/core/class/z2m.class.php à la ligne 805

Je vais voir pour essayer de patcher ca de mon coté (je ne suis pas un specialiste php, mais bon quand il faut il faut)

Merci

Mais a priori, ce n’est pas normal que la BD génère un nouvel ID alors qu’il y a une exception car il y a une contrainte (duplicate), non ? Le souci vient plus de la BD que de Jeedom ?

Un dernier message :slight_smile:

Perso je pense que tout le monde est affecté car mon probleme vient avant tout du fait que je suis obligé de relancer mqtt2 pour débloquer mon reseau Zigbee. Il est là le vrai probleme
Peut etre que certains l’ont aussi mais ils ne relancent que tres rarement mqtt2 et l’ID s’incremente lentement. Tout dépend du nombre d’equipements Zigbee qu’i y a

Je vais essayer de comprendre où le blocage se fait dans la gestion du Zigbee. Mais , aie, aie, c’est un truc de specialiste ce truc :slight_smile:

J’ai 2 jeedom et je n’ai jamais besoin de relancer mqtt2 pour débloquer le réseau zigbee. D’ailleurs, je ne vois pas le lien entre le réseau zigbee et mqtt2. Le réseau zigbee ne voit que zigbee2mqtt qui lui utilise le broker mosquito via mqtt2

La seule chose que je vois, c’est que le fait d’arrêter mqtt2 arrêté aussi le démon zigbee2mqtt et le relance → PB plutôt côté z2m. Mettre les logs en debug de ce côté pour voir ce qu’il se passe

Il faut je pense que tu crées un sujet spécifique sur ce PB en lien avec ce post : Creation automatique d'ID? - #7 par fcafca60

@ngrataloup pour aller dans ton sens, je suis d’accord, je n’ai pas non plus de souci avec mon Jeedom et mon reseau avec le plugin JeeZigbee (et non le plugin Zigbee) et j’ai beaucoup d’equipements Zigbee de raccordé
Le but de ce post est d’expliquer ce qu’il se passe sur une install Jeedom que j’ai fait pour un ami. Meme distrib, meme version Jeedom, meme clé USB Jeedom, tout est quasi pareil puisque je me suis basé sur mon install que j’ai depuis de nombreuses années
La SEULE différence evidente entre les 2 install, c’est que je suis en electrique (donc fil pilote via module relai Zigbee) et lui est en chauffage au gaz (donc des tetes thermostatiques Zigbee)
On utilise les memes plugins et j’en ai meme un peu plus
Le fait est que dans son install, de facon « aleatoire », il n’y a plus de moyen de piloter ces tetes thermostatiques ce qui, ,comme tu peux l’imaginer, est plus genant surtout vu la température actuelle
mqtt2 et z2m etaient en Gestion Auto donc normalement devraient se relancer tout seul
Or ce n’etait pas le cas
A force de recherche et de tests, en arretant mqtt2 et en le relancant, j’ai reussi a contourner le probleme, et lorsque je detecte un probleme potentiel (ecart entre commande Jeedom et retour tetes), je relance ce mqqt2
Maintenant, je ne sais pas ce qu’il se passe vraiment, mais ca resoud le probleme
Pour info, dans un de mes posts ci dessous j’avais reussi a capturer une erreur juste avant le blocage

A priori, c’est bien cette erreur qui me plante, car le scenario redemarre le plugin 4 minutes apres un blocage potentiel

Des idées ?
Merci

Sinon pour la création d’un post spécifique, je me posais la question
Pas tres habitué a ces echanges via le forum