Bonjour,
Sur ma VM Synology de dev/test en V4.4.19, je m’apperçois que parfois une instruction checkAndUpdateCmd n’est pas prise en compte.
EDIT: il semblerait que ça viennede htmlstate, mais c’est en cours de résolution.
En détail : dans MyModbus, il est possible de faire un équipement de test qui va tester les registres d’une certaine plage. Les commandes sont créées automatiquement et sont gérées uniquement par le plugin dans ce cas (le mode test). Le démon lance les requêtes les unes derrière les autres avec un temps d’attente défini entre chaque lecture, le démon envoie pour chaque registre la valeur à Jeedom. Coté Jeedom, l’adresse de callback gère la réception des valeurs et lance checkAndUpdateCmd pour chaque commande avec la nouvelle valeur.
Lors de la sauvegarde, les commandes sont supprimées et recréées, leur valeur est donc vide.
Il arrive que cette valeur reste vide après le premier cycle alors que tout semble avoir été fait correctement par le plugin.
Santé de la VM de dev/test :
Les 2 plugins à mettre à jour sont ceux que je développe. Ce point n’est pas bloquant.
Le résultat :
Le plugin utilise la bibliothèque de Mips (et nebz ?) Jeedom-daemon-py
Log du démon en début de cycle :
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'read_downstream' Message received from daemon: {'read': {'eqId': '213'}}
[2025-04-03 21:39:05][DEBUG] : Connecting to 192.168.1.26:502.
[2025-04-03 21:39:05][DEBUG] : Connecting Chaudière
[2025-04-03 21:39:05][DEBUG] : Connected to Chaudière
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'trace_connect_callback' called with connected = True
[2025-04-03 21:39:05][DEBUG] : Chaudière: connection opened
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1000: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1000, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1000
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xe8 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[1], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1001: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1001, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1001
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x2 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xe9 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'send_test_result' launched for address = 1000
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'add_change' launched with payload = {'RegTest::213::1000': 1}
[2025-04-03 21:39:05][DEBUG] : MyModbusd: Message received from MyModbusClient Chaudière: {'add_change': {'RegTest::213::1000': 1}}
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x2 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x2 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[1], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1002: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1002, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1002
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x3 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xea 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'send_test_result' launched for address = 1001
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'add_change' launched with payload = {'RegTest::213::1001': 1}
[2025-04-03 21:39:05][DEBUG] : MyModbusd: Message received from MyModbusClient Chaudière: {'add_change': {'RegTest::213::1001': 1}}
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x3 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[1], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1003: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1003, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1003
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x4 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xeb 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'send_test_result' launched for address = 1002
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'add_change' launched with payload = {'RegTest::213::1002': 1}
[2025-04-03 21:39:05][DEBUG] : MyModbusd: Message received from MyModbusClient Chaudière: {'add_change': {'RegTest::213::1002': 1}}
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x4 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x4 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[1], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1004: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1004, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1004
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x5 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xec 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'send_test_result' launched for address = 1003
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'add_change' launched with payload = {'RegTest::213::1003': 1}
[2025-04-03 21:39:05][DEBUG] : MyModbusd: Message received from MyModbusClient Chaudière: {'add_change': {'RegTest::213::1003': 1}}
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x5 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x5 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x2
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[2], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
[2025-04-03 21:39:05][DEBUG] : Try sending to jeedom: {'RegTest': {'213': {'1000': 1, '1001': 1, '1002': 1, '1003': 1}}}
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' Modbus request for address 1005: ReadHoldingRegistersRequest(dev_id=1, transaction_id=0, address=1005, count=1, bits=[], registers=[], status=1)
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'run_loop' in test mode requesting read register address = 1005
[2025-04-03 21:39:05][DEBUG] : send: 0x0 0x6 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xed 0x0 0x1
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'send_test_result' launched for address = 1004
[2025-04-03 21:39:05][DEBUG] : Chaudière: 'add_change' launched with payload = {'RegTest::213::1004': 2}
[2025-04-03 21:39:05][DEBUG] : MyModbusd: Message received from MyModbusClient Chaudière: {'add_change': {'RegTest::213::1004': 2}}
[2025-04-03 21:39:05][DEBUG] : recv: 0x0 0x6 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x37 old_data: addr=None
[2025-04-03 21:39:05][DEBUG] : Processing: 0x0 0x6 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x0 0x37
[2025-04-03 21:39:05][DEBUG] : decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[55], status=1)
[2025-04-03 21:39:05][DEBUG] : Frame advanced, resetting header!!
On voit que la fonction add_change a été lancée pour les commandes 1000, 1001, 1002, 1003 et 1004. On voit aussi que le démon a tenté d’envoyer le payload {'RegTest': {'213': {'1000': 1, '1001': 1, '1002': 1, '1003': 1}}} à Jeedom.
Coté Jeedom, ce payload est bien arrivé :
8044|[2025-04-03 21:39:05] DEBUG : jeemymodbus.php: $input *{"RegTest":{"213":{"1000":1,"1001":1,"1002":1,"1003":1}}}* type: array
8045|[2025-04-03 21:39:05] DEBUG : jeemymodbus.php: Mise à jour équipement de test 'Chaudière'...
8046|[2025-04-03 21:39:05] DEBUG : jeemymodbus.php: Mise à jour cmd '1000' -> new value: '1'
8047|[2025-04-03 21:39:05] DEBUG : jeemymodbus.php: Mise à jour cmd '1001' -> new value: '1'
8048|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: Mise à jour cmd '1002' -> new value: '1'
8049|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: Mise à jour cmd '1003' -> new value: '1'
8050|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: $input *{"RegTest":{"213":{"1004":2,"1005":55,"1006":7,"1007":1,"1008":3,"1009":3,"1010":0,"1011":220,"1012":250,"1013":0,"1014":0,"1015":0,"1016":40,"1017":19,"1018":1,"1019":3,"1020":3,"1021":0,"1022":0,"1023":0,"1024":0,"1025":30,"1026":0,"1027":0,"1028":0,"1029":24,"1030":0,"1031":55,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":-1,"1038":-1,"1039":-1,"1040":-1,"1041":-1,"1042":-1,"1043":-1,"1044":-1,"1045":-1,"1046":-1,"1047":-1,"1048":-1,"1049":-1,"1050":1,"1051":1,"1052":1,"1053":1}}}* type: array
8051|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: Mise à jour équipement de test 'Chaudière'...
8052|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: Mise à jour cmd '1004' -> new value: '2'
8053|[2025-04-03 21:39:06] DEBUG : jeemymodbus.php: Mise à jour cmd '1005' -> new value: '55'
Dans le code :
if (is_object($cmd)) {
$cmd_name =$cmd->getName();
log::add('mymodbus', 'debug', "jeemymodbus.php: Mise à jour cmd '$cmd_name' -> new value: '$new_value'");
$eqlogic->checkAndUpdateCmd($cmd, $new_value);
Donc l’appel de checkAndUpdateCmd est bien fait, d’autant plus que dans les log event, on a :
1731|[2025-04-03 21:39:05] INFO : Evènement sur la commande [Aucun][Chaudière][1000] valeur : 1
1732|[2025-04-03 21:39:05] INFO : Evènement sur la commande [Aucun][Chaudière][1001] valeur : 1
1733|[2025-04-03 21:39:06] INFO : Evènement sur la commande [Aucun][Chaudière][1002] valeur : 1
1734|[2025-04-03 21:39:06] INFO : Evènement sur la commande [Aucun][Chaudière][1003] valeur : 1
1735|[2025-04-03 21:39:06] INFO : Evènement sur la commande [Aucun][Chaudière][1004] valeur : 2
1736|[2025-04-03 21:39:06] INFO : Evènement sur la commande [Aucun][Chaudière][1005] valeur : 55
Pourtant la valeur de la commande n’a pas été actualisée.
En actualisant la page, toutes les valeurs sont affichées :
Je n’ai rien modifié au code du plugin entre la première capture et la seconde, j’ai juste actualisé la page (et ça a mis trèèèès longtemps, brave a d’ailleurs proposé de forcer la fermeture de l’onglet).
Comme il semble que tout soit bien fait mais que l’affichage ait un soucis, je me permets de remonter ça.
A+
Michel


