Rafraîchir infos d'un objet script

Bonjour,

j’ai utilisé des scripts python pour allumer, éteindre et connaître le status de mon videoprojecteur Sony qui n’utilise malheureusement pas le protocole pjlink mais pj talk.
Lorsque j’allume le vidéo projecteur, il passe par plusieurs status avant de passer en POWER_ON.
Lorsqu’il est éteint, son status est STANDBY.

Comme je ne souhaite pas gaspiller de la ressource, je ne veux pas utiliser la fonction auto-actualisation.
Comment forcer le rafraichissement d’une info script par un scenario?
Comment forcer le rafraichissement d’affichage d’une tuile par scenario (pareil à appuyer sur les 2 flèches recyclage en haut à droite d’une tuile)?

j’ai essayé le code

eqLogic::byId(10673)->updateInfo();

ou dans un bloc action :

#[Salle de sport][Sony vidéoprojecteur][Rafraichir]#

mais ça ne marche pas.
C’est seulement quand j’appuie sur les flèches de rafraichissement de la tuile que l’info se met à jour

Bonsoir,

Essai plutôt eqLogic::byId(10673)->refreshWidget();

L’objet a pour id unique 436 et l’info a pour id 10673.
tuile sony

j’ai essayé eqLogic::byId(10673)->refreshWidget(); sans succès
j’ai aussi essayé eqLogic::byId(436)->refreshWidget(); également sans succès

Juste : eqLogic::byId(436)->refresh();

1 « J'aime »

Merci,

ça fonctionne!

Euh non…finalement ça ne marche pas.
J’ai trouvé un moyen de contourner le problème en créant une action avec le même script que l’info. Et j’ai lancé dans mon scenario une boucle avec l’action « STATUS REFRESH » jusqu’à obtenir, soit STANDBY, soit POWER_ON.

Par contre, je suis quand même preneur pour du code pour relancer régulièrement le refresh des infos dans objet script.

Bonjour,

Je ne comprends pas le délire ici, c’est juste la commande action refresh de l’équipement… :upside_down_face:

peut-être que ça te semble idiot mais quand j’avais mis
#[Salle de sport][Sony vidéoprojecteur][Rafraichir]#
ça ne fonctionnait pas.

Quand on lance une action dans un objet script, cela met à jour les commande infos une seule fois.
Je ne voulait pas utiliser la fonction auto-actualisation car c’est inutile la plupart du temps.
Le vidéoprojecteur met du temps à s’allumer et à s’éteindre. Il me fallait un scenario qui relance régulièrement la mise à jour des commandes infos jusqu’à obtenir STANDBY ou POWER_ON.
Toutes mes tentatives précédentes ne mettaient pas à jour l’info sur la tuile même après la boucle de 15 tentatives, alors qu’il suffisait d’appuyer sur les flèches refresh de la tuile pour avoir l’info actualisée.
Visiblement, je n’ai toujours pas trouvé la méthode pour forcer le lancement d’une commande info script.
Par contre, je sais lancer une commande action script.

Si tu as la commande magique pour forcer une commande info script à se rafraîchir et à rafraîchir la donnée sur la tuile, je suis preneur.

La double flèche en haut à droite sur les tuiles jeedom,
c’est la commande « Rafraichir » dont je parle juste au dessus pourtant; c’est le cas sur tous les équipements de tous les plugins (utilisant les tuiles du core)

je comprends. Elle se trouve dans les commandes avancées. Je l’avais mis dans mon scenario à la place de la commande action script mais l’info STATUS ne se mettait pas à jour.

Voici l’équipement complet :

et le scenario initial :

qui ne marchait pas

tuile sony

Appuyer sur ON ou OFF lance le scenario après le lancement du script python associé

Si je ne me trompe pas, chaque élément de la boucle du scenario durant 3 secondes, si on surveille la tuile, on devrait voir les flèches tourner toutes les 3 secondes au moment du lancement de l’action #[Salle de sport][Sony vidéoprojecteur][Rafraichir]# et ensuite l’info STATUS s’actualise.

Malheureusement, ce n’est pas le cas. Si quelqu’un arrive à reproduire ce dysfonctionnement, cela permettrait de pointer du doigt un bug du core ou du plugin script. Ou alors je me plante et je ne lance pas la bonne action « Rafraichir ».

