KiwiHC16 / Abeille

Abeille pour Jeedom (Gateway ZiGate)
GNU Affero General Public License v3.0
60 stars 52 forks source link

SONOFF Smart Plug S26R2ZB #2221

Closed jbromain closed 2 years ago

jbromain commented 2 years ago

Bonjour,

J'ai réussi à intégrer cette prise connectée Sonoff, avec un fichier json dans devices_local + la prise en compte d'une spécificité de cet équipement dans la classe AbeilleParser.

(Je n'ai pas besoin d'aide sur cette issue, je partage juste pour que ça puisse être mis en commun dans Abeille si jugé utile)

Spécificité de cet appareil (ce n'est probablement pas le seul): Il possède plusieurs EndPoints (0D/01/F2), mais le premier (0D) ne répond pas aux demandes d'attributs 'modelIdentifier' et 'manufacturer'. Le second (01) le fait.

De ce fait, l'inclusion ne fonctionne pas (car Abeille interroge uniquement le premier EP pour tenter d'identifier l'équipement, et donc ne reçoit rien).

J'ai modifié AbeilleParser/deviceUpdate() de la manière suivante (uniquement des ajouts, aucune modification de lignes existantes): image

Concrètement, au lieu d'interroger le model et le fabricant uniquement sur le premier EP, on interroge aussi sur l'EP 01 s'il existe. Ca ne devrait pas gêner l'inclusion des autres équipements, mais ça mérite probablement des tests supplémentaires.

Une fois ceci fait, j'ai créé et mis au bon endroit un fichier pour l'équipement (clone de celui d'une prise Ikea).

Ci-joint, un ZIP contenant mon fichier JSON (S26R2ZB_SONOFF.json) et l'image PNG transparente de l'équipement. Sonoff Smart Plug S26R2ZB.zip

Après ces modifications, j'ai pu confirmer (avec un 2eme exemplaire de cette prise Sonoff) que l'inclusion fonctionne bien. Le retour d'état (en cas d'action manuelle du bouton) et les commandes on/off/toggle également.

Merci ! Jean-Baptiste

tcharp38 commented 2 years ago

Salut @jbromain Juste qq mots pour te dire que j'ignore pas ce sujet. C 'est plutot rare de tomber dans ce cas (1st EP n'a pas de cluster 0000) mais tu as tout à fait raison. Copie à revoir mais d'autres trucs sur le feu avant de déconnecter 1 semaine. J'ai bien peur de repousser ca à début 2022.

jbromain commented 2 years ago

Hello, aucun problème. Pour tout te dire j'ai cloné le dépôt toute à l'heure, je vais essayer de faire la correction et une pull request. (Je suis développeur, pas habitué à github mais ça devrait aller)

tcharp38 commented 2 years ago

Bon j'ai mergé ta proposition mais je vois déja des limitations

Et j'ai encore un autre souci pending cote detection de vieux Xiaomi. Bref je laisse ca en beta pour un moment.

Revenons à ce modele S26R2ZB, je viens de l'ajouter. Merci pour ce package quasi parfait :) Peux tu me faire un discovery ?

Tout ca est dans la 211208-BETA-1, dispo à partir de demain (09/12)

jbromain commented 2 years ago

Concernant le fait d'envoyer plusieurs commandes en même temps, on peut peut-être faire une petite pause entre deux ? (Je pensais que "msgToCmd()" ajoutait dans une fifo, ce n'est pas le cas ? Pas encore été lire ce code ;)). Cela dit comme tu as groupé les requêtes, ça va déjà aider.

Concernant le risque qu'un périph réponde qu'il ne supporte pas le modelID sur le premier EP, on pourrait peut-être changer la logique: 1) Découverte des EP (inchangé ou presque) 2) Interrogation de tout ce qu'on peut sur tous les EP (fabricant, modèle et cas particuliers) 3) Stocker ce qu'on reçoit au fur et à mesure sans chercher à identifier le modèle tout de suite 4) Attendre un certain délai (10s ?), et identifier le device avec tout ce qu'on a reçu

D'ailleurs dans la même idée il y a un truc qui me gène dans le code actuel, mais j'ai peut-être mal compris; actuellement si on reçoit le modèle on essaye de trouver le JSON correspondant, sans attendre le manufacturer. Donc potentiellement on peut avoir des collisions de modèles (si plusieurs fabricants utilisent le même "modèle" pour des devices différents). Clairement l'identification marchait pour ma prise Sonoff sans mettre "sonoff" dans le nom du json... je l'ai ajouté pour "blinder" le truc.

