KiwiHC16 / Abeille

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

Bouton pour remplacer un ghost par le vrai équipement. #1055

Closed KiwiHC16 closed 3 years ago

Soyann commented 4 years ago

Hello, Alors je sais pas du tout si je suis à coté de la plaque, mais voici un angle d'attaque qui pourrait t'aider dans ta réflexion (avec mes mots d'ignare, si on parle bien de la même chose): Tout comme le plugin sait faire automatiquement une mise à jour d'objet, s'il détecte qu'elle est déjà référencée, il faudrait un bouton* sur la page de l'équipement fantôme qui puisse permettre d'aller pointer un autre objet (par son ID ou son 'Topic Abeille'), et qui désignerait l'objet actif correspondant à l'abeille (il faudra mettre un gros message d'avertissement avant d'appliquer la modification, en expliquant que toute fausse manœuvre peut rendre le système instable si l'on n'est pas absolument certain de ce que l'on fait!). Une fois validé, l'objet fantôme récupérera toutes les informations nécessaires à sa reconnaissance (IEEE...), supprimera l'objet actif, puis effectuera une mise à jour comme sur l'inclusion d'un objet connu. Voilà, je ne sais pas si c'est réalisable, si je suis clair dans mes propos, mais ça éviterait bien des tracas aux utilisateurs, si on se retrouve avec deux objets pour une abeille (dont une avec une série d'interactions, et forcément pas le bon :p ), dans le cadre d'une mise à jour du système, d'une mise à jour de firmware de zigate, lors du passage d'une zigate à une autre, remplacement d'un capteur...

Merci pour tout

*A coté de ce bouton, il faudra (si c'est réalisable) mettre un point interrogation pointant vers http://kiwihc16.free.fr/Remplacement.html , avec une mise à jour à faire de cette dernière ;)

tcharp38 commented 4 years ago

@KiwiHC16 Si je me trompe pas quasiment tous les messages venant d'un equipement viennent avec l'adresse courte. Du coup comment on peut arriver à ce cas d'adresse short "inconnnue" ?

KiwiHC16 commented 4 years ago

Je ne me souviens plus du sujet !!! L'idée de Soyann me tourne dans la tête depuis longtemps et est réalisable maiis je prefererai réglé le probleme de fond que de devoir faire une verrue. Je change le titre pour l idée Soyann.

tcharp38 commented 4 years ago

Ok donc c'est bien une situation anormale. Du coup en ligne avec toi. Pb de fond à resoudre mais si qqn a un cas concret je suis preneur.

Soyann commented 4 years ago

hello, Pour le problème de fond, je crois que ça s'est surtout produit lors d'une maj de début d'année, mais depuis je ne lis plus de messages indiquant ce pb. Pour la 'verrue', comme dit plus haut, elle peut servir pour plein d'autres cas: (maj firmware avec RAZ EPROM, swap capteur, bascule d'objet d'une zigate à une autre...) afin de ne pas migrer commande par commande + historique + widget pour chaque abeille

Merci beaucoup à vous 2

tcharp38 commented 4 years ago

@Soyann Je vois ou tu veux en venir. Néanmoins malgre mon peu de connaissances du zigbee je ne vois pas comment certaines choses peuvent se faire. En particulier "migrer un objet d'une zigate à une autre".. pour moi ca veut dire forcer l'objet à changer de réseau. Je ne sais pas si ce genre de possibilité existe au niveau Zigbee donc Abeille et meme zigate ne pourraient pas faire grand chose à ce stade. @KiwiHC16 , je me trompe ?

Soyann commented 4 years ago

Après pour ces cas, dans mon imagination, ça serait: -on a des objets créés (et tout ce qui va avec) -suite à une opération quelconque, on inclus le 'nouvel' objet -après, dans ma vision de petit utilisateur, il 'suffit' de dire à abeille (comme dans le plugin RFXcom) "Cet objet Jeedom est en fait cette Abeille" (donc transfert de l'adresse courte, réseau & autres paramètres de l'objet 'actif' vers l'objet mort, puis suppression du doublon inutile)

tcharp38 commented 4 years ago

Je reconnais que ca serait plutot pratique :) Mais comme je t'ai dis, pas sur que le protocole lui meme autorise tout ça. Zigbee est + secure que Rfxcom.

KiwiHC16 commented 4 years ago

Je n ai jamais vu dans le protocole l option de basculer d un réseau a un autre. Maintenant c est probablement jouable car on peut sortir un équipement du réseau 1 et mettre le réseau 2 en inclusion. Dans ce cas une grande majorité des équipements quittent le réseau 1 et comme ils n ont plus de réseau ils vont chercher une réseau ouvert. Hors ici on aura ouvert le resseau 2 donc devrait le rejoindre. Jamais essayer mais ça devrait le faire.

KiwiHC16 commented 4 years ago

Dans la proposition de Soyann ça peut servir dans différentes situations et les fonctions existent déjà dans le corps de Jeedom. Il faut faire une fonction qui fait les appels qui vont bien pour remplacer les commandes et reporter les historiques. Mon idee est de faire cela pour deux équipements identiques.

tcharp38 commented 4 years ago

Je n ai jamais vu dans le protocole l option de basculer d un réseau a un autre. Maintenant c est probablement jouable car on peut sortir un équipement du réseau 1 et mettre le réseau 2 en inclusion. Dans ce cas une grande majorité des équipements quittent le réseau 1 et comme ils n ont plus de réseau ils vont chercher une réseau ouvert. Hors ici on aura ouvert le resseau 2 donc devrait le rejoindre. Jamais essayer mais ça devrait le faire.

Hmm t'es sur ? Entrer dans un reseau n'est pas automatique n'est ce pas ? Sur tous les equipements on fait une procedure particuliere d'inclusion. Du coup le reseau 1 ne sera plus la mais j'ai l'impression que le device va pas demander à rentrer dans un autre tout seul. En terme de securité ca me semble inacceptable. Je serais vraiment surpris mais tu as peut etre raison.

KiwiHC16 commented 4 years ago

Je pense que cela fonctionne pour certain equipement mais le risque de ne pas fonctionner est grand et il y tellement d autres sujets avant celui ci ...

KiwiHC16 commented 3 years ago

Replace Cmd by Id:

<a class="btn btn-xs btn-warning roundedLeft" id="bt_cmdConfigureReplaceIdByMe"><i class="fas fa-upload" aria-hidden="true"></i> Cette commande remplace l'ID</a>
=> desktop/modal/cmd.configure.php:$('#bt_cmdConfigureReplaceIdByMe').off('click').on('click',function(){
=> jeedom.cmd.replaceCmd
=> core/js/cmd.class.js:jeedom.cmd.replaceCmd = function (_params) {
=> core/ajax/cmd.ajax.php:      if (init('action') == 'replaceCmd') {
=> ajax::success(jeedom::replaceTag(array('#' . str_replace('#', '', init('source_id')) . '#' => '#' . str_replace('#', '', init('target_id')) . '#')));
=> jeedom::replaceTag

e.g. jeedom::replaceTag(array('#17009#'=>'#17251#'));

<a class="btn btn-xs btn-warning" id="bt_cmdConfigureReplaceByMe"><i class="fas fa-upload" aria-hidden="true"></i> Cette commande remplace la commande </a>

<a class="btn btn-xs btn-warning roundedRight" id="bt_cmdConfigureReplaceMeBy"><i class="fas fa-download" aria-hidden="true"></i> Remplacer cette commande par la commande</a>

Copy History Cmd:

<a class="btn btn-warning" id="bt_cmdConfigureCopyHistory"><i class="fas fa-clone"></i> Copier l'historique de cette commande sur une autre commande</a>
=> desktop/modal/cmd.configure.php:$('#bt_cmdConfigureCopyHistory').off('click').on('click',function(){
=> jeedom.history.copyHistoryToCmd
=> core/js/history.class.js:jeedom.history.copyHistoryToCmd = function (_params) {
=> core/ajax/cmd.ajax.php - copyHistoryToCmd
=> ajax::success(history::copyHistoryToCmd(init('source_id'), init('target_id')));
=> history.class.php -> public static function copyHistoryToCmd($_source_id, $_target_id) {

e.g. history::copyHistoryToCmd('#17009#', '#17251#'));

Remove Eq:

<a class="btn btn-danger  eqLogicAction pull-right" data-action="remove"><i class="fa fa-minus-circle"></i>  Supprimer</a>
=> js/administration.js:  tr += '<a class="objectSummaryAction cursor" data-l1key="remove"><i class="fas fa-minus-circle"></i></a>';

e.g. eqLogic::remove()

KiwiHC16 commented 3 years ago

1069

KiwiHC16 commented 3 years ago

DOne in master.