Plugin Zigbee

Bonjour,

Nous venons de mettre en beta un nouveau plugin Zigbee (basé sur zigpy). Celui-ci a pour avantage :

  • plus simple que deconz ou il y a deconz + un démon, ici seulement un démon
  • nous donne un accès plus bas niveau et donc nous permettra d’être plus réactif sur l’intégration des modules dans jeedom (et plus dépendant de deconz)
  • compatible avec de nombreuse clef zigbee : deconz (testé et supporté par l’équipe jeedom) et ezsp (testé sur un kit de dev pour le moment seulement), zigate (non testé, pas supporté officiel par l’équipe Jeedom donc), Texas instrument (non testé, pas supporté officiel par l’équipe Jeedom donc)

Pour ceux qui veulent testé je vous mets dans le post suivant la documentation (plein de faute, c’est un brouillon pour le moment).

Vous avez aussi ici (en caché pour le moment) : https://doc.jeedom.com/fr_FR/zigbee/equipement.compatible la liste des modules compatible (mise à jour toute les nuits par rapport a la version beta du plugin)

IMPORTANT : si vous basculez du plugin deconz a ce plugin il faut bien pensez a couper le demon deconz (je sais c’est bête mais je préfères le dire) et surtout il va falloir réinclure certain module (me demandez pas pourquoi que certain…) et bien sur jouer du bouton de remplacement de commande dans jeedom pour que tout remarche comme avant.

IMPORTANT : la sortie de ce plugin ne signifie absolument pas l’abandon du plugin deconz !!! Juste en fonction des retours, ce plugin pourra devenir le plugin principal Zigbee mais Deconz sera toujours maintenu !!!

Nous réfléchissons aussi a offrir ce plugin a tout ceux qui ont acheté le plugin deconz. Par contre si vous achetez ce plugin avant que tranchions la dessus aucun remboursement ne sera possible

IMPORTANT : ce plugin n’est pour le moment pas compatible avec les smarts un workaround est en cours

5 « J'aime »

Doc du 25/09/2020, elle peut ne plus etre valide

Plugin Zigbee

Le plugin Zigbee permet de communiquer avec la pluspart des équipements Zigbee existants. Il se base sur le (super) projet Zigpy qui est compatible avec les clef zigbee suivantes :

  • Deconz. Testé et validé par l’équipe Jeedom. Il n’y a pas besoin d’avoir Deconz d’installé
  • EZSP (clef basé sur un chupset Silicon Labs). En cours de test par l’équipe Jeedom
  • X-bee. Non testé par l’équipe Jeedom
  • Zigate. Non testé par l’équipe, marqué en experimental chez Zigpy
  • ZNP (Texas Instrument, Z-stack 3.X.X). Non testé par l’équipe, marqué en experimental chez Zigpy
  • CC (Texas Instrument, Z-stack 1.2.X). Non testé par l’équipe, marqué en experimental chez Zigpy

Configuration du plugin

Après installation du plugin, il vous suffit de bien installer les dépendances, de selectionner votre type de clef, le port (attention seul le type de clef deconz support le port en auto) et de lancer le demon. Vous pouvez aussi choisir le canal pour le zigbee.

IMPORTANT

Tout changement de canal nécessite forcement un redemarrage du démon. Un changement de canal peut aussi nécessiter une reinclusion de certain module

Inclusion de module

L’inclusion est la partie la plus compliqué en Zigbee. Bien que simple l’opération est à faire souvent plusieurs fois. Coté plugin c’est facile il suffit de cliquer sur le bouton « Mode inclusion », une fois fait vous avez 3minutes pour inclure votre équipement.

Coté équipement ca change en fonction du module, il faut se referer à la documentation de celui-ci à chaque fois.

IMPORTANT

Ne surtout pas oublier de faire une remise à zero (reset) du module avant tout inclusion

Equipement

Une fois inclus Jeedom doit reconnaitre automatiquement votre module (si ce n’est pas le cas voir chapitre suivant) et donc créer les commandes qui vont bien. A noter qu’a cause de bug dans certain firmware (Ikea, Sonoff…) il est parfois necessaire de choisir le type de module directement dans la liste « Equipement » puis de sauvegarder pour avoir les bonnes commandes.

