protocole Modbus

Forum pour tous les autres protocoles : Enocean, X10, les cartes piface.razberry ...
Pour les questions concernant le choix de protocoles, merci d'utiliser le forum Les autres objets.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: protocole Modbus

Message 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
?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: protocole Modbus

Message 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) 
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
bonebuster
Messages : 22
Inscription : 12 nov. 2017, 08:54

Re: protocole Modbus

Message 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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: protocole Modbus

Message 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
Dernière modification par papoo le 21 janv. 2018, 22:11, modifié 1 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
bonebuster
Messages : 22
Inscription : 12 nov. 2017, 08:54

Re: protocole Modbus

Message 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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: protocole Modbus

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
bonebuster
Messages : 22
Inscription : 12 nov. 2017, 08:54

Re: protocole Modbus

Message 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é)
Tonio16
Messages : 349
Inscription : 13 oct. 2017, 17:00

Re: protocole Modbus

Message par Tonio16 »

Bonsoir
Ce topic peut aider, non?

Tchao
Antoine
Domoticz V2020.2 sous raspbian-Buster
Raspberry Pi B+ avec Clé Zigate 3.1d Plugin 4.11.011
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: protocole Modbus

Message 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?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
bonebuster
Messages : 22
Inscription : 12 nov. 2017, 08:54

Re: protocole Modbus

Message 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
Répondre