Affichage des icones météo conditionnelles (encore)

Jeedom Core : 4.4.7 (V4-stable)
DNS Jeedom : oui

Statut Démon : Stoppé (NA)
Version JC : 1.8.0.2 stable

Equipements :
  Ma Luna : v1.8.0 stable sur android [os : 31] (polling) - PA

Je reviens sur mon affaire d’affichage d’icones méteo.

J’ai écris des scenarios pour peupler 3 widgets de jeedom-connect, la météo actuelle, à 3h et à 6h en me servant des conditions données par le plugin #weather.

Je me suis servi des instructions de @tomitomas données ici.

J’ai donc écrit trois scenarios pour mes trois widget respectivement n°13 (meteo actuelle), n+2 (à 3h) et n°4 (à 6h). Je passe les 48x2 (jour et nuit) conditions qui sont toutes construites de la même manière:

$widgetId = 4;          // <<--- indiquez l'id du widget à modifer
$widgetKey = 'statusImages';     // <<--- indiquez la clé à modifier (ici le statut du widget)
$widgetValue = [

[
                        "index"=> 0,
                        "image"=> [
                            "source"=> "user",
                            "name"=> "weather/day/113.png",
                            "shadow"=> false
                        ],
                        "condition"=> "moment().add( moment.duration('06:00') ).format('HHmm') >=#[Salon][meteo][Lever du soleil]# &&moment().add( moment.duration('06:00') ).format('HHmm') <=#[Salon][meteo][Coucher du soleil]# && #[Salon][meteo][Numéro condition +2]#==1000"
                    ],
"index"=> 1,
                        "image"=> [
                            "source"=> "user",
                            "name"=> "weather/day/116.png",
                            "shadow"=> false
                        ],
                        "condition"=> "moment().add( moment.duration('06:00') ).format('HHmm') >=#[Salon][meteo][Lever du soleil]# &&moment().add( moment.duration('06:00') ).format('HHmm') <=#[Salon][meteo][Coucher du soleil]# && #[Salon][meteo][Numéro condition +2]#==1003"
                    ],
[
                        "index"=> 2,
                        "image"=> [
                            "source"=> "user",
                            "name"=> "weather/day/119.png",
                            "shadow"=> false
                        ],
                        "condition"=> "moment().add( moment.duration('06:00') ).format('HHmm') >=#[Salon][meteo][Lever du soleil]# &&moment().add( moment.duration('06:00') ).format('HHmm') <=#[Salon][meteo][Coucher du soleil]# && #[Salon][meteo][Numéro condition +2]#==1006"
                    ]

Avec une subtilité cependant pour distinguer les conditions de jour et les conditions de nuit :

JOUR


 "condition"=> "moment().add( moment.duration('06:00') ).format('HHmm') >=#[Salon][meteo][Lever du soleil]# &&moment().add( moment.duration('06:00') ).format('HHmm') <=#[Salon][meteo][Coucher du soleil]# && #[Salon][meteo][Numéro condition +2]#==1000"
                    ],

NUIT

"condition"=> " (moment().add( moment.duration('06:00') ).format('HHmm') < #[Salon][meteo][Lever du soleil]# ||moment().add( moment.duration('06:00') ).format('HHmm') > #[Salon][meteo][Coucher du soleil]#) && #[Salon][meteo][Numéro condition +2]#==1000"

autrement dit :

  • jour: heure> heure de lever du soleil ET heure < coucher du soleil ET condition de code meteo
  • nuit: (heure< heure de lever du soleil OU heure > coucher du soleil) ET condition de code meteo

ça marchait… et puis ça ne marche plus.

Aujourd’hui, j’ai depuis ce matin j’ai des icones de nuit pour les meteo actuelle et à 6h. Plus d’icone du tout pour la météo à 3h.
Je me crève les yeux sur les numéros de widget, les numéros de condition météo (+1, +2), tout semble fonctionner et du reste je n’est pas de log d’erreur, et les icones conditionnels des widgets semblent les bons.

Je ne comprends pas. J’ai soupçonné une affaire de cache, de fréquence de rafraichissement, mais vraiment je ne vois pas. Une idée ?




Oui… les conditions sont fausses !?

Ou l ordre des conditions ne sont pas les bonnes ? L application s arrete des que la 1ere conditions est respectée.