Vous avez dans l’onglet équipement les parametres suivants :

  • Nom de l’équipement Zigbee : nom de votre équipement Zigbee
  • ID : identifiants unique de l’équipements, meme lors d’une reinclusion (ou meme si vous changez de type de clef zigbee)
  • Activer
  • Visible
  • Objet parent
  • Bureau
  • Catégorie
  • Ne pas attendre le retour d’éxécution des commandes (plus rapide mais moins fiable) : n’attends pas la validation de clef pour dire que la commande s’est executé. Ca rend la main plus vite mais ne garantie pas que tout c’est bien passé

Dans l’onglet commande vous retrouvez les commandes de votre module (si celui-ci a bien été reconnu)

Commande pour les experts

Pour les experts voici comment marche les commandes :

  • attributes::ENDPOINT::CLUSTER_TYPE::CLUSTER::ATTRIBUT::VALUE, permet d’écrire la valeur d’un attribut (attention tout les attributs ne peuvent etre changé) avec :
    • ENDPOINT : numéro du endpoint
    • CLUSTER_TYPE : type de cluster (IN ou OUT)
    • CLUSTER : numéro du cluster
    • ATTRIBUT : numéro de l’attribut
    • VALUE : valeur à écrire
      Exemple : attributes::1::in::513::18::#slider#*100, ici on va ecrire l’attribut dans l’endpoint 1, cluster entrant (in) 513, attribut 18 avec pour valeur celle du slider*10
  • ENDPOINT::CLUSTER:COMMAND::PARAMS, permet d’éxecuter une commande server, avec :
    • ENDPOINT : numéro du endpoint
    • CLUSTER : nom du cluster
    • COMMAND : nom de la commande
    • PARAMS parametre dans le bonne ordre séparé par des ::
      Exemple : 1::on_off::on, ici on execute la commande on sur l’endpoint 1 du cluster on_off sans parametres
      Exemple : 1::level::move_to_level::#slider#::0, ici on execute la commande move_to_level sur l’endpoint 1 du cluster level avec les parametres #slider# et 0

Mon module n’est pas reconnu

Si votre module n’est pas reconnu par jeedom (pas de commande) mais bien inclus alors il faut demander à l’équipe Jeedom de l’ajouter.

IMPORTANT

L’équipe Jeedom se reserve le droit de refuser toute demande d’intégration il vaut toujours mieux prendre un module deja compatible

Pour cela il faut fournir les éléments suivant (toute demande incomplete sera refusé sans réponse de la part de l’équipe Jeedom) :

  • Donner le modele exacte de votre module (avec un lien vers la page de vente)
  • Sur la page de l’équipement cliquer sur configuration puis onglet « Informations brutes » et envoyer le contenu à l’équipe Jeedom
  • Mettre le démon en debug (et le redemarrer), faire des actions sur l’équipement (si c’est un capteur de température faire varier la température par exemple, si c’est une vanne faire varier la consigne…) et envoyer le log en debug zigbee (attention a bien prendre le zigbee et pas le zigbeed)

Bonjour Loic,

Détenteur d’une clef conbee2 je vais installer la bêta et effectuer différents tests… Je reviendrai poster mes remarques,

Au plaisir, bonne journée,

2 « J'aime »

Hello,

Alors sa commence mal, Plugin installer, mais les dépendance elle ne veulent pas.
Voici ma page santé ainsi que les logs :


zigbee_update.txt (17,8 Ko)

Ps : Je suis sur une zigate en dernière version.

Edit :
Je rajoute des info :

J’ai l’impresion que un packet est pas installer dans les dependance.

Edit 2 :
Après installations manuel du packet le plugin a démarrer. Je continue les test
image

Cdt
Thibaut

je n’ai pas eu de soucis pour installer les dépendances sur ma smart
Version Core 4.0.61 en stable

Par contre, je n’arrive pas à démarrer le demon en choisissant comme type de contrôleur : Deconz