Je viens de tester quand même, chez moi c’est OK :thinking:

image

------------------------------------
[2024-05-06 08:43:46][SCENARIO] -- Début : Scenario lance manuellement.
[2024-05-06 08:43:46][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-05-06 08:43:46][SCENARIO] Exécution d'un bloc élément : 1474
[2024-05-06 08:43:46][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-05-06 08:43:46][SCENARIO] Exécution d'un bloc code
[2024-05-06 08:43:46][SCENARIO] Fin correcte du scénario

image

Par contre je confirme, @Mips, que j’ai le même comportement chez moi en 4.4.3 et sur cette version du plugin 2024-01-11 12:54:18 : la commande Rafraichir ne fait visiblement rien. Pas trop le temps d’aller plus loin dans l’analyse pour le moment.

------------------------------------
[2024-05-06 08:46:43][SCENARIO] -- Début : Scenario lance manuellement.
[2024-05-06 08:46:43][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-05-06 08:46:43][SCENARIO] Exécution de la commande [Météo][Market Blitzortung][Rafraichir]
[2024-05-06 08:46:44][SCENARIO] Exécution d'un bloc élément : 1474
[2024-05-06 08:46:44][SCENARIO] Fin correcte du scénario
------------------------------------
[2024-05-06 08:47:29][SCENARIO] -- Début : Scenario lance manuellement.
[2024-05-06 08:47:29][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-05-06 08:47:29][SCENARIO] Exécution de la commande [Météo][Market Blitzortung][Rafraichir]
[2024-05-06 08:47:29][SCENARIO] Exécution d'un bloc élément : 1474
[2024-05-06 08:47:29][SCENARIO] Fin correcte du scénario

→ Mais le dernier refresh reste à 08:43:46

un extract de la fonction execute:

	public function execute($_options = null) {
		if ($this->getLogicalId() == 'refresh') {
			$this->getEqLogic()->refresh();
			return;
		}

donc la commande rafraichir fait un appel à refresh comme dans ton bloc code;
je viens de tester à l’instant et ca fonctionne

par contre je réalise que ce n’est pas une bonne idée d’avoir nommé la fonction « refresh » car les class parents (cmd & eqLogic) définissait déjà cette méthode et donc on redéfini celle-ci mais ca ne fait pas du tout la même chose donc on ne peut pas! ca peut clairement avoir des effets de bord; pourquoi chez certains et pas d’autres? est-ce vraiment ca? je ne sais pas mais pour selon moi ca ne sert à rien d’essayer de debug sans nettoyer le code d’abord;
je ne comprend pas cmt ca n’a jamais posé problème auparavant

je vais faire un PR mais ca va casser tous les blocs codes de ce genre eqLogic::byId(436)->refresh(); (qui n’étaient de toute façon pas une bonne idée je trouve)

Du coup en appelant la commande « Rafraichir » dans un scénario, chez toi ça marche ?
Il ne va pas être simple de trouver la raison mais en effet c’est fait bizarrement.

1 « J'aime »

oui, j’ai déjà répété plusieurs fois le test, avec différentes commandes info, je ne reproduis pas le problème

mon PR est là: patch refresh functions by Mips2648 · Pull Request #89 · jeedom/plugin-script · GitHub
je pense que ca ne vaut pas la peine de tester plus sans ce PR, si accepté alors on verra après ce qu’il en est (mais donc chez moi ca fonctionnait aussi avant ces modifs)

1 « J'aime »

ma version jeedom est 4.4.5,
si ça peut aider

:white_check_mark: C’est ok pour moi maintenant avec ton code. La fonction de refresh fait bien son job en étant appelée depuis un scénario (par exemple)

1 « J'aime »

Pardonnez-moi mais du coup, est-ce qu’il y a une modification de code à faire soi-même ou une mise à jour du plugin script ou du core jeedom à attendre?

La modification que j’ai faite est disponible en beta aujourd’hui.

merci pour votre aide.
En général, il faut combien de temps pour que les versions bêta deviennent stables?
Je suis en version stable. Ma maison tourne sur jeedom, je ne voulais pas prendre trop de risques de plantage.

A priori il faudra au moins le temps que vous confirmiez que cela fonctionne en beta.

On ne va pas passer du code en stable alors qu’on ignore si cela règle le problème…

1 « J'aime »

ok. je vais passer mon core en bêta le temps de vérifier