Ce que tu montres en tout cas

ne correspond pas a la description que tu en fais

Merci de ce retour.

Effectivement, dans l’exemple donné, je décale l’heure de 6h car je veux afficher l’état de la condition à ce moment-là, c’est-à-dire 6h plus tard.

Y’aurait-il une autre erreur que je ne verrait pas et qui devrait me crever les yeux ?

Merci !

Pas eu de reponse

Normalement ça ne devrait pas jouer car elles sont mutuellement exclusives. A chaque instant, il ne devrait y avoir qu’une seule de vérifiée. J’ai cependant du mal à le tester avec le testeur d’expression à cause du code moment().format('HHmm') (je crois que c’est du Javascript) qu’il ne sait pas interpréter.

Y’a un autre truc bizarre qui est peut-être la source mes ennuis:

  • sur le backoffice Jeedom Connect, mes trois widgets on comme Id, les numéros respectifs 13, 2 et 4 (météo actuelle, à 3h, à 6h).

Est-ce normal ?

Merci.

normalement le problème vient du côté de l’utilisateur, car les img sous conditions fonctionnent parfaitement depuis plusieurs années :slight_smile:

donc trouve la condition qui affiche l’icone actuelle, et c’est sur celle là qu’il faut regarder pk elle est considérée comme vrai à l’instant T


oui, normal.

Tu compares deux choses différentes.
d’ailleurs tu le dis toi même :

VS

sur ton app mobile, clic long sur le widget, éditer (et non personnaliser), clic sur le meme icone ‹ ? › et tu retrouveras bien les mêmes IDS 13, 2 et 4

1 « J'aime »

Bon… j’ai encore merdé. Reste à trouver où… Je vais tenter d’explorer ça. C’est curieux parce que les icones sont les bonnes en début de journée et puis après ce n’est plus le cas.

Je vais tenté de comprendre… Merci !

Bonsoir @tomitomas,

J’ai beau explorer mes conditions, je ne vois vraiment pas où est l’erreur. En me focalisant sur le scenario à 3h, j’ai réduit le nombre de condition à deux (jour et nuit, tous deux correspondant à la météo actuelle).

require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php';

$widgetId = 2;          // <<--- indiquez l'id du widget à modifer
$widgetKey = 'statusImages';     // <<--- indiquez la clé à modifier (ici le statut du widget)
$widgetValue = [

  
  [
                        "index"=> 52,
                        "image"=> [
                            "source"=> "user",
                            "name"=> "weather/night/392.png",
                            "shadow"=> false
                        ],
                        "condition"=> " (moment().add( moment.duration('03:00') ).format('HHmm') < #[Salon][meteo][Lever du soleil]# || moment().add( moment.duration('03:00') ).format('HHmm') > #[Salon][meteo][Coucher du soleil]#) && #[Salon][meteo][Numéro condition +1]#==1063"
                    ],
[
                        "index"=> 5,
                        "image"=> [
                            "source"=> "user",
                            "name"=> "weather/day/176.png",
                            "shadow"=> false
                        ],
                        "condition"=> "moment().add( moment.duration('03:00') ).format('HHmm') >=#[Salon][meteo][Lever du soleil]# && moment().add( moment.duration('03:00') ).format('HHmm') <=#[Salon][meteo][Coucher du soleil]# && #[Salon][meteo][Numéro condition +1]#==1063"
                    ],
  
                    ];
                    
JeedomConnectWidget::updateConfig($widgetId, $widgetKey, $widgetValue);

Et bien, ça marche ou pas. Je n’ai pas réussi à me faire une philosophie. J’ai changé les icones pour voir, testé les conditions que j’essaie d’afficher via le sous-titre. Par exemple la simple condition:

(moment().format('HHmm') <= #[Salon][meteo][Lever du soleil]# ) 

Par moment le sous-titre m’affiche le résultat (right, false), par moment il garde la formule non interprétée.

Tout cela me donne l’impression d’un problème de latence (mais parfois une grosse grosse latence). D’où mes deux questions:

  • Comment utiliser un mode DEBUG (si possible) pour voir quelle condition choisit réellement le système ?
  • Y’a-t-il un moyen de ne pas utiliser de cache qui peut peut-être être responsable de cette latence affichant des résultats qui ne sont pas ceux qu’on attend.

Merci de ton retour,

LL