Concernant le discovery, je suis désolé mais je n'ai jamais réussi à faire marcher correctement l'assistant de découverte sur mon installation; cliquer lentement ou frénétiquement sur les boutons n'y change rien, ça reste désespérément orange quel que soit le device. J'arrive seulement à récupérer la liste des clusters de chaque EP.

Voici le mieux que j'ai pu avoir sur ce périph: image image

Et le discovery correspondant au cas où ça soit quand même utile: discovery_sonoff_smartplug.zip

@+

Seby9576 commented 2 years ago

Salut

Sais tu si ta prise sonoff est compatible en maillage avec le zbmini stp ?

jbromain commented 2 years ago

Salut @Seby9576,

Je ne suis pas sûr de comprendre la question, mais elle soulève peut-être un souci. Dans Abeille > Réseau > Table des liens, mes deux prises Sonoff ne ressortent pas dans la première colonne (en tant que routeurs). En revanche dans le graphique des liens ils sont bien en bleu (comme les autres routeurs).

C'est peut-être parce qu'ils ne répondent pas à l'interrogation d'Abeille pour construire le tableau des liens, je ne sais pas. En tout cas aucun équipement terminal ne semble connecté à ces prises, ils ont des liens uniquement avec d'autres routeurs. (C'est peut-être aussi simplement parce que c'est les derniers équipements que j'ai ajoutés et que les équipements terminaux n'ont pas eu à changer de route)

Bref, beaucoup de suppositions.

Pour répondre en partie à ta question, j'ai deux zbmini sur mon réseau, et ils ont bien des liens avec les prises sonoff.

tcharp38 commented 2 years ago

@jbromain Peux tu forcer une interrogation reseau et via la page support me filer

jbromain commented 2 years ago

J'ai fait les maj (jeedom et abeille) sur les dernières Beta ce matin, et je n'ai actuellement plus rien qui marche. (Les commandes actions s'exécutent bien, mais plus rien ne remonte). J'ai rebooté le raspberry, aucun changement.

Si tu as une piste je suis preneur, sinon je restaurerai ma dernière sauvegarde et je forcerai l'interrogation comme demandé.

jbromain commented 2 years ago

@tcharp38 En fait Abeille reçoit bien des infos mais tout passe en "Type=8002/Data indication". Dans le code, on dirait que ça signifie que l'équipement est inconnu de la zigate, comme si tout avait été oublié.

C'est possible ça ? Si oui il doit y avoir un méchant bug dans la dernière beta. (Et je suis bon pour tout ré-associer...)

Edit 12h26: fonctionnement rétabli après restauration de la sauvegarde; c'est donc plutôt un bug logiciel coté Abeille sur la dernière beta, mais ça n'a pas réinitialisé la mémoire de la zigate. (Tu veux que j'ouvre une issue ?)

tcharp38 commented 2 years ago

File moi le package de logs que je regarde

jbromain commented 2 years ago

AbeilleLogs-211209.tar.gz

Voila. Avant 12h23: version la plus récente d'Abeille et Jeedom (beta) -> Aucun attribut ne remonte dans Jeedom J'ai restauré ma sauvegarde d'hier à 12h23 (Abeille version beta du 03/12/2021) -> Fonctionnement ok

(Tu peux oublier le problème de routage éventuel des prises sonoff, après ré-interrogation elles remontent bien en tant que routeur dans la table des liens, y compris avec des end devices - Sujet clos)

Merci !

tcharp38 commented 2 years ago

Trouvé: tu as un vieux FW. Version 3.1A. Donc je crois que je sais ce qui cause ce souci. Peux tu

jbromain commented 2 years ago

Ah c'est relatif au mode "hybride" forcé que j'ai vu dans le changelog ? Ca me faisait peur ce truc :)

(Je re-lance l'update et je te tiens au courant, merci)

tcharp38 commented 2 years ago

Pour info, je considere tout FW avant la 3.1D obsolete. Tous les travaux sont basés la dessus. Impossible de gerer les differences. C'est juste un cauchemar. Donc Abeille requiere une version >= 3.1D De toute facon certains clusters ne pourraient etre supportés avant la 3.1D.

jbromain commented 2 years ago

(Je sais pour le firmware, j'ai juste peur de devoir tout ré-associer y compris les modules cachés dans les murs et tous les devices qui ont besoin d'être à coté de la zigate pour s'associer... je le ferai le jour où j'aurai pas le choix ;))

Le mode "Normal" permet de rétablir le bon fonctionnement, donc RAS. La prise Sonoff Smart Plug (objet initial de cette issue) est parfaitement reconnue à présent (suppression/ré-inclusion effectuée sans mon fichier local), donc sujet clos.

Merci !

tcharp38 commented 2 years ago

Reste en 3.1A. Tu pourra retester sur la beta de demain.

jbromain commented 2 years ago

Trop tard... j'ai cédé et mis à jour en 3.1e legacy (ça s'est bien passé). En 3.1a je devais recliquer sur mode normal après chaque redémarrage, ça m'aurait vite énervé ;)

