[Tuto] Mise à disposition de la couverture nuageuse prévue sur la journée

Voici mon 2eme tuto sur un sujet qui me turlupine depuis un moment. Ça vaut ce que ça vaut et il sera amélioré au besoin et suivant les retours.

Le contexte :
Il existe des plugins ou du code pour connaitre la quantité d’UV et/ou le nombre d’heures de soleil dans la journée mais cela n’aide qu’à indiquer s’il faut mieux faire tourner des machines le lendemain par exemple.

L’objectif de ce tuto est d’avoir à disposition des commandes indiquant le pourcentage de nuages prévus sur plusieurs plages horaires de la journée.
Cela permettra à ceux disposant d’une production photovoltaïque de décaler la mise en service d’appareils énergivores (comme un chauffe-eau) au moment où il devrait y avoir le maximum de soleil.

Important : Les prévisions sont basées sur le site de meteorama.fr et bien évidemment comme ce sont des prévisions il arrivera qu’elles ne soient pas justes ! A vous de voir si le jeu en vaut la chandelle.

Une fois mis en place vous devrez sans doute adapter certaines variables pour tenir compte de votre production solaire car tout le monde n’a pas la même courbe d’ensoleillement.
Par exemple chez moi il est préférable que je profite de la production solaire dans la matinée et jusqu’à 14h car mes panneaux sont à l’est.

J’aurais aimé pouvoir estimer la puissance produite en fonction de la courbe d’ensoleillement théorique et du pourcentage de nuages prévu mais je ne vois pas comment faire. Si vous avez des solution elles seront les bienvenues !

Un petit plugin serait bien mais je n’ai pas le courage de m’y mettre car jamais fais.

Prérequis :
- Des panneaux solaires sinon je ne vois pas bien à quoi ça pourrait servir
- Le plugin Virtuel
- Le plugin Script

Version actuelle de Jeedom en stable : 4.1.27

Note du 13/02/2023 : Si quelqu’un tombe là-dessus un jour, il faut modifier la requête qui est dans ce tuto suite à un changement de meteorama : #city-weather-detailed-hours > table:nth-child(4) > tr:nth-child(3) > td.cloudiness

1. Construction d'un équipement pour aller chercher les données du site

Accéder à https://www.meteorama.fr puis rechercher votre ville puis cliquer sur « Par heure »

image

Copier l’URL qui s’affiche dans le navigateur pour l’ajouter ensuite sur notre équipement du plugin Script

Dans le plugin Script, créer un nouveau script meteorama dans un objet Météo puis ajouter une 1ere commande (si vous voulez un autre nom et un autre objet il faudra modifier du code plus tard)
image

  • Commande +1h
  • Type script : HTML
  • Type : Info / Autre
    - Requête : #city-weather-detailed-hours > table:nth-child(3) > tr:nth-child(3) > td.cloudiness
  • Requête : #city-weather-detailed-hours > table:nth-child(4) > tr:nth-child(3) > td.cloudiness
  • Options : l’URL de votre ville

Dupliquer la commande +1h et nommer là +2h
Changer la requête en ajoutant 1 dans le 2eme « tr:nth-child » pour qu’elle devienne : #city-weather-detailed-hours > table:nth-child(3) > tr:nth-child(4) > td.cloudiness
Dupliquer les commandes jusqu’à +23h

Note : Cela permet de construire le tableau complet de l’ensoleillement sur 24h mais nous ne nous servirons pas de tout ça ! En effet chez moi à 2h du matin je n’ai pas de soleil !!

2. Construction d'un virtuel et d'un scénario pour mise à disposition des informations dans Jeedom

2.1 Le virtuel
Créer un nouveau virtuel et ajouter 14 commandes infos de type numériques (vous pourrez adapter à votre cas)

Dans ce virtuel je souhaite avoir :
- l’ensoleillement entre 8h-9h et 17h-18h qui auront tous % comme unité (donc 10 commandes)
- Couverture nuageuse
- Représentation couverture nuageuse (en option, c’est pour faire une vue graphique)
- Heure avec minimum de nuages
- Minimum de nuages qui aura % comme unité

La fin du virtuel :

Note : La « Représentation couverture nuageuse » permet ensuite de créer vue pour voir cette information sur une courbe avec la production photovoltaïque. Il faudra adapter la petite formule avec vos valeurs. Chez moi j’ai environ 2000 W maximum.

