Bienvenue sur le forum de la ZiGate !
Ici, nous échangeons sur les produits ZiGate (matériellement) et les firmware.
Pour que vous puissiez gagner du temps, je vous conseille de visiter, dans un premier temps, les forums et documentations des plugins et box domotique que vous avez choisi :
Jeedom :
Forum : https://community.jeedom.com/
Plugin ZiGate : https://github.com/Jeedom-Zigate/jeedom-plugin-zigate
Plugin Abeille : https://github.com/KiwiHC16/Abeille + http://kiwihc16.free.fr/
Domoticz :
Forum Francophone: https://easydomoticz.com/forum/viewforum.php?f=28
Forum Anglophone: https://www.domoticz.com/forum/viewforum.php?f=68
Développeur: @pipiche38 disponible sur keybase.io en chat
EEdomus :
Forum : https://forum.eedomus.com/
Home-assistant :
Plugin : https://github.com/doudz/homeassistant-zigate
Zigpy : https://www.home-assistant.io/integrations/zha/
PiZigate FW 3.1c et erreurs de CRC
Citation de Tcharp38 le 5 mai 2020, 16 h 00 minSalut
Je ne comprends pas comment je peux avoir des erreurs de CRC avec un PiZigate (FW 3.1c mais idem 3.1b)
J'arrive à reproduire ce problème de maniere systématique en mode INCLUSION d'un périph Xiaomi (Detecteur de luminosité). Apres l'inclusion ca semble se calmer. Je ne vois plus de pbs de CRC.
[2020-05-05 15:46:11][debug] Reçu: "80000005921503010000" [2020-05-05 15:46:12][debug] Reçu: "80000005951504010000" [2020-05-05 15:46:12][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:12][debug] ERREUR CRC: calc=0xa5, att=0x95, mess=8102001f9500...e4 [2020-05-05 15:46:12][debug] Reçu: "8102001f95000a870100000005004200126c756d692e73656e5f696c6c2e6d676c31e4" [2020-05-05 15:46:12][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:12][debug] Reçu: "8102000d8e010a87010000001086ff0000e4" [2020-05-05 15:46:13][debug] Reçu: "80000005810005010000" [2020-05-05 15:46:13][debug] Reçu: "800000052600e6004500" [2020-05-05 15:46:13][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:13][debug] ERREUR CRC: calc=0xa7, att=0x97, mess=8102001f9702...e4 [2020-05-05 15:46:13][debug] Reçu: "8102001f97020a870100000005004200126c756d692e73656e5f696c6c2e6d676c31e4" [2020-05-05 15:46:14][debug] Reçu: "80000005820006010000"A noter que lors de mes essais j'ai l'impression qu'il y a de temps en temps des erreurs de lecture du port.
Des idées ? Des suggestions ?
Merci
Salut
Je ne comprends pas comment je peux avoir des erreurs de CRC avec un PiZigate (FW 3.1c mais idem 3.1b)
J'arrive à reproduire ce problème de maniere systématique en mode INCLUSION d'un périph Xiaomi (Detecteur de luminosité). Apres l'inclusion ca semble se calmer. Je ne vois plus de pbs de CRC.
[2020-05-05 15:46:11][debug] Reçu: "80000005921503010000" [2020-05-05 15:46:12][debug] Reçu: "80000005951504010000" [2020-05-05 15:46:12][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:12][debug] ERREUR CRC: calc=0xa5, att=0x95, mess=8102001f9500...e4 [2020-05-05 15:46:12][debug] Reçu: "8102001f95000a870100000005004200126c756d692e73656e5f696c6c2e6d676c31e4" [2020-05-05 15:46:12][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:12][debug] Reçu: "8102000d8e010a87010000001086ff0000e4" [2020-05-05 15:46:13][debug] Reçu: "80000005810005010000" [2020-05-05 15:46:13][debug] Reçu: "800000052600e6004500" [2020-05-05 15:46:13][debug] Reçu: "801100071a000a8701000000" [2020-05-05 15:46:13][debug] ERREUR CRC: calc=0xa7, att=0x97, mess=8102001f9702...e4 [2020-05-05 15:46:13][debug] Reçu: "8102001f97020a870100000005004200126c756d692e73656e5f696c6c2e6d676c31e4" [2020-05-05 15:46:14][debug] Reçu: "80000005820006010000"
A noter que lors de mes essais j'ai l'impression qu'il y a de temps en temps des erreurs de lecture du port.
Des idées ? Des suggestions ?
Merci
Citation de zigate le 7 mai 2020, 10 h 34 minBonjour,
difficile de vous aider sans le code source... apparemment vous utilisez une librairie développée vous-même.
Il n'y a pas de problèmes de ce type sur les autres librairies. Je ne pense pas que le problème soit du côté de la ZiGate.
Fred
Bonjour,
difficile de vous aider sans le code source... apparemment vous utilisez une librairie développée vous-même.
Il n'y a pas de problèmes de ce type sur les autres librairies. Je ne pense pas que le problème soit du côté de la ZiGate.
Fred
Citation de Tcharp38 le 7 mai 2020, 14 h 45 minSalut Fred
Le code est un code PHP assez simple et ressemble à ca. J'ai viré des commentaires ou autres "print" pour simplifier.
Il est le même pendant l'inclusion et hors inclusion. C'est pourquoi je laisse quand meme la possibilité d'un souci caché.
Résumé des manips
- Err de CRC pendant l'inclusion capteur luminosité Xiaomi sur PiZigate 3.1c
- Idem sur une autre PiZigate 3.1c
- Pas visible sur une Zigate USB 3.1c
- Les erreurs sont à priori presentes pendant l'inclusion seulement
<?php $arg1 = $argv[1]; // Zigate name (ex: Abeille1) $serial = $argv[2]; // Zigate port (ex: /dev/ttyUSB0) $abeille = (int)substr($arg1, 7); // Zigate number (ex: 1) exec(system::getCmdSudo().' chmod 777 '.$serial.' > /dev/null 2>&1'); _exec("stty -F ".$serial." sane", $out); _exec("stty -F ".$serial." speed 115200 cs8 -parenb -cstopb -echo raw", $out); $f = fopen($serial, "r"); if ($f == FALSE) { /* Error message */ exit(4); } stream_set_blocking($f, TRUE); // Should be blocking read but is it default ? $transcode = false; $trame = ""; // Transcoded message from Zigate $step = "WAITSTART"; $ecrc = 0; // Expected CRC $ccrc = 0; // Calculated CRC $byteIdx = 0; // Byte number while (true) { $byte = fread($f, 01); if ($byte == FALSE) { /* An error occured. Why ? */ continue; } $byteS = bin2hex($byte); // String format of $byte if ($step == "WAITSTART") { /* Waiting for "01" start byte. Bytes outside 01..03 markers are unexpected. */ if ($byteS != "01") { $trame .= $byteS; // Unexpected outside 01..03 markers => error } else { /* "01" start found */ if ($trame != "") /* Error message */ $trame = ""; $step = "WAITEND"; $byteIdx = 1; // Next byte is index 1 $ccrc = 0; } } else { /* Waiting for "03" end byte */ if ($byteS == "03") { if ($ccrc != $ecrc) daemonlog('error', 'ERREUR CRC: calc=0x'.dechex($ccrc).', att=0x'.dechex($ecrc).', mess='.substr($trame, 0, 12).'...'.substr($trame, -2, 2)); /* Putting msg in queue */ /* ... */ $trame = ""; // Already transmitted or displayed $step = "WAITSTART"; } else { if ($byteS == "02") { $transcode = true; // Next char to be transcoded } else { if ($transcode) { $byteS = sprintf("%02x", (hexdec($byteS) ^ 0x10)); $transcode = false; } $trame .= $byteS; if ($byteIdx == 5) $ecrc = hexdec($byteS); // Byte 5 is expected CRC else $ccrc = $ccrc ^ hexdec($byteS); $byteIdx++; } } } } fclose($f); ?>
Salut Fred
Le code est un code PHP assez simple et ressemble à ca. J'ai viré des commentaires ou autres "print" pour simplifier.
Il est le même pendant l'inclusion et hors inclusion. C'est pourquoi je laisse quand meme la possibilité d'un souci caché.
Résumé des manips
- Err de CRC pendant l'inclusion capteur luminosité Xiaomi sur PiZigate 3.1c
- Idem sur une autre PiZigate 3.1c
- Pas visible sur une Zigate USB 3.1c
- Les erreurs sont à priori presentes pendant l'inclusion seulement
<?php $arg1 = $argv[1]; // Zigate name (ex: Abeille1) $serial = $argv[2]; // Zigate port (ex: /dev/ttyUSB0) $abeille = (int)substr($arg1, 7); // Zigate number (ex: 1) exec(system::getCmdSudo().' chmod 777 '.$serial.' > /dev/null 2>&1'); _exec("stty -F ".$serial." sane", $out); _exec("stty -F ".$serial." speed 115200 cs8 -parenb -cstopb -echo raw", $out); $f = fopen($serial, "r"); if ($f == FALSE) { /* Error message */ exit(4); } stream_set_blocking($f, TRUE); // Should be blocking read but is it default ? $transcode = false; $trame = ""; // Transcoded message from Zigate $step = "WAITSTART"; $ecrc = 0; // Expected CRC $ccrc = 0; // Calculated CRC $byteIdx = 0; // Byte number while (true) { $byte = fread($f, 01); if ($byte == FALSE) { /* An error occured. Why ? */ continue; } $byteS = bin2hex($byte); // String format of $byte if ($step == "WAITSTART") { /* Waiting for "01" start byte. Bytes outside 01..03 markers are unexpected. */ if ($byteS != "01") { $trame .= $byteS; // Unexpected outside 01..03 markers => error } else { /* "01" start found */ if ($trame != "") /* Error message */ $trame = ""; $step = "WAITEND"; $byteIdx = 1; // Next byte is index 1 $ccrc = 0; } } else { /* Waiting for "03" end byte */ if ($byteS == "03") { if ($ccrc != $ecrc) daemonlog('error', 'ERREUR CRC: calc=0x'.dechex($ccrc).', att=0x'.dechex($ecrc).', mess='.substr($trame, 0, 12).'...'.substr($trame, -2, 2)); /* Putting msg in queue */ /* ... */ $trame = ""; // Already transmitted or displayed $step = "WAITSTART"; } else { if ($byteS == "02") { $transcode = true; // Next char to be transcoded } else { if ($transcode) { $byteS = sprintf("%02x", (hexdec($byteS) ^ 0x10)); $transcode = false; } $trame .= $byteS; if ($byteIdx == 5) $ecrc = hexdec($byteS); // Byte 5 is expected CRC else $ccrc = $ccrc ^ hexdec($byteS); $byteIdx++; } } } } fclose($f); ?>
Citation de Tcharp38 le 7 mai 2020, 15 h 38 minUne autre info. Je n'en ai pas parlé jusque la mais j'ai constaté que chaque fois qu'il y a une erreur CRC, il y a eu une erreur de lecture (fread) dans la trame.
J'ai implémenté une trace permettant de montrer à quel endroit dans la trame (XX) l'erreur apparait. Et c'est plutot bien stable.En esperant que ca t'inspire des suggestions.
[2020-05-07 15:30:56][debug] Reçu: "8045000787c60039120101a8" [2020-05-07 15:30:56][error] ERREUR CRC: calc=0x4f, att=0x7f, mess=8102001f7f00...a8 [2020-05-07 15:30:56][debug] Reçu: "8102001f7f0039120100000005004200126c756d692e73656e5f696c6c2e6d676c31a8" [2020-05-07 15:30:56][debug] ERR : "8102001f7f0039120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31a8" [2020-05-07 15:30:57][debug] Reçu: "800000050700c7004500" ...[2020-05-07 15:30:58][debug] Reçu: "80000005981509010000" [2020-05-07 15:30:58][error] ERREUR CRC: calc=0x50, att=0x60, mess=8102001f6006...b1 [2020-05-07 15:30:58][debug] Reçu: "8102001f600639120100000005004200126c756d692e73656e5f696c6c2e6d676c31b1" [2020-05-07 15:30:58][debug] ERR : "8102001f600639120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31b1" [2020-05-07 15:30:58][debug] Reçu: "8102000d7b073912010000001086ff0000b1" [2020-05-07 15:30:58][error] ERREUR CRC: calc=0x41, att=0x71, mess=8102001f7108...ae [2020-05-07 15:30:58][debug] Reçu: "8102001f710839120100000005004200126c756d692e73656e5f696c6c2e6d676c31ae" [2020-05-07 15:30:58][debug] ERR : "8102001f710839120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31ae" [2020-05-07 15:30:59][debug] Reçu: "800000058e000a010000" ...[2020-05-07 15:31:26][debug] Reçu: "8102000d542d3912010000001086ff0000b4" [2020-05-07 15:31:27][debug] Reçu: "80000005ab002f010000" [2020-05-07 15:31:27][error] ERREUR CRC: calc=0x91, att=0xa1, mess=80000005a115...00 [2020-05-07 15:31:27][debug] Reçu: "80000005a115010000" [2020-05-07 15:31:27][debug] ERR : "80000005a115XX010000" [2020-05-07 15:31:27][debug] Reçu: "8043001883d700391212010104010601040000040000030001010003b4" [2020-05-07 15:31:28][debug] Reçu: "80000005b50031010000"
Une autre info. Je n'en ai pas parlé jusque la mais j'ai constaté que chaque fois qu'il y a une erreur CRC, il y a eu une erreur de lecture (fread) dans la trame.
J'ai implémenté une trace permettant de montrer à quel endroit dans la trame (XX) l'erreur apparait. Et c'est plutot bien stable.
En esperant que ca t'inspire des suggestions.
[2020-05-07 15:30:56][debug] Reçu: "8045000787c60039120101a8" [2020-05-07 15:30:56][error] ERREUR CRC: calc=0x4f, att=0x7f, mess=8102001f7f00...a8 [2020-05-07 15:30:56][debug] Reçu: "8102001f7f0039120100000005004200126c756d692e73656e5f696c6c2e6d676c31a8" [2020-05-07 15:30:56][debug] ERR : "8102001f7f0039120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31a8" [2020-05-07 15:30:57][debug] Reçu: "800000050700c7004500" ...
[2020-05-07 15:30:58][debug] Reçu: "80000005981509010000" [2020-05-07 15:30:58][error] ERREUR CRC: calc=0x50, att=0x60, mess=8102001f6006...b1 [2020-05-07 15:30:58][debug] Reçu: "8102001f600639120100000005004200126c756d692e73656e5f696c6c2e6d676c31b1" [2020-05-07 15:30:58][debug] ERR : "8102001f600639120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31b1" [2020-05-07 15:30:58][debug] Reçu: "8102000d7b073912010000001086ff0000b1" [2020-05-07 15:30:58][error] ERREUR CRC: calc=0x41, att=0x71, mess=8102001f7108...ae [2020-05-07 15:30:58][debug] Reçu: "8102001f710839120100000005004200126c756d692e73656e5f696c6c2e6d676c31ae" [2020-05-07 15:30:58][debug] ERR : "8102001f710839120100000005004200126c756d692e73656e5f696c6c2e6d676cXX31ae" [2020-05-07 15:30:59][debug] Reçu: "800000058e000a010000" ...
[2020-05-07 15:31:26][debug] Reçu: "8102000d542d3912010000001086ff0000b4" [2020-05-07 15:31:27][debug] Reçu: "80000005ab002f010000" [2020-05-07 15:31:27][error] ERREUR CRC: calc=0x91, att=0xa1, mess=80000005a115...00 [2020-05-07 15:31:27][debug] Reçu: "80000005a115010000" [2020-05-07 15:31:27][debug] ERR : "80000005a115XX010000" [2020-05-07 15:31:27][debug] Reçu: "8043001883d700391212010104010601040000040000030001010003b4" [2020-05-07 15:31:28][debug] Reçu: "80000005b50031010000"
Citation de Tcharp38 le 9 juin 2020, 15 h 15 minCe pb peut être cloturé.
Le souci semble venir de mon code de check suivant
$byte = fread($f, 01); if ($byte == FALSE) { /* An error occured. Why ? */ continue; }
Ce pb peut être cloturé.
Le souci semble venir de mon code de check suivant
$byte = fread($f, 01); if ($byte == FALSE) { /* An error occured. Why ? */ continue; }