Calculs sur Heure Pleine / Heure Creuse et Tarifications / Coûts

Bonjour,
Ok, je viens de voir pour empiler les barres.

pour faire le calcul j’ai rajouté une info dans le virtuel avec le calcul direct
par contre attention, le bon ratio est le nombre total de KW en HC sur le nombre total de KW en HP et donc la formule (avec mon virtuel) est :
#[Maison][Conso Electrique][estimation_prix_mois_hc]#/(#[Maison][Conso Electrique][estimation_prix_mois_hc]#+#[Maison][Conso Electrique][estimation_prix_mois_hp]#)

Exact, j’ai exactement appliqué il y a 2 jours ce que tu annonces.
Merci tout plein de ton retour et de ta confirmation.

Hello,

De mon côté j’ai réussi également ^^
Je viens de modifier mon abo EDF donc sans les HP HC, c’était plus simple, ça m’a pris 20minutes de tout paramétrer, super topic.

En revanche, deux petits soucis:

  • j’ai quand même un tarif avantageux les weekends, j’imagine que le faire figurer dans un script est plus compliqué?
  • je vais rajouter la conso horaire (mais je vais le faire à la main) car j’aime bien savoir heure par heure ce que je consomme et surtout, ce que je dépense.

En tout cas, chapeau pour le boulot!


Je vais peut être réfléchir pour créer un widget un peu sympa pour afficher tout ça :slight_smile:

Pour le widget j’ai repris celui la.

Bonjour j’ai suivis votre tutoriel cependant j’ai rien qui remonte , dans mon plugin linky j’ai bien des chiffres qui remonte.
Mais j’ai l’impression que je le suis tromper sur les scénarios.
J’en est 3 un avec le code , un avec le refresh du plugin linky et un avec scheduler.

Voici ce que j’ai:

Pouvez vous m’aider s’il vous plaît ?
En vous souhaitant une agréable journée
Cordialement
Rémy

Hello

Regarde dans le scénario si il c’est bien exécuté
Et regarde aussi tes variables si elle sont bien OK

C’est là où je comprends pas le scénario j’en est 3 en tout .
Un avec le code
Un autre pour refresh le linky
Et le scheduler c’est ça ?

De mémoire
c’est deux scénario

Vous pouvez me montrer vos deux scénario svp ?

Vous avez discord ?
Sa serait plus simple en mp si vous pouvez ajouter moi Remy#1677
En vous souhaitant une agréable journée
Cordialement
Rémy

Re,

y’a longtemps que j’ai abandonner cette méthode , je n’est plus de scénario

Bonjour ,

J’ai ce message d’erreur sur mon scénario , pourtant j’ai bien des données qui remonte sur mon plugin linky.

Comment faire svp ?

En vous souhaitant une agréable journée
Cordialement
Rémy

1 « J'aime »

Hello

poste tes capture d’écran de tes variables

et post tes scénarios

J’avoue que j’ai beaucoup de mal a crée le scenario. aurais tu la possibilité de partager ton scenario (fichier)

Beau travail ! Merci !!
Si jamais le projet de pluggin demeure (ou de peaufiner encore le scenario), je suggère de rajouter la gestion des tarifs du jour avec plusieurs possibilités (ex. tarif edf Tempo « bleu/blanc/rouge » assez courant) le cas se récupèrent chez Edf (code dispo dispo sur un autre forum, pour ce cas) à paramétrer par l’utilisateur,
Voilà … au cas où … comme effectivement je comprend le parti pris que le pluggin ENEDIS fait la récupération ponctuelle, il faut de bons développeurs pour ne pas trop bricoler (ce que je ne suis pas).
Bon courage si qq’un se sent d’attaque ! :muscle:t3:
ps: comme j’ai lu vite le fil, j’espère que ce n’est pas déjà fait et que je sois passé au travers.

d’abord un grand merci pour ces scenarios. c’est très pratique !!

je déterre un peu le sujet, mais vu le nombre d’abonnement tempo qui croit (il faut dire que c’est plutôt avantageux…perso c’est 25% de cout de facture en moins) cela sera peut etre utile !! A defaut cela sera utile pour moi :slight_smile:

je voulais m’inspirer du scénario HP/HC avant minuit.
j’ai d’abord crée un virtuel pour récupérer la couleur à partir du plugin RTEEcowatt… je pense qu’il est même plus simple de taper directement sur l’historique du plugin ?