On peut voir ici que la prévision a été plutôt correct puisque :
- le matin la « Représentation couverture nuageuse » en bleu était environ à 1100 et la courbe de production photovoltaïque en vert a été presque normale
- L’après-midi la « Représentation couverture nuageuse » en bleu est tombée vers 500 et la courbe de production photovoltaïque a été bien plus chaotique

image

La courbe en violet est issue du plugin Heliotrope et correspond à la hauteur du soleil. C’est à partir de cette information que j’aurais aimé trouver une belle formule pour déduire une production estimée en Watt en fonction de la hauteur du soleil, de la courbe réelle chez moi et des nuages … Mais je ne vois pas comment m’y prendre !

2.2 Le scénario
Créer un nouveau scénario Couverture nuageuse dans l’objet Météo et dont l’exécution est programmé de cette façon : 50 07-16 * * *
Cela permet de le faire tourner entre 07h50 et 16h50
Ce scénario alimentera le virtuel crée sur l’étape 2.1 pour nous mettre à disposition les informations de façon plus exploitable.

Créer un bloc d’action avec ces actions :

heure_min : l’heure à partir de laquelle il faut aller récupérer les informations dans l’équipement script « meteorama »
heure_max : l’heure maximum pour aller récupérer les informations dans l’équipement script « meteorama ». Une fois l’heure passée les commandes du virtuel seront remises à zéro
heure_min_ecs : l’heure à partir de laquelle le chauffe-eau (ou autre) pourra considérer qu’il peut se mettre en service car l’ensoleillement est habituellement acceptable
heure_max_ecs : l’heure à partir de laquelle le chauffe-eau (ou autre) ne pourra plus se mettre en service car il sera trop tard pour avoir un ensoleillement acceptable

Ajouter ensuite un bloc code avec ces lignes :

$tags = $scenario->getTags();
$heure_min = $tags['#heure_min#'];
$heure_max = $tags['#heure_max#'];
$heure_min_ecs = $tags['#heure_min_ecs#'];
$heure_max_ecs = $tags['#heure_max_ecs#'];
$heure_actuelle = $tags['#heure_actuelle#'];
$time_left_hour = $tags['#time_left_hour#'];

$scenario->setLog('heure restante : '.$time_left_hour);

$min_hour = 0; //initialisation de l'heure pendant laquelle le minimum de pourcentage de nuages est prévu
$min_value = 100; //initialisation de la valeur contenant le minimum de pourcentage de nuages

If ($time_left_hour > 0) { //s'il reste au moins une plage horaire pour afficher la couverture nuageuse avant #heure_max#
    for ($i = 1; $i <= $time_left_hour; $i++) {
        $j = $heure_actuelle + $i;
        $k = $j + 1;

        $value_percent = cmd::byString('#[Météo][meteorama][+'.$i.'h]#')->execCmd();
        $scenario->setLog('Couverture nuageuse prévue de '.$j.'h à '.$k.'h : '.$value_percent);

      	$pos = strpos($value_percent, '%');
      	if ($pos !== false) { // caractère % trouvé dans la chaine          
        	$value = substr($value_percent, 0, -1); // suppression du caractère '%' à la fin de la valeur
        } else {
          	$value = $value_percent; // sinon c'est que la valeur récupérée n'avait pas de '%' on laisse donc telle quelle
        }

      	// enregistrement du pourcentage de nuages prévu à l'heure qui arrive pour suivi au niveau d'un graph et comparaison avec la PROD solaire
      	if ($i == 1) {
        	cmd::byString('#[Météo][Couverture nuageuse][Couverture nuageuse]#')->event('"'.$value.'"');      
        }
        // enregistrement de l'heure et du pourcentage de nuage le plus faible mais dans un intervalle horaire permettant d'avoir un apport lumineux acceptable
        if (round($value/10) < round($min_value/10) && $j >= $heure_min_ecs && $j <= $heure_max_ecs) { // Division de la valeur par 10 pour ne tenir compte que de tranches de % [0-4 / [5-14] / [15-24] ... etc
            $min_hour = $j; // stockage de l'heure à laquelle la valeur la plus faible a été trouvé
            $min_value = $value; // stockage de la valeur la plus faible
        }
		
      	// Mise à jour du virtuel Couverture nuageuse Meyzieu avec les informations
      	cmd::byString('#[Météo][Couverture nuageuse]['.$j.'h-'.$k.'h]#')->event('"'.$value.'"');      
    }

  	if ($heure_actuelle <= $heure_max_ecs) { // Tant que l'heure n'a pas dépassée l'heure max pour ECS, on enregistre l'heure et le minimum de nuages
      $min_hour_2 = $min_hour+1;
      $heure_max_ecs_2 = $heure_max_ecs+1;
      $scenario->setLog('Couverture nuageuse la plus faible prévue jusqu\'à '.$heure_max_ecs_2.'h de '.$min_hour.'h à '.$min_hour_2.'h : '.$min_value);
      
      // Mise à jour du virtuel Couverture nuageuse Meyzieu avec les informations
      cmd::byString('#[Météo][Couverture nuageuse][Heure avec minimum de nuages]#')->event('"'.$min_hour.'"');   
      cmd::byString('#[Météo][Couverture nuageuse][Minimum de nuages]#')->event('"'.$min_value.'"');  
    } 
} else {
 	$scenario->setLog('La plage horaire d\'analyse est terminée');
  	for ($j = $heure_min; $j <= $heure_max; $j++) {
      	$k = $j+1;      	
    	// Remise à zéros des infos du virtuel Couverture nuageuse
      	cmd::byString('#[Météo][Couverture nuageuse]['.$j.'h-'.$k.'h]#')->event('0');     
    }
}

