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 »
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)
- 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
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.