Problème de rafraichissement

Bonjour,

Je rencontre un soucis avec le rafraichissement automatique, j’ai l’erreur suivante dans les logs dès que je l’active (passage à 30s dans la configuration du plugin + case cochée sur la guirlande) :

Erreur sur kTwinkly::refreshstate() : Call to a member function execute() on bool

Si quelqu’un a une idée.

Merci !

Bizarre, c’est comme si la commande refresh n’existait pas sur ton équipement.
Je jette un oeil ce soir pour voir si j’arrive à reproduire le problème.

K.

C’est ce que je me suis dit aussi.
J’ai bidouillé un peu le code et en ajoutant des logs, on peut pourtant voir que la création de la commande refresh se fait (en tout cas on passe dans le code de création) mais la commande Refresh n’apparait jamais sur l’équipement.
N’hésite pas si tu as besoin de plus d’infos et merci :slight_smile:

La commande est masquée, donc c’est normal qu’elle n’apparaisse pas, mais elle devrait être utilisable par le code. Il faudrait voir dans la methode refreshstate ce que renvoie $eqLogic->getCmd(null, « refresh »), puisque c’est sur ce résultat que s’applique le execute() qui devrait faire le refresh…

J’avoue que je n’utilise pas l’autorefresh, donc c’est possible qu’un bug soit apparu lors d’une mise à jour.

Je me penche dessus là ce soir.

K.

j’ai déjà l’impression que les modifications faites dans la configuration du plugin ne déclenche jamais kTwinkly_update() car je n’ai jamais rien dans les logs :thinking:

En modifiant plusieurs choses, j’arrive à faire fonctionner MAIS il reste un bug que je n’explique pas.

Tout d’abord, j’ai passé la modification du deamonSleepTime dans le deamon_start (puisque la fonction ktwinkly_update n’est jamais déclenchée) :

$refreshFrequency = config::byKey('refreshFrequency','kTwinkly');
if (intval($refreshFrequency) > 0) {
	$cron->setDeamonSleepTime(intval($refreshFrequency));
	$cron->setEnable(1);
}
$cron->save();
$cron->run();

J’ai aussi modifié la fonction refreshUpdate le test !is_object ne déclenchait le execute uniquement si refreshCmd n’était pas un objet :

if (is_object($refreshCmd)) {
	$refreshCmd->execute();
}

Reste donc le bug qui fait que :

  • premier enregistrement de l’équipement => tout est nickel, le refresh automatique fonctionne
  • deuxième enregistrement => dans le postSave, ça détecte bien que la commande refresh existe et, si je fais un execute dans cette fonction, ça fonctionne. Mais refreshUpdate échoue car le retour de getCmd sur la commande refresh renvoie un bool comme si la commande n’existait plus
  • troisième enregistrement => de nouveau création de la commande, tout fonctionne.

Il y a donc un moment après le postSave qui « supprime » la commande refresh.

En espérant aider !

Merci des investigations.

Désolé, je n’ai pas eu le temps de regarder hier soir comme promis.
J’essaye de regarder aujourd’hui…

K.

Pas de soucis, y’a pas d’urgence et si je peux donner un coup de main :wink:

Alors ca fait un bout de temps que je n’ai pas touché au code…

Mais je ne vois pas comment l’autorefresh peut fonctionner avec le code actuel, la valeur de refreshFrequency n’est utilisée nulle part, et le seul cron implementé est un cronDaily.

A mon avis, j’avais commencé à implémenter la fonctionnalité, mais à cause des gros soucis que ca posait (impossible d’utiliser l’appli mobile en parallèle, etc.), j’avais abandonné.

J’avoue que je n’utilise pas du tout cette fonction. A part pour le paramétrage initial, je n’utilise plus l’appli mobile et je fais tout via Jeedom, donc le refresh est fait naturellement sans avoir besoin de « poller »…

Je pense qu’il faut considérer cette fonctionnalité d’autorefresh comme non fonctionnelle pour l’instant.

Je ne suis pas sur d’avoir le temps nécessaire pour travailler sur le sujet.
Le code étant public sur mon github, tout PR est le bienvenu…

K.

C’est bien parce que le refreshFrequency n’était utilisé nulle part que j’ai ajouté les commandes dans le deamon_start.

J’avoue ne pas être familier de Git Hub. J’ai tenté de faire une proposition de nouveau fichier, j’espère que j’ai fait correctement.