Tuto : créer une page météo sur Jeedom Connect

Pour cette semaine qui s’annonce encore froide et nuageuse, je vous offre un petit tuto pour créer une page météo sur plugin-jeedomconnect

UPDATE du 21/05 : meilleur formatage des notifications des alertes météo
UPDATE du 06/09 : rajout d’un scenario pour gerer le changement d’icone pour la phase de la lune : Tuto : créer une page météo sur Jeedom Connect - #151 par ngrataloup
UPDATE du 27/09 : rajout des probabilités de pluie, gel, orage et neige sur la journée : Tuto : créer une page météo sur Jeedom Connect - #186 par ngrataloup
et option de formatage des heures Jeedom dans un format plus userfriendly : Afficher l’heure du lever et du coucher - #14 par ngrataloup
UPDATE du 14/07/23 : possibilité de mettre à jour les données méteo en fonciton de la position remontée par JC (pratique pour les departs en vacance) : Plugin méteofrance basé sur la géoloc - #12 par ngrataloup

pourquoi mettre la météo sur JC :
1 - Si JC est en mode launcher … on a la météo sur JC avec possibilité de lancer l’appli méteo si on souhaite plus de detail
2 - parceque ca permet de tout centraliser sur JC
3 - parceque c’est amusant :sweat_smile:

Ce tuto n’a pas vocation à être suivi à la lettre mais plutôt à vous donner quelques idées de tout ce qu’on peut faire avec JC.

Voilà ce que ca donne
image