Traceback (most recent call last):
File "/var/www/html/plugins/zigbee/resources/zigbeed/zigbeed.py", line 33, in <module>
import zhaquirks
File "/usr/local/lib/python3.5/dist-packages/zhaquirks/__init__.py", line 202
reset_s: int = 30
^
SyntaxError: invalid syntax
Traceback (most recent call last):
File "/var/www/html/plugins/zigbee/resources/zigbeed/zigbeed.py", line 33, in <module>
import zhaquirks
File "/usr/local/lib/python3.5/dist-packages/zhaquirks/__init__.py", line 202
reset_s: int = 30
^
SyntaxError: invalid syntax
Traceback (most recent call last):
File "/var/www/html/plugins/zigbee/resources/zigbeed/zigbeed.py", line 33, in <module>
import zhaquirks
File "/usr/local/lib/python3.5/dist-packages/zhaquirks/__init__.py", line 202
reset_s: int = 30
^
SyntaxError: invalid syntax
Traceback (most recent call last):
File "/var/www/html/plugins/zigbee/resources/zigbeed/zigbeed.py", line 33, in <module>
import zhaquirks
File "/usr/local/lib/python3.5/dist-packages/zhaquirks/__init__.py", line 202
reset_s: int = 30
^
SyntaxError: invalid syntax

j’ai bien mis le demon en stop

PS : petite corrections d’orthographe

  • Type de controlleur à remplacer par Type de contrôleur

zigbee_update.txt (24,0 Ko)

1 « J'aime »

Effectivement il manque le packet je me note de l’ajouter

Bizarre la car j’ai pas ça mais je suis en python 3.6…

si tu as besoin d’accéder a ma smart pour regarder

dis-moi le

Je vais d’abord me renseigner je connais pas trop la smart donc pas très doué dessus

Bon je trouve pas la… D’autre on le meme soucis ?

Non par contre sur la zigate, le plugin ne la met pas en mode inclusion. Et quand sa importe les modules, on a bien les commandes mais les actions et retour d’information ne passe pas.

Cdt
Thibaut

Ok n’ayant pas de zigate je pourrais malheureusement pas aider la dessus c’était un bonus d’etre compatible avec… Je vois que pas mal de personne travails la dessus donc ca arrivera surement.

2 « J'aime »

Aurais tu quand meme la log au cas ou ca soit quelque chose de flagrant ?

Yes,

Je le reactive et je t’envoit tout.

Cdt
Thibaut

Voici les images de ma configuration :

Et voici les log :
zigbeed.txt (10,0 Ko) zigbee.txt (3,9 Ko)

Erreur dans le réseau Zigbee :

Edit :
J’ai d’autrre log, la sa a l’air d’etre passer :
zigbee.txt (4,9 Ko)

Mais toujours aucun retours ou action :

Ma config équipement (J’ai du choisir mon modeule) :




image

Les info brute :

{
    "ieee": "00:15:8d:00:03:3a:7d:7b",
    "nwk": 41130,
    "status": 2,
    "node_descriptor": [
        1,
        64,
        132,
        55,
        16,
        127,
        100,
        0,
        1,
        0,
        100,
        0,
        0
    ],
    "endpoints": [
        {
            "id": 1,
            "status": 1,
            "device_type": 6,
            "profile_id": 260,
            "output_clusters": [
                {
                    "id": 0,
                    "name": "Basic",
                    "attributes": []
                },
                {
                    "id": 10,
                    "name": "Time",
                    "attributes": []
                },
                {
                    "id": 25,
                    "name": "Ota",
                    "attributes": []
                }
            ],
            "input_clusters": [
                {
                    "id": 0,
                    "name": "BasicCluster",
                    "attributes": []
                },
                {
                    "id": 3,
                    "name": "Identify",
                    "attributes": []
                },
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": []
                },
                {
                    "id": 2,
                    "name": "Device Temperature",
                    "attributes": []
                },
                {
                    "id": 25,
                    "name": "Ota",
                    "attributes": []
                },
                {
                    "id": 10,
                    "name": "Time",
                    "attributes": []
                }
            ]
        },
        {
            "id": 2,
            "status": 1,
            "device_type": 0,
            "profile_id": 260,
            "output_clusters": [],
            "input_clusters": [
                {
                    "id": 16,
                    "name": "BinaryOutput",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "On\/Off",
                    "attributes": []
                },
                {
                    "id": 4,
                    "name": "Groups",
                    "attributes": []
                },
                {
                    "id": 5,
                    "name": "Scenes",
                    "attributes": []
                }
            ]
        },
        {
            "id": 3,
            "status": 1,
            "device_type": 0,
            "profile_id": 260,
            "output_clusters": [],
            "input_clusters": [
                {
                    "id": 16,
                    "name": "BinaryOutput",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "On\/Off",
                    "attributes": []
                },
                {
                    "id": 4,
                    "name": "Groups",
                    "attributes": []
                },
                {
                    "id": 5,
                    "name": "Scenes",
                    "attributes": []
                }
            ]
        }
    ]
}

