Driver Z-Wave

Pour parler de tous les Problèmes/Bugs, Questions, Informations ... en rapport avec les drivers existants : Plcbus, X10, 1-Wire, Rfxcom, Zibase...

Modérateur: HoMIDoM

Re: Driver Z-Wave

Messagede jptools » 25 Jan 2017, 10:40

Bonjour JP,

J’ai modifié le driver en ajoutant des fonctions permettant de créer, de supprimer et d' afficher des associations entre module.
Cela permet d'allumer plusieurs modules de lampe avec un seul interrupteur sans passer par Homidom .

Dans : Public Sub New()

Code: Tout sélectionner
   Add_DeviceCommande("Add_Association", "Parametres de configuration - Par1 : Groupe Idx - Par2 : Cible Noeud Id", 2)
                Add_DeviceCommande("Remove_Association", "Parametres de configuration - Par1 : Groupe Idx - Par2 : Cible Noeud Id", 2)
                Add_DeviceCommande("Get_Association", "Parametres de configuration - Par1 : Groupe Idx", 1)
                Add_DeviceCommande("Get_GroupMax", "Parametres de configuration - Par1 : Groupe Idx", 1)               



et dans: Public Function ExecuteCommand(ByVal MyDevice As Object, By . . .

Code: Tout sélectionner
     Case "ADD_ASSOCIATION"
                                NodeTemp = GetNode(m_homeId, adr1)             'Group Idx   NodeId
                                m_manager.AddAssociation(m_homeId, NodeTemp.ID, Param(0), Param(1))
                                WriteLog("ExecuteCommand, Passage par la commande ADD_ASSOCIATION -> Groupe Id :" & Param(0) & ", Noeud : " & Param(1) & " sur le noeud " & NodeTemp.ID)
                                m_manager.RefreshNodeInfo(m_homeId, NodeTemp.ID)

                            Case "REMOVE_ASSOCIATION"
                                NodeTemp = GetNode(m_homeId, adr1)                'Group Idx   NodeId
                                m_manager.RemoveAssociation(m_homeId, NodeTemp.ID, Param(0), Param(1))
                                WriteLog("ExecuteCommand, Passage par la commande REMOVE_ASSOCIATION -> Groupe Id :" & Param(0) & ", Noeud : " & Param(1) & " sur le noeud " & NodeTemp.ID)
                                m_manager.RefreshNodeInfo(m_homeId, NodeTemp.ID)

                            Case "GET_ASSOCIATION"
                                Dim NumGroup As Integer
                                Dim NumAssociation As Integer
                                Dim Association() As Byte = Nothing

                                NodeTemp = GetNode(m_homeId, adr1)
                                NumGroup = m_manager.GetNumGroups(m_homeId, NodeTemp.ID)
                                If (Param(0) >= 1 And Param(0) <= NumGroup) Then                     'Group Idx
                                    NumAssociation = m_manager.GetAssociations(m_homeId, NodeTemp.ID, Param(0), Association)
                                    WriteLog("ExecuteCommand, Passage par la commande GET_ASSOCIATION -> Num : " & NumAssociation.ToString & " Groupe Id :" & Param(0) & " sur le noeud " & NodeTemp.ID)
                                    For i As Integer = 0 To NumAssociation - 1
                                        WriteLog("Association -> Node : " & Association(i).ToString)
                                    Next
                                Else
                                    WriteLog("ExecuteCommand, Passage par la commande GET_ASSOCIATION -> nome, Groupe Id :" & Param(0) & " sur le noeud " & NodeTemp.ID)
                                End If
                                Association = Nothing

                            Case "GET_GROUPMAX"
                                    Dim NumGroup As Integer
                                    Dim Nombre As Integer

                                    NodeTemp = GetNode(m_homeId, adr1)
                                    NumGroup = m_manager.GetNumGroups(m_homeId, NodeTemp.ID)
                                    If (Param(0) >= 1 And Param(0) <= NumGroup) Then
                                        Nombre = m_manager.GetMaxAssociations(m_homeId, NodeTemp.ID, Param(0))
                                        WriteLog("ExecuteCommand, Passage par la commande GET_GROUPMAX -> " & Nombre & ", Groupe Id :" & Param(0) & " sur le noeud " & NodeTemp.ID)
                                    Else
                                         WriteLog("ExecuteCommand, Passage par la commande GET_GROUPMAX -> Nome, Groupe Id :" & Param(0) & " sur le noeud " & NodeTemp.ID)
                                    End If


En espérant que cela peut intéresser d’utilisateurs.

Bonne journée
Jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 FĂ©v 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 28 Jan 2017, 15:07

Bonjour JP

J'ai ajouté la fonction "ReplaceFailedNode" qui permet de remplacer un module défectueux par un nouveau en gardant le même numéro de nœud.
Cela permet compléter les fonctions : CheckStateNode() et RemoveFailedNode

Code: Tout sélectionner
        Sub ReplaceFailNode(Optional ByVal NumNode As Byte = Nothing)
            Try               
                Dim node As Node
                Dim i As Integer
                Dim Trouve As Boolean = False

                If _IsConnect Then
                    If NumNode = Nothing Then NumNode = 0
                    If NumNode > 1 Then
                        For i = 0 To m_nodeList.Count - 1
                            node = GetNode(m_homeId, m_nodeList.ElementAt(i).ID)
                            If NumNode = node.ID Then
                                Trouve = True
                                If m_manager.HasNodeFailed(m_homeId, NumNode) Then
                                    If m_manager.ReplaceFailedNode(m_homeId, node.ID) Then
                                        WriteLog("ReplaceFailedNode rĂ©ussi sur Noeud : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Product & " -> " & m_nodeList.ElementAt(i).Product)
                                    Else
                                        WriteLog("ERR: ReplaceFailedNode Ă©chouĂ© : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Product & " -> " & m_nodeList.ElementAt(i).Label)
                                    End If
                                    Exit For
                                Else
                                    WriteLog("ERR: ReplaceFailedNode, impossible sur un Noeud actif  : " & NumNode.ToString)
                                End If
                            End If
                        Next
                        If Trouve = False Then
                            WriteLog("ERR: ReplaceFailedNode, NumĂ©ro du noeud incorrect : " & NumNode.ToString)
                        End If
                    Else
                        WriteLog("ReplaceFailedNode, Le numĂ©ro de noeud n'est pas correct")
                    End If
                End If
            Catch ex As Exception
                WriteLog("ERR: ReplaceFailedNode, Probleme lors du replacement du noeud")
            End Try
        End Sub


je l'ai testé, le nouveau module est bien inséré dans la liste des modules (après suppression de l'ancien) avec le même numéro de nœud.

Bonne journée
Jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 FĂ©v 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 28 FĂ©v 2017, 10:53

Bonjour

J'ai ajouté des fonctions au Drivers ZWave, voici la liste :

GetAllConfigParams
RequestNodeDynamic
Add_Association
Remove_Association
GetAssociation
Get_GroupMax
RefreshNodeInfo
Get_Node_Securit
Is_Node_Awake

Vous trouverez le source sur l'adresse : https://github.com/jptools/Homidom-Jptools

Je lasse le soins aux développeurs d'inclure ou non les fonctions

jps
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 FĂ©v 2015, 19:46

Re: Driver Z-Wave

Messagede jphomi » 04 Mar 2017, 12:19

Bonjour,

J'ai intégré tes modifs dans le driver, je vais le tester chez moi, j'ai quelques modifs sur ma config à faire.
Je te dis si c'est ok, je le mettrai en ligne après mes tests.

Merci pour le partage de ton travail
@+
JP
Installation : Homidom sur serveur MSI DC111 sous Win10,Homiwpf sous Win8.1, Imperihome,
Jeedom pour test, phidgets SBC ( temp, pression, E/S )
Protocole ZWave (gestion chauffage fil pilote, eclairage, RGBW, eau chaude, suivi conso )
IPX800 (irrigation, Ă©clairage, temp)
Station météo NetAtmo ( temp, hum, pluvio, anémomètre )
Wattlet ( commande relai )
jphomi
P'tit Guru de domotique
 
Messages: 59
Inscription: 09 FĂ©v 2015, 10:56
Localisation: Aveyron (12)

Re: Driver Z-Wave

Messagede jptools » 26 FĂ©v 2018, 14:06

Bonjour,

Je vous propose une petite modification sur le driver Zwave.
J’ai remarqué lorsque l’on lance une fonction avancée du driver lorsque le driver n’est pas démarré, le serveur homidom se plante et s'arrête de fonctionner.

Ma première proposition de modification pour éviter cela c’est d’entourer chaque fonction avancée par le test suivant :

Code: Tout sélectionner
If _IsConnect Then
..
..
End If


J’ai également modifié dans Admin la ligne 131 du fichier uDriver.xaml.vb pour cacher les fonctions avancées lorsque le driver n’est pas démarré.
Bien sur cela influence de ce fait tous les drivers.

La ligne 131 :
Code: Tout sélectionner
If DeviceAction.Count = 0 Then
     Label12.Visibility = W…..
     BtnAv.Visibility = Windows.Vis…..
     GroupBox1.Visibility = Windows.Visibil……
End If


Modifié en :

Code: Tout sélectionner
If (x.DeviceAction.Count = 0) Or (x.IsConnect = False) Then 
     Label12.Visibility = W…..
     BtnAv.Visibility = Windows.Vis…..
     GroupBox1.Visibility = Windows.Visibil……
End If


Bonne journée.
Jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 FĂ©v 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 22 Mai 2018, 12:20

Bonjour jphomi,

J'ai une petite amélioration a te proposer pour le Driver "Zwave"


Ayant un module avec un id = 27 et un avec un id = 30, lors de la configuration du module id 30, le driver m'affiche toujours les options du module 27.
Le driver m'affiche jamais les options du module 30. Ce problème existe juste avec ces deux numéro d'id (27 et 30).
J'ai remplacé la ligne de code de la fonction "LectureNoeudConfigXml" pour résoudre ce problème.

Code: Tout sélectionner
' If InStr(valnode, "Node id=""" & nodeid & """") > 0 Then         
If InStr(valnode, "Node id=""" & nodeid & """" & " name") > 0 Then
       reader = XmlReader.Create(New StringReader(valnode))
       reader.ReadToDescendant("CommandClasses")
       While reader.Read()
         â€¦


Bonne journée

jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 FĂ©v 2015, 19:46

Précédente

Retourner vers Drivers

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique