Bien, donc il s’agirait de te connecter et de lancer les commandes qui permettent de prendre l’environnement pyenv en compte:
export PYENV_ROOT="/var/www/html/plugins/mymodbus/ressources/_pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
Puis de vérifier déjà 2 choses :
python3 --version
cd ~www-data/html/plugins/mymodbus/ressources/mymodbusd/
python3 --version
Normalement tu vas obtenir ça :
root@Jeedom-dev:~# python3 --version
Python 3.9.2
root@Jeedom-dev:~# cd ~www-data/html/plugins/mymodbus/ressources/mymodbusd/
root@Jeedom-dev:/var/www/html/plugins/mymodbus/ressources/mymodbusd# python3 --version
Python 3.9.16
root@Jeedom-dev:/var/www/html/plugins/mymodbus/ressources/mymodbusd#
Dans ce répertoire, tu vois que la version de python3 est différente, c’est parce que ce répertoire est configuré pour appeler l’environnement pyenv installé avec le plugin. Mais c’est un détail.
Tu peux lancer un interpréteur python3 :
python3
Pour quitter cet interpréteur, tu peux faire la combinaison CTRL+D ou lancer la commande exit()
, tu retourneras dans le terminal shell.
Lecture
Maintenant, pour tester la lecture (dans un premier temps) (tu peux copier plusieurs lignes et les coller dans le terminal):
from pymodbus.client import ModbusTcpClient
from pymodbus.framer.socket_framer import ModbusSocketFramer
from pymodbus.payload import (BinaryPayloadDecoder, BinaryPayloadBuilder)
client = ModbusTcpClient(host='192.168.0.230', port=502, framer=ModbusSocketFramer)
client.connect()
reponse = client.read_holding_registers(address=54, count=1, slave=0)
decoder = BinaryPayloadDecoder.fromRegisters(reponse.registers, '>', '>')
decoder.decode_16bit_int()
La dernière ligne devrait retourner une valeur qui correspond à ce que tu as au registre 54.
Puis on ferme la connexion proprement :
client.close()
Ecriture
Il faut d’abord préparer les données à écrire (on veut écrire 100 à l’adresse 54) :
builder = BinaryPayloadBuilder(byteorder='>', wordorder='>')
builder.add_16bit_int(100)
registers = builder.to_registers()
Ensuite on se reconnecte et on écrit :
client.connect()
client.write_register(address=54, value=registers[0], slave=0)
client.close()