Problème sous PHP8.2 (et debian 12 bookworm) - Mymodbus bêta

Bonjour,

Je teste mymodbus (version bêta) sur debian 12 bookworm.
J’ai constaté les problèmes suivants :

  • au démarrage du démon, le log remonte le problème suivant : Erreur sur la fonction deamon_start du plugin : strtolower(): Argument #1 ($string) must be of type string, array given (je présume que c’est lié à la ligne 142 du fichier core/class/mymodbus.class.php)
  • le démon renvoie le message suivant (peut-être lié au problème précédent) :
Log mymodbus

0000|Process PAC Modbus:
0001|Traceback (most recent call last):
0002|File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/multiprocessing/process.py », line 314, in _bootstrap
0003|self.run()
0004|File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/multiprocessing/process.py », line 108, in run
0005|self._target(*self._args, **self._kwargs)
0006|File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 334, in run
0007|self.loop.run_until_complete(self.run_polling())
0008|File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/asyncio/base_events.py », line 654, in run_until_complete
0009|return future.result()
0010|^^^^^^^^^^^^^^^
0011|File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 361, in run_polling
0012|await self.read_all()
0013|File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 602, in read_all
0014|logging.debug('PyModbusClient: ’ + self.eqConfig[‹ name ›] + ’ read value for ’ + request[‹ name ›] + ’ (command id ’ + cmd_id + '): ’ + str(read_results[cmd_id]))

Merci pour le plugin, ça fonctionne globalement bien.

Bonjour Jean-Baptiste,

1. strtolower()

Ancien message à oublier (code de la version stable)

Je ne vois d’utilisation de strtolower() qu’à la ligne 115 :

	$result = exec('nohup ' . $cmd . ' >> ' . log::getPathToLog('mymodbus') . ' 2>&1 &');
	if (strpos(strtolower($result), 'error') !== false || strpos(strtolower($result), 'traceback') !== false) {
		log::add('mymodbus', 'error', $result);
		return false;
	}

Vous avez la dernière version bêta ?

Même en php8, la fonction exec() est sensée retourner la dernière ligne du retour de la commande. De type string, donc. strtolower() ne devrait pas poser de problème. Je n’ai pas encore de Jeedom sous debian12, je vais tester ça (je ne sais pas encore quand), mais vous êtes le premier à me remonter un problème de ce type, d’autres utilisateurs sous debian12 + jeedom 4.4 m’ont dit que ça fonctionnait correctement.

Merci pour la remontée, je modifierai prochainement

2. Message du démon

Est-ce un extrait sélectionné des log ?

Ca veut dire que le plugin fonctionne… Les erreurs des logs devraient être bloquantes…

Désolé, mais je me suis perdu, il manque des informations.

Que se passe-t-il au démarrage du démon avec les log en debug ?

A+
Michel

Bonjour,
Merci pour le retour.
Je me suis mal exprimé, le plugin fonctionne avec PHP7.4, pas PHP8.2. Les erreurs sont effectivement bloquantes.

1.
J’ai bien la dernière version bêta, j’ai même forcé une réinstallation depuis le centre de mise à jour. C’est étrange, j’ai cet item en ligne 142 :


La commande grep donne ce résultat :