j’ai ajouté 6 variables :
empty($scenario->getData(« EDF_Tarif_KWh_HPB »))) ? $scenario->setData(« EDF_Tarif_KWh_HPB », « 0.1369 ») : null;
(empty($scenario->getData(« EDF_Tarif_KWh_HCB »))) ? $scenario->setData(« EDF_Tarif_KWh_HCB », « 0.1056 ») : null;
(empty($scenario->getData(« EDF_Tarif_KWh_HPW »))) ? $scenario->setData(« EDF_Tarif_KWh_HPW », « 0.1654 ») : null;
(empty($scenario->getData(« EDF_Tarif_KWh_HCW »))) ? $scenario->setData(« EDF_Tarif_KWh_HCW », « 0.1246 ») : null;
(empty($scenario->getData(« EDF_Tarif_KWh_HPR »))) ? $scenario->setData(« EDF_Tarif_KWh_HPR », « 0.7324 ») : null;
(empty($scenario->getData(« EDF_Tarif_KWh_HCR »))) ? $scenario->setData(« EDF_Tarif_KWh_HCR », « 0.1328 ») : null;

j’ai gardé les variables HP et HC car je m’en sert dans le principe.
j’ai ensuite juste avant la #finalisation des calculs divers# ajouté la # Vérification de la couleur
normalement je suis dans la boucle ad hoc.

et ensuite je bloque car je n’arrive pas a écrire le code suivant :

Si pour le jour de calcul concerné la couleur ,(qui est à prendre sur l’ historique du virtuel),
est BLUE alors $tarif_heure_pleine = $scenario->getData(« EDF_Tarif_KWh_HPB »);
$tarif_heure_creuse = $scenario->getData(« EDF_Tarif_KWh_HCB »);

est WHITE alors $tarif_heure_pleine = $scenario->getData(« EDF_Tarif_KWh_HPW »);
$tarif_heure_creuse = $scenario->getData(« EDF_Tarif_KWh_HCW »);

est RED alors $tarif_heure_pleine = $scenario->getData(« EDF_Tarif_KWh_HPR »);
$tarif_heure_creuse = $scenario->getData(« EDF_Tarif_KWh_HCR »);

est UNDIFINED alors $tarif_heure_pleine = $scenario->getData(« EDF_Tarif_KWh_HPB »);
$tarif_heure_creuse = $scenario->getData(« EDF_Tarif_KWh_HCB »);

l’un d’entre vous pourrait il m’aider sur ce point svp ?
ou déjà m’expliquer concrètement comment appeler l’historique d’une ligne de donnée pour avoir sa valeur le jour x pour voir si je peux avancer avec cela !

merci

1 « J'aime »

Saut,
Après mise à jour du code dans sa dernière version le scénario me calcul bien les valeurs de consommation HC HP mais je rencontre un problème que je n’arrive pas à régler. Les valeurs dans mon virtuel ne sont pas mises à jour ! Je m’arrache les cheveux sans voir d’où peut venir le soucis :confused:

Voilà ce que ça donne :

################################################
## Scenario début heures creuses avant minuit ##
################################################
## Vérification présence des variables ou implémentation avec valeurs par défaut
(empty($scenario->getData("EDF_HP_Start"))) ? $scenario->setData("EDF_HP_Start", "06:00") : null;
(empty($scenario->getData("EDF_HC_Start"))) ? $scenario->setData("EDF_HC_Start", "22:00") : null;
(empty($scenario->getData("EDF_Tarif_KWh_HP"))) ? $scenario->setData("EDF_Tarif_KWh_HP", "0.1654") : null;
(empty($scenario->getData("EDF_Tarif_KWh_HC"))) ? $scenario->setData("EDF_Tarif_KWh_HC", "0.1246") : null;
(empty($scenario->getData("EDF_Tarif_Abo_Mois"))) ? $scenario->setData("EDF_Tarif_Abo_Mois", "25.21") : null;
(empty($scenario->getData("EDF_Last_Var_Update"))) ? $scenario->setData("EDF_Last_Var_Update", date('Y-m-d H:i:s',strtotime("now - 1 days"))) : null;

## Vérification de la dernière exécution réussie
$commande_conso_hier_hp = cmd::byString("#[MAISON][Variables EDF][Conso Jour HP]#");
$collectDate_conso_hier_hp = $commande_conso_hier_hp->getCollectDate();

