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

Tags: #<Tag:0x00007fc6c8ba9898>

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

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
  • 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 !!

image

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 :
image

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 :
image

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.

J’ai choisi le jour le moins adéquat pour faire le tuto, aujourd’hui, donc voila une mise en forme du virtuel pour indiquer les prévisions.
Ici le ciel sera malheureusement totalement couvert toute la journée et il n’y a donc pas d’heure avec un minimum de nuage.
Je reprendrais une capture quand il fera meilleur chez moi !

image

3 J'aime

Allez laisse nous un peu de soleil :wink:

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