Htmlstate parfois pas mis à jour dans la liste des commandes?

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

Salut,

Donc c’est juste le refresh de l’info sur la page qui n’est pas fait? La commande info est à jour?
Problème js du coup? Et encore probablement juste dans la liste des commandes.

Donc aucun lien avec le démon ni avec la fonction checkandupdate

Ps: nebz n’y est pour rien ni sur jeedom-daemon ni sur pyenv.lib d’ailleurs :wink:

Oui. Quand j’ai commencer à écrire le post, je mettai la fonction en cause et en cherchant les informations détaillées, je me suis rendu compte que ce n’était pas ça et je n’ai pas changé le titre.
→ Je corrige.

Je ne connais pas cette notion de « mise à jour d’une commande ». C’est quoi le principe STP ?

Sur une commande de temps en temps, alors que le code est le même pour toutes les commandes ?
Et oui, que dans la liste des commandes.

Peut-être dans la partie js (?) qui gère l’affichage de htmlstate ?
La colonne valeur est assez simple en terme de code :

    tr += ' <td>';
    tr += '   <span class="cmdAttr" data-l1key="htmlstate"></span>';
    tr += ' </td>';

PS: je savais que nebz avait participé au dev d’une des bibliothèques mais je ne savais plus laquelle et ne voulais pas qu’il se sente oublié si je ne le citais pas.

Rien de particulier, je voulais juste savoir la valeur de la commande était correct
Histoire de savoir si c’était vmt jeedom (le cache) ou l’affichage.
Si tu vas dans la config avancée sur la commande tu devrais voir (ou pas) la valeur. A vérifier lorsque celle-ci ne s’affiche pas dans la liste

Ah oui, j’avais vérifié ça aussi mais c’est vrai que je n’ai pas mis la capture. Oui, la valeur était visible dans la config de la commande. C’est d’ailleurs cette valeur-là qui a été affichée lors de l’actualisation de la page.