3. Exploitation des données
A partir de 7h50 nous avons à disposition :
- l’ensoleillement prévue sur chaque tranche horaire de la journée
- La tranche horaire dans laquelle il devrait y avoir le moins de nuages, donc le plus de soleil

Attention il faut adapter les variables à votre situation :
- Si vous avez plutôt de la production le matin alors heure_min_ecs devra être vers 9h et heure_max_ecs devra être vers 14h
- Si vous avez plutôt de la production l’après-midi alors heure_min_ecs devra probablement être vers 11h et heure_max_ecs devra probablement être vers 16h

Si vous avez un scénario qui déclenche un chauffe-eau ou un autre appareil gourmand dans la journée, vous pourrez l’adapter pour décaler le déclenchement à un meilleur moment.

Voila une mise en forme du virtuel pour indiquer les prévisions. Le dernier refresh a été fait à 12h50 donc la couverture nuageuse la plus faible est maintenant de 5% à 13h.

5 « J'aime »

Allez laisse nous un peu de soleil :wink:

1 « J'aime »

ben je me mets ce post de coté pour peut être le mettre en place afin, non pas, d’autoriser ceci ou cela (bien que, l’été ca pourra être utile ? a voir) mais plutôt pour essayer de faire des prévisions de prod … pour rigoler, hein !! après, je fais la même chose avec le loto :wink:

1 « J'aime »

genial , voila un tuto qui m’intéresse , je m’y attaque demain

Merci

Bonjour et merci pour ce tuto bien fait.
Pendant que je l’avais en tête j’ai fait et ça marche. Je vais voir comment l’intégrer dans ma gestion.
En tout cas c’est bien écrit et détaillé donc à la portée de tous :ok_hand:

1 « J'aime »

suis d’accord!! même moi j’y suis arrivé !!!

maintenant on va attaquer de faire des prévisions de prod pour voir …

Merci bornich.

Si tu trouves comment déduire de ta courbe de production « normal » (donc dépendante de la saison en cours …) une production estimée en fonction des nuages je veux bien que tu nous en fasse part, je me ferais un plaisir de tester et mettre le tuto à jour :stuck_out_tongue:

il est certain que si je trouve avancées, je viendrais m’en vanter ici !!! mais, pour le moment, c’est loin d’être fait.
si je récapitule, il nous faut :

  • la couverture nuageuse, ok, fait par toi, merci
  • la durée du jour qui ne doit pas être difficile a obtenir
  • l’azimut ne doit pas être difficile a obtenir, par contre, quelle influence sur les panneaux ???

je dirais qu’il faut partir de la journée parfaite sans nuage et a la bonne époque pour le bon angle d’attaque sur les panneaux, puis chaque paramètre vient dégrader cette journée parfaite …

avec en paramètre en plus l’orientation et l’angle des panneaux

1 « J'aime »

Oui c’est ce que je disais rapidement dans le tuto, j’ai essayé de partir de la hauteur du soleil donné par Heliotrope (courbe violette).

J’ai pu sans trop de soucis faire corréler le % de nuages avec ce que devrait donner la production (ma courbe bleue) mais ça c’est si le soleil était toujours au plus haut.

