Page 2 sur 3

Re: protocole Modbus

Publié : 10 déc. 2017, 19:33
par papoo
fonctionne correctement chez moi
as tu 3 slash après script:

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/cde_modbus.py 201 1
?

Re: protocole Modbus

Publié : 10 déc. 2017, 19:58
par papoo
vinz276 a écrit :Bonjour a tous,
J'arrive sous Domoticz à écrire des bits sur un automate en modbus via un script python mais je ne vois pas comment lire les entrée et à les écrire sur un capteur virtuel sou s Domoticz. Si quelqu'un à une idée, je suis preneur.
Merci
pour un compteur en modbus tcp à l'adresse 192.168.1.200, registres (16 bits) 204 et 205 (204,2)

Code : Tout sélectionner

#domoticz settings
domoticz_host           = '192.168.1.240'    # Url domoticz
domoticz_port           = '8080'            # port
domoticz_url            = 'json.htm'        # Ne pas modifier

idx_compteur1 = ''

from pymodbus.client.sync import ModbusTcpClient
import urllib, urllib2

client = ModbusTcpClient('192.168.1.200')
client.connect()
result = client.read_input_registers(204,2) # Lire 2 compteurs 16 bits  adresse de début 204 (16 Least et 16 Most)
compteur1 = ((result.registers[0]*65536)+result.registers[1]) # (Least*65536)+ Most
print compteur1

client.close()
  
if idx_compteur1 != None: 
    #uploading values to domoticz 
    url = "http://" + domoticz_host + ":" + domoticz_port + "/" + domoticz_url + "?type=command&param=udevice&idx=" + idx_compteur1 + "&nvalue=0&svalue=" + str(compteur1)
    urllib2.urlopen(url , timeout = 5) 

Re: protocole Modbus

Publié : 10 déc. 2017, 20:47
par bonebuster
erci

J'ai trouvé en fait par rapport au tuto la bonne rédaction de la commande script est :

script:///usr/bin/python /home/pi/domoticz/scripts/python/cde_modbus.py 0 1 (pour mettre a 1 l'adresse 0)

c'est différent du tuto qui doit être un peu ancien ?

ça marche super bien avec des sorties déportés industriels type Wago, Phoenix contact, ou Turck

Re: protocole Modbus

Publié : 10 déc. 2017, 20:49
par papoo
bonebuster a écrit :
l'étape suivante serait de lire l'état d'une entrée, et encore lire un registre (entier) d'une entrée analogique
mais il faut pouvoir interroger régulièrement le bit ou le registre et ça ...
un script_time.py avec le code de mon post au dessus fonctionne très bien

Re: protocole Modbus

Publié : 14 déc. 2017, 21:02
par bonebuster
papoo a écrit :
bonebuster a écrit :
l'étape suivante serait de lire l'état d'une entrée, et encore lire un registre (entier) d'une entrée analogique
mais il faut pouvoir interroger régulièrement le bit ou le registre et ça ...
un script_time.lua avec le code de mon post au dessus fonctionne très bien
j'ai besoin de lire 4 entrées
cette commande est-elle correct ? : client.read_coils(adresse, 4)

et comment commencer un evenement LUA et intégrer ma commande modbus ?

(je débute en LUA, il faut commencer au début pour m'expliquer)

Merci d'avance

Re: protocole Modbus

Publié : 14 déc. 2017, 22:54
par papoo
bonebuster a écrit : j'ai besoin de lire 4 entrées
cette commande est-elle correct ? : client.read_coils(adresse, 4)
seulement si les adresses 16 bits que tu souhaites lire sont contigues
exemple : si ta première adresse est 200, tu va lire avec cette commande les adresses 200, 202, 204, 206
attention, si il n'y a que 3 adresses de lisibles, cela provoquera une erreur et la requete ne retournera aucun résultat.
il faut donc bien étudier la table modbus pour ne tenter de lire que les adresses existantes

Re: protocole Modbus

Publié : 15 déc. 2017, 07:07
par bonebuster
Bonjour

Mon équipement accepte les commandes MODBUS accepte les commandes suivantes (4 entrés/4sorties exactement 4 bits lecture/4 bits écriture ou encore 2 mots)

01 Lecture de sorties (bit)
02 Lecture d'entrées (bit)
03 Lecture de n mots
04
05 Ecriture d'une sortie (bit)
06 Ecriture de un Mot
...

j'arrive bien a écrire les sorties via ecriture de bits rr = client.read_coils(adresse, 1) (le module accepte aussi par ecrite d'un mot mais avec Domoticz c'est plus pratique un inter = une sortie)
par contre pour la lecture de l'état d'une entrée je ne peux pas utilise la commande client.read_input_registers(204,2) qui correspond a la commande modbus 03 car je juste létat binaire de capteur et pas une donnée.
et surtout comment lié le resultat a une varialble dans Domoticz ou un voyant virtuel ?

je vous l'ai dit je demarre (désolé)

Re: protocole Modbus

Publié : 26 févr. 2018, 17:53
par Tonio16
Bonsoir
Ce topic peut aider, non?

Tchao
Antoine

Re: protocole Modbus

Publié : 26 févr. 2018, 21:57
par papoo
@Tonio16, ton lien est invalide
tu parles peut etre de ce plugin pour lire du modbus?
http://www.domoticz.com/forum/viewtopic ... &start=100

@bonebuster
pour moi 03 c'est Read Holding Registers
et 04 Read Input Registers
que dis ta table modbus pour ton registre 204, holding ou input?

Re: protocole Modbus

Publié : 04 mars 2018, 18:59
par bonebuster
Bonjour

quelqu'un peut'il m'orienter
j'utilise ce script pour allumer un éclairage avec un automate aillant le protocol MODBUS TCP :
j'écris un bit a l'adresse 237

script:///usr/bin/python /home/pi/domoticz/scripts/python/cde_modbus_v350.py 237 1

avec le script cde_modbus.py avec l'adresse IP de mon automate
tout fonctionne et réagi bien malgré une erreur qui remonte dans les logs domoticz :

Error: Error executing script command (/usr/bin/python). returned: 256

quelqu'un a t'il un idée pour éviter cette erreur qui n'affecte pas le bon déroulement de ma commande modbus ?

Merci d'avance