Bonjour,
Utilisé pour mon besoin personnel et pour faire suite à une demande sur Community, je vous propose un tuto rapide pour déterminer le seuil de rentabilité permettant de savoir s’il vaut mieux faire tourner un appareil durant les heures de production solaire ou durant la nuit quand on a une tarification Tempo.
En bonus, une estimation de l’heure de démarrage pourrait être obtenue via plugin-solcast
Comme plusieurs cerveaux valent mieux qu’un, n’hésitez pas à me dire si ce n’est pas juste et on pourra en discuter et y réfléchir pour améliorer ou corriger.
Prérequis :
- Une tarification tempo. Ici j’utilise plugin-rteecowatt
- Une production solaire
J’utilise 2 scénarios :
- SeuilRentabilité qui sera appelé par BestTimeslot
- BestTimeslot qui appelera SeuilRentabilité
Le scénario SeuilRentabilité (créer un bloc code et copier/coller le contenu) :
// --------------------------------------------------------------------------------------------------------------------------------
// Scénario utile pour les personnes ayant un contrat TEMPO
// Il retourne le besoin minimum de production en heure pleine pour atteindre un seul de rentabilité par rapport aux heures creuses
// Ce scénario est prévu pour être appelé depuis un autre en fournissant un tag puissance
//
// https://particulier.edf.fr/content/dam/2-Actifs/Documents/Offres/Grille_prix_Tarif_Bleu.pdf
// --------------------------------------------------------------------------------------------------------------------------------
// Paramétrage
$HCB = 12.96; // Bleu HC (cts € TTC/kWh)
$HPB = 16.09; // Bleu HP (cts € TTC/kWh)
$HCW = 14.86; // Blanc HC (cts € TTC/kWh)
$HPW = 18.94; // Blanc HP (cts € TTC/kWh)
$HCR = 15.68; // Rouge HC (cts € TTC/kWh)
$HPR = 75.62; // Rouge HP (cts € TTC/kWh)
$talon = 300; // Talon (en W)
$cmd_couleur_tempo = '#[xxxx][yyyy][Aujourdhui]#'; // Commande pour avoir l'information BLUE, WHITE ou RED
// Fin du paramétrage
$version = '03/11/2024 16:00' ;
$tags = $scenario->getTags();
$scenario->setLog('|----------------------------------------------------------');
$scenario->setLog('| Version du '.$version);
$scenario->setLog('| Talon : ' . $talon . ' Wh / ' . 'Puissance : ' . $tags['#puissance#'] . ' W');
$scenario->setLog('|----------------------------------------------------------');
$puissance = round($tags['#puissance#']/1000);
$color = cmd::byString($cmd_couleur_tempo)->execCmd();
$scenario->setLog('| .Couleur du jour : ' . $color);
if ($color == 'BLUE') {
$prix_nuit = $puissance*$HCB;
$conso = $prix_nuit/$HPB;
$besoin_prod = round(1000*($puissance-$conso)+$talon);
$scenario->setLog('| .Jour bleu - Besoin en production minimum : ' . $besoin_prod . ' Wh');
}
if ($color == 'WHITE') {
$prix_nuit = $puissance*$HCW;
$conso = $prix_nuit/$HPW;
$besoin_prod = round(1000*($puissance-$conso)+$talon);
$scenario->setLog('| .Jour blanc - Besoin en production minimum : ' . $besoin_prod . ' Wh');
}
if ($color == 'RED') {
$prix_nuit = $puissance*$HCR;
$conso = $prix_nuit/$HPR;
$besoin_prod = round(1000*($puissance-$conso)+$talon);
$scenario->setLog('| .Jour rouge - Besoin en production minimum : ' . $besoin_prod . ' Wh');
}
if ($color == 'UNDEFINED') {
$besoin_prod = round($puissance);
$scenario->setLog('| .Jour non défini (erreur)');
}
$scenario->setLog('|----------------------------------------------------------');
$scenario->setReturn($besoin_prod);
Paramétrage statique :
- Les prix du tarif Tempo. Les tarifs au 2 novembre 2024 sont ceux définis dans le code, il faudra modifier à chaque changement
- Un talon permettant d’indiquer ce que consomme votre habitation dans la journée
- La commande permettant de connaitre la couleur du jour. Elle doit envoyer BLUE, WHITE ou RED (c’est le cas avec plugin-rteecowatt par exemple)
Ce scénario prendra dynamiquement la puissance d’un équipement (que fournira BestTimeslot) et retournera la quantité de production que vos panneaux doivent produire pour qu’il soit plus intéressant de faire tourner cet équipement en journée durant les heures pleines que durant les heures creuses.
Le scénario BestTimeslot (créer un bloc code et copier/coller le contenu) :
// --------------------------------------------------------------------------------------------------------------------------------
// Scénario appelant SeuilRentabilité avec une puissance pour connaitre le seuil de rentabilité
// Si le plugin SolCast est installé et les commandes configurées, il sera possible d'obtenir l'heure conseillée de démarrage
// --------------------------------------------------------------------------------------------------------------------------------
// Paramétrage obligatoire
$scenario_SeuilRentabilite = '#[xxxx][yyyy][SeuilRentabilité]#';
$puissance = 3000; // puissance (en W)
// Fin Paramétrage obligatoire
$version = '03/11/2024 16:00' ;
// Paramétrage optionnel si utilisation avec le plugin SolCast
$cmd_SolCast_Duree = '#[xxxx][yyyy][Durée de fonctionnement pour retour heure de démarrage]#';
$cmd_SolCast_HeureDemarrage = '#[xxxxx][yyyy][Heure de démarrage en fonction de la durée demandée]#';
$duree = 30; // Durée en minute
// Fin du paramétrage optionnel si utilisation avec le plugin SolCast
// -------------------------- NE PAS MODIFIER ----------------------------------
$scenario->setLog('|----------------------------------------------------------');
$scenario->setLog('| Version du '.$version);
$scenario->setLog('| Durée : ' . $duree . ' minute(s) / ' . 'Puissance : ' . $puissance . ' kWh');
$scenario->setLog('|----------------------------------------------------------');
$sc = scenario::byString($scenario_SeuilRentabilite);
$tags['#puissance#'] = $puissance;
$sc->setTags($tags);
$ProdMin = $sc->launch();
$tags['#ProdMin#'] = $ProdMin;
$scenario->setLog('| .Seuil de rentabilité : ' . $ProdMin . ' Wh');
if ($cmd_SolCast_Duree != '' && $cmd_SolCast_HeureDemarrage != '') {
cmd::byString($cmd_SolCast_Duree)->event($ProdMin . ';' . $duree);
sleep(2);
$Proposal = cmd::byString($cmd_SolCast_HeureDemarrage)->execCmd();
$scenario->setLog('| .Heure de démarrage proposé par SolCast : ' . $Proposal);
$tags['#Proposal#'] = $Proposal;
}
$scenario->setTags($tags);
$scenario->setLog('|----------------------------------------------------------');
Paramétrage statique :
- Le nom du scénario SeuilRentabilité
- La puissance de l’appareil qui va tourner
Paramétrage optionnel :
- La commande « Durée de fonctionnement pour retour heure de démarrage » du plugin-solcast
- La commande « Heure de démarrage en fonction de la durée demandée » du plugin-solcast
- La durée de fonctionnement de l’appareil en Watts
→ Si vous n’utilisez pas SolCast videz les chaines de caractères :
$cmd_SolCast_Duree = '';
$cmd_SolCast_HeureDemarrage = '';
→ Si vous utilisez SolCast le scénario retournera une suggestion d’heure (au format hhmm) en utilisant le seuil de rentabilité
C’est une base pour faciliter la mise en place et le test. Dans l’idée, le scénario SeuilRentabilité ne devrait pas être modifié. BestTimeslot est fait entièrement en bloc code mais c’est pour donner l’idée et il faudrait l’adapter à son utilisation en fournissant des données et en éxécutant des actions en dehors du bloc