image

« Reste » donc à trouver la formule pour ajuster la courbe théorique violette à la courbe verte de production mais ça dépend évidemment de bcp de chose (position des panneaux chez nous) … et là je n’ai pas trouvé.

Bonjour,
J’ai créé ce tuto. Cependant, j’ai un soucis.
Je suis encore en 3.3.x. je ne pense pas que cela pose de problème.
J’ai mis en horaires : 6-19h, pour la période d’été et mon futur développement.
J’ai une/des erreurs scenario et script
Je n’ai pas les % des heures qui s’affiche.
voici log scenario :
« [2022-04-06 06:50:01][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2022-04-06 06:50:01][SCENARIO] Exécution du sous-élément de type [action] : action
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #heure_min# => 6
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #heure_max# => 19
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #heure_min_ecs# => 11
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #heure_max_ecs# => 17
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #heure_actuelle# => #hour#
[2022-04-06 06:50:01][SCENARIO] Mise à jour du tag #time_left_hour# => 19-#hour#-1
[2022-04-06 06:50:01][SCENARIO] Exécution de la commande [Exterieur][meteorama][Rafraichir]
[2022-04-06 06:50:19][SCENARIO] Pause de 15 seconde(s)
[2022-04-06 06:50:34][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-04-06 06:50:34][SCENARIO] Exécution d’un bloc code
[2022-04-06 06:50:34][SCENARIO] heure restante : 19-#hour#-1
[2022-04-06 06:50:34][SCENARIO] Couverture nuageuse prévue de 1h à 2h : 73%
[2022-04-06 06:50:34][SCENARIO] La commande n’a pas pu être trouvée : #[Exterieur][Couverture nuageuse][1h-2h]# => #[Exterieur][Couverture nuageuse][1h-2h]#
[2022-04-06 06:50:34][SCENARIO] Fin correcte du scénario »

Et l’erreur log script :
Erreur pour [Exterieur][meteorama][+2h] : Echec de la requête HTTP : https://www.meteorama.fr/météo-XXXXXX.html?v=heure-par-heure cURL error : Operation timed out after 2000 milliseconds with 233136 bytes received

sceem couveture nuageuse :

Je pense ne rien avoir oublier.
Merci de votre aide

Salut,

Je dirais bien qu’il est possible que ce soit en rapport avec la 3.x justement.
Le calcul sur l’heure actuelle n’a pas l’air de se faire.

Essai de remplacer #hour# par #heure#. Je n’ai pas vérifié mais en 3.x cette variable Jeedom était peut-être bien juste disponible en français.

Merci de l’aide.
Alors oui, c’est vrai. elle est disponible en Francais!!
Ca fonctionne maintenant!! Merci

quelques questions complementaires :
Les valeurs du script doivent-ils se mettre à jours tout les heures, en meme temps que le scenario?
Comment recuperer la vitesse du vent, sans « km/h »?
parametre :
#city-weather-detailed-hours > table:nth-child(3) > tr:nth-child(3) > td.wind-speed
Comment vous effectuez l’estimation de production?
100% nuageux = 1 fois puissance installé ou un autre mode de calcul?
Comment recuperer position du soleil, altitude?
Merci

Le site est interrogé chaque heure en faisant un refresh des valeurs informations dans le scénario oui.

Le calcul de l’estimation de production est montré sous la ligne « La fin du virtuel » il faut l’adapter à sa situation.

Il faut utiliser le plugin Héliotrope pour avoir hauteur et position du soleil.

J’essaierai de voir démain pour le vent.

Bonjour,
Bon, j’ai toujours un soucis.
actualisation des scripts se fait à 0:10, pour pouvoir les réutilisés au besoin.
le scenario se mets bien à jours quand il doit : 6:50 (pour la plage 7h-20h) mais les données dans "couverture nuageuse ne correspond pas et la synthèse non plus.
Quel peut-etre le soucis?

Merci de votre aide

Bonjour,

Il me faudrait les logs du scénario (mis dans la bonne balise image) pour essayer de comprendre.

Désolé!!
Merci de votre aide.
Voici :

