KiwiHC16 / Abeille

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

Revoir Ping 15 min #1408

Closed KiwiHC16 closed 3 years ago

KiwiHC16 commented 4 years ago

cron15 Ping NE with 220V to check Online status

Revoir cette partie pour faire quelque chose de mieux.

tcharp38 commented 4 years ago

Bon sang... ils saoulent ces merges qui font des surprises. Je suis quasi sur d'avoir déja livré une modif il y a un moment pour cette partie qui empechait d'interroger un equipement "désactivé". Tu l'avais intégré.

Je vais voir si je retrouve sinon je refais.

KiwiHC16 commented 4 years ago

Regardes peut etre dans l historique quand, sur quel commit on aurait perdu l info.

tcharp38 commented 4 years ago

Pas retrouvé mais je me demande si j'ai pas mélangé avec mon PR sur cron() qui lui est la.

Quoi qu'il en soit j'ai refais une passe sur cron15 [2020-11-17 18:30:07][DEBUG] : Starting cron15 ------------------------------------------------------------------------------------------------------------------------ [2020-11-17 18:30:07][DEBUG] : Check USB driver potential crash [2020-11-17 18:30:07][DEBUG] : cron15(): Interrogation des équipements sur secteur. [2020-11-17 18:30:07][DEBUG] : cron15(): Interrogation adresse 68CB [2020-11-17 18:30:07][DEBUG] : Envoi du message topic: TempoCmdAbeille1/68CB/Annonce&time=1605634207 payload: 01 vers 123 [2020-11-17 18:30:07][DEBUG] : Msg sent: {"topic":null,"payload":null,"priority":null,"message":{"topic":"TempoCmdAbeille1\/68CB\/Annonce&time=1605634207","payload":"01"}} on queue: 123 [2020-11-17 18:30:07][DEBUG] : cron15(): Interrogation adresse 6B65 [2020-11-17 18:30:08][DEBUG] : Envoi du message topic: TempoCmdAbeille1/6B65/Annonce&time=1605634230 payload: 01 vers 123 [2020-11-17 18:30:08][DEBUG] : Msg sent: {"topic":null,"payload":null,"priority":null,"message":{"topic":"TempoCmdAbeille1\/6B65\/Annonce&time=1605634230","payload":"01"}} on queue: 123 [2020-11-17 18:30:08][DEBUG] : cron15(): Interrogation adresse 7A30 [2020-11-17 18:30:08][DEBUG] : Envoi du message topic: TempoCmdAbeille1/7A30/Annonce&time=1605634254 payload: 01 vers 123 [2020-11-17 18:30:08][DEBUG] : Msg sent: {"topic":null,"payload":null,"priority":null,"message":{"topic":"TempoCmdAbeille1\/7A30\/Annonce&time=1605634254","payload":"01"}} on queue: 123 [2020-11-17 18:30:08][DEBUG] : cron15(): Interrogation adresse 8696 [2020-11-17 18:30:08][DEBUG] : Envoi du message topic: TempoCmdAbeille1/8696/Annonce&time=1605634277 payload: 01 vers 123 [2020-11-17 18:30:08][DEBUG] : Msg sent: {"topic":null,"payload":null,"priority":null,"message":{"topic":"TempoCmdAbeille1\/8696\/Annonce&time=1605634277","payload":"01"}} on queue: 123 [2020-11-17 18:30:08][DEBUG] : cron15(): Interrogation des équipements nécessitant un polling. [2020-11-17 18:30:08][DEBUG] : Ending cron15 ------------------------------------------------------------------------------------------------------------------------

tcharp38 commented 4 years ago

@KiwiHC16 Je viens de pousser un update mais je pense qu'on peut faire encore mieux.

Toutes les 15 mins on cherche à raffraichir le status des equipements sur secteur mais l'un d'eux a donné des nouvelles dans les 15 dernieres minutes on le reinterroge quand meme. Dans l'idée de ne pas saturer les queues de messages pas nécessaires, que penses tu de verifier la date du dernier message pour voir si c'est nécessaire ? Le "Time-Time" ou "Time-Timestamp" ca donne bien la date du dernier message reç de l'equipement n'est ce pas ?

KiwiHC16 commented 4 years ago

Oui "Time-Time" ou "Time-Timestamp" donne bien la date du dernier message pour cet equipement. C est une bonne idée.Ca veut dire qu'on peut ping entre 15min et 29min mais comme le timeout est à 60, on peut esperer avoir au moins deux messages. Si on descend trop bas avec juste un message, il y risque de perdre un message de temps a autre et d etre en timeout.

tcharp38 commented 4 years ago

Par curiosité pourquoi penses tu qu'on puisse perdre un message ? A quel niveau ? De tete la stack de la zigate relance elle meme le message sur le reseau quand il n'est pas acquité non ?

KiwiHC16 commented 4 years ago

Tous les messages ne sont pas forcement acquités. C'est de la radio...

tcharp38 commented 3 years ago

@KiwiHC16 Tu as un exemple d'eq qui a besoin de polling 15min ? Il est sur batterie ? Secteur ?

tcharp38 commented 3 years ago