if (date('Y-m-d', strtotime($collectDate_conso_hier_hp)) == date('Y-m-d',strtotime("yesterday"))){
	$scenario->setLog("Scenario déjà lancé, annulation. Date dernier enregistrement valeurs:".date('Y-m-d', strtotime($collectDate_conso_hier_hp)));
} else {

		## récupération de la date de dernière maj et vérification du nombre de jours à updater
		$derniere_maj_donnees = date('Y-m-d',strtotime($scenario->getData("EDF_Last_Var_Update")));
		$nb_jour_a_updater = scenarioExpression::time_diff($derniere_maj_donnees, "now",d);
		if ($nb_jour_a_updater == 1){
			$scenario->setLog("Seulement 1 jour a updater");
		} else {
			$scenario->setLog("Attention: ".$nb_jour_a_updater." jours a updater");
		}
		
		### Verification presences donnees horaires

		$commande_ConsoHoraire = cmd::byString("#[MAISON][Linky][Consommation Horaire]#");
		$collectDate_ConsoHoraire = $commande_ConsoHoraire->getCollectDate();

	if (date('Y-m-d', strtotime($collectDate_ConsoHoraire)) == date('Y-m-d',strtotime("now"))) {

		### Get and Set variables
		$debut_heure_pleine = $scenario->getData("EDF_HP_Start");
		$debut_heure_creuse = $scenario->getData("EDF_HC_Start");
		$tarif_heure_pleine = $scenario->getData("EDF_Tarif_KWh_HP");
		$tarif_heure_creuse = $scenario->getData("EDF_Tarif_KWh_HC");
		$tarif_abonnement = $scenario->getData("EDF_Tarif_Abo_Mois");


		## Commandes

		$commande_conso_hier_hc = cmd::byString("#[MAISON][Variables EDF][Conso Jour HC]#");
		$commande_tarif_hier_hp = cmd::byString("#[MAISON][Variables EDF][Tarif Jour HP]#");
		$commande_tarif_hier_hc = cmd::byString("#[MAISON][Variables EDF][Tarif Jour HC]#");
		$commande_tarif_hier = cmd::byString("#[MAISON][Variables EDF][Tarif Jour]#");
		$commande_conso_mois_hp = cmd::byString("#[MAISON][Variables EDF][Conso Mois HP]#");
		$commande_conso_mois_hc = cmd::byString("#[MAISON][Variables EDF][Conso Mois HC]#");
		$commande_moyenne_conso_jour_hp = cmd::byString("#[MAISON][Variables EDF][Moyenne Conso Jour HP]#");
		$commande_moyenne_conso_jour_hc = cmd::byString("#[MAISON][Variables EDF][Moyenne Conso Jour HC]#");
		$commande_estimation_conso_mois_hp = cmd::byString("#[MAISON][Variables EDF][Estimation Conso Mois HP]#");
		$commande_estimation_conso_mois_hc = cmd::byString("#[MAISON][Variables EDF][Estimation Conso Mois HC]#");
		$commande_estimation_conso_mois = cmd::byString("#[MAISON][Variables EDF][Estimation Conso Mois]#");
		$commande_estimation_prix_mois_hp = cmd::byString("#[MAISON][Variables EDF][Estimation Prix Mois HP]#");
		$commande_estimation_prix_mois_hc = cmd::byString("#[MAISON][Variables EDF][Estimation Prix Mois HC]#");
		$commande_estimation_prix_mois = cmd::byString("#[MAISON][Variables EDF][Estimation Prix Mois Global]#");

		$id_commande_ConsoHoraire = $commande_ConsoHoraire->getId();
		$id_commande_ConsoHoraireCreux = $commande_conso_hier_hc->getId();
		$id_commande_ConsoHorairePlein = $commande_conso_hier_hp->getId();


		### Lancement du calcul des données pour x jours

		for($n=($nb_jour_a_updater-1); $n >= 0; $n--){

			$date_valeurs = date('Y-m-d H:i:s', strtotime("yesterday - $n days 00:01"));
			$date_JourEt1_minuit = date('Y-m-d H:i:s', strtotime("today - $n days 00:00"));
			$scenario->setLog("Ajout du ".date('Y-m-d', strtotime("yesterday - $n days")));
			$jour_restant_mois = scenarioExpression::time_diff("now - $n days", "first day of next month",d);


			## NOTE: la valeur de la minute 0 ne doit pas être prise => ajout de 1mn
			$debut_hp = date('Y-m-d H:i:s', strtotime("yesterday - $n days $debut_heure_pleine +1 minute"));
			$debut_hc = date('Y-m-d H:i:s', strtotime("yesterday - $n days $debut_heure_creuse + 1 minute"));
			$conso_hier_hp = history::getStatistique($id_commande_ConsoHoraire, $debut_hp, $debut_hc)["sum"] /2;

			## Si donnée horaire à 0, envoyer un message dans le centre de message et utiliser les moyennes
			if (empty($conso_hier_hp)) {

				$title = 'Scénario Variables EDF';
				$message = 'Données de consommation horaire vide pour le '.date('Y-m-d', strtotime("yesterday - $n days")).'. Estimation des valeurs via les statistiques de consommation du mois en cours.';
				message::add($title, $message);
				
              #Récupération de la consommation du jour
        	    $id_commande_ConsoJour = cmd::byString("#[MAISON][Linky][Consommation Jour]#")->getId();
              	$conso_hier = history::getStatistique($id_commande_ConsoJour, date('Y-m-d H:i:s', strtotime("yesterday - $n days 00:00:00")), date('Y-m-d H:i:s', strtotime("yesterday - $n days 23:59:59")))["last"];
              	$moyenne_conso_jour_hc = $commande_moyenne_conso_jour_hc->execCmd();
                $moyenne_conso_jour_hp = $commande_moyenne_conso_jour_hp->execCmd();
	            $ratio_conso_hp = ($moyenne_conso_jour_hp / ($moyenne_conso_jour_hp + $moyenne_conso_jour_hc)) * 100;
				$conso_hier_hp = ($conso_hier * $ratio_conso_hp) / 100;
				$conso_hier_hc = ($conso_hier * (100 - $ratio_conso_hp)) / 100;
				
			} else { 
				#Calcul de l'heure creuse si valeurs journalières OK
				$conso_hier_hc = (history::getStatistique($id_commande_ConsoHoraire, $date_valeurs, $debut_hp)["sum"] + history::getStatistique($id_commande_ConsoHoraire, $debut_hc, $date_JourEt1_minuit)["sum"] ) /2;
			}																																													
          
			# Si les données ne sont pas vides ou nulls, continuer les calculs
			if (!empty($conso_hier_hc) && !empty($conso_hier_hp)) {
          
				# Finalisation des calculs divers
				$tarif_hier_hp = $conso_hier_hp * $tarif_heure_pleine;
				$tarif_hier_hc = $conso_hier_hc * $tarif_heure_creuse;
				$tarif_hier = $tarif_hier_hp + $tarif_hier_hc;

				# Historisation intermédiaire
				$commande_conso_hier_hp->event($conso_hier_hp, $date_valeurs);
				$commande_conso_hier_hc->event($conso_hier_hc, $date_valeurs);
				$commande_tarif_hier_hp->event($tarif_hier_hp, $date_valeurs);
				$commande_tarif_hier_hc->event($tarif_hier_hc, $date_valeurs);
				$commande_tarif_hier->event($tarif_hier, $date_valeurs);


				# Calculs 
				$conso_mois_hc = scenarioExpression::statisticsBetween($id_commande_ConsoHoraireCreux, "sum", "first day of this month midnight", "now");
				$conso_mois_hp = scenarioExpression::statisticsBetween($id_commande_ConsoHorairePlein, "sum", "first day of this month midnight", "now");

				$moyenne_conso_jour_hc = scenarioExpression::statisticsBetween($id_commande_ConsoHoraireCreux, "avg", "first day of this month midnight", "now");
				$moyenne_conso_jour_hp = scenarioExpression::statisticsBetween($id_commande_ConsoHorairePlein, "avg", "first day of this month midnight", "now");

				$estimation_conso_mois_hc = $conso_mois_hc + ($moyenne_conso_jour_hc * $jour_restant_mois);
				$estimation_conso_mois_hp = $conso_mois_hp + ($moyenne_conso_jour_hp * $jour_restant_mois);
				$estimation_conso_mois = $estimation_conso_mois_hc + $estimation_conso_mois_hp;

				$estimation_prix_mois_hc = $estimation_conso_mois_hc * $tarif_heure_creuse;
				$estimation_prix_mois_hp = $estimation_conso_mois_hp * $tarif_heure_pleine;
				$estimation_prix_mois_global = $estimation_prix_mois_hc + $estimation_prix_mois_hp + $tarif_abonnement;

				## Log dans le scénario pour tracer si besoin
				$scenario->setLog("conso_hier_hp = ".$conso_hier_hp);
				$scenario->setLog("conso_hier_hc = ".$conso_hier_hc);
				$scenario->setLog("tarif_hier_hp = ".$tarif_hier_hp);
				$scenario->setLog("tarif_hier_hc = ".$tarif_hier_hc);
				$scenario->setLog("tarif_hier = ".$tarif_hier);
				$scenario->setLog("conso_mois_hc = ".$conso_mois_hc);
				$scenario->setLog("conso_mois_hp = ".$conso_mois_hp);
				$scenario->setLog("moyenne_conso_jour_hc = ".$moyenne_conso_jour_hc);
				$scenario->setLog("moyenne_conso_jour_hp = ".$moyenne_conso_jour_hp);
				$scenario->setLog("jour_restant_mois = ".$jour_restant_mois);
				$scenario->setLog("estimation_conso_mois_hc = ".$estimation_conso_mois_hc);
				$scenario->setLog("estimation_conso_mois_hp = ".$estimation_conso_mois_hp);
				$scenario->setLog("estimation_conso_mois = ".$estimation_conso_mois);
				$scenario->setLog("estimation_prix_mois_hc = ".$estimation_prix_mois_hc);
				$scenario->setLog("estimation_prix_mois_hp = ".$estimation_prix_mois_hp);
				$scenario->setLog("estimation_prix_mois_global = ".$estimation_prix_mois_global);


				# Historisation
				$commande_conso_mois_hp->event($conso_mois_hp, $date_valeurs);
				$commande_conso_mois_hc->event($conso_mois_hc, $date_valeurs);
				$commande_moyenne_conso_jour_hp->event($moyenne_conso_jour_hp, $date_valeurs);
				$commande_moyenne_conso_jour_hc->event($moyenne_conso_jour_hc, $date_valeurs);
				$commande_estimation_conso_mois_hp->event($estimation_conso_mois_hp, $date_valeurs);
				$commande_estimation_conso_mois_hc->event($estimation_conso_mois_hc, $date_valeurs);
				$commande_estimation_conso_mois->event($estimation_conso_mois, $date_valeurs);
				$commande_estimation_prix_mois_hp->event($estimation_prix_mois_hp, $date_valeurs);
				$commande_estimation_prix_mois_hc->event($estimation_prix_mois_hc, $date_valeurs);
				$commande_estimation_prix_mois->event($estimation_prix_mois_global, $date_valeurs);
				
				# Mise à jour variable dernière màj en fois boucle terminée si pas d'erreur
				$scenario->setData("EDF_Last_Var_Update", date('Y-m-d H:i:s',strtotime("now - $n days")));
				
			} else {
				$scenario->setLog("Les données de consommation du ".date('Y-m-d', strtotime("yesterday - $n days"))." n'ont pas pu être traitées ni avec les données horaires ni via les statistiques de consommation du mois");
			}
		}

	} else {     ## Si données horaires non présentes, rescheduler un lancement 30mn plus tard

		$scenario->setLog("Donnees horaire non presente. Replanification de la tache. Derniere collecte horaire EDF presente: ".$collectDate_ConsoHoraire);

		# Infos sur le schéduleur
		$scenario_scheduler = scenario::byString("#[Electricité][MAISON][Scenario Scheduler]#");

		#Récupération des tags du scénario
		$tags = $scenario_scheduler->getTags();
		#Modification des tags
		$tags['#cible#'] = "EDF";
		$tags['#action#'] = "LAUNCH";
		$tags['#duree#'] = 30 ;

		#Envoi des tags et le lancement de la reprogrammation
		$scenario_scheduler->setTags($tags);
		$scenario_scheduler->launch();
	}

}

Je ne comprends pas… Est-ce que vous voyez où pourrait être le soucis ???
Merci de votre aide

Tu n’aurais pas modifié le nom de ton virtuel ?
C’est bien [MAISON][Variables EDF] car le script va écrire dans #[MAISON][Variables EDF][Conso Jour HC]# ?

Non non il est bien nommé ainsi :