Affichage de

  • la météo du moment (temps/temperature réelle et ressentie, l’humidité et la couverture nuageuse
  • la méteo d’aujourd’hui (temps, temperature min/max, quantité de pluie prevue et indice UV
  • les previsions sur les 3 prochains jours
  • le risque de pluie dans l’heure,
  • la qualité de l’air
  • les alertes méteo
  • les horaires de lever et coucher du soleil
  • un lien vers l’appli méteo presente sur le téléphone

2 plugins sont nécessaires plugin-meteofrance et plugin-airquality

les widget prevision
les 2 premiers widget En ce moment et Aujourd’hui, sont des widgets génériques numériques en mode
carte
Widget en ce moment :

Statut : [Météo Actuellement - Température]
Image : n'importe laquelle, on verra ceci plus tard, il en faut juste une
info complémentaires :
* [Météo Actuellement - Couverture Nuageuse]
* [Météo Actuellement - Humidité]
* [Météo Actuellement - Température Ressentie]
* [Météo du Jour - H+1 - Description]
Sous-titre : 
Ressenti : <commande temp ressentie> °C
Hum : <commande humidité> % - Couverture nuageuse : <Commande couverture nuageuse> %

Widget Aujourd’hui :

Statut : [Météo du Jour - Aujourdhui - Température Maximum] (je le masquerai ensuite)
Image : n'importe laquelle, on verra ceci plus tard, il en faut juste une
info complémentaires :
* [Météo du Jour - Aujourdhui - Cumul Pluie]
* [Météo du Jour - Aujourdhui - Description]
* [Météo du Jour - Aujourdhui - Indice UV]
* [Météo du Jour - Aujourdhui - Température Minimum]
Sous-titre : 
<commande temp min> °C | <commande temp max> °C
Pluie : <commande cumul pluie> mm - Indice UV : <Commande indice UV>

image petite astuce pour personnaliser le nom du widget avec la prevision du jour, il faut mettre la commande description dans le titre. Pour eviter que, dans Jeedom, le nom du widget apparaisse avec de #xxx#, lui donner un nom fixe et sur le telephone, personnaliser le nom avec la commande
J’ai donc utiliser les noms de widget suivants en mode personnalisé, en javascript pour gerer les minuscules/majuscules :

"En ce moment, "+ ("<commande description>").toLowerCase()

Voilà le resultat (un temps idéal pour faire du Jeedom :sweat_smile:) :
image

On fait la meme chose (que ce qu’on a fai tpour le widget aujourd’hui) pour les prévisions du lendemain, du surlendemin et J+3, mais on les integre dans un resumé (avec comme affichage haut, le nom du widget, et en affichage bas le sous-titre)
les commandes utilisées sont les suivantes :

[Météo du Jour - Demain - Description]
[Météo du Jour - Demain - Température Maximum]
[Météo du Jour - Demain - Température Minimum]

[Météo du Jour - Surlendemain - Description]
[Météo du Jour - Surlendemain - Température Maximum]
[Météo du Jour - Surlendemain - Température Minimum]

[Météo du Jour - J+3 - Description]
[Météo du Jour - J+3 - Température Maximum]
[Météo du Jour - J+3 - Température Minimum]

Une astuce intéressante pour afficher les jours de semaine plutôt que demain, après-demain et J+3 : Tuto : créer une page météo sur Jeedom Connect - #87 par Ds5

Les icones :
les icones du temps sont issus de méteofrance. je vous les mets pour vous éviter de fastidieuses recherches et leur convertion en png
icones_meteo.zip.txt (2,5 Mo) (supprimer le .txt pour decompresser l’archive)
Ils sont à charger dans jeedomconnect.
image Pour charger les icones simplement, ouvrez n’importe quel widget, puis bouton « choisir » une image pour ouvrir la modale image, images perso, puis « +ajouter ». Charger vos images en masse et sortez en annulant

Pour leur mise à jour, 2 solutions, soit vous créez des images conditionnelles (il y a plus de 30 icones … travail de dingue, soit on le fait via scenario/bloc code (merci encore une fois à @tomitomas et @chris94440 pour leur aide)

donc on crée un scénario avec comme declencheur toutes les commandes icones correspondant aux widget precedement créés …
pour moi :

Puis dans le scenario, autant de bloc code que de widgets. ci-dessous un modele d’1 bloc code. il y a juste à modifier :
1 - le widgetId Jeedomconnect image

2 - la commande icone associée
(dans chaque bloque, bien mettre le bon widget avec le bon icone :roll_eyes:)
A noter que je remets à jour systematiquement tous les icones, car au vu de s log, je suppose que si plusieurs icones sont mise à jour en même temps, je n’aurai qu’un seul lancement du scenario (plusieurs trigger dans la même seconde)

// mise à jour icone meteo actuellement
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php';
$widgetId=173;
$iconCmd='[Appartement][Météo][Météo Actuellement - Icone]';

// mise à jour de l'image
$icoFilename = cmd::byString('#'.$iconCmd.'#')->execCmd().'.png' ;
$icoFilename = str_replace("bis","",$icoFilename);

$widgetKey='image';
$widgetValue= array('source' => 'user', 'name' => $icoFilename, 'shadow' => false);
JeedomConnectWidget::updateConfig($widgetId,$widgetKey,$widgetValue);

Et à chaque changement d’icone, ce dernier se mettra à jour dans JC

Pour la pluie dans l’heure
Widget info numérique avec comme statut la commande

[Pluie 1h - Pluie prévue dans l heure] et 

Et une image conditionnelle sur la valeur :

#value# == 9 --> icone pas de pluie
#value# != 9 --> icone pluie attendue

Pour les alertes pollution j’utilise un autre plugin, plugin-airquality et la commande AQI
Widget info numérique avec comme statut la commande [AQI]
Et des images conditionnelles sur la valeur :

#value# == 1 
#value# == 2
...

les codes couleur et les valeurs sont basés sur le nouvel indice ATMO : Indice de qualité de l'air — Wikipédia
Les icones correspondants :
icone air quality.zip.txt (30,2 Ko)

Pour les alertes météo
Le plus complexe et tout n’est pas encore très bien géré :roll_eyes: … Epinglez ce thread et revenez récupérer les futures MAJ (ou n’hesitez pas à poster vos améliorations …)
Principes :

  • L’icone est de la couleur de l’alerte méteo la plus élevée
  • Sous l’icone s’affiche le nb d’alertes par couleur au format J:xx / O:yy / R: zz (avec J pour Jaune, O pour Orange et R pour Rouge)
  • En cliquant sur l’icone, on bascule en mode détail avec les libellés des alertes (descriptif des alertes autres que de couleur verte)

Passons à la réalisation :
1 - Création de d’un équipement virtuel avec 3 commandes info :


2 - Création d’un scenario pour récupérer/concaténer les infos meteofrance et mettre à jour les virtuels
a- les declencheurs (toutes les alertes que vous souhaitez suivre

b- le corp du scénario (les 8 premières variables sont à personnaliser en fonction de votre install)

// liste des vigilances souhaitez - cf commande equivalentes coté equipement méteo
$vigilances = array('Canicule','Inondation','Grand-froid','Neige-verglas','Orages','Pluie-inondation','Vent violent'); 

// envoie d'une notif JC si niveau d'alerte > $alerteNiveau
// 2 --> Jaune, 3 --> Orange, 4 --> rouge
$alerteNiveau = 3 ;
$cmdNotifAlerte = '#[Norbert][JC_Norbert][Notif_Meteo]#' ;
$JCPageId = 307 ;

// equipemement méteo (plugin méteofrance)
$baseCmdMeteo = '[Appartement][Météo]';

// commandes infos virtuelles
$cmdAlerteMeteoMax = '#[Données Techniques][Météo][Alerte météo max]#';
$cmdAlerteMeteo = '#[Données Techniques][Météo][Alerte météo]#';
$cmdAlerteMeteoConditions = '#[Données Techniques][Météo][Alerte météo conditions]#';

$niveauMax = 0 ;
$nbNiveauVert = 0 ;
$nbNiveauJaune = 0 ;
$nbNiveauOrange = 0 ;
$nbNiveauRouge = 0 ;
$conditionVigilances = '' ;
$nbVigilances = '' ;
  
foreach ($vigilances as $vigilance) {
  $cmdNiveauVigilance = '#'.$baseCmdMeteo.'[Vigilance - '.$vigilance.' niveau]#' ;
  $cmdConditionVigilance = '#'.$baseCmdMeteo.'[Vigilance - '.$vigilance.' conditions]#' ;

  $niveauVigilance = cmd::byString($cmdNiveauVigilance)->execCmd() ;
  $conditionVigilance = str_replace(", ","<br>",cmd::byString($cmdConditionVigilance)->execCmd()) ;
  
  switch ($niveauVigilance) {
    case 1:
        $scenario->setLog($vigilance.' : '.$conditionVigilance) ; 
        if ( $niveauMax <= $niveauVigilance ) $niveauMax = $niveauVigilance ;
        $nbNiveauVert = $nbNiveauVert + 1 ; 
        if ( $niveauMax == 1 ) $conditionVigilances = 'Aucune vigilance en cours' ;   
        break;
    case 2:
        $scenario->setLog($vigilance.' : '.$conditionVigilance) ;
        if ( $niveauMax == 1 ) $conditionVigilances = $vigilance.' :<br> '.$conditionVigilance ;
        else $conditionVigilances = $conditionVigilances.'<br>'.$vigilance.' -> '.$conditionVigilance ;
        $nbNiveauJaune = $nbNiveauJaune + 1 ;
        if ( $niveauMax <= $niveauVigilance ) $niveauMax = $niveauVigilance ;
        break;
    case 3:
        $scenario->setLog($vigilance.' : '.$conditionVigilance) ;
        if ( $niveauMax == 1 ) $conditionVigilances = $vigilance.' :<br> '.$conditionVigilance ;
        else $conditionVigilances = $conditionVigilances.'<br>'.$vigilance.' -> '.$conditionVigilance ;
        $nbNiveauOrange = $nbNiveauOrange + 1 ;
        if ( $niveauMax <= $niveauVigilance ) $niveauMax = $niveauVigilance ;
        break;
    case 4:
        $scenario->setLog($vigilance.' : '.$conditionVigilance) ;
        if ( $niveauMax == 1 ) $conditionVigilances = $vigilance.' :<br> '.$conditionVigilance ;
        else $conditionVigilances = $conditionVigilances.'<br>'.$vigilance.' -> '.$conditionVigilance ;
        $nbNiveauRouge = $nbNiveauRouge + 1 ;
        if ( $niveauMax <= $niveauVigilance ) $niveauMax = $niveauVigilance ;
        break;
  }
}

if ( $nbNiveauRouge != 0 or $nbNiveauOrange != 0 or $nbNiveauJaune != 0 ) {
  // Mise à jour sous-titre widget
  $nbVigilances = 'J:'.$nbNiveauJaune.' / O:'.$nbNiveauOrange.' / R:'.$nbNiveauRouge ;
  // envoi notif JC
  if ( $niveauMax >= $alerteNiveau ) {
    $cmd=cmd::byString($cmdNotifAlerte);
    $cmd->execCmd($options=array('title'=>'title=Alerte Météo | gotoPageId='.$JCPageId , 'message'=> $conditionVigilances), $cache=0);
  }
}
else $nbVigilances = 'Aucune vigilance' ;

cmd::byString($cmdAlerteMeteoMax)->event($niveauMax);
cmd::byString($cmdAlerteMeteo)->event($nbVigilances);
cmd::byString($cmdAlerteMeteoConditions)->event($conditionVigilances);

c- création du widget JC de type générique numérique avec comme statut la commande[Alerte méteo max], comme sous-titre la commande [alerte méteo] et comme widget supplementaire en widget JC generique texte qui a comme statut la commande [Alerte météo conditions], et des images conditionnelles en fonciton du statut (#value# == 1 jusqu’à 4)
(je commence à résumer la démarche, je sens que vous devenez experts !!! :sweat_smile:)

les icones vigilance utilisés
alertes meteo.zip.txt (45,1 Ko)

Création d’un widget résumé qui intègre les widgets pluie, qualité de l’air et alerte méteo pou rune mise en page plus sympa
image

Pour aller plus loin, on rajoute les heures de lever et coucher du soleil (vous avez compris, c’est maintenant facile … widget info numérique avec les éphémérides récupérés dans l’équipement méteofrance.

Et enfin, un widget « lancer une application » pour quand même basculer vers son appli météo favorite pour plus de detail …
Un petit truc pour les plus experts. pour afficher l’heure jeedom hhmm au format hh:mm, créer un sous-titre personnalisé avec les valeurs suivantes :

moment('#value#','Hmm',true).format('H:mm')

… et afficher le sous-titre plutot que le statut
(peut-être que ca changera prochainement et qu’on aura droit un vrai widget heure (je dis ca, je ne dit rien :sweat_smile:)

Voilà, vous avez tout ce qu’il vous faut pour faire une belle page méteo … Bon courage à ceux qui se lanceraient et n’hesitez pas à partager vos réalisations sur

Norbert

19 « J'aime »

Par Hasard à tu les images PNG des alertes météo ?

C’est plus standard, donc je ne les avais pas mises …
Voilà, c’est fait :
alertes meteo.zip.txt (45,1 Ko)

J’ai aussi rajouté le parapluie :wink:

Super
Parapluie j’en avait trouvé une
Mais les alerte plus dur quand on ne maitrise pas logiciel de retouche

En tous cas super ton tuto
J’ai juste modifier 3 ou 4 truc
Comme prendre la tempéréture de la sonde EXT, les mm de pluie de la journée …

2 « J'aime »

1 « J'aime »

N’hesites pas à partager ton résultat, ca peut donner d’autres idées

Fait juste au dessus

1 « J'aime »

Excellent tuto merci pour ton travail !

2 « J'aime »

Nouvelle version du bloc code sur les vigilances avec correction de bugs d’affichage. voir le sujet d’orgine pour la dernière version
Et rajout d’une notif JC en cas d’alerte dépassant un niveau paramétrable dans le bloc code !

2 « J'aime »

Merci beaucoup pour ce tuto. C’est très bien expliqué mais je galère un peu à mettre les prévisions de J+1 à J+3 dans un résumé sans que l’affichage des sous-titres (normalement temp min | temp max ) ne soit remplacé par le statut quand je supprime ensuite les widgets qui m’ont servi à faire le résumé de la page de JC sur mon portable (sûrement les personnalisation widgets qui disparaissent). Je vais creuser un peu le truc mais sinon c’est vraiment une super idée d’avoir rajouté la notif JC sur le portable en plus.

@ngrataloup
Par contre je n’ai pas l’icône qui s’affiche dans la notif ni le lien vers la page météo comme dans ton screen.
Je me pose la question de savoir comment rajouter en code un éventuel son et/ou un allumage de l’écran mais je me demande surtout combien de notifs je vais recevoir dans la journée. Qu’est ce qui empêche l’envoi d’une notif à chaque lancement du bloc code?

Sinon je remarque que le string de la commande Alerte météo conditions est trop long pour la case dans mon cas. Je ne sais pas comment améliorer ça.
J’ai beau ne pas habiter dans une zone où il ne pleut pas beaucoup, le plugin météo France refuse de me renvoyer une valeur pour la pluie dans l’heure… Après les déserts médicaux, les déserts météorologiques :confused:

Voilà ma page météo pour l’instant, je compte rajouter l’info pour le pollen qui je suppose doit être une info du plugin qualité de l’air mais ce n’est pas explicite. J’ai mis un arrière plan conditionnel sur le widget des alertes météo. Je vous laisse un screen de la personnalisation.

==> Pour conserver les perso, il faut forcement que le Widget soit présent dans ta config. donc si tu supprimes les widgets en question, les persos disparaissent … solution, tu crées un menu haut dans lequel tu mets les 6 widgets qui sont dans les résumés et tu masques ensuite le menu haut

SI tu as mis le code que je t’ai donné, je pense que tu recevras des notifs à chaque mise à jours des alertes de niveau orange (3), donc normalement, pas tant que ca
Pour l’allumage de l’écran, ou l’envoi du son, il faut lancer les commandes jeedom qui vont bien :

  • [Jouer un son]
  • [Allumer écran]
cmd::byString('#[XXX][]XXXX][Allumer écran]#')->execCmd() ;
cmd::byString('#[XXX][]XXXX][Jouer un son]#')->event('ton fichier son sur ton jeedom') ;

(non testé !!)

Corriger dans la prochaine MAJ en cours de test

Super résultat, en tout cas, et mercipour tous ces retours

Norbert

2 « J'aime »

Avec plaisir,

J’ai du temps pour ça avant de commencer ma prépa dans le domaine de l’informatique et automatisme. C’est un peu de la mise en bouche et un jeu à la fois :slight_smile:

Merci pour tes réponses, je vais essayer d’améliorer tout ça et si ça vaut le coup je reposte un screen du résultat !

De ce que je comprends ça envoie des notifs à partir du niveau 2 (jaune)

1 « J'aime »

Plus simple…
Tu vas en vue detail de ton résumé ==>> tu verras directement les 6 widgets, tu peux donc directement faire la perso ici :wink:

4 « J'aime »

Mets le niveau 3, je pense que le niveau 2 n’a aucun intérêt et va effectivement t’envoyer beaucoup d’alertes

$alerteNiveau = 3
1 « J'aime »

Merci c’est ce que je pensais… c’est pas comme si dans le Sud Est y’avait pas de vent…

Ceci dit on a eut une super tempête récemment ça aurait été cool d’avoir la notif pour bien fermer les volets, vérifier la fixation de l’abri piscine ect…

Merci ça fait plus propre que de cacher les widgets sous le tapis.

@eleckito21
Je ne sais pas d’où tu sors ton info pour le pollen mais ça m’intéresse. De ce que j’ai recherché il n’y a plus de plugin sur le Market qui le fasse à ce jour

C’est dans le plugin vigilance météo de lunarok.

1 « J'aime »

Merci je l’avais essayé mais pas vu de pollen dans la liste des commandes

Hello et merci @ngrataloup pour ce tuto bien sympa. Je le mets en place pour la raison 3 principalement :wink:

Petites remarques :

  • je ne suis pas certain que les images sans le « j » (journée) et « n » (nuit) soient indispensables, je ne crois plus avoir vu d’icone sans j ou n
  • dans mon cas je faisais deja un scénario qui réalisait une correspondance entre chaque icone et une situation météo générale type soleil, pluie, vent etc pour choisir l’image de fond que je mets dans mes design. J’avais dans ce cas rencontré des images de type « bis » qui ne figurent pas ici. Je ne sais pas si météo france a fait le tri dans ses images bis mais j’avais détecté des « p5bisj », « p5bisn », « p12bisj », « p12bisn », « p16bisj », « p16bisn », « p14bisj » , « p14bisn », « p13bisj », « p13bisn ». Elle faisait foirer mon scénario qui ne savait pas quoi associer comme type global de météo en face et m’envoyait un Telegram à chaque fois :slight_smile: En plus elles sont strictement identiques à leurs valeurs sans bis… bref si jamais un jour ca rate la maj des icones dans le widget, ca peut venir de là

Je n’ai pas encore fait la partie vigilance et pollen mais la première partie fonctionne très bien.

2 « J'aime »

En fait, j’ai récupéré toutes les images présentes sur le site meteofrance, sans me poser la question et sans avoir non plus un descriptif de leur algorithme. Du coup, effectivement, il peut y en avoir en trop (et il peut en manquer, mais je n’ai pas encore eu le cas). Je garde ca en tete (pour les images bis)

1 « J'aime »

De mémoire car je ne m’en sers plus, il n’y a pas de commande pollen dans la météo. Il faut créér un équipement de type pollen

1 « J'aime »