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 » 22 Juin 2016, 10:46

Bonjour,

Je suis désolé, j'ai toujours un problème avec le nom du fichier config, en regardant ton code :

_NomFileConfigZWave = Convert.ToString(m_homeId, 16).ToString & ".xml"
'rajoute des 0 si nécessaire devant l'id du controleur pour avoir une chaine de 8 de long
_NomFileConfigZWave.PadLeft(8, "0")


mais ne faut-il pas écrire : _NomFileConfigZWave = _NomFileConfigZWave.PadLeft(12, "0")

avec 12 comme paramètre (8 caractères pour le nom, plus le point, plus 3 caractères) au total 8+1+3 donc 12.

Sinon, à part le problème de l'adresse 2 le driver fonctionne bien.

Cordialement
Jean-Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jphomi » 08 Juil 2016, 22:10

Bonjour,

J'ai corrigé les bugs que tu as signalé et corrigé aussi le bug sur les adresses2.
J'ai mis le driver en release. Cela fonctionne correctement chez moi.

A bientot
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 » 10 Juil 2016, 16:28

Bonjour JP

Merci pour les infos, j'ai installé le driver. Pour le moment tout fonctionne bien.

Il trouve bien le fichier config,
il affiche bien la liste des composants
il affiche bien les commandes disponibles (adresse 2)
il réalise bien la sauvegarde à intervalle régulier
merci pour le travail.

As-tu déjà utilisez la commande "RemoveFaileNode" du driver ?, qui permet de supprimer un nœud mort du réseau.

Cordialement
Jean-Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 12 Juil 2016, 10:18

Bonjour JP,

Finalement, j'ai modifié la fonction " RemoveFailedNode" permettant de supprimer un nœud s'il est déclaré "mort"