[2022-04-07 06:52:01][SCENARIO] ************Lancement sous tâche**************
[2022-04-07 06:52:01][SCENARIO] Tags : {"#heure_min#":6,"#heure_max#":19,"#heure_min_ecs#":11,"#heure_max_ecs#":17,"#heure_actuelle#":6,"#time_left_hour#":12}
[2022-04-07 06:52:16][SCENARIO] Exécution du sous-élément de type [action] : do
[2022-04-07 06:52:16][SCENARIO] Lancement du scénario : estimation production solaires options : []
[2022-04-07 06:52:16][SCENARIO] ************FIN sous tâche**************
------------------------------------
[2022-04-07 07:50:01][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2022-04-07 07:50:01][SCENARIO] Exécution du sous-élément de type [action] : action
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #heure_min# => 6
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #heure_max# => 19
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #heure_min_ecs# => 11
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #heure_max_ecs# => 17
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #heure_actuelle# => 7
[2022-04-07 07:50:01][SCENARIO] Mise à jour du tag #time_left_hour# => 11
[2022-04-07 07:50:01][SCENARIO] Pause de 15 seconde(s)
[2022-04-07 07:50:16][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-04-07 07:50:16][SCENARIO] Exécution d'un bloc code
[2022-04-07 07:50:16][SCENARIO] heure restante : 11
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 8h à 9h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 9h à 10h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 10h à 11h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 11h à 12h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 12h à 13h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 13h à 14h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 14h à 15h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 15h à 16h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 16h à 17h : 100%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 17h à 18h : 96%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse prévue de 18h à 19h : 8%
[2022-04-07 07:50:16][SCENARIO] Couverture nuageuse la plus faible prévue jusqu'à 18h de 0h à 1h : 100
[2022-04-07 07:50:16][SCENARIO] Exécution du sous-élément de type [condition] : in
[2022-04-07 07:50:16][SCENARIO] Evaluation de la condition : [2] = 2
[2022-04-07 07:50:16][SCENARIO] Tâche : 490 programmée à : 2022-04-07 07:52:16 (+ 2 min)
[2022-04-07 07:50:16][SCENARIO] Fin correcte du scénario
------------------------------------
[2022-04-07 07:52:01][SCENARIO] ************Lancement sous tâche**************
[2022-04-07 07:52:01][SCENARIO] Tags : {"#heure_min#":6,"#heure_max#":19,"#heure_min_ecs#":11,"#heure_max_ecs#":17,"#heure_actuelle#":7,"#time_left_hour#":11}
[2022-04-07 07:52:16][SCENARIO] Exécution du sous-élément de type [action] : do
[2022-04-07 07:52:16][SCENARIO] Lancement du scénario : estimation production solaires options : []
[2022-04-07 07:52:16][SCENARIO] ************FIN sous tâche**************


Et j’ai cela en erreur log general (mais ca doit etre du au VPN, je pense) :

Erreur pour [Exterieur][meteorama][+1h_vent] : Echec de la requête HTTP : https://www.meteorama.fr/m%C3%A9t%C3%A9o-XXXX.html?v=heure-par-heure cURL error : Operation timed out after 2000 milliseconds with 73222 bytes received	
	

Avant de regarder s’il y a un délire sur le code du scénario va falloir regarder autre chose car là j’ai l’impression que c’est ton script qui ne tourne pas et qui ne rafraichi pas les informations.
On devrait avoir une ligne Exécution de la commande [Météo][meteorama][Rafraichir] que je ne retrouve pas ici.

A chaque heure à xxh50 le scénario force le refresh du script qui va interroger à nouveau météorama et met à jour les informations de l’équipement script.

Ainsi on devrait avoir des commandes « + » qui se vident au fur et à mesure de l’avancement de la journée.

Comme ici chez moi :
image

C’est peut-être à cause des commandes que tu as rajoutées par rapport au tuto et l’une d’elle qui pose problème.
Ou tu as retiré la commande « Raffraichir » du scénario ?

EDIT :
Pour récupérer la vitesse moyenne du vent à +1h
image

#city-weather-detailed-hours > table:nth-child(3) > tr:nth-child(3) > td.wind-speed

Ok.
J’avais retirer le « refresh », du aux erreurs sur chaque script.
Je l’ai remis et ca se mets bien à jour.
Mais pour moi, c’est bizarre.!! Je suis en couverture nuageuse alors que 75% sont inferieur 100.

Je n’ai pas compris ce que tu veux dire.

La couverture nuageuse est indiquée à 100% actuellement, c’est bien le cas de 9h à 10h.
Le minimum de nuage est détecté à 11h et sera de 4%.

C’est bien les informations qui sont affichées non ?

image