Ajout manuel de device pour un hardware
-
largowinch
- Messages : 4
- Inscription : 19 juin 2018, 16:32
Ajout manuel de device pour un hardware
Bonjour,
Je suis nouveau dans le monde de domoticz et après quelques essais infructueux, je voudrais m'assurer que ce que j'essaie de faire est possible (facilement).
Voilà, j'ai développé une solution multi-device basée sur une STM32F103 et une RFM69CW qui permet de piloter divers périphériques dans ma maison (simples prises commandées DIO, volets SOMFY, porte de garage, ...). Cette solution est pilotée simplement par un port série. J'utilise donc une Raspberry Pi (modèle 1 que j'ai recyclée) pour dialoguer avec la STM32.
Maintenant je voudrais interfacer tout cela avec Domoticz. J'ai donc créé un plugin Python (basé sur domoticz/plugins/examples/BaseTemplate.py) pour communiquer avec ma STM32.
Ce plugin est reconnu par Domoticz et il me permet de définir un hardware (que j'ai appelé Generic RFM69). Par contre, je n'arrive pas à associer des devices à cet hardware. On dirait que c'est le plugin qui doit définir ses devices en utilisant l'API (du genre Domoticz.Device(Name="Kilo Watts", Unit=16, TypeName="kWh").Create() ). Cela est embêtant car je n'ai pas de "discovery" sur mes devices - une prise DIO ne fonctionne qu'en réception par exemple et idem pour les volets SOMFY.
Donc ma question est: est-il possible de définir manuellement un ensemble de devices qui utiliseraient tous le même hardware en lui fournissant les paramètres adéquats (genre DIO;prise1;ON ou encore SOMFY;volet2;descend) ?
Merci d'avance,
Pierre
Je suis nouveau dans le monde de domoticz et après quelques essais infructueux, je voudrais m'assurer que ce que j'essaie de faire est possible (facilement).
Voilà, j'ai développé une solution multi-device basée sur une STM32F103 et une RFM69CW qui permet de piloter divers périphériques dans ma maison (simples prises commandées DIO, volets SOMFY, porte de garage, ...). Cette solution est pilotée simplement par un port série. J'utilise donc une Raspberry Pi (modèle 1 que j'ai recyclée) pour dialoguer avec la STM32.
Maintenant je voudrais interfacer tout cela avec Domoticz. J'ai donc créé un plugin Python (basé sur domoticz/plugins/examples/BaseTemplate.py) pour communiquer avec ma STM32.
Ce plugin est reconnu par Domoticz et il me permet de définir un hardware (que j'ai appelé Generic RFM69). Par contre, je n'arrive pas à associer des devices à cet hardware. On dirait que c'est le plugin qui doit définir ses devices en utilisant l'API (du genre Domoticz.Device(Name="Kilo Watts", Unit=16, TypeName="kWh").Create() ). Cela est embêtant car je n'ai pas de "discovery" sur mes devices - une prise DIO ne fonctionne qu'en réception par exemple et idem pour les volets SOMFY.
Donc ma question est: est-il possible de définir manuellement un ensemble de devices qui utiliseraient tous le même hardware en lui fournissant les paramètres adéquats (genre DIO;prise1;ON ou encore SOMFY;volet2;descend) ?
Merci d'avance,
Pierre
Re: Ajout manuel de device pour un hardware
Bonjour,largowinch a écrit :est-il possible de définir manuellement un ensemble de devices qui utiliseraient tous le même hardware en lui fournissant les paramètres adéquats (genre DIO;prise1;ON ou encore SOMFY;volet2;descend) ?
oui, il faut juste initialiser le Unit avec un numéro différent pour chaque device.
Ensuite, dans le def onCommand(self, Unit, Command, Level, Hue):
tu peux tester le Unit pour connaitre de device activer et lancer la commande adequate à ton SMT32.
Voici un exemple que j'ai fait pour piloter un 74HC595 avec un pi :
Code : Tout sélectionner
# ShitfRegister Plugin
#
# Author: Neutrino, 2016
#
"""
<plugin key="ShiftPi" name="Shift Register 74HC595 Raspberry" author="neutrino" version="1.0.1" wikilink="http://www.domoticz.com/wiki/">
<params>
<param field="Mode1" label="SER (DS) Pin" width="30px" required="true" default="25"/>
<param field="Mode2" label="RCLK (ST_CP) Pin" width="30px" required="true" default="24"/>
<param field="Mode3" label="SRCLK (SH_CP) Pin" width="30px" required="true" default="23"/>
<param field="Mode4" label="Number of Shift Registers" width="30px" required="true" default="1"/>
<param field="Mode6" label="Debug" width="75px">
<options>
<option label="True" value="Debug"/>
<option label="False" value="Normal" default="true" />
</options>
</param>
</params>
</plugin>
"""
import Domoticz
import os
class BasePlugin:
enabled = True
def __init__(self):
#self.var = 123
return
def onStart(self):
Domoticz.Log("onStart called")
if Parameters["Mode6"] == "Debug":
Domoticz.Debugging(1)
Domoticz.Log("On Start SR")
i=len(Devices)+1
if (len(Devices)<int(Parameters["Mode4"]*8)):
while i<= int(Parameters["Mode4"])*8 :
Domoticz.Device(Name="SR Pin "+str(i), Unit=i,Type=17, Switchtype=0).Create()
i += 1
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode1"]+" out")
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode2"]+" out")
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode3"]+" out")
Domoticz.Heartbeat(30)
DumpConfigToLog()
return True
def onStop(self):
Domoticz.Log("onStop called")
def onCommand(self, Unit, Command, Level, Hue):
Domoticz.Log("Unit : "+ str(Unit))
Domoticz.Log("Command : "+ str(Command))
i=1
com = 0
if Command == 'On':
com = 1
Devices[Unit].Update(com,'')
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode2"]+" 0")
while i<= int(Parameters["Mode4"])*8 :
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode3"]+" 0")
if Unit == i:
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(com))
Domoticz.Debug("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(com))
else:
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(Devices[i].nValue))
Domoticz.Debug("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(Devices[i].nValue))
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode3"]+" 1")
i += 1
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode2"]+" 1")
return True
def onHeartbeat(self):
#Domoticz.Log("onHeartbeat called")
a=1
global _plugin
_plugin = BasePlugin()
def onStart():
global _plugin
_plugin.onStart()
def onStop():
global _plugin
_plugin.onStop()
def onCommand(Unit, Command, Level, Hue):
global _plugin
_plugin.onCommand(Unit, Command, Level, Hue)
def onHeartbeat():
global _plugin
_plugin.onHeartbeat()
# Generic helper functions
def DumpConfigToLog():
for x in Parameters:
if Parameters[x] != "":
Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
Domoticz.Debug("Device count: " + str(len(Devices)))
for x in Devices:
Domoticz.Debug("Device: " + str(x) + " - " + str(Devices[x]))
Domoticz.Debug("Device ID: '" + str(Devices[x].ID) + "'")
Domoticz.Debug("Device Name: '" + Devices[x].Name + "'")
Domoticz.Debug("Device nValue: " + str(Devices[x].nValue))
Domoticz.Debug("Device sValue: '" + Devices[x].sValue + "'")
Domoticz.Debug("Device LastLevel: " + str(Devices[x].LastLevel))
return-
largowinch
- Messages : 4
- Inscription : 19 juin 2018, 16:32
Re: Ajout manuel de device pour un hardware
Merci Neutrino.
Je vois dans ton exemple que c'est le plugin python qui crée les devices.
Dans mon cas, j'aurais voulu pouvoir les créer via l'interface graphique de Domoticz. L'idée que j'avais était de déclarer le plugin Python pour ajouter un hardware puis de lui associer des devices manuellement via l'interface Web UI. L'inconvénient est que je vais devoir modifier mon script à chaque nouveau device que je veux ajouter.
Autre question, dans ton script, tu utilises:
Dans un autre exemple, j'ai:
Où peut-on trouver la liste des "type, subtype et switchtype" possibles ainsi que leur signification?
Dans la doc https://www.domoticz.com/wiki/Developin ... hon_plugin, j'ai trouvé:
Type Numeric device type
SubType Numeric device subtype
SwitchType Numeric device switchtype
Encore merci
Je vois dans ton exemple que c'est le plugin python qui crée les devices.
Dans mon cas, j'aurais voulu pouvoir les créer via l'interface graphique de Domoticz. L'idée que j'avais était de déclarer le plugin Python pour ajouter un hardware puis de lui associer des devices manuellement via l'interface Web UI. L'inconvénient est que je vais devoir modifier mon script à chaque nouveau device que je veux ajouter.
Autre question, dans ton script, tu utilises:
Code : Tout sélectionner
Domoticz.Device(Name="SR Pin "+str(i), Unit=i,Type=17, Switchtype=0).Create()Code : Tout sélectionner
Domoticz.Device(Name="Usage", Unit=1, Type=243, Subtype=29, Switchtype=0, Image=0, Options="").Create()Dans la doc https://www.domoticz.com/wiki/Developin ... hon_plugin, j'ai trouvé:
Type Numeric device type
SubType Numeric device subtype
SwitchType Numeric device switchtype
Encore merci
Re: Ajout manuel de device pour un hardware
Impossible de faire ça avec un plugin python.j'aurais voulu pouvoir les créer via l'interface graphique de Domoticz
OuaipL'inconvénient est que je vais devoir modifier mon script à chaque nouveau device que je veux ajouter.
Il faut se rabattre directement sur le C++ et s'inspirer du RFLink qui semble avoir un fonctionnement similaire à ta carte..
Pour les différents Types, je m'étais également inspiré d'exemples sur le forum officiel.
Toutefois, je ne pense pas que ça soit utile dans les dernières versions, hormis le TypeName.
-
largowinch
- Messages : 4
- Inscription : 19 juin 2018, 16:32
Re: Ajout manuel de device pour un hardware
Merci pour la confirmation. C'est la conclusion à laquelle j'étais arrivé mais je voulais une confirmation tellement cela me semble dommage.
Je pense que je vais mettre la définition de mes devices dans un fichier séparé qui sera lu par le plugin Python au démarrage. Cela me semble plus propre. Par contre, je ne suis pas encore arrivé à créer des devices autres que des switches. J'aurais voulu un device de type "volet" (shutter ou blind - voir image en pièce jointe) mais impossible de trouver comment faire. Tu n'aurais pas une idée ?
Merci d'avance
Je pense que je vais mettre la définition de mes devices dans un fichier séparé qui sera lu par le plugin Python au démarrage. Cela me semble plus propre. Par contre, je ne suis pas encore arrivé à créer des devices autres que des switches. J'aurais voulu un device de type "volet" (shutter ou blind - voir image en pièce jointe) mais impossible de trouver comment faire. Tu n'aurais pas une idée ?
Merci d'avance
- Pièces jointes
-
- Blinds and On_Off switches - Project.png (43.09 Kio) Consulté 6473 fois
Re: Ajout manuel de device pour un hardware
En regardant dans ma BD, j'ai ça pour un Venetian Blind EU.
Type : 17
SubType : 0
SwitchType : 15
Si ça peut t'aider...
Type : 17
SubType : 0
SwitchType : 15
Si ça peut t'aider...
-
largowinch
- Messages : 4
- Inscription : 19 juin 2018, 16:32
Re: Ajout manuel de device pour un hardware
Et bien, un tout grand merci car comme par magie, mon device est apparu comme je le souhaitais (voir image en pièce jointe).
Par contre, la documentation spécifie qu'il faut maintenant utiliser le TypeName plutôt que les paramètres Type, SubType et SwitchType. Alors pourquoi n'y a-t-il pas de Blind ou Shutter dans cette liste? Et si on est sensé continuer à utiliser ces paramètres, il serait utile de les documenter. Sans ton aide, je n'y serais pas arrivé !
Encore merci
PS: question subsidiaire, lorsque je clique sur l'icône pour ouvrir, il affiche "Switching Off". Pour fermer, "Switching On" et pour stop "Switching Stop". Peut-on changer ces messages ?
Par contre, la documentation spécifie qu'il faut maintenant utiliser le TypeName plutôt que les paramètres Type, SubType et SwitchType. Alors pourquoi n'y a-t-il pas de Blind ou Shutter dans cette liste? Et si on est sensé continuer à utiliser ces paramètres, il serait utile de les documenter. Sans ton aide, je n'y serais pas arrivé !
Encore merci
PS: question subsidiaire, lorsque je clique sur l'icône pour ouvrir, il affiche "Switching Off". Pour fermer, "Switching On" et pour stop "Switching Stop". Peut-on changer ces messages ?
- Pièces jointes
-
- 2018-06-26 22_38_30-Domoticz.png (19.27 Kio) Consulté 6415 fois
Re: Ajout manuel de device pour un hardware
Nan, on ne peut pas changer ça à ma connaissance.
Mais le but de la domotique, c'est d'être complètement transparente
J'utilise très peu l'interface, à part pour surveiller de temps en temps que tout va bien.
Le reste est en pilote automatique
Mais le but de la domotique, c'est d'être complètement transparente
J'utilise très peu l'interface, à part pour surveiller de temps en temps que tout va bien.
Le reste est en pilote automatique