[2020-11-26 10:15:05][DEBUG] : cron15: Démarrage -------------------------------- [2020-11-26 10:15:05][DEBUG] : cron15: Interrogation des équipements sur secteur, sans nouvelle depuis plus de 15mins. [2020-11-26 10:15:05][DEBUG] : cron15: Interrogation des équipements nécessitant un polling 15mins. [2020-11-26 10:15:05][DEBUG] : cron15:Terminé -------------------------------- [2020-11-26 10:30:05][DEBUG] : cron15: Démarrage -------------------------------- [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation des équipements sur secteur, sans nouvelle depuis plus de 15mins. [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation de 'Volet C1' (adresse BFF8) [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation de 'Volet C2' (adresse A0D0) [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation de 'Volet C3' (adresse C331) [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation de 'Volet CU' (adresse 6991) [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation de 'Volet SM' (adresse 8F26) [2020-11-26 10:30:05][DEBUG] : cron15: Interrogation des équipements nécessitant un polling 15mins. [2020-11-26 10:30:05][DEBUG] : cron15:Terminé --------------------------------

KiwiHC16 commented 3 years ago

l'idée est qu une ampoule par exemple ne va pas remonter d infos pendant des heures et donc Abeille var la considerer en timeout. D ou le ping.

tcharp38 commented 3 years ago

Ok mais une ampoule c est consideré comme un eq sur secteur non ?

KiwiHC16 commented 3 years ago

Comme on perdre une ampoule (débranchée, bug, ...) on l a ping. Pour l instant on ping sur battery_type qui est defini dans le modele et autre. Lors de l inclusion l equipement partage des infos et par exemple le fait qu il soit sur secteur ou non. Actuellement Abeille met ces infos à la poubelle. Il faudrait les recuperer et adapter le cron.

tcharp38 commented 3 years ago

@KiwiHC16 J'ai encore besoin de clarifications. Désolé. Ma comprehension est la suivante le point à detailler est le "poll 15"

  1. le cron15 fait 2 choses: ping des eq sur secteurs pour savoir s'ils sont toujours vivants et ping des eq configurés en "poll 15" pour recuperer un etat
  2. si configuré en poll 15 il est forcement sur secteur
  3. on ne stocke (pas encore) pas l'info secteur/batterie tiré de l'inclusion. Pour savoir si un eq est sur secteur on se base sur le fait que le type de batterie est defini ou non dans la config

Tu confirmes ces points ? En particulierle point 2. Pour moi ca ne fait pas de sens d'interroger un eq sur batterie puisque par definition ce dernier ne "parle" que lorsqu'il a besoin pour economiser la batterie.

KiwiHC16 commented 3 years ago

Exact

tcharp38 commented 3 years ago

Cool. Derniere question. Tu te rappelles l'idée derriere les calculs suivants ? $i c'est le nbre de message d'interrogation. Quels sont les 23 et 13 ? Et pourquoi 60 *15 ? Merci

    if (($i * 23) > (60 * 15)) {
        message::add("Abeille", "Danger ! Il y a trop de messages à envoyer dans le cron 15 minutes. Cas A.", "Contacter KiwiHC15 sur le forum");
    if (($i * 13) > (60 * 15)) {
        message::add("Abeille", "Danger ! Il y a trop de messages à envoyer dans le cron 15 minutes. Cas B.", "Contacter KiwiHC16 sur le forum");
KiwiHC16 commented 3 years ago

Je viens de rajouter les info MacCapa dans la conf des abeilles. Maintenant on peut utiliser getConfiguration sur la valeur "RxOnWhenIdle": si 1 on peut interroger, si 0 on ne peut pas.

KiwiHC16 commented 3 years ago

Pour lisser la charge de messages, Les interrogations sont envoyées toutes les 23s. Nb Abeilles a interroger fois 23s doit etre < 15 minutes, sinon le poll suivant va demarrer avant que le precedent ne soit fini.

tcharp38 commented 3 years ago

Les interrogations sont envoyées toutes les 23s. Nb Abeille *23s doit etre < 15 minutes, sinon le poll suivant va demarrer avant que le precedent est fini.

Le choix de 23s vient de qq part ou au hasard ?

KiwiHC16 commented 3 years ago

Aleatoire pour eviter les classique 5, 10, 15 et autres....

Je viens de rafraichir la fonction. Bien plus propre je pense maintenant.

tcharp38 commented 3 years ago

Ha, tu as modifié cette partie ?! Je vais voir ce que ca donne avec mes modifs du coup

tcharp38 commented 3 years ago

J'ai l'impression qu'il y a des choses qui ont disparu. Ton RxOnWhenIdle indique si l'eq peut recevoir un message tout le temps donc c'est surtout pour les equipements sur batterie non puisque ceux sur secteur eux restent toujours actifs. C'est ca?

KiwiHC16 commented 3 years ago

AC indique si l equipement est sous secteur Rx indique si l equipement ecoute tout le temps. Donc c est celui ci qu il nous faut je pense.

J'ai simplifier le code. Je ne pense pas avoir enlevé de fonction.

Il y a une fct qui a visiblement sauté suite à tes modifs. Si je ne trouve pas le modele avec le nom, jessaye avec le device ID, sinon modele default. Dans le code actuel je ne suis pas sure que l option modele sur device I existe encore. Je crois qu elle a sauté.

Je fais aussi des changements sur la procedure d'inclusion mais la j ai un soucis qu il faut que je comprenne avec de push.

KiwiHC16 commented 3 years ago

Ca semble bon maintenant.