jbromain commented 2 years ago

@tcharp38 Pour info suite à maj du firmware de la zigate l'assistant de découverte fonctionne parfaitement !

tcharp38 commented 2 years ago

Ok. Tant pis pour le test. Je laisserai faire d'autres users. J'ai ajouté un message si FW < 31D mais oui effectivement l'assistant doit beneficier de qq correctifs.

Seby9576 commented 2 years ago

Salut, désolé je viens tardivement mais moi la BETA n'a eu aucun n'impact mais je suis en 3.1D. Perso j'avais mit à jours la zigate sur eedomus mais je sais pas comment on fait sur jeedom. Par contre moi si je vais dans réseau j'ai ca : image

tcharp38 commented 2 years ago

Question bete: T es sur que ta session n'est pas trop vieille ?

Seby9576 commented 2 years ago

Tu veux dire quoi par session ?

tcharp38 commented 2 years ago

Tu laisse ton navigateur trop longtemps ouvert sans t en servir. Jeedom coupe la connexion mais laisse la page en l etat. Tu ne t en apercois que lors que tu fais un rafraichissmeent de la page.

Seby9576 commented 2 years ago

non, si tu fais référence au message du réseau ce n'est pas du tout le cas.

tcharp38 commented 2 years ago

Je ne reproduis pas ce souci. @jbromain et toi ?

jbromain commented 2 years ago

@tcharp38 Je viens de réussir à reproduire le souci: image

Pour cela j'ai été dans le dernier onglet ("Routes" de mémoire) et j'ai fait "Tout interroger". Ca a mouliné une ou deux minutes mais rien ne s'est affiché. Ensuite en revenant sur Abeille > Réseau, on a le message d'erreur (et plus accès aux fonctions d'interrogations ni aux onglets).

Le souci semble venir de l'interrogation des routes. (Qui n'était pas possible avec ma vieille version du firmware jusqu'à hier)

Edit: dis-moi si tu veux des logs

tcharp38 commented 2 years ago

Merci pour ce retour mais manque de pot je ne reproduis toujours pas. L'un de vous peut il ouvrir la console javascript (F12 surement) et essayer de voir ou ca plante en cliquant sur la ligne en erreur comme suit ?

image

jbromain commented 2 years ago

L'erreur est en PHP: image

tcharp38 commented 2 years ago

Tu peux afficher la partie "source" pour voir le code concerné ? Et oui pas de doutes que c est cote PHP.

jbromain commented 2 years ago

En fait il y a une requête Ajax vers cette URL quand on clique sur "Réseau" (requête censée retourner le contenu de la popup a priori): /index.php?v=d&plugin=Abeille&modal=AbeilleNetwork.modal

Cette requête retourne le code HTML suivant (onglet "Response"), qui est affiché dans la popup: <div class="alert alert-danger div_alert"><span id="span_errorMessage">Call to a member function getName() on null</span></div>

Rien d'autre de pertinent coté client.

tcharp38 commented 2 years ago

J'ai une piste. Vous devez avoir un equipement sans parent associé je suppose. A tout de suite

tcharp38 commented 2 years ago

A tester AbeilleNetwork.modal.php.zip

Pour desktop/modal Et recharger la page

jbromain commented 2 years ago

Bien vu, le souci disparait en mettant un parent à ma ruche (seul équipement qui n'en avait pas). Je remet comme avant, et teste ta modif.

jbromain commented 2 years ago

@tcharp38 Je confirme que le nouveau fichier corrige le problème. Merci :)

tcharp38 commented 2 years ago

Sera dans la beta de demain. Ce sujet "Sonoff S26R2ZB" est clos. On ne melange plus rien :) merci