sudo grep -ir strtolower
core/ajax/mymodbus.ajax.php:    $extension = strtolower(strrchr($fname, '.'));
core/class/mymodbus.class.php:    if (strpos(strtolower($result), 'error') !== false || strpos(strtolower($result), 'traceback') !== false) {

2.
En mode debug, il y le retour suivant (désolé, c’est assez peu lisible dans ce format) :

Log

[2024-04-08 20:58:02] INFO : mymodbusd: process re-run: PAC Modbus
[2024-04-08 20:58:02] DEBUG : PyModbusClient: PAC Modbus requests:{« 6545 »: {« last_value »: null, « name »: « Requ\u00eate FC04 », « type »: « info », « slave »: 10, « fct_modbus »: « 4 », « data_type »: « blob », « addr »: 21, « count »: 30, « freq »: 1, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6538 »: {« last_value »: null, « name »: « Erreur PAC », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 21, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6541 »: {« last_value »: null, « name »: « Code erreur PAC », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « string », « freq »: 1, « blobId »: « 6545 », « addr »: 22, « strlen »: 1, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6561 »: {« last_value »: null, « name »: « Req\u00eate FC03 », « type »: « info », « slave »: 10, « fct_modbus »: « 3 », « data_type »: « blob », « addr »: 1, « count »: 54, « freq »: 1, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6542 »: {« last_value »: null, « name »: « Sous-code d\u2019erreur d\u2019unit\u00e9 », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 23, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6543 »: {« last_value »: null, « name »: « Pompe de circulation », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 30, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6544 »: {« last_value »: null, « name »: « Compresseur », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 31, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6547 »: {« last_value »: null, « name »: « Chauffage appoint », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 32, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6548 »: {« last_value »: null, « name »: « D\u00e9sinfection », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 33, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6549 »: {« last_value »: null, « name »: « D\u00e9givrage », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 35, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6550 »: {« last_value »: null, « name »: « D\u00e9marrage \u00e0 chaud », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 36, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6551 »: {« last_value »: null, « name »: « Vanne 3 voies », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 37, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6552 »: {« last_value »: null, « name »: « Chauffage-Refroidissement », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 38, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6553 »: {« last_value »: null, « name »: « Temp\u00e9rature eau avant \u00e9changeur \u00e0 plaques », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 40, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6554 »: {« last_value »: null, « name »: « Temp\u00e9rature eau en sortie avant dispositif de chauffage en appoint », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 41, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6555 »: {« last_value »: null, « name »: « Temp\u00e9rature eau reprise », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 42, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6556 »: {« last_value »: null, « name »: « Temp\u00e9rature ECS », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 43, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6557 »: {« last_value »: null, « name »: « Temp\u00e9rature ext\u00e9rieure », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 44, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6558 »: {« last_value »: null, « name »: « Temp\u00e9rature du r\u00e9frig\u00e9rant liquide », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 45, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6559 »: {« last_value »: null, « name »: « D\u00e9bit », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 49, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6560 »: {« last_value »: null, « name »: « T\u00e9l\u00e9commande - temp\u00e9rature ambiante », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6545 », « addr »: 50, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6562 »: {« last_value »: null, « name »: « Consigne du chauffage eau en sortie », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 1, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6572 »: {« last_value »: null, « name »: « Commande consigne du chauffage eau en sortie », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 1, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6564 »: {« last_value »: null, « name »: « Mode de fonctionnement », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 3, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6565 »: {« last_value »: null, « name »: « Marche chauffage », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 4, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6573 »: {« last_value »: null, « name »: « Commande marche chauffage », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 4, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6566 »: {« last_value »: null, « name »: « Consigne du thermostat ambiant », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 6, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6574 »: {« last_value »: null, « name »: « Commande de consigne du thermostat ambiant », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 6, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6567 »: {« last_value »: null, « name »: « Mode silencieux », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 9, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6575 »: {« last_value »: null, « name »: « Commande du mode silencieux », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 9, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6568 »: {« last_value »: null, « name »: « Consigne temp\u00e9rature ECS », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 10, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6576 »: {« last_value »: null, « name »: « Commande de consigne temp\u00e9rature ECS », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « uint16 », « addr »: 10, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6569 »: {« last_value »: null, « name »: « Marche ECS », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 12, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6577 »: {« last_value »: null, « name »: « Commande de marche ECS », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 12, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6570 »: {« last_value »: null, « name »: « Booster ECS », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 13, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6578 »: {« last_value »: null, « name »: « Commande booster ECS », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 13, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 7261 »: {« last_value »: null, « name »: « M\u00e9thode de contr\u00f4le chauffage », « type »: « info », « slave »: 10, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 53, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 7262 »: {« last_value »: null, « name »: « Comande de la m\u00e9thode de contr\u00f4le chauffage », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int8-lsb », « addr »: 53, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 6571 »: {« last_value »: null, « name »: « Offset temp\u00e9rature mode TA », « type »: « info », « slave »: 0, « fct_modbus »: « fromBlob », « data_type »: « int16 », « freq »: 1, « blobId »: « 6561 », « addr »: 54, « byteorder »: « > », « wordorder »: « > », « repeat »: false}, « 7180 »: {« last_value »: null, « name »: « D\u00e9calage offset temp\u00e9rature mode TA », « type »: « action », « slave »: 10, « fct_modbus »: « 6 », « data_type »: « int16 », « addr »: 54, « byteorder »: « > », « wordorder »: « > », « repeat »: false}}
[2024-04-08 20:58:02] DEBUG : PyModbusClient: PAC Modbus client protocol is:serial
[2024-04-08 20:58:02] DEBUG : PyModbusClient: PAC Modbus connect called
[2024-04-08 20:58:02] DEBUG : PyModbusClient: PAC Modbus connecting…
[2024-04-08 20:58:02] DEBUG : Starting serial connection
[2024-04-08 20:58:02] DEBUG : Client connected to modbus server
[2024-04-08 20:58:02] INFO : Serial connected.
[2024-04-08 20:58:02] INFO : Connected to /dev/ttyUSB0
[2024-04-08 20:58:02] DEBUG : mymodbus::deamon_info
[2024-04-08 20:58:02] DEBUG : mymodbus::getDeamonLaunchable
[2024-04-08 20:58:02] DEBUG : mymodbus::getCompleteConfiguration
[2024-04-08 20:58:02] DEBUG : mymodbus::getEqConfiguration
[2024-04-08 20:58:02] DEBUG : mymodbus::getEqConfiguration
[2024-04-08 20:58:02] DEBUG : mymodbus::check_pyenv
[2024-04-08 20:58:02] DEBUG : mymodbus::deamon_info * daemon_info = ‹ {« state »:« ok »,« launchable »:« ok »} ›
[2024-04-08 20:58:03] DEBUG : send: 0xa 0x4 0x0 0x15 0x0 0x1e 0x60 0xbd
[2024-04-08 20:58:03] DEBUG : Adding transaction 10
[2024-04-08 20:58:03] DEBUG : recv: 0xa
[2024-04-08 20:58:03] DEBUG : Frame - [b’\n’] not ready
[2024-04-08 20:58:03] DEBUG : recv: 0x4 0x3c 0x0 0x0 0x2d 0x2d 0x7f 0xfe 0x7f 0xff 0x7f 0xff 0x7f 0xff 0x7f
[2024-04-08 20:58:03] DEBUG : Frame - [b’\x04<\x00\x00–\x7f\xfe\x7f\xff\x7f\xff\x7f\xff\x7f’] not ready
[2024-04-08 20:58:03] DEBUG : recv: 0xff 0x7f 0xff 0x7f 0xff 0x0 0x0 0x0 0x0 0x7f 0xfe 0x0 0x0 0x7f 0xff
[2024-04-08 20:58:03] DEBUG : Frame - [b’\xff\x7f\xff\x7f\xff\x00\x00\x00\x00\x7f\xfe\x00\x00\x7f\xff’] not ready
[2024-04-08 20:58:03] DEBUG : recv: 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x7f 0xff 0x12 0x8e 0x13 0xce
[2024-04-08 20:58:03] DEBUG : Frame - [b’\x00\x00\x00\x00\x00\x00\x00\x01\x7f\xff\x12\x8e\x13\xce’] not ready
[2024-04-08 20:58:03] DEBUG : recv: 0xe 0xce 0x13 0x38 0x4 0x4c 0xc 0xda 0x7f 0xff 0x7f 0xff 0x7f 0xff 0xff
[2024-04-08 20:58:03] DEBUG : Frame - [b’\x0e\xce\x138\x04L\x0c\xda\x7f\xff\x7f\xff\x7f\xff\xff’] not ready
[2024-04-08 20:58:03] DEBUG : recv: 0xc4 0x8 0xde 0x9c 0x35
[2024-04-08 20:58:03] DEBUG : Getting Frame - 0x4 0x3c 0x0 0x0 0x2d 0x2d 0x7f 0xfe 0x7f 0xff 0x7f 0xff 0x7f 0xff 0x7f 0xff 0x7f 0xff 0x7f 0xff 0x0 0x0 0x0 0x0 0x7f 0xfe 0x0 0x0 0x7f 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x1 0x7f 0xff 0x12 0x8e 0x13 0xce 0xe 0xce 0x13 0x38 0x4 0x4c 0xc 0xda 0x7f 0xff 0x7f 0xff 0x7f 0xff 0xff 0xc4 0x8 0xde
[2024-04-08 20:58:03] DEBUG : Factory Response[ReadInputRegistersResponse’: 4]
[2024-04-08 20:58:03] DEBUG : Frame advanced, resetting header!!
[2024-04-08 20:58:03] DEBUG : Getting transaction 10
[2024-04-08 20:58:03] DEBUG : Frame - [b’\xc4\x08\xde\x9c5’] not ready
[2024-04-08 20:58:03] DEBUG : [0, 11565, 32766, 32767, 32767, 32767, 32767, 32767, 32767, 0, 0, 32766, 0, 32767, 0, 0, 0, 1, 32767, 4750, 5070, 3790, 4920, 1100, 3290, 32767, 32767, 32767, 65476, 2270]
Process PAC Modbus:
Traceback (most recent call last):
File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/multiprocessing/process.py », line 314, in _bootstrap
self.run()
File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/multiprocessing/process.py », line 108, in run
self._target(*self._args, **self._kwargs)
File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 334, in run
self.loop.run_until_complete(self.run_polling())
File « /var/www/html/jeedom/plugins/pyenv/resources/pyenv/versions/3.11.8/lib/python3.11/asyncio/base_events.py », line 654, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 361, in run_polling
await self.read_all()
File « /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py », line 602, in read_all
logging.debug('PyModbusClient: ’ + self.eqConfig[‹ name ›] + ’ read value for ’ + request[‹ name ›] + ’ (command id ’ + cmd_id + '): ’ + str(read_results[cmd_id]))

TypeError: can only concatenate str (not "int") to str

Au démarrage du démon, j’ai ce log :

Log démarrage
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Onduleur Solax joined
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Waiting for PAC Modbus...
[2024-04-08 21:32:46] DEBUG  : mymodbusd: PAC Modbus joined
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Shutdown Mymodbus python daemon
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Removing PID file /tmp/mymodbusd.pid
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Shutdown
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Exit 0
[2024-04-08 21:32:50] DEBUG  : mymodbus::deamon_info
[2024-04-08 21:32:50] DEBUG  : mymodbus::getDeamonLaunchable
[2024-04-08 21:32:50] DEBUG  : mymodbus::getCompleteConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::check_pyenv
[2024-04-08 21:32:50] DEBUG  : mymodbus::deamon_info * daemon_info = '{"state":"nok","launchable":"ok"}'
[2024-04-08 21:32:56] DEBUG  : mymodbus::deamon_info
[2024-04-08 21:32:56] DEBUG  : mymodbus::getDeamonLaunchable
[2024-04-08 21:32:56] DEBUG  : mymodbus::getCompleteConfiguration
[2024-04-08 21:32:56] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:56] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:56] DEBUG  : mymodbus::check_pyenv
[2024-04-08 21:32:56] DEBUG  : mymodbus::deamon_info * daemon_info = '{"state":"nok","launchable":"ok"}'
[2024-04-08 21:33:01] DEBUG  : mymodbus::deamon_info
[2024-04-08 21:33:01] DEBUG  : mymodbus::getDeamonLaunchable
[2024-04-08 21:33:01] DEBUG  : mymodbus::getCompleteConfiguration
[2024-04-08 21:33:01] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:33:01] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:33:01] DEBUG  : mymodbus::check_pyenv
[2024-04-08 21:33:02] DEBUG  : mymodbus::deamon_info * daemon_info = '{"state":"nok","launchable":"ok"}'
[2024-04-08 21:33:07] DEBUG  : mymodbus::deamon_info
[2024-04-08 21:33:07] DEBUG  : mymodbus::getDeamonLaunchable
[2024-04-08 21:33:07] DEBUG  : mymodbus::getCompleteConfiguration
[2024-04-08 21:33:07] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:33:07] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:33:07] DEBUG  : mymodbus::check_pyenv
[2024-04-08 21:33:07] DEBUG  : mymodbus::deamon_info * daemon_info = '{"state":"nok","launchable":"ok"}'

A+
Jean-Baptiste

1. strtolower()

ok, je modifierai

2. Message du démon

Le mieux pour poster des log ici c’est le « Texte préformaté » (pas « Masquer le texte »)

Ce que vous décrivez comme log de démarrage est en fait le log d’arrêt du démon :

[2024-04-08 21:32:46] DEBUG  : mymodbusd: Onduleur Solax joined
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Waiting for PAC Modbus...
[2024-04-08 21:32:46] DEBUG  : mymodbusd: PAC Modbus joined
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Shutdown Mymodbus python daemon
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Removing PID file /tmp/mymodbusd.pid
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Shutdown
[2024-04-08 21:32:46] DEBUG  : mymodbusd: Exit 0

Les groupes suivants :

[2024-04-08 21:32:50] DEBUG  : mymodbus::deamon_info
[2024-04-08 21:32:50] DEBUG  : mymodbus::getDeamonLaunchable
[2024-04-08 21:32:50] DEBUG  : mymodbus::getCompleteConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::getEqConfiguration
[2024-04-08 21:32:50] DEBUG  : mymodbus::check_pyenv
[2024-04-08 21:32:50] DEBUG  : mymodbus::deamon_info * daemon_info = '{"state":"nok","launchable":"ok"}'

Viennent de l’appel de deamon_info() pour rafraichir la page Jeedom. "state":"nok" signifie que le démon n’est pas exécuté.

Je vais donc attendre la prochaine mise à jour du plugin.

Merci

Bonjour,

Suite à la mise à jour du plugin :

1. strtolower()

Problème résolu, merci.

2. Message du démon

Toujours en erreur. Effectivement bloquant.
Je ne comprends pas, pyenv4Jeedom fonctionne correctement et s’est bien installé.
Version de pyenv : 2.3.36, python 3.11.8, pymodbus 3.2.2.
Le message de debug n’est pas très explicite, je ne vois pas ce qui ne fonctionne pas.
Comment obtenir plus d’informations ?

Bonjour,

Pour strlower(), ok c’est résolu, on n’en parle plus.

Pour le message du démon, donnez-moi SVP un maximum d’info :

  • export du template de l’équipement
  • les logs en debug lors d’un (re)démarrage du démon
  • comment reproduire l’erreur
  • tout ce qui vous passe par la tête
  • tout ce qui pourrait m’aider à comprendre ce qui ne va pas

A+
Michel

edit:
Proposition :
Dans le fichier /var/www/html/jeedom/plugins/mymodbus/ressources/mymodbusd/mymodbus.py, ligne 602, au lieu de

logging.debug('PyModbusClient: *' + self.eqConfig['name'] + '* read value for ' + request['name'] + ' (command id ' + cmd_id + '): ' + str(read_results[cmd_id]))

Essayez de mettre :

logging.debug('PyModbusClient: *' + self.eqConfig['name'] + '* read value for ' + request['name'] + ' (command id ' + str(cmd_id) + '): ' + str(read_results[cmd_id]))

Bonjour,

Avec la modification proposée, il n’y a plus d’erreur dans les logs du démon.
Par contre, seule les valeurs de type string sont mises à jour (pas les entiers - je n’utilise des FC03 et FC04).
Je transmets le fichier de log en mode debug, pas sûr que ça puisse beaucoup aider.
mymodbus.txt (48,1 Ko)
Merci.

Vous pouvez poster la config des commandes SVP ?
Sous forme de captures d’écran ou d’export template, histoire que je sache ce que vous faites avec les lecture de plages de registres.

Ok, ci-joint les templates :
Copie_PAC.json.txt (55,7 Ko)
Copie_onduleur.json.txt (61,6 Ko)

Je peux voir les log en mode debug lors du redémarrage du démon SVP ?

Les liaisons série sont faites avec la même interface ?
Si oui, c’est très surprenant que ça fonctionne.

Non, c’est une interface par équipement (en attendant l’évolution du plugin).
Je vous retransmets le log au démarrage en mode debug (c’est assez indigeste).
mymodbus.txt (74,9 Ko)

Il n’y a que des traces de l’équipement « PAC Modbus », c’est normal ? L’autre équipement est désactivé ?

edit: Est-ce que sans passer par une plage de registres la lecture des entiers fonctionne ?

Bonjour,
Oui, c’est normal. L’autre équipement est un onduleur solaire, qui ne répond donc pas la nuit. Je l’avais désactivé afin qu’il ne pollue pas les logs.
Je confirme que la lecture des entiers fonctionne sans passer pas une plage de registre. Ça fonctionnait précédemment - je ne saurais indiquer les versions python et PHP pour lesquelles ça fonctionnait.
Edit : une idée comme une autre, est-ce qu’il est possible de spécifier et de tester une version précédente de python avec le plugin pyenv ?

Pour cela, il faut modifier le Plugin MyModbus