Calculs sur script

Bonjour,

A partir du plugin script, je récupère plusieurs informations de ma box des panneaux photovoltaïques comme la production (noir), la consommation (bleu) et la différence des 2 (vert) comme le montre le graphe suivant (oui j’ai mis ma plus belle gaussienne :slight_smile:) :

Je souhaite faire des calculs sur ces valeurs de script notamment calculer ce que j’importe d’EDF par jour et ce que je revends (Sur la courbe verte, tout ce qui est >0 j’importe et ce qui est <0, je revends) Je souhaite avoir ces 2 valeurs par jour et pouvoir les historiser aussi.
Je ne sais pas s’il faut que je reste en script, variable, virtuel ou autre…?

D’avance merci pour votre aide

Déjà je partirais sur deux virtuels, ce sera sûrement plus simple. Avec un opérateur ternaire ça devrait déjà permettre d’avoir l’export et l’import avec ce genre de formule :

([#commande verte#] > 0)?([#commande verte#]:0

Ensuite, on doit pouvoir faire des choses avec la commande statistics ou average appliquées aux deux virtuels ci-dessus.

Et sinon, récupérer directement la téléinfo au niveau du compter Linky, ce serait peut-être encore mieux.

Bonjour,

Merci pour ton retour @seb821.

Je n’ai pas encore de Linky et j’aimerais réussir ces calculs pour pouvoir en faire d’autres par la suite…

J’ai fait des dizaines d’essai avec l’opérateur ternaire mais je ne comprends pas comment il fonctionne: si variable>0 ? alors que fait-on ?

Ensuite j’ai fait des test d’expression avec StatisticsBetween notamment mais les résultats de sum ne sont pas terribles (alors que avg,min,max sont OK). il n’y a pas d’autres fonction de calcul de cumul ou autre par hasard ?

Merci pour votre aide

1 « J'aime »

C’est à dire qu’en plus je fait des fautes de frappe, ça aide pas. Normalement la condition est entre parenthèse, si elle est vrai la valeur est la première partie (entre point d’interrogation et les deux points), sinon la deuxième partie. Un exemple qui donne 1 si la température est inférieure à 5° :

(#[Météo][T° extérieures][T° minimum]#<5)?1:0

Le testeur d’expression permet de vérifier facilement.

Pour les fonctions statistics, elles sont pas top top. A la limite, multiplier la moyenne par le temps considéré sera peut-être ce qui donne le meilleur résultat. A tester.

OK, ca marche mieux effectivement :slight_smile:.

Le test est bon mais ce qu’il se passe ensuite c’est un peu plus compliqué, ce que je souhaite faire serait de la forme:
(#[Toit][Panneaux photovoltaïques][Imp-Exp now]#>0)?variable(import)=#[Toit][Panneaux photovoltaïques][Imp-Exp now]#:0
(#[Toit][Panneaux photovoltaïques][Imp-Exp now]#<0)?variable(export)=#[Toit][Panneaux photovoltaïques][Imp-Exp now]#:0

Affecter la valeur à une variable ou virtuel…

J’ai peur du calcul de la moyenne sur une courbe comme cela mais à essayer.
Je pense peut être essayer un scénario avec une boucle qui parcours toutes les minutes de la journée et qui additionne, à tester aussi…

Dans la formule pour de la commande du virtuel, il faut mettre cela :

(#[Toit][Panneaux photovoltaïques][Imp-Exp now]#>0)?#[Toit][Panneaux photovoltaïques][Imp-Exp now]#:0

Il faut que la commande soit de type numérique et il faut l’historiser. Dans l’onglet configuration, on peut aussi mettre mode lissage sur aucun et Jeedom gardera toutes les valeurs et pas seulement une toutes les 5 min (à voir si c’est vraiment utile parce que ça va vite faire beaucoup de données).

Pour affecter à une variable il faut passer par un scénario mais il n’y a pas d’historique.

En fait, j’ai créé 2 virtuels juste avant que tu ne répondes et chacun a une des 2 formules ci-dessus.
je me suis fait avoir avec le testeur d’expression…
Donc je devrais avoir 2 courbes (import et export) et ensuite voir les calculs que je peux faire dessus.

Encore merci @seb821

Bonjour,

J’avance petit à petit sur la solution, j’ai bien mes 2 virtuels (un >0 et un <0):


Ensuite je fais la « sum » « statistics » sur « Today ».
Etant donné que je le veux en kWh, j’ai recréé 2 autres virtuels qui font comme la courbe ci-dessus mais au lieu de me reporter la puissance, je mets 1. Ainsi cela me permet, à l’aide de la même formule statistics, de savoir combien de minutes (puisque je récupère ma conso toutes les minutes) j’importe ou j’exporte.
Je fais donc la sum(puissance)/sum(minutes):

J’étais serein (trop naif :slight_smile:) quant au résultat mais au final il n’est pas bon (pas déconnant mais pas bon) et cela vient que mon virtuel de « count » change que toutes les 5 minutes alors que tout ce groupe de virtuels est réglé sur 1 minute (*/1 * * * *) ! Je précise aussi que tous mes virtuels sont sur « toujours répéter »
Meme si mon résultat je le divise ou multiplie par 5, ça sera toujours pas bon…

Des idées svp ?
Merci

Il faudrait avoir les formules de chacun des virtuels parce que c’est compliqué comme ça de comprendre.

Est-ce import_count a bien un historique qui est bien configuré avec un mode de lissage sur aucun ?

Il me semble que cela va juste donner la puissance moyenne. Et ça devient une usine à gaz.

Pour moi il y a juste à multiplier la moyenne par la durée, en l’occurrence 24h

averageBetween(#[Import]#,yesterday,today)*24

Cela doit donner la puissance importée la veille en kWh si Import est bien en W.

Ci-dessous les formules (j’ai mis que l’export car plus simple car que de 8h à 18h environ en fonction du soleil…):

Je pense que mon idée de calcul est la bonne pour passer en Energie (il faut diviser la puissance par le temps). Ton calcul *24h ne me donne pas ce que j’attends (je précise que je connais le résultat à obtenir avec mon application de mes panneaux photo)

Il y a quand même des choses bizarres sur mes historiques:
Sur l’export, je n’ai pas de points entre 9h53 et 10h47 puis entre 11h28 et 12h…

Et maintenant mon count_export est toutes les heures !!

Alors que tous mes lissages sont sur aucun et toujours répéter les valeurs et que tout cela se fait toutes les minutes, je comprends plus comment ca fonctionne :frowning:

Pour avoir l’énergie, il faut multiplier la puissance par le temps. C’est bien pour cela que je fais puissance (moyenne en l’occurence) en kW multiplié par x heures (24) ce qui donne des kWh. J’ai fait le test hier sur la puissance consommée chez moi et c’était à peu près bon (je dis à peu près, parce que la puissance ne remonte que toutes les minutes et ça ne pourra jamais être exacte à la valeur obtenue avec les index du compteur, on perd des infos).

De ce que je vois pour Export_cumul, au numérateur c’est l’addition de puissances (chaque minute) et au dénominateur le nombre d’occurrences (nombre de minutes) => c’est une puissance moyenne. Ou alors je n’ai pas du tout compris les formules des virtuels.

Pour le reste je ne sais pas. Je pense que le mieux c’est d’installer adminer et de regarder ce qui remonte dans la base de données;

Bon en fait non, ça ne peut pas fonctionner ce que j’ai donné. La raison c’est que les fonctions de moyenne ne prennent pas en compte le temps : La fonction Statistiquebetween gère t'elle le pas d'échantillonnage non constant? - #7 par EmileRx

Du coup, si la moitié de la journée il y une valeur nulle, Jeedom risque de n’enregistrer qu’une seule valeur et le calcul de la moyenne sera faussé. En fait, cela fonctionnera seulement si on a une valeur qui est bien enregistrée à un intervalle constant.

Bonjour,

Je ne comprenais pas pourquoi mon virtuel (sur mon script) m’historisait un résultat toutes les 5 min alors que mon script vérifie toutes les minutes (en fait, j’avais un lissage moyen et non aucun).
Bref maintenant c’est plutôt bon:

et les count (vert complément du orange):

Comme tu l’as proposé @seb821, je suis parti sur l’average et mes calculs étaient effectivement pas top, j’ai donc fait sum(import ou export) et je divise par le nb de count (je fais ma moyenne à moi et non l’average de Jeedom).
Et ensuite, cette valeur je la remultipliais par nb_count/60 (pour l’avoir en heure) pour avoir l’énergie.

Donc au final, je fais sum(import ou export) / 60 et mes résultats pour aujourd’hui sont dans l’ordre de grandeur de ce que me donne mon appli.
Je vais essayer de vérifier ça sur plusieurs jours voire affiner tout ça.

Merci

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.