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

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 :

Il semble que tout soit rentré dans l’ordre, sans comprendre pourquoi. Merci @Pilou54170 pour ta proposition malgré tout. Et bonne année :wink:

Salut à vous tous , est ce que quelqu’un a reussi a avancer sur le sujet du code avec l’offre Tempo de edf.
Personnelement j’ai aussi souscrit a cette offre et c’est vrai que ce genre de scenario couplé à l’offre Tempo serait top.

Je veux bien servir de beta testeur s’il le faut mais malheuresement je ne peux pas faire avancer le code car je n’ai pas du tout les capacités pour le faire

Merci à vous si quelqu’un se penche sur le sujet

oui il est en beta.
il fonctionne très bien couplé à suiviconso, un pluggin payant mais vraiment top.

sinon je referais une passe dessus pour la version stand alone.

Que veux tu exactement en produit de sorti ?

voici un exemple de suiviconso alimenter par le scenarion tempo

J’hesite a passer le pas pour le olugin suivi conso . Apparement il n’est plus maintenu par le dev. Et avec la chance que jai , cest dangereux pour moi de mettre 8e dessus .

Pour suivi conso faut il aussi une cle lixee ???

Si il est bien maintenu par mes bons soins. :wink:
Avec une clé lixee, cela fonctionne. Le mieux c’est d’avoir un module qui récupère la téléinfo du Linky. Peu importe le protocole et la marque

Ok, je pensais que la clé lixee etait justement un module qui recupere la teleinfo du linky , aurais tu un lien pour le module teleinfo . Pour que je pars sur une bonne base .

Sans module teleinfo ou cle lixee le plugin suiviconso ne sert a rien ?

Alors oui, le lixee récupère la teleinfo. Je disais simplement que ce n’est pas obligé d’être un Lixee. Perso jai un Ecodevices.
Et le plugin fonctionne aussi avec un module de mesure simple. Mais pour tempo, c’est mieux de récupérer la teleinfo du compteur.
Il fonctionne meme avec le plugin enedis

si tu as une clé à bran cher dans ton linky c’est encore mieux que sans car tu recupères en temps réel. Moi je n’en ai pas car mon compteur est trop loin. Donc je me sers des remontées du pluggin Enedis que j’injecte dans suivi conso. Donc je ne peux voir, au pas de la 1/2h le jour J qu’en J+1.

je ne peux que te conseiller suivi conso(avec ou sans clé) car tu peux vraiment piloter ta facture et ta conso…

le code beta est ici https://community.jeedom.com/t/tempo-injection-quotidienne-dans-suiviconso-des-donnees-enedis-au-pas-de-30/116444/4

1 « J'aime »

Bonjour depuis un mois environ le calcul de mes conso HC / HP est erroné avec ce scenario.

Par exemple pour hier il m’affiche 9.4kwh en HP et 17.1kwh en HC pour un total de … 13.3kwh.

Le total est juste mais le detail HP / HC est faux. D’ou ca peut venir ?

C’est vrai que le plugin semble bien, je l’ai acheté il y a plusieurs moi mais je m’en sors pas avec toute la conf et les prix plus les TVA :frowning:

Les HP et HC sont multipliés par 2
Cumul par 1/2 h et non pas par heure ?