Ps : hésite pas a me demander, je peux même te fournir un accès a mon jeedom.

Cdt
Thibaut

Pour l’erreur ca sera corrigé avec la beta de demain (et surement une maj des dépendance)

Pour l’inclusion ca a l’air d’etre passé d’après la log

Pour les modules je pense il faut tout réinclure sinon ca marchera a moitier ca pas le choix.

Tu as la référence du module exactement, il remonte bien des infos mais sur un cluster bizarre on dirait qu’il ne fait pas le mapping entre les cluster du constructeur et ceux devant vraiment être utilisé.

Ok pas de probleme,
Je te confirme que l’aperage passe. mais après j’ai des commande info vide et pas de commande action.

Voici le module :

Cdt
Thibaut

Ps : j’ai aussi des aquara 1 button si tu veux test.

Ok c’est donc un module non connu encore (je n’en ai pas) je vais voir si je peux faire la configuration

Ok, Pareil si besoin de test tu me dit.

edit : Même si je doit mettre les fichier a la main. Si sa peux te permettre d’avancer plus vite.

Cdt
Thibaut

Voila je pense la conf ca serait ca :

{
  "name": "[Q8KG03LM] Xioami interrupteur double avec neutre",
  "buylink" : "",
  "commands": [
    {
      "name": "Etat 1",
      "type": "info",
      "subtype": "binary",
      "generic_type": "LIGHT_STATE",
      "isVisible": 0,
      "isHistorized": 0,
      "logicalId": "2::6::0"
    },
    {
      "name": "On 1",
      "generic_type": "LIGHT_ON",
      "type": "action",
      "subtype": "other",
      "isVisible": 1,
      "isHistorized": 0,
      "value" : "Etat 1",
      "logicalId": "2::on_off::on"
    },
    {
      "name": "Off 1",
      "generic_type": "LIGHT_OFF",
      "type": "action",
      "subtype": "other",
      "isVisible": 1,
      "isHistorized": 0,
      "value" : "Etat 1",
      "logicalId": "2::on_off::off"
    },
    {
      "name": "Etat 2",
      "type": "info",
      "subtype": "binary",
      "generic_type": "LIGHT_STATE",
      "isVisible": 0,
      "isHistorized": 0,
      "logicalId": "3::6::0"
    },
    {
      "name": "On 2",
      "generic_type": "LIGHT_ON",
      "type": "action",
      "subtype": "other",
      "isVisible": 1,
      "isHistorized": 0,
      "value" : "Etat 1",
      "logicalId": "3::on_off::on"
    },
    {
      "name": "Off 2",
      "generic_type": "LIGHT_OFF",
      "type": "action",
      "subtype": "other",
      "isVisible": 1,
      "isHistorized": 0,
      "value" : "Etat 1",
      "logicalId": "3::on_off::off"
    }
  ]
}

Soit tu attends demain et ca sera dans la beta soit tu copies ca dans /var/www/html/plugins/zigbee/core/config/devices/xioami/LUMI.lumi.switch.Q8KG03LM.json

Ensuite il suffit d’appliquer le nouveau type.