J'ai ajouté un paramètre optionnel permettant de forcer la suppression d'un nœud existant.
Code: Tout sélectionner
Sub RemoveFailedNode(Optional ByVal NumNode As Byte = 0)
             WriteLog("RemoveFailedNode, Nombre de noeud à analyser : " & m_nodeList.Count)
            Try
                Dim node As Node
                Dim i As Integer
                Dim Trouve As Boolean = False

                'Supprime tous les noeuds Morts
                If NumNode = 0 Then
                    For i = 0 To m_nodeList.Count - 1
                        node = GetNode(m_homeId, m_nodeList.ElementAt(i).ID)
                        If (m_manager.IsNodeFailed(m_homeId, node.ID)) Then
                            WriteLog("Noeud Mort : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                            If m_manager.RemoveFailedNode(m_homeId, node.ID) Then
                                WriteLog("Noeud Supprimé : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                            Else
                                WriteLog("Probleme lors de la suppression du noeud : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                            End If
                        Else
                            WriteLog("Noeud actif : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                        End If
                    Next
                End If

                'Supprime le noeud passé en paramètre
                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.RemoveFailedNode(m_homeId, node.ID) Then
                                WriteLog("Noeud Supprimé : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                            Else
                                WriteLog("Probleme lors de la suppression du noeud : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                            End If
                            Exit For
                        End If
                    Next
                    If Trouve = False Then
                        WriteLog("ERR: RemoveFailedNode, Numéro du noeud incorrect : " & NumNode.ToString)
                    End If
                End If
                ' WriteLog("RemoveFailedNode, Nombre de noeud présent aprés analyse :" & m_nodeList.Count)
            Catch ex As Exception
                WriteLog("ERR: RemoveFailedNode, Probleme lors de la suppression des noeuds")
            End Try
        End Sub

J'ai testé la fonction, elle m'affiche bien les nœuds actifs et morts.
J'ai également testé la suppression d'un nœud par le forçage, cela fonctionne.

Je te laisse analyser la fonction.

A bientôt
Jean-Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 14 Juil 2016, 08:18

Bonjour,

J'ai également ajouté une fonction permettant d'afficher dans le fichier "Log"
les modules et leurs états "actif ou failed".

Code: Tout sélectionner
Sub AfficherNode()
            WriteLog("AfficherNode, Nombre de noeud à analyser : " & m_nodeList.Count)
            Try
                Dim node As Node
                Dim i As Integer               

                For i = 0 To m_nodeList.Count - 1
                    node = GetNode(m_homeId, m_nodeList.ElementAt(i).ID)
                    If (m_manager.IsNodeFailed(m_homeId, node.ID)) Then
                        WriteLog("Noeud Mort : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)                       
                    Else
                        WriteLog("Noeud Actif : " & m_nodeList.ElementAt(i).ID & " / " & m_nodeList.ElementAt(i).Label)
                    End If
                Next
            Catch ex As Exception
                WriteLog("ERR: AffichedNode, Probleme lors de la suppression des noeuds")
            End Try
        End Sub


Cordialement
Jean-Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 01 Sep 2016, 15:32

Bonjour,

J'ai modifié le code du driver après des lignes d'erreurs dans le fichier log.
"01/09/2016 12:01:45 ERREUR DRIVER Z-Wave Exception : Le membre public 'nom' du type 'BATTERIE' est introuvable",
cela se produisait quand la batterie d'un module passait sous les 10%.

ligne de code 2062
Code: Tout sélectionner
                       'gestion de l'information de Batterie
                                If UCase(m_valueLabel) = "BATTERY LEVEL" Then
                                    If m_valueString <= 10 Then WriteLog("ERR: " & LocalDevice.nom & " : Battery vide")
                                End If


Comme LocalDevice.nom n'existe pas, j'ai modifié par LocalDevice.Name

Depuis l'erreur à disparue.

Cordialement
Jean-Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 02 Jan 2017, 10:53

Bonjour,

Je propose une petite modification du driver ZWave permettant d'utiliser les modules de commande de Volets.

1 : Ajout dans : Public Sub New()

la ligne :
Code: Tout sélectionner
_DeviceSupport.Add(ListeDevices.VOLET.ToString)


2 : Modif dans : Public Function ExecuteCommand(ByVal MyD.. ……

Dans la Case "PRESSBOUTON"

La ligne :
Code: Tout sélectionner
If ValueTemp.GetType() = 5 Then  ' Uniquement Type Button


par la ligne suivante :
Code: Tout sélectionner
If ValueTemp.GetType() = ZWValueID.ValueType.Button Then   ' Uniquement Type Button


Permettant de monter ou descendre le volet.


J’ai également modifier :

dans la Case "SETLIST"

la ligne :
Code: Tout sélectionner
If ValueTemp.GetType() = 4 Then        ' Uniquement Type list


Par la ligne :
Code: Tout sélectionner
If ValueTemp.GetType() = ZWValueID.ValueType.List Then   â€˜ Uniquement Type list


cordialement
Jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 03 Jan 2017, 10:29

Bonjour,

J'ai oublié une petite modif dans le code de la fonction Write permettant d'ouvrir un volet à 30%, 50% etc.. avec la commande "DIM"

Ajout : Or Objet.Type = "VOLET" dans la ligne suivante.

Code: Tout sélectionner
Case (Objet.Type = "LAMPE" Or Objet.Type = "LAMPERGBW" Or Objet.Type = "APPAREIL" Or Objet.Type = "SWITCH" Or Objet.Type = "VOLET")


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 » 03 Jan 2017, 16:21

Encore un oubli, toujours dans la fonction Write j'ai modifié la ligne suivante

Code: Tout sélectionner
Case UCase(Commande) = "DIM"


en

Code: Tout sélectionner
Case UCase(Commande) = "DIM", UCase(Commande) = "OUVERTURE"

.
.
pour commander le volet avec un % donné

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

Re: Driver Z-Wave

Messagede jphomi » 03 Jan 2017, 22:42

Bonjour,

Jean-Pierre, j’intégrerai dans le driver tes modifs.

Pour info j'ai modifié le driver pour qu'il gère les modules fil pilote qubino ainsi que la lampe RGB Zipato. Il tourne chez moi depuis octobre associé avec un calendrier google.
Il se paramètre comme suivant fichier joint.
Dans le device, on travaille sur le level:1, dans la macro on passe en setpoint le niveau attendu ou la couleur pour lampe
J'ai un trigger qui surveille l’état du device calendrier et passe en confort si c'est indiqué sinon c'est eco.

Il est sur mon depot en version release mais pas sur le depot d'homidom pounr ne pas polluer le site.

A bientot
JP
Fichiers joints
paramdriver.JPG
paramdriver.JPG (17.62 Kio) Vu 4531 fois
parammacro.JPG
parammacro.JPG (24.75 Kio) Vu 4531 fois
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 » 04 Jan 2017, 15:21

Bonjour JP,

J'ai bien téléchargé ton code du driver

J'ai supprimé ma commande "SetPoint" pour utiliser la tienne.
A Priori tous fonctionne sauf l'envoie de la consigne de température vers les thermostats.

J'ai modifié la ligne suivant du code (supprimer le CInt) pour résoudre le problème:

Code: Tout sélectionner
Case InStr(Objet.Adresse2, "Heating 1:") > 0
               '  m_manager.SetValue(ValueTemp, CInt(ValDimmer))
                  m_manager.SetValue(ValueTemp, ValDimmer)   ' As Single


Tout fonctionne, mais je n'ai pas assez de recule (une après-midi).

J'utilise également level:1 sur le module de qubino (Flush Shutter) branché sur un moteur permettant de faire varier l'ouverture de la vanne 4 voies de la chaudière.
J'utilise la PessBouton sur Up:1 et Down:1 pour fermer ou ouvrir la vanne et Level:1 avec la commande DIM pour faire varier l'ouverture en fonction de la
température extérieure.

Merci pour les nouvelles

A bientôt
Jean Pierre
jptools
P'tit Guru de domotique
 
Messages: 69
Inscription: 05 Fév 2015, 19:46

Re: Driver Z-Wave

Messagede jptools » 12 Jan 2017, 11:12

Bonjour JP,

Je t'envoie les modification pour la commande des volets.
Le module n'accepte pas la valeur 100 pour l'ouverture du volet. testé sur deux module de marque différente.
Idem pour Imperihome, avec la valeur 100.

Code: Tout sélectionner
Select Case True
                        Case (Objet.Type = "LAMPE" Or Objet.Type = "LAMPERGBW" Or Objet.Type = "APPAREIL" Or Objet.Type = "SWITCH" Or Objet.Type = "VOLET")
                            texteCommande = UCase(Commande)

                            Select Case True
                                Case UCase(Commande) = "ON"
                                    If IsMultiLevel Then
                                        If Objet.Type = "VOLET" And InStr(Objet.Adresse2, "Level:") Then
                                            Dim OnValue As Byte = Objet.ValueMax - 1   ' n'accepte que 99 max
                                            m_manager.SetValue(ValueTemp, OnValue)
                                        ElseIf NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_SWITCH_BINARY) Or
                                            NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_SWITCH_BINARY_V2) Or
                                            NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK) Or
                                            NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK_V2) Or
                                            NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK_V3) Then
                                            m_manager.SetValue(ValueTemp, True)
                                        Else                                           
                                            Dim OnValue As Byte = Objet.ValueMax
                                            m_manager.SetValue(ValueTemp, OnValue)
                                        End If
                                    Else
                                        m_manager.SetNodeOn(m_homeId, NodeTemp.ID)
                                    End If

                                Case UCase(Commande) = "OFF"
                                    If IsMultiLevel Then
                                        If Objet.Type = "VOLET" And InStr(Objet.Adresse2, "Level:") Then
                                            Dim OffValue As Byte = Objet.ValueMin
                                            m_manager.SetValue(ValueTemp, OffValue)
                                        ElseIf NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_SWITCH_BINARY) Or
                                             NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_SWITCH_BINARY_V2) Or
                                             NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK) Or
                                             NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK_V2) Or
                                             NodeTemp.CommandClass.Contains(CommandClass.COMMAND_CLASS_DOOR_LOCK_V3) Then
                                            m_manager.SetValue(ValueTemp, False)
                                        Else
                                            Dim OffValue As Byte = Objet.ValueMin
                                            m_manager.SetValue(ValueTemp, OffValue)
                                        End If
                                    Else
                                        m_manager.SetNodeOff(m_homeId, NodeTemp.ID)
                                    End If

                                Case UCase(Commande) = "DIM", UCase(Commande) = "OUVERTURE"
                                        If Not (IsNothing(Parametre1)) Then
                                            Dim ValDimmer As Byte = Parametre1
                                            texteCommande = texteCommande & " avec le % = " & Val(Parametre1) & " - " & ValDimmer
                                        If IsMultiLevel Then
                                            If UCase(Commande) = "OUVERTURE" And ValDimmer = 100 Then   ' n'accepte que 99 max
                                                ValDimmer = ValDimmer - 1                               ' compatibilité imperihome
                                            End If
                                            m_manager.SetValue(ValueTemp, ValDimmer)
                                        Else
                                            m_manager.SetNodeLevel(m_homeId, NodeTemp.ID, ValDimmer)
                                        End If
                                    End If


Tu as peut être une autre façon de faire, en attentant, bonne journée

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

PrécédenteSuivante

Retourner vers Drivers

Qui est en ligne

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

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