Un article sera à suivre dans les mois à venir.
Intégration du suivi de la box PV (bricolage d'API + pulse compteur dédié par jeedouino) mais on y arrive.
Je suis maintenant :
- la production temps réel par le pulse,
- la production précise par l'API,
- je déduis le gain réel (avec estimation du talon quand la consommation est nulle),
- je calcule le % autoconsommation sur la journée (la part de la consommation que j'utilise tout de suite ou la part que je donne gratuitement au réseau),
- je calcule l'effacement parfait de la journée (pas forcément le but mais il arrive),
- en fin de journée, je calcule le ratio de l'autoconso par rapport à ma consommation totale (différent de l'autoconsommation générée),
- j'en déduis mon gain par rapport au prix du kwh
- et donc le gain total de l'installation (il me reste à ajouter l'estimé depuis son installation il y a 1.5 mois),
et je peux donc suivre et calculer l'amortissement de l'installation !
Je me suis même ajouté une petite notif TTS à 22h
.
Prochain step quand j'ai de la donnée, ajout dans le tableau de suivi.
Petit scénario (la base il y a en d'autres de mise en forme 1min, 5min etc).
Récupération API toutes les 5min et calcul du gain estimé.
Le virtuel associé :
*/5 05-22 * * *
je le fais tourner à 23h50 en plus : 50 23 * * *
le bloc code de base :
Code : Tout sélectionner
// definition du talon
$talon=600;
// récupération de l'ID pour la production "précise" par API
$cmdIdprodAPI= cmd::byString("#[Consommation][Puissance Instantanée][Production (API)]#")->getId();
// récupération de l'ID pour la consommation @5min (calcul par scénario indépendant)
$cmdIdconso= cmd::byString("#[Capteurs et Actionneurs][Compteur Linky Garage][PAPP]#")->getId();
// contre mesure avec la production totale avec le pulse compteur temps réel (moins précis)
//$cmdIdprod= cmd::byString("#[Consommation][Production][Conso Jour TOTAL]#")->getId();
// définition des bornes de temps pour l'étude pour aujourd'hui (scénario lancé avant minuit)
$debut = date("Y-m-d H:i:s", strtotime("today"));
$fin = date("Y-m-d H:i:s", strtotime("today 23:59"));
// récupération de l'historique de la production API à 5min
$allprod = history::all($cmdIdprodAPI, $debut, $fin);
// taille à analyser
//$taille_conso = count($allcons);
//$taille_prod = count($allprod);
//$scenario->setLog("Taille conso : $taille_conso & Taille prod : $taille_prod");
// conclusion : c'est la conso le driver mais on prend comme driver la production CAR le gain n'existe que si la production démarre
// définitions
$gain = 0;
$prodtotale = 0;
for ($i = 0; $i < count($allprod); $i++) {
// on récupère la valeur de la production et on s'arrête à l'avant dernier item sur la boucle for < pour tenir compte de la consommation à postériori
$pprod = $allprod[$i]->getValue();
// on récupère son temps
$pprodtime = $allprod[$i]->getDatetime();
// debug affichage
// $scenario->setLog( "date : $pprodtime valeur : $pprod ");
// déduction des bornes temps à 5min
$temps = date("Y-m-d H:i:s", strtotime($pprodtime));
$temps5minbef = date('Y-m-d H:i:s',strtotime('-5 minutes',strtotime($pprodtime)));
// calcul la consommation moyenne 5min avant jusqu'à la valeur de la production
$pcons5min = history::getStatistique($cmdIdconso, $temps5minbef, $temps)["avg"];
// si prod = 0, le gain est 0
// si prod != 0 alors si conso = 0 le gain est talon sinon gain est prod
$gainup = 0;
$pprodWh = $pprod * 0.08333;
$prodtotale = $prodtotale + $pprodWh;
if ($pprod == 0) {
$gainup = 0;
//$scenario->setLog("@ $temps - Prod nulle : $pprod alors $gain");
}
else if ($pcons5min == 0) {
$gainup = $talon;
//$scenario->setLog("@ $temps - Prod non nulle : $pprod mais conso nulle $pcons5min alors talon $gain");
}
else {
$gainup = $pprod;
//$scenario->setLog("@ $temps - Prod non nulle : $pprod mais conso non nulle $pcons5min alors prod $gain");
}
// calcul du gain en Wh : h x puissance 1 = 60 min alors 5 min = 0.08333
// normalisation du gain
//$scenario->setLog("GainW : $gainup");
$gainup = $gainup * 0.08333;
//$scenario->setLog("GainWh : $gainup");
$gain = $gain + $gainup;
//$scenario->setLog("Gain : $gain");
//$scenario->setLog("Production totale : $prodtotale Wh");
}
// debug global
$ratio = 100 * $gain / $prodtotale;
$scenario->setLog("Gain Wh : $gain");
$scenario->setLog("Produit Wh : $prodtotale");
$scenario->setLog("Utilisé % : $ratio");
// passage par variable
$scenario->setData("gainproduction", $gain);
$scenario->setData("used_ratio", $ratio);
$scenario->setData("prodtotale", $prodtotale);
puis scénario jeedom de notification à 22h et 23h50 avec passage aux virtuels d'info pour stockage.
Code : Tout sélectionner
SI #time# > 2100 AND #time# < 2106
ALORS
(variable) Affectation de la variable : message_TTS à Le ratio d'autoconsommation est de #[Consommation][Statistiques PV][Ratio Autoconso]# %. Vous avez utilisé #13669# sur #13668# kWh produits.
(scenario) startsync de [Domotique][Notifications][Gestion Notifications Multiroom]
wait - Options : {"enable":"1","background":"0","condition":"variable(message) === \"NULL\"","timeout":"60"}
SINON
SI #time# > 2349 AND #time#< 2351
ALORS
(variable) Affectation de la variable : ratio_gain_24h à round(#13669#/(#13669#+#4552#),2)
(variable) Affectation de la variable : gain_euro_24h à round((#13669#*0.1453),2)
(variable) Affectation de la variable : autoconso_euro_24h à variable(autoconso_euro_24h)+variable(gain_euro_24h)
(variable) Affectation de la variable : autoconso_euro_24h à round(variable(autoconso_euro_24h),2)
#[Consommation][Statistiques PV][Rafraichir]# - Options : {"enable":"1","background":"0"}
#[Interfaces][Telegram][XXXXXX- XXXX]# - Options : {"enable":"1","background":"0","title":"","message":"#[Consommation][Statistiques PV][Autoconsommation]# % autoconsomm\u00e9 aujourd'hui !\nsoit #[Consommation][Statistiques PV][Autoconsommation 24h]# kWh autoconsomm\u00e9s pour #[Consommation][Electricit\u00e9][Conso Jour TOTAL]# kWh factur\u00e9s\nun gain de #[Consommation][Statistiques PV][Gain Autoconso r\u00e9el 24h]# \u20ac aujourd'hui et depuis l'installation #[Consommation][Statistiques PV][Gain Autoconso Total]# \u20ac !\n"}
SINON
comment