Ajout manuel de device pour un hardware

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
largowinch
Messages : 4
Enregistré le : 19 juin 2018, 16:32

Ajout manuel de device pour un hardware

Message par largowinch » 19 juin 2018, 16:48

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Neutrino
Messages : 1038
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)

Re: Ajout manuel de device pour un hardware

Message par Neutrino » 19 juin 2018, 23:20

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) ?
Bonjour,

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
ça date un peu, donc certaines méthodes ou paramètres ont peut-être évolué depuis, mais ça marche :)
Ma maison à plein d'IP ! :mrgreen:

largowinch
Messages : 4
Enregistré le : 19 juin 2018, 16:32

Re: Ajout manuel de device pour un hardware

Message par largowinch » 20 juin 2018, 11:28

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:

Code : Tout sélectionner

Domoticz.Device(Name="SR Pin "+str(i),  Unit=i,Type=17, Switchtype=0).Create()
Dans un autre exemple, j'ai:

Code : Tout sélectionner

Domoticz.Device(Name="Usage", Unit=1, Type=243, Subtype=29, Switchtype=0, Image=0, Options="").Create()
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

Neutrino
Messages : 1038
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)

Re: Ajout manuel de device pour un hardware

Message par Neutrino » 20 juin 2018, 20:43

j'aurais voulu pouvoir les créer via l'interface graphique de Domoticz
Impossible de faire ça avec un plugin python.
L'inconvénient est que je vais devoir modifier mon script à chaque nouveau device que je veux ajouter.
Ouaip
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.
Ma maison à plein d'IP ! :mrgreen:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


largowinch
Messages : 4
Enregistré le : 19 juin 2018, 16:32

Re: Ajout manuel de device pour un hardware

Message par largowinch » 24 juin 2018, 22:47

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
Fichiers joints
Blinds and On_Off switches - Project.png
Blinds and On_Off switches - Project.png (43.09 Kio) Vu 769 fois

Neutrino
Messages : 1038
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)

Re: Ajout manuel de device pour un hardware

Message par Neutrino » 25 juin 2018, 16:27

En regardant dans ma BD, j'ai ça pour un Venetian Blind EU.
Type : 17
SubType : 0
SwitchType : 15

Si ça peut t'aider...
Ma maison à plein d'IP ! :mrgreen:

largowinch
Messages : 4
Enregistré le : 19 juin 2018, 16:32

Re: Ajout manuel de device pour un hardware

Message par largowinch » 26 juin 2018, 22:45

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 ?
Fichiers joints
2018-06-26 22_38_30-Domoticz.png
2018-06-26 22_38_30-Domoticz.png (19.27 Kio) Vu 711 fois

Neutrino
Messages : 1038
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)

Re: Ajout manuel de device pour un hardware

Message par Neutrino » 27 juin 2018, 20:03

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 8-)
Ma maison à plein d'IP ! :mrgreen:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre