[Reflexion] Estimation calcul production solaire à J+1

Bonjour,

J’ai depuis 1 ans une bonne installation solaire que j’essaie d’optimiser au maximum avec Jeedom :

  • 18 panneaux 320Wc soit 5760Wc
  • 1 batterie solaire de 14.5kwh en DIY (batterie LFP)
  • 1 routeur solaire pour le ballon solaire et récupérer tout le surplus solaire
  • 2 voitures électriques (Tesla model 3 SR + Zoé) avec une borne Wifi permettant de changer l’intensité de charge de 6 à 32A par Wifi en live
  • 1 onduleur hybride pour charge la batterie.

J’ai un abonnement TotalEnergie en super heures creuses, et j’ai augmenté mon abonnement de 6kvA à 8Kva pour charger au max voitures / ballon / batterie solaire la nuit, j’hésite même à passer un peu plus fort, car je profite beaucoup des super heures creuses, et je consomme très peu d’heures creuses / pleines (presque 90% de ma conso elec en SHC en ce moment).

En été, j’arrive a charger les voitures en journée (je vais au boulot en trottinette elec, il reste quasi toujours une voiture à la maison qui charge dynamiquement), et être autonome.

Tous mes scénario de démarrage de charge ballon d’eau chaude / batterie solaire et voiture dépendent surtout de l’estimation de production d’energie du lendemain avec mes PV, mais c’est pas évident :frowning:

Pour l’instant, je récupère un JSON à travers ce site :

http://api.openweathermap.org/data/2.5/forecast?id=3032267&APPID=69c8258b3xxxxxxx56d9c2b0539b1bc35&units=metric

Ca me donne ce genre d’info :

{"cod":"200","message":0,"cnt":40,"list":[{"dt":1640098800,"main":{"temp":3.64,"feels_like":0.41,"temp_min":3.64,"temp_max":4.58,"pressure":1022,"sea_level":1022,"grnd_level":1014,"humidity":64,"temp_kf":-0.94},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":{"all":7},"wind":{"speed":3.65,"deg":62,"gust":6.38},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-21 15:00:00"},{"dt":1640109600,"main":{"temp":1.49,"feels_like":-2.25,"temp_min":0.65,"temp_max":1.49,"pressure":1022,"sea_level":1022,"grnd_level":1014,"humidity":77,"temp_kf":0.84},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"clouds":{"all":16},"wind":{"speed":3.7,"deg":64,"gust":7.6},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-21 18:00:00"},{"dt":1640120400,"main":{"temp":-0.73,"feels_like":-5.09,"temp_min":-0.73,"temp_max":-0.73,"pressure":1022,"sea_level":1022,"grnd_level":1015,"humidity":90,"temp_kf":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":8},"wind":{"speed":3.88,"deg":72,"gust":8.89},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-21 21:00:00"},{"dt":1640131200,"main":{"temp":-1.2,"feels_like":-5.27,"temp_min":-1.2,"temp_max":-1.2,"pressure":1022,"sea_level":1022,"grnd_level":1015,"humidity":90,"temp_kf":0},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"clouds":{"all":11},"wind":{"speed":3.37,"deg":78,"gust":7.16},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-22 00:00:00"},{"dt":1640142000,"main":{"temp":-1.45,"feels_like":-5.82,"temp_min":-1.45,"temp_max":-1.45,"pressure":1022,"sea_level":1022,"grnd_level":1014,"humidity":90,"temp_kf":0},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"clouds":{"all":47},"wind":{"speed":3.68,"deg":77,"gust":7.56},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-22 03:00:00"},{"dt":1640152800,"main":{"temp":-1.56,"feels_like":-5.96,"temp_min":-1.56,"temp_max":-1.56,"pressure":1021,"sea_level":1021,"grnd_level":1014,"humidity":88,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":60},"wind":{"speed":3.68,"deg":87,"gust":8.55},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-22 06:00:00"},{"dt":1640163600,"main":{"temp":-0.1,"feels_like":-3.73,"temp_min":-0.1,"temp_max":-0.1,"pressure":1022,"sea_level":1022,"grnd_level":1014,"humidity":78,"temp_kf":0},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"clouds":{"all":17},"wind":{"speed":3.12,"deg":86,"gust":7.06},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-22 09:00:00"},{"dt":1640174400,"main":{"temp":5.89,"feels_like":3.25,"temp_min":5.89,"temp_max":5.89,"pressure":1020,"sea_level":1020,"grnd_level":1013,"humidity":51,"temp_kf":0},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"clouds":{"all":18},"wind":{"speed":3.49,"deg":105,"gust":4.62},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-22 12:00:00"},{"dt":1640185200,"main":{"temp":4.91,"feels_like":2.47,"temp_min":4.91,"temp_max":4.91,"pressure":1019,"sea_level":1019,"grnd_level":1012,"humidity":59,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"clouds":{"all":51},"wind":{"speed":2.9,"deg":109,"gust":3.1},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-22 15:00:00"},{"dt":1640196000,"main":{"temp":2.1,"feels_like":-0.68,"temp_min":2.1,"temp_max":2.1,"pressure":1019,"sea_level":1019,"grnd_level":1012,"humidity":68,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":76},"wind":{"speed":2.66,"deg":121,"gust":2.6},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-22 18:00:00"},{"dt":1640206800,"main":{"temp":2.79,"feels_like":0.02,"temp_min":2.79,"temp_max":2.79,"pressure":1018,"sea_level":1018,"grnd_level":1011,"humidity":64,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":2.79,"deg":157,"gust":2.78},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-22 21:00:00"},{"dt":1640217600,"main":{"temp":3.25,"feels_like":0.44,"temp_min":3.25,"temp_max":3.25,"pressure":1018,"sea_level":1018,"grnd_level":1010,"humidity":80,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":2.96,"deg":178,"gust":3.77},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-23 00:00:00"},{"dt":1640228400,"main":{"temp":3.74,"feels_like":0.59,"temp_min":3.74,"temp_max":3.74,"pressure":1017,"sea_level":1017,"grnd_level":1010,"humidity":89,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":3.56,"deg":181,"gust":9.5},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-23 03:00:00"},{"dt":1640239200,"main":{"temp":3.52,"feels_like":0.38,"temp_min":3.52,"temp_max":3.52,"pressure":1016,"sea_level":1016,"grnd_level":1009,"humidity":92,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":93},"wind":{"speed":3.48,"deg":175,"gust":8.21},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-23 06:00:00"},{"dt":1640250000,"main":{"temp":5.23,"feels_like":2.1,"temp_min":5.23,"temp_max":5.23,"pressure":1017,"sea_level":1017,"grnd_level":1010,"humidity":89,"temp_kf":0},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"clouds":{"all":20},"wind":{"speed":4.07,"deg":187,"gust":13.37},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-23 09:00:00"},{"dt":1640260800,"main":{"temp":10.52,"feels_like":9.59,"temp_min":10.52,"temp_max":10.52,"pressure":1016,"sea_level":1016,"grnd_level":1009,"humidity":75,"temp_kf":0},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"clouds":{"all":14},"wind":{"speed":5.81,"deg":214,"gust":10.75},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-23 12:00:00"},{"dt":1640271600,"main":{"temp":10.92,"feels_like":10.13,"temp_min":10.92,"temp_max":10.92,"pressure":1015,"sea_level":1015,"grnd_level":1008,"humidity":79,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"clouds":{"all":58},"wind":{"speed":3.9,"deg":208,"gust":7.77},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-23 15:00:00"},{"dt":1640282400,"main":{"temp":7.78,"feels_like":5.5,"temp_min":7.78,"temp_max":7.78,"pressure":1016,"sea_level":1016,"grnd_level":1009,"humidity":91,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":79},"wind":{"speed":3.58,"deg":210,"gust":9.26},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-23 18:00:00"},{"dt":1640293200,"main":{"temp":7.38,"feels_like":4.99,"temp_min":7.38,"temp_max":7.38,"pressure":1015,"sea_level":1015,"grnd_level":1008,"humidity":92,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":3.62,"deg":194,"gust":10.13},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-23 21:00:00"},{"dt":1640304000,"main":{"temp":7.19,"feels_like":4.68,"temp_min":7.19,"temp_max":7.19,"pressure":1014,"sea_level":1014,"grnd_level":1007,"humidity":92,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":3.76,"deg":190,"gust":10.58},"visibility":10000,"pop":0,"sys":{"pod":"n"},"dt_txt":"2021-12-24 00:00:00"},{"dt":1640314800,"main":{"temp":7.61,"feels_like":5.47,"temp_min":7.61,"temp_max":7.61,"pressure":1013,"sea_level":1013,"grnd_level":1006,"humidity":92,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":3.27,"deg":178,"gust":8.19},"visibility":10000,"pop":0.4,"rain":{"3h":0.12},"sys":{"pod":"n"},"dt_txt":"2021-12-24 03:00:00"},{"dt":1640325600,"main":{"temp":7.88,"feels_like":5.23,"temp_min":7.88,"temp_max":7.88,"pressure":1012,"sea_level":1012,"grnd_level":1005,"humidity":90,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":100},"wind":{"speed":4.34,"deg":183,"gust":10.48},"visibility":10000,"pop":0.28,"rain":{"3h":0.37},"sys":{"pod":"n"},"dt_txt":"2021-12-24 06:00:00"},{"dt":1640336400,"main":{"temp":8.11,"feels_like":6.17,"temp_min":8.11,"temp_max":8.11,"pressure":1011,"sea_level":1011,"grnd_level":1004,"humidity":93,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":{"all":100},"wind":{"speed":3.12,"deg":179,"gust":10.1},"visibility":10000,"pop":0.4,"rain":{"3h":0.13},"sys":{"pod":"d"},"dt_txt":"2021-12-24 09:00:00"},{"dt":1640347200,"main":{"temp":11.48,"feels_like":10.59,"temp_min":11.48,"temp_max":11.48,"pressure":1010,"sea_level":1010,"grnd_level":1003,"humidity":73,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":{"all":95},"wind":{"speed":5.45,"deg":195,"gust":11.34},"visibility":10000,"pop":0.35,"sys":{"pod":"d"},"dt_txt":"2021-12-24 12:00:00"},{"dt":1640358000,"main":{"temp":11.78,"feels_like":11.05,"temp_min":11.78,"temp_max":11.78,"pressure":1008,"sea_level":1008,"grnd_level":1001,"humidity":78,"temp_kf":0},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"clouds":{"all":74},"wind":{"speed":4.1,"deg":190,"gust":7.92},"visibility":10000,"pop":0,"sys":{"pod":"d"},"dt_txt":"2021-12-24 15:00:00"},{"dt":1640368800,"main":{"temp":8.79,"feels_like":7,"temp_min":8.79,"temp_max":8.79,"pressure":1008,"sea_level":1008,"grnd_level":1001,"humidity":91,"temp_kf":0},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":87},"wind":

J’extrait toutes les heures ces informations : « clouds »:{« all »:74}" qui correspond ici par exemple au pourcentage de nuages. J’en déduit le pourcentage de soleil avec 100 - 74, et avec des calculs savants (des mélanges de cosinus / sinus sur l’année, et les journées) j’arrive à une estimation qui vaut ce qui vaut, mais qui oscille bien en hivers / été. (3x plus de prod en été environ)

Avec ça, tous les jours, je lisse un coefficient d’erreur pour que l’estimation soit de plus en plus juste… Par exemple, si j’ai calculé que le lendemain je produirai 15kwh, mais que j’en produit 12, mon coefficient va baisser légèrement et l’estimation du surlendemain prendra en compte ce nouveau coefficient pour son calcul. J’utilise la méthode de lissage 90% de l’ancienne valeur + 10% de la nouvelle = nouvelle valeur. Cela permet de tendre vers une valeur assez convenable au bout de quelques jours, et si l’erreur dérive trop selon les saisons dans l’année, le coefficient s’adapte aussi.

En hiver, mon coefficient est d’environ 2, et en été environ 2.5, donc mon calcul de base est pas si mal, et « s’autocorrige ».

Cependant, le problème principal est que les valeurs de « clouds » renvoyé en JSON par mon site ne sont pas hyper fiables. Vous me direz, ben oui, c’est las météo, ça a jamais été fiable ^^

Je sais, mais je tente quand même ma chance et vous demande si vous faites vous aussi ces estimations, comment, sur quelle base, et quel est votre retour d’expérience ? La valeur de soleil n’est pas évidente à avoir sur les sites en général (en valeur numérique), et surtout heure par heure, car les icones « beaux temps » ne sont pas pratique à interpréter.

C’est d’autant plus frustrant quand la domotique pense avoir genre 10 - 15kwh de production le lendemain, donc s’autorise a charger plus les voitures et décharger plus la batterie solaire, et finalement ne produit que 1kwh… Du coup, je consomme des heures pleines, et je pourri mon coefficient, et 2 ou 3j après, c’est tout l’inverse, la maison économise a mort son énergie et ne sait limite plus quoi en faire ^^ Bon j’ai de la marge ave cau moins une voiture branchée, la batterie solaire et le ballon, mais quand même :slight_smile:

Merci par avance de vos avis :wink:

1 « J'aime »

Bonjour,
L’idée est de récupérer le nombre d’heure d’ensoleillement a j+1 de ta localité
tu le trouve sur le site meteoblue par exemple comme base de calcul
ce script pourra t’y aider

Le nombre d’heure de soleil dans la journée ne fait pas tout ; si il fait très beau le matin (alors que le soleil est pas encore réellement levé, ça compte comme heure de soleil ?), mais dans l’aprèm nuageux, le calcul sera tout autant fossé :slight_smile:

J’avais tenté cette solution avant, pas très concluant non plus, merci pour ton partage quand même

Salut,
Pas faut ce n’est qu’une approche qui ne dit pas quand sont les heures de soleil.

Salut,

J’ai tenté une approche sur la journée moi. En essayant de voir le matin ce qui est prévu comme pourcentage de nuages à différentes heures et donc à voir s’il faut que je décale l’heure prévue pour la mise en route du chauffe-eau.

Essai de voir si tu peux en tirer quelque chose :

Bison

1 « J'aime »

Bonjour,
Très intéressant ton approche et le coefficient qui s’auto-corrige si tu as le temps un jour de nous détailler un tuto on est surement beaucoup à avoir la problématique et des solutions plus ou moins abouties. Mon installation PV ne date que d’un an donc j’apprends encore à l’optimiser et de vos exemples.
Ca va peut-être inspirer un dev pour un plugin.
Merci

Merci beaucoup pour le site meteorama qui donne l’estimation de la couverture nuageuse heure par heure, je vais voir si j’arrive à avoir des données plus intéressantes :slight_smile:

Si j’arrive a un truc convenable, je ferai peut être un tuto oui :slight_smile:

Mais le coefficient qui s’auto corrige, c’est une bonne idée et ça marche assez bien, même sans être très juste…

L’idée est de voir si je produirai 2 ou 15 kwh le lendemain quoi, après si je produit 14 et que j’en fait 15, c’est vraiment pas grave, mais le coefficient va le prendre en compte légèrement quoi :slight_smile:

  • Coefficient en 0 et 1
    Calcul : Nouvelle valeur = Coef * ancienne valeur + (1 - coef) * nouvelle valeur.

Je le fais sur des arduinos par exemple qui mesure la position de pellets dans mon poele, mon coeff est à 0.995, et ça lisse super bien sans faire un calcul de moyenne compliqué :wink:

Petite astuce également, si vous avez un capteur qui a une résolution de 1, mais que vous cherchez à mesurer précisément une valeur d’une précision de 0.1, c’est possible en ajoutant du « bruit » aléatoire (genre entre -10 et 10), associé a ce lissage avec un coef adapté, je vous assure que c’est faire une résolution pas mal du tout au final :wink:

On a hâte d’avoir ton tuto :ok_hand:

Voici un petit tuto de ce que j’ai fais… Je préviens, ça risque d’être long à mettre en place, très répétitif (il y a beaucoup de valeurs), c’est basé sur ce que j’ai fais avant de découvrir météorama, et sur les liens que vous m’avez envoyé plus haut, ça vaut ce que ça vaut, pour l’instant ça marche plutôt pas mal, car les données météo semblent plus fidèles qu’avec mon site précédent.

Attention, j’ai personnellement un plan de panneaux solaires plein sud, je ne sais pas si ça fonctionnera aussi bien si vous êtes plein EST / OUEST car le modèle calculé s’éloignera d’un modèle « symétrique » par rapport au midi solaire.

Pour commencer, je créé 2 scripts différents : un pour J0 (journée en cours), et J1 (le lendemain)

Pour J0 voici la config et les informations récupérées :

Pour J1 :

Pour récupérer l’URL de météorama, il faut aller sur le site, chercher votre ville, cliquer sur « par heure » puis récupérer l’URL. L’idée est de récupérer les valeurs entourée en rouge.

Chaque valeur récupérée, je refais un calcul directement de l’ensoleillement : « 100 - couverture nuageuse ». Un conseil, faites des copier coller une fois qu’une information est bien configurée, c’est rébarbatif ^^

Vous remarquerez que sur le site, la taille du tableau des valeurs à récupérer pour J0 change au fur et à mesure qu’on avance dans la journée, pas évident de faire un script répétable dans ces conditions, c’est pourquoi j’exécute le script une seule fois a 5h50 pour J0, en supposant que les données météo sont « très fiable » étant donnée que c’est la journée en cours.

En revanche, pour J1, la taille du tableau est toujours fixe et à la même position dans le code HTML, donc là j’execute le script toutes les heures :slight_smile: à Xh50

Toutes ces données sont de 6h à 22h (pour l’été notamment), soit 23 valeurs par script

Maintenant qu’on a nos données, il faut aussi créér un virtuel avec 23 valeur également qui « mémorise » les valeurs de l’altitude du soleil chaque jour ; ces valeurs ne changeant pas énormément d’un jour sur l’autre ça ira très bien pour nos calculs :slight_smile: Je passe par un virtuel, car les calculs basés sur l’historique sont à modifier tout le temps en fonction de l’heure d’execute du script principal qu’on verra plus tard, donc c’est plus simple de faire ça.

Inutile d’historiser ces 23 x 3 valeurs dans vos virtuel / scripts.

Voici le virtuel créé :

Voilà, on a notre base :slight_smile:

Les résultats des calculs sont mis dans un autre virtuel visibles où j’ai créé 3 valeurs numériques historisées

image

Maintenant on va rentrer plus dans une théorie / calcul / math… C’est pas si compliquer, je vais essayer d’être clair et de partager le fichier excel.

La production étant différente en été et en hiver, je suis parti du principe que l’on peut modéliser / s’approcher d’un modèle proche d’un cosinus : une valeur min / max du cosinus en été, une valeur min / max du cosinus en hiver.

Partant de ça, il faudrait une fonction donnant la valeur de de 0 (cos(0) = 1 = max) à -PI ou +PI (cos(PI) = -1 = min) en fonction de la date dans l’année.

Pour la date, j’ai fais « #mois# - 1 + (#jour / 31) ». De cette manière, le 1 janvier, j’ai en gros 0, et le 31 décembre, j’ai 12.

Je cherche a avoir cos(0) au 21 juin, et cos(PI) au 21 décembre, qui sont les solstices d’été / hiver.

Voilà donc les courbes, obtenues un peu par tâtonnement :

J+M = « #mois# - 1 + (#jour / 31) »
résultat = (3,1416/6)*((« J+M »)-5,68)

Ensuite il faut jouer avec mon fichier excel… c’est compliqué à expliquer comment je l’ai fait, mais voici comment le remplir :

Les cases en rose sont les altitudes du soleil selon les heures de 6h à 22h, en fonction de la position GPS de votre maison ; à remplir avec l’historique d’héliotrope, ou des simulateur de position du soleil trouvé sur internet :slight_smile:, à remplir vous même

En vert, ce sont vos puissances instantanées à remplir vous même, grâce à votre retour d’expérience, vos historiques, pour une journée « parfaite » sans nuages.

Vous pouvez jouer avec la valeur orange « Ensoeillement » de 0 à 100% ; j’ai constaté qu’une journée bien pourrie, on produit 10% (en gros) de notre puissance Watt Crête (pourra être adapté dans le scénario plus tard dans le tuto). Les valeurs en bas du tableau sont les sommes des puissances pour avoir une indication de production journalière en wh. Ces valeurs servent à comparer par rapport à votre retour d’expérience sur votre installation à vous :slight_smile:

Les deux colonnes suivantes pour été / hivers sont p_calc et p_calc_nuage.

p_calc est une estimation de la puissance calculée grâce aux formules trouvées sans prise en compte de la couverture nuageuse (journée parfaite donc, à comparer grossomodo a vos valeurs vertes), et p_calc_nuages prend en compte la case ensoleillement en orange.

Une fois les cases roses et vertes rempli, il faut regarder le graphique en bas à droite qui dessine 2 courbes bleu et jaune.

Ces deux coubres sont des fonctions de type f(x) = ax+b. Pour simplifier, je ne prend que le coefficient directeur de la courbe et suppose que ça passe par l’origine.

Ces courbes correspondent en réalité à : puissance produite en fonction de l’altitude du soleil. Il y a une courbe pour l’été, une courbe pour l’hiver, et en gros, seul le coefficient directeur change.

Sur mon imprim écran, on peut voir que en jaune, le coef est de 190 et en bleu le coef est de 88. Il faut rentrer ces valeurs dans les cases isolées jaune et bleu (coef min / coef max).

Un fois cela fait, vous verez que les colonnes p_calc et p_calc_nuages seront mises à jour.

Personnellement, j’ai adapté ces coefficients par tâtonnement ensuite (qui sont maintenant à 140 et 80) pour coller au mieux à ma valeur de production journalière en été / hiver.

Une fois ces coefficient adapté à votre installation été / hiver, les formules sont trouvées :slight_smile:

Vous pouvez voir sur le suivant l’évolution du coefficient directeur tout au long de l’année en fonction de la date, avec le coef min / max le 21 juin et 21 décembre.

Pour l’étape suivant, c’est un gros scénario dans jeedom, assez rébarbatif encore :slight_smile:.

Je fais beaucoup de calculs avec des variables, c’est pas hyper propre, mais je les supprime en fin de scénario.

Le scénario est executé toutes les heures entre 6 et 22h :

J’ai un premier bloc action qui permet de donner la proportion de puissance watt heure crête produite pour une journée 100% nuageuse. Dans mon cas, ce n’est pas réellement 10%, mais plutôt 7%. La deuxième valeur est calculée toute seule en fonction de la première, laissez le calcul comme ça.

     (variable) Affectation de la variable : PrctNuage à 0.07
     (variable) Affectation de la variable : PrctSoleil à (1-variable(PrctNuage))/100

Ensuite, j’ai un gros bloc « if » qui s’execute à 6h pour le calcul de la production de J0 :

Dans un premier temps, on retrouve les formules permettant de calculer la valeur en radian du jour et de déterminer la valeur du coefficient directeur en fonction du moment dans l’année.

Enuite je fais les calculs heure par heure en fonction mes coefficient directeurs. Si la puissance est négative, en gros c’est la nuit, donc je filtre à 0.

         (variable) Affectation de la variable : radianJM à (3.1416/6)*((#mois#-1+#jour#/31)-5.68)
         (variable) Affectation de la variable : coefLigne à (140-80)/2*cos(variable(radianJM)-3.1416)+80+(140-80)/2
         (variable) Affectation de la variable : Puissance_6h à (variable(coefLigne)*#[Jardin][Altitude Soleil][Alt_6h]#<0?0:variable(coefLigne)*#[Jardin][Altitude Soleil][Alt_6h]#)
....
         (variable) Affectation de la variable : Puissance_22h à (variable(coefLigne)*#[Jardin][Altitude Soleil][Alt_22h]#<0?0:variable(coefLigne)*#[Jardin][Altitude Soleil][Alt_22h]#)

Une fois mes 23 valeurs calculées, je les additionnes toutes en fonction des valeurs d’ensoleillement récupérées sur météorama, et en fonction également de la puissance minimale produite pour une journée 100% nuageuse… C’est une grosse formule :frowning:

     (variable) Affectation de la variable : PuissanceJ0 à 
variable(Puissance_6h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_6h]#+variable(Puissance_6h)*variable(PrctNuage)+variable(Puissance_7h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_7h]#+variable(Puissance_7h)*variable(PrctNuage)+variable(Puissance_8h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_8h]#+variable(Puissance_8h)*variable(PrctNuage)+variable(Puissance_9h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_9h]#+variable(Puissance_9h)*variable(PrctNuage)+variable(Puissance_10h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_10h]#+variable(Puissance_10h)*variable(PrctNuage)+variable(Puissance_11h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_11h]#+variable(Puissance_11h)*variable(PrctNuage)+variable(Puissance_12h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_12h]#+variable(Puissance_12h)*variable(PrctNuage)+variable(Puissance_13h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_13h]#+variable(Puissance_13h)*variable(PrctNuage)+variable(Puissance_14h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_14h]#+variable(Puissance_14h)*variable(PrctNuage)+variable(Puissance_15h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_15h]#+variable(Puissance_15h)*variable(PrctNuage)+variable(Puissance_16h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_16h]#+variable(Puissance_16h)*variable(PrctNuage)+variable(Puissance_17h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_17h]#+variable(Puissance_17h)*variable(PrctNuage)+variable(Puissance_18h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_18h]#+variable(Puissance_18h)*variable(PrctNuage)+variable(Puissance_19h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_19h]#+variable(Puissance_19h)*variable(PrctNuage)+variable(Puissance_20h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_20h]#+variable(Puissance_20h)*variable(PrctNuage)+variable(Puissance_21h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_21h]#+variable(Puissance_21h)*variable(PrctNuage)+variable(Puissance_22h)*variable(PrctSoleil)*#[Jardin][Ensoleillement J0][j0_22h]#+variable(Puissance_22h)*variable(PrctNuage)

A la fin, je calcule ma production J0 calculée multipliée par mon coefficient d’autoapprentissage et je l’affecte a mon virtuel de résultats. On verra plus tard comment ce coefficient est calculé

event #[Jardin][Estimation Production][Estimation Production J0]# à variable(PuissanceJ0)*#[Jardin][Estimation Production][Coef Auto apprentissage]#

Je réitère tous ces calculs mais pour J1, et cette fois ci à toutes les heures entres 6h et 22h :

Seules les lignes rouges changent (en écrivant le tuto, je me suis aperçu qu’on pourrait condenser un peu le scenario du coup, à vous de voir ^^)

Il faut simplement prendre en compte les valeurs du script J1 au lieu du script J0. Pareil, une fois le calcul de ProductionJ1 termineé, je multiplie cette valeur par le coefficient d’autoapprentissage.

Petite particularité ensuite, toutes les heures, j’affecte et réenregistre la position de l’altitude du soleil dans mon virtuel mémorisant la position du soleil entre 6 et 22h. Il y a donc 23 « if » à la suite.

A la fin du scnéario, j’ai un gros delete_variable de toutes les variables utilisées ; ce n’est pas obligatoire, mais étant donné que ce ne sont que des variables temporaires, j’aime bien les supprimer en fin de scénario :

Il reste une chose à mettre en place, c’est le recalcul du coefficient d’autoapprentissage. Il doit se faire tous les jours à minuit idéalement (bien qu’il puisse être fait à 22h dans ce scenario (car plus de production en principe)

Voici la ligne a rajouter (moi je le fait à minuit dans un autre scénario, c’est « historique », mais ça peut être déplacé dans le scénario principal avec un « if #time# = 2200 »

Je recalcule donc le nouveau coefficient d’apprentissage en fonction de son ancienne valeur, et aussi de la production réelle, par rapport à la production J0 estimée ce jour.

Voici la formule :

event #[Jardin][Estimation Production][Coef Auto apprentissage]# à 0.9*#[Jardin][Estimation Production][Coef Auto apprentissage]#+0.1*((variable(Production_relle_J)/(1000*#[Jardin][Estimation Production][Estimation Production J0]#))*#[Jardin][Estimation Production][Coef Auto apprentissage]#

Notez que les valeur 0.9 et 0.1 sont à rentrer selon votre envie :slight_smile:

La somme des deux valeur doit faire 1, et plus 0.9 vous le rapprochez de 1, plus votre coefficient va être lissé. Ici pour cet exemple, je garde 90% de la valeur de mon ancien coefficient, et je rajoute 10% de la valeur du nouveau coefficient calculé aujourd’hui.

Du coup, franchement ça s’adapte assez bien, en une semaine, vous devriez avoir un coefficient a peu près stable ,et qui évoluera peut être légèrement en fonction des saisons.

Je pense même qu’avec ce coefficient, peut importe si vous êtes orienté EST / SUD / OUEST, ou que vos calculs de coefficient sont pas hyper réaliste, qu’il y a une ombre genre a 10h qui écroule votre production etc… ça s’adaptera « tout seul » finalement. A vous de voir si vous souhaitez lisser énormément ou pas en fonction de 0.9 et du 0.1

Voici par exemple l’évolution de mon coefficient depuis quelques jours (la nouvelle méthode de calcule est récente)

Mon ancienne valeur avec une autre méthode de calcul (donc forcément pas les mêmes valeurs de coefficient) de mai à décembre

Comme vous pouvez le voir, à chaque grosse variation, cela s’expliquait par le fait que mon ancien site (Weather je crois) était très peu fiable ; j’avais pafois peu de prod alors qu’on m’annonçait une super journée et vice versa.

J’espère qu’avec Météorama, ça sera un peu plus fidèle, auquel cas je pourrais peut être passer à 0.95 - 0.05 mes coefficients :slight_smile:

Voila pour le tuto, ça va être long à mettre en place pour vous car c’est beaucoup de copier coller. Ca peut en inspirer certains et proposer une amélioration également, je suis ouvert :slight_smile:

Vous trouverez ici le fichier excel à télécharger : EstimationSolaire.xlsx - Google Sheets

2 « J'aime »

J’ai du en perdre pas mal vu le nombre de réponses :sweat_smile::sweat_smile:

1 « J'aime »

Hello,

Disons qu’il faut prendre le temps de se poser dessus au calme et devant un PC, ce que je n’ai pas eu l’occasion de faire depuis 2 jours.

Personnellement mon orientation est plutôt est/ouest donc faudra voir si possible de jouer avec les calculs dans un 2eme temps.

Bref merci pour les explications ça a dû être bien long à rediriger, je regarderai quand je pourrais si c’est applicable de mon côté :smile:.

Oui bravo et merci du temps passé.
A regarder au calme après les fêtes, là tout mon stock de cachet pour la tête est pris par les cris des petits enfants :innocent: :smiling_face_with_three_hearts:

Tu as hésité entre rédigé et digéré :smile:

Arf j’avais pas vu « rediriger ». Alors oui en effet mon cerveau a du faire un hésitation entre ces 2 mots à coup sûr :rofl:

ça ce sera pour demain soir :rofl:

1 « J'aime »

Pas de soucis prenez votre temps :slight_smile:

Si quelqu’un arrivé à « simplifier » en faisant un bloc code PHP peut être que ça sera plus facilement transposable :slight_smile:

En tous cas, je serai curieux de voir si ça marche pour une autre orientation que sud. Est et Ouest ça doit aller encore, que est ou que ouest, a voir.

Bonsoir,

il y a des cas particulier aussi
une série de panneaux de puissance X orienter sud-est sur une pente Y
plus
une série de panneaux de puissance Z orienter nord-ouest sur une pente W

bon courage :thinking:

Oui, bah finalement après il faut trouver une formule simple (mais remarque peut être complexe aussi), qui converti l’altitude du soleil en une puissance par heure. Moi j’ai trouvé une formule simple avec simplement un coefficient directeur, il faut peut être pousser un peu plus loin et adapter en fonction des situations oui :slight_smile:

Mis à part ça, le coefficient correctif ainsi que la récupération des valeurs sur météorama restent utilisables

Bon j’ai déjà rempli le tableau avec quelques valeurs.
Les altitudes soleil sortent d’Heliotrope, j’avais historisé la valeur.

J’ai pris le 16/06/2021 pour l’été car belle journée et donc une courbe normale de production.
J’ai pris le 17/12 pour l’hiver, c’est la courbe la moins crade que j’ai trouvée vers le 21/12 mais j’ai inventé quelques valeurs parce qu’elle était un peu chaotique.

ça donne ça :

Je ne vais pas plus loin car je ne pense pas que du coup il soit possible de modéliser avec juste un coefficient directeur et qu’en conséquence le scénario de calcul ne pourra pas être bon.

Mes panneaux sont orientés coté EST à quelques degrés prêt.

1 « J'aime »

Bah essaye, avec 35 et 80, dans le tableau en dessous, ça donne quoi en valeurs calculé ? Tant que t’arrive a un nombre en kwh calculé proche du réel, c’est déjà pas mal, et tu laisse le coefficient autocorriger le calcul. ?