Avec Domoticz, pilotez vos sorties Modbus via un bouton enocean..
Modbus est un protocole de communication très utilisé dans le domaine de l’automatisme, par les automates BECKHOFF, WAGO, SCHNEIDER , les CTA ou les VMC communicantes etc..
enOcean , une technologie de boutons ou du capteurs sans fil , sans pile.
Dans ce post, vous trouverez un exemple pour piloter vos sorties Modbus – TCP (COIL) via un bouton enOcean ou depuis Domoticz
Pré-requis:
Installer PyModbus sur le Raspberry
- sudo apt-get update
- sudo apt-get install python-dev
- sudo apt-get install python-pip
- pip install pymodbus
- sudo pip install requests
Depuis la page “Interrupteurs ” dans Domoticz, appuyez sur le bouton “Détection Auto” et appuyer sur le bouton enOcean
Ensuite créez un bouton “Dummy” de la façon suivante
Recherchez l’ IDx du bouton “Dummy” dans la page “Dispositifs” , ici pour l’exemple Idx 691
- Déposer dans le répertoire : /domoticz/scripts/python le script suivant cde_modbus.py (qu’il faut dé-zipper avant de le transférer !)
- N’oublier pas de changer l’adresse IP par l’adresse IP de Domoticz, le port , le login Domoticz et le mot de passe Domoticz
domoticz_ip=’192.168.0.xx
domoticz_port=’8080′
user=’xxxx’
password=’xxxx’
Ensuite mettre les droits sur le fichier programme cde_modbus.py (chmod)
- sudo chmod 775 cde_modbus.py
et enfin, il faut paramétrer “Action On” dans le bouton enOcean précédemment créé
Ce script est paramétrable par le biais des arguments passées en ligne de commande lors de son exécution.
Arg1 : Adresse de votre sortie Modbus TCP
Arg2 : 0 =forcer à 0 , 1= forcer à 1 , 2 = inverser l’état de la sortie
Arg3 : IDx de l’organe Domoticz
Action On
script:///home/pi/domoticz/scripts/python/bp_enocean.py 32768 2 691
Ensuite
il faut paramétrer l’ Action On et l’Action Off sur le bouton virtuel (DUMMY)
Action On
script:///home/pi/domoticz/scripts/python/cde_modbus.py 32768 1 691
Action Off
script:///home/pi/domoticz/scripts/python/cde_modbus.py 32768 0 691
C’est ce dernier bouton qu’il faut utiliser pour commander depuis Domoticz votre relais Modbus.
Avec cette solution, il sera donc possible de piloter votre sortie Modbus TCP par DOMOTICZ ou par le bouton enOcean, avec une animation qui reflète l’état de la sortie.
En espérant que cela vous sera utile! Bon bricolage.
Le code source du programme cde_modbus.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
#!/usr/bin/python # -*- coding: utf-8 -*- # Version 1.0 # Développé par MyRFX # 01 Mars 2016 # cde_modbus.py arg:adresse arg:valeur arg:IDx # adresse = adresse modbus # valeur = 0 forcé le coil à 0 / 1 forcé le coil à 1 / 2 inversé le coil apres lecture de l'état # IDx = IDx de l'interrupteur Domoticz pour une commanuelle depuis Domoticz import sys import requests from pymodbus.client.sync import ModbusTcpClient as ModbusClient from requests.auth import HTTPBasicAuth #ouverture de la communication Modbus #l'adresse de l'automate Serveur Modbus TCP client = ModbusClient('192.168.0.142') #adresse de domoticz domoticz_ip='192.168.0.44' #port de domoticz domoticz_port='8080' #user login Domoticz user='xxx' #mot de passe Domoticz password='xxxx' #si le nombre d'argument est supérieur à 2 prise en compte de la commande via Modbus TCP if len(sys.argv) > 2: # argument 1 -> l'adresse du coil sur le serveur adresse = int(sys.argv[1]) # argument 2 -> commande via bouton encoean 0= OFF 1= ON 2=Toogle valeur = int(sys.argv[2]) #argument 3 -> ID de l'interrupteur DOMOTICZ pour la commande depuis Domoticz IDx = str(sys.argv[3]) #en mode bouton enOcean donc inversion de la sortie Modbus #Lecture de l'état de la sortie avant de l'inverser if (valeur == 2): #lecture de l'état avant inversion de la commande rr = client.read_coils(adresse, 1) # inversion en fonction de l'état if (rr.bits[0] == 1): #Forcage à 0 de la sortie Modbus rq = client.write_coil(adresse, 0) #mise à jour de l'état du bouton de commande json_url1='/json.htm?type=command&param=switchlight&idx='+ IDx +'&switchcmd=Off' requete='http://'+domoticz_ip+':'+domoticz_port+json_url1 r =requests.get(requete,auth=HTTPBasicAuth(user,password)) else: #Forcage à 1 de la sortie Modbus rq = client.write_coil(adresse, 1) #mise à jour de l'état du bouton de commande json_url1='/json.htm?type=command&param=switchlight&idx='+ IDx +'&switchcmd=On' requete='http://'+domoticz_ip+':'+domoticz_port+json_url1 r =requests.get(requete,auth=HTTPBasicAuth(user,password)) #en mode bouton Domoticz , ecriture de l'état souhaité else: rq = client.write_coil(adresse,valeur) #fermeture de la connexion Modbus TCP client.close() |