La tarification Tempo d’EDF vient d’évoluer. Comme je ne connaissais pas cette offre, je ne peux pas comparer avec la version précédente mais étant intéressé j’ai analysé la version 2023.
Quelques éléments fournis par EDF qui m’ont été utiles :

Ma synthèse

Mon tarif actuel est à 0.2062€ depuis début février 2023, je n’ai pas d’heures creuses et je suis en train de remplacer mon chauffage/eau chaude gaz par une pompe à chaleur. Ma consommation électrique va donc nettement augmenter. Les bénéfices que je vois :
- Alors que je ne bénéficie pas de tarif heures creuses actuellement, avec Tempo j’ai une plage d’heures creuses tous les jours de l’année de 22h à 6h (avec au minimum 41% de réduction en période Rouge). C’est justement une période où ma production photovoltaïque est nulle 😉 . Donc, machines à laver la vaisselle/le linge à programmer après 22h ainsi que l’eau chaude sanitaire produite par la pompe à chaleur + chauffage à partir de 4h les jours rouges. Tout cela avec une réduction de 53% pendant 330j, de 44,7% pendant 43j et de 41% pendant 22j. Le fonctionnement des autres appareils (réfrigérateurs, congélateurs, cave à vin, NAS, raspberry, …) bénéficiera aussi de cette baisse
tous les jourstoutes les nuits de l’année 🙂 - Pour les périodes Tempo Bleu et Tempo Blanc en journée, c’est 300j à moins 39.4% et 43j à moins 26.9%. C’est une baisse très significative.
L’inconvénient (je n’en vois qu’un seul) : le chauffage en période Tempo Rouge ! Les autres consommations sont marginales et seront en partie couvertes par la production photovoltaïque si les journées sont ensoleillées. Je prévois de remonter la température dès 4h du matin et d’utiliser la cheminée ensuite.
L’abonnement mensuel augmente de 35c pour 6kVA, 47c pour 9kVA et 90c pour 12kVA (ce qui sera mon cas avec la pompe à chaleur), c’est très minime par rapport aux réductions.
Et dans Domoticz, on fait quoi ? J’ai mis en place un shell qui interroge le site EDF et met à jour 2 dispositifs de type texte qui indiquent la couleur du jour et celle du jour à venir, plus un switch selector avec les 4 possibilités (non connu/Bleu/Blanc/Rouge). A chaque changement de couleur, je reçois une notification via un script .lua. Grâce à ces dispositifs, je peux organiser le fonctionnement de la maison en fonction de la période Tempo du jour.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/bin/bash # # Script qui récupère la couleur Tempo EDF pour le jour en cours et le lendemain # # le lancement automatique de ce shell est géré via la crontab # # 19/02/2023 : version initiale à partir de divers scripts sur easydomoticz # Variables DOMO_IP="192.168.1.XX" # Domoticz IP DOMO_PORT="XX" # Domoticz port TEMPO_J="XX" # IDX Tempo du jour TEMPO_D="XX" # IDX Tempo demain TEMPO_SELECT="XX" # IDX du switch selector NOM_TEMPO_J='Tempo_du_jour' # Nom Tempo du jour NOM_TEMPO_D='Tempo_demain' # Nom Tempo demain # Fin des Variables # Affichage de l'heure d'exécution dans les commandes echo echo $(date '+%H:%M:%S:%N') "# Début du script tempo_edf.sh " DATEJOUR=$(date +%Y-%m-%d) adresse="https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=" adresse=${adresse}${DATEJOUR} echo $(date '+%H:%M:%S:%N') '# url envoyée au site EDF : '$adresse wget -O site.txt $adresse echo $(date '+%H:%M:%S:%N') 'Recherche du Jour dans le fichier site.txt reçu' coul_J=$(grep -Po '(?<={"couleurJourJ":")[^"]+(?=")' site.txt) coul_J1=$(grep -Po '(?<="couleurJourJ1":")[^"]+(?=")' site.txt) echo $(date '+%H:%M:%S:%N') '# Réponse du site EDF Journée en cours : '$coul_J echo $(date '+%H:%M:%S:%N') '# Réponse du site EDF Demain : '$coul_J1 echo $(date '+%H:%M:%S:%N') 'Envoi des informations à Domoticz' # Traitement pour la journée à venir if [ $coul_J1 = "TEMPO_BLEU" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur pour demain : '$coul_J1 curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_D&nvalue=1&svalue=Bleu" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_D&idx=$TEMPO_D&switchtype=0&customimage=101" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=switchlight&idx=$TEMPO_SELECT&switchcmd=Set%20Level&level=10" fi if [ $coul_J1 = "TEMPO_BLANC" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur pour demain : '$coul_J1 curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_D&nvalue=2&svalue=Blanc" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_D&idx=$TEMPO_D&switchtype=0&customimage=102" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=switchlight&idx=$TEMPO_SELECT&switchcmd=Set%20Level&level=20" fi if [ $coul_J1 = "TEMPO_ROUGE" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur pour demain : '$coul_J1 curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_D&nvalue=4&svalue=Rouge" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_D&idx=$TEMPO_D&switchtype=0&customimage=103" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=switchlight&idx=$TEMPO_SELECT&switchcmd=Set%20Level&level=30" fi if [ $coul_J1 = "NON_DEFINI" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur pour demain : '$coul_J1 curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_D&nvalue=0&svalue=Inconnu" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_D&idx=$TEMPO_D&switchtype=0&customimage=104" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=switchlight&idx=$TEMPO_SELECT&switchcmd=Set%20Level&level=00" fi # Traitement pour la journée en cours if [ $coul_J = "TEMPO_BLEU" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur du jour : '$coul_J curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_J&nvalue=1&svalue=Bleu" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_J&idx=$TEMPO_J&switchtype=0&customimage=101" fi if [ $coul_J = "TEMPO_BLANC" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur du jour : '$coul_J curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_J&nvalue=2&svalue=Blanc" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_J&idx=$TEMPO_J&switchtype=0&customimage=102" fi if [ $coul_J = "TEMPO_ROUGE" ]; then echo $(date '+%H:%M:%S:%N') '# Couleur du jour : '$coul_J curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=command¶m=udevice&idx=$TEMPO_J&nvalue=4&svalue=Rouge" curl "http://$DOMO_IP:$DOMO_PORT/json.htm?type=setused&used=true&name=$NOM_TEMPO_J&idx=$TEMPO_J&switchtype=0&customimage=103" fi |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
-- Script : script_device_tempo.lua pour suivre les changements de couleur -- -- 21/02/2023 : version initiale de référence commandArray = {} -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') -- Nom qui identifie la maison local nom = uservariables["nom"] local tempo_j = otherdevices["Tempo_du_jour"] local tempo_d = otherdevices["Tempo_demain"] -- Variables utilisées par ntfy local topic = "dxdomo.dnset.com:XXX/ntfy_XXX_tempo" local tag = "white_check_mark,zap,house" local prio = 3 local objet = "" if devicechanged['Tempo'] then if otherdevices['Tempo'] == 'Rouge' then objet = "Passage en tarif ROUGE" prio = 4 tag = "rotating_light,zap,house" end if otherdevices['Tempo'] == 'Blanc' then objet = "Passage en tarif BLANC" prio = 4 tag = "rotating_light,zap,house" end if otherdevices['Tempo'] == 'Bleu' then objet = "Passage en tarif BLEU" end if otherdevices['Tempo'] == 'Gris' then objet = "Tarif non connu actuellement" end end -- Envoi d'une notification ntfy en utilisant os.execute et curl -- Paramètres : -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic (à mettre à la fin du curl) -- Tags : ajout d'emoticons ex : -H "Tags: house,zap" -- Priority : 5-max/4-high/3-default/2-low/1-min ex : -H p:4 -- Title : titre du message ex : -H "t: Mon Titre" -- Corps du message : contenu de la notification ex : -d "Mon message" -- At : définir une date/heure d'envoi du message ex : -H "At: tomorrow, 8am" -- In : définir un délai d'envoi ex : -H "In: 15min" -- Delay : délai en temps unix ex : -H "Delay: 1639194738" -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic à mettre à la fin du curl -- Click : permet d'ouvrir une url rapidement en cliquant sur la notification (encore à développer et tester) -- Attach : pour ajouter des fichiers joints à la notification (encore à développer et tester) -- Actions : pour ajouter un bouton de commande dans le message de notification (encore à développer et tester) -- Email : pour envoyer la notification aussi sous forme d'email (encore à développer et tester) objet = ""..nom.." le "..date_jour.." : "..hhmm_verif.." "..objet.." pour demain" corps = "Tarif demain : "..tempo_d.."\nTarif aujourd'hui : "..tempo_j.."\n" os.execute('curl -H "t:'..objet..'" -H p:'..prio..' -H ta:'..tag..' -d "'..corps..'" '..topic..'') return commandArray |
Voici les switchs pour le suivi de la couleur Tempo :
![]() |
![]() |
![]() |
Comme nous sommes en février, je vais utiliser le mois de mars pour faire une simulation de fonctionnement en mode Tempo. Vous avez ci-dessous les divers scripts et la méthode que j’utilise. Les résultats seront sur le blog en Avril.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 |
-- Script lua : script_time_tempo_6.lua -- Script d'envoi de la consommation EDF Tempo par mail et/ou notification pour la plage Heures Creuses + -- Suivi dans des compteurs de type P1 Smart Meter en fonction de la périodes (Bleu/Blanc/Rouge) -- Etape 1 : Valorisation des variables de début de période et initialisation du processus -- avec création des dispositifs et des variables utilisateurs nécessaires au processus -- Etape 2 : Calcul de la conso sur la plage Heures Creuses -- 07/11/2022 : Version initiale -- 10/11/2022 : Ajout d'une phase d'initialisation des dispositifs et des variables -- 11/11/2022 : Correction d'anomalies et valorisation automatique de l'IDX du compteur de plage -- 18/02/2023 : Adaptation à l'offre Tempo commandArray = {} -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') local debug = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir -- Début de la zone à renseigner --------------------------------------- -- Variables à initialiser - éviter les accents et les espaces local prefixehp = 'HP_' -- Préfixe qui va être utilisé pour le nommage des variables utilisateur heures pleines local prefixehc = 'HC_' -- Préfixe qui va être utilisé pour le nommage des variables utilisateur heures creuses local heure_debuthp = '06' -- Heure de début de la plage local minute_debuthp = '00' -- Minute de début de la plage local heure_finhp = '22' -- Heure de fin de la plage local minute_finhp = '00' -- Minute de fin de la plage local heure_debuthc = '22' -- Heure de début de la plage local minute_debuthc = '00' -- Minute de début de la plage local heure_finhc = '06' -- Heure de fin de la plage local minute_finhc = '00' -- Minute de fin de la plage local idx_compteur = '3754' -- IDX du dispositif de mesure de la consommation d'électricité -- Variables utilisées par ntfy local topic = "dxdomo.dnset.com:XXX/ntfy_XXXX_tempo" local tag = "zap,house,sunny" local prio = 3 local corps_ntfy = "\n" -- Fin de la zone à renseigner - Ne pas modifier au delà --------------- -- Ne pas modifier sauf si l'on souhaite adapter spécifiquement les noms des dispositifs ou des variables local hhmmdebhp = ""..prefixehp.."hm_deb" -- Nom de la variable utilisateur contenant l'heure de début de la plage HP local hhmmfinhp = ""..prefixehp.."hm_fin" -- Nom de la variable utilisateur contenant l'heure de fin de la plage HP local compdebhp = ""..prefixehp.."compteur_deb" -- Nom de la variable utilisateur contenant la valeur du compteur en début de plage HP local cumphasehp = ""..prefixehp.."cumul" -- Nom de la variable utilisateur contenant le cumul des valeurs de la plage HP local bleuhp = ""..prefixehp.."tarif_hp_bleu" -- Nom de la variable utilisateur contenant le tarif heures pleines bleues local blanchp = ""..prefixehp.."tarif_hp_blanc" -- Nom de la variable utilisateur contenant le tarif heures pleines blanches local rougehp = ""..prefixehp.."tarif_hp_rouge" -- Nom de la variable utilisateur contenant le tarif heures pleines rouges local hstandard = ""..prefixehp.."tarif_h_standard" -- Nom de la variable utilisateur contenant le tarif heures standards local compteurhp = ""..prefixehp.."compteur" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes globales local compteurblehp = ""..prefixehp.."compteur_bleu" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif bleu en HP local compteurblahp = ""..prefixehp.."compteur_blanc" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif blanc en HP local compteurrouhp = ""..prefixehp.."compteur_rouge" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif rouge en HP local hhmmdebhc = ""..prefixehc.."hm_deb" -- Nom de la variable utilisateur contenant l'heure de début de la plage HC local hhmmfinhc = ""..prefixehc.."hm_fin" -- Nom de la variable utilisateur contenant l'heure de fin de la plage HC local compdebhc = ""..prefixehc.."compteur_deb" -- Nom de la variable utilisateur contenant la valeur du compteur en début de plage HC local cumphasehc = ""..prefixehc.."cumul" -- Nom de la variable utilisateur contenant le cumul des valeurs de la plage HC local bleuhc = ""..prefixehc.."tarif_hc_bleu" -- Nom de la variable utilisateur contenant le tarif heures creuses bleues local blanchc = ""..prefixehc.."tarif_hc_blanc" -- Nom de la variable utilisateur contenant le tarif heures creuses blanches local rougehc = ""..prefixehc.."tarif_hc_rouge" -- Nom de la variable utilisateur contenant le tarif heures creuses rouges local compteurhc = ""..prefixehc.."compteur" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes globales local compteurblehc = ""..prefixehc.."compteur_bleu" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif bleu en HC local compteurblahc = ""..prefixehc.."compteur_blanc" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif blanc en HC local compteurrouhc = ""..prefixehc.."compteur_rouge" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif rouge en HC local hstandard = "tarif_h_standard" -- Nom de la variable utilisateur contenant le tarif heures standards local tempoj = "Tempo_du_jour" -- Nom du dispositif de type texte indiquant la couleur Tempo du jour local tempod = "Tempo_demain" -- Nom du dispositif de type texte indiquant la couleur Tempo du lendemain local compidx = "IDX_compteur_edf" -- Nom de la variable utilisateur contenant l'IDX du dispositif de suivi de consommation (compteur EDF) -- Processus d'initialisation avec création du dispositif P1 Smartmeter et des variables utilisateur -- les variables utilisateur sont valorisées avec les valeurs données dans la zone à renseigner -- Recherche de l'IDX d'un matériel de type Dummy pour la création des dispositifs local config = assert(io.popen(curl..'"'.. domoticzURL ..'/json.htm?type=hardware" &')) local blocjson = config:read('*all') config:close() local jsonValeur = json:decode(blocjson) local idx = 0 if jsonValeur ~= nil then for Index, Value in pairs( jsonValeur.result ) do if Value.Type == 15 then -- hardware dummy = 15 -- log("--- --- --- Idx hardware dummy : ".. Value.idx .." ") -- log("--- --- --- Nom hardware dummy : ".. Value.Name .." ") if idx == 0 then idx = Value.idx end end end end -- Création des dispositifs et variables utilisateur nécessaires pour le script s'ils n'existent pas déjà if not otherdevices[compteurhp] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurhp..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurhp..' valeur = 0') end if not otherdevices[compteurblehp] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurblehp..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurblehp..' valeur = 0') end if not otherdevices[compteurblahp] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurblahp..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurblahp..' valeur = 0') end if not otherdevices[compteurrouhp] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurrouhp..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurrouhp..' valeur = 0') end if not otherdevices[compteurhc] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurhc..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurhc..' valeur = 0') end if not otherdevices[compteurblehc] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurblehc..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurblehc..' valeur = 0') end if not otherdevices[compteurblahc] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurblahc..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurblahc..' valeur = 0') end if not otherdevices[compteurrouhc] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createvirtualsensor&idx='..idx..'&sensorname='..compteurrouhc..'&sensortype=250&vvalue=0' } log('Creation du dispositif '..compteurrouhc..' valeur = 0') end if not otherdevices[tempoj] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createdevice&idx='..idx..'&sensorname='..tempoj..'&devicetype=243&devicesubtype=19&vvalue=0' } log('Creation du dispositif '..tempoj..' valeur = 0') end if not otherdevices[tempod] then commandArray[#commandArray+1] = { ['OpenURL']=domoticzURL..'/json.htm?type=createdevice&idx='..idx..'&sensorname='..tempod..'&devicetype=243&devicesubtype=19&vvalue=0' } log('Creation du dispositif '..tempod..' valeur = 0') end if not uservariables[compidx] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..compidx..'&vtype=0&vvalue='..idx_compteur} log('Creation de la variable utilisateur '..compidx..' valeur = '..idx_compteur) end if not uservariables[compdebhp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..compdebhp..'&vtype=1&vvalue=0'} log('Creation de la variable utilisateur '..compdebhp..' valeur = 0') end if not uservariables[cumphasehp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..cumphasehp..'&vtype=1&vvalue=0'} log('Creation de la variable utilisateur '..cumphasehp..' valeur = 0') end if not uservariables[hhmmdebhp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..hhmmdebhp..'&vtype=4&vvalue='..heure_debuthp..':'..minute_debuthp} log('Creation de la variable utilisateur '..hhmmdebhp..' valeur = '..heure_debuthp..':'..minute_debuthp) end if not uservariables[hhmmfinhp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..hhmmfinhp..'&vtype=4&vvalue='..heure_finhp..':'..minute_finhp} log('Creation de la variable utilisateur '..hhmmfinhp..' valeur = '..heure_finhp..':'..minute_finhp) end if not uservariables[bleuhp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..bleuhp..'&vtype=1&vvalue=0.1249'} log('Creation de la variable utilisateur '..bleuhp..' valeur = 0.1249') end if not uservariables[blanchp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..blanchp..'&vtype=1&vvalue=0.1508'} log('Creation de la variable utilisateur '..blanchp..' valeur = 0.1508') end if not uservariables[rougehp] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..rougehp..'&vtype=1&vvalue=0.6712'} log('Creation de la variable utilisateur '..rougehp..' valeur = 0.6712') end if not uservariables[hstandard] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..hstandard..'&vtype=1&vvalue=0.2062'} log('Creation de la variable utilisateur '..hstandard..' valeur = 0.2062') end if not uservariables[compdebhc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..compdebhc..'&vtype=1&vvalue=0'} log('Creation de la variable utilisateur '..compdebhc..' valeur = 0') end if not uservariables[cumphasehc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..cumphasehc..'&vtype=1&vvalue=0'} log('Creation de la variable utilisateur '..cumphasehc..' valeur = 0') end if not uservariables[hhmmdebhc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..hhmmdebhc..'&vtype=4&vvalue='..heure_debuthc..':'..minute_debuthc} log('Creation de la variable utilisateur '..hhmmdebhc..' valeur = '..heure_debuthc..':'..minute_debuthc) end if not uservariables[hhmmfinhc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..hhmmfinhc..'&vtype=4&vvalue='..heure_finhc..':'..minute_finhc} log('Creation de la variable utilisateur '..hhmmfinhc..' valeur = '..heure_finhc..':'..minute_finhc) end if not uservariables[bleuhc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..bleuhc..'&vtype=1&vvalue=0.097'} log('Creation de la variable utilisateur '..bleuhc..' valeur = 0.097') end if not uservariables[blanchc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..blanchc..'&vtype=1&vvalue=0.114'} log('Creation de la variable utilisateur '..blanchc..' valeur = 0.114') end if not uservariables[rougehc] then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=adduservariable&vname='..rougehc..'&vtype=1&vvalue=0.1216'} log('Creation de la variable utilisateur '..rougehc..' valeur = 0.1216') end -- Adaptation des variables (passage en numérique pour le test d'activation du script heure_debut = tonumber(heure_debuthp) minute_debut = tonumber(minute_debuthp) -- Recherche de l'IDX du compteur de début de phase -- idxphase = otherdevices_idx[""..prefixehp.."compteur"] -- log('Compteur IDX : '..idxphase..'') -- Valorisation de l'IDX du compteur de début de phase -- if uservariables[comphaseidxhp] == 0 then -- commandArray['Variable:'..comphaseidxhp]= tostring(idxphase) -- log('Valorisation de la variable utilisateur '..comphaseidxhp..' valeur = '..idxphase..'') -- end -- Execution du script à l'heure de début indiquée (début de la plage Heures Pleines) pour le calcul des Heures Creuses if (time.hour == heure_debut) and (time.min == minute_debut) -- if (time.hour == 7) and (time.min == 55) -- ligne pour les tests de mise au point then -- Récupération des variables externes idxedf = tonumber(idx_compteur) -- Récupération des noms des devices à partir des idx nom = getDeviceName(idxedf) -- Récupération de la valeur du compteur edf local configedf = assert(io.popen('/usr/bin/curl "http://'..domoticzIP..':'..domoticzPORT..'/json.htm?type=devices&rid='..compidx..'"')) local blocjsonedf = configedf:read('*all') configedf:close() local jsonValeuredf = json:decode(blocjsonedf) -- print (blocjsonedf) -- Récupération de la valeur du compteur global du compteur Linky de consommation c_edf = tonumber(string.match(otherdevices_svalues[nom],"(%d+%.*%d*)")) -- print ("Compteur global Linky consommation debut periode : "..c_edf.."") c_edf = c_edf / 1000 -- Mise à jour de la variable utilisateur de début de période commandArray['Variable:'..compdebhp]= tostring(c_edf) log('Compteur en debut de periode HP : '..tostring(c_edf)..'') -- Récupération de la valeur du compteur de début de période HC compteur_deb = tonumber(uservariables[compdebhc]) -- Récupération de la valeur du compteur global EDF pour la période HC compteur_plage = tonumber(uservariables[cumphasehc]) log('conso_EDF_plage - Compteur : '..compteur_plage) -- Calcul de la consommation EDF pendant la plage compt = c_edf - compteur_deb compt = round(compt, 3) log('conso_EDF_plage - Compteur : '..compt) -- Mise à jour du compteur de la plage (P1 smartmeter) compteur_plage = compteur_plage + compt log('conso_EDF_plage - Compteur avec cumul : '..compteur_plage) commandArray['Variable:'..prefixehc.."cumul"]= tostring(compteur_plage) compteur_nodecimale = tostring(compteur_plage * 1000) -- Mise à jour du P1 smartmeter HC global local envidx = otherdevices_idx[compteurhc] local envoihc = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoihc) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoihc } -- Calcul du coût standard de référence local hstandard = tonumber(uservariables['tarif_h_standard']) log('Tarif Standard : '..hstandard) c_hstandard = compt * hstandard c_hstandard = round(c_hstandard, 2) log('Cout en Tarif Standard : '..c_hstandard) tempo = otherdevices[tempoj] log('Periode tarifaire : '..tempo) if tempo == 'Bleu' then -- Mise à jour du P1 smartmeter HC Bleu local envidx = otherdevices_idx[compteurblehc] local envoiblehc = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoiblehc) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoiblehc } -- Calcul du coût HC bleu local hcbleu = tonumber(uservariables['HC_tarif_hc_bleu']) log('Tarif Bleu en Heures Creuses : '..hcbleu) c_hcbleu = compt * hcbleu c_hcbleu = round(c_hcbleu, 2) log('Cout en Tarif Bleu en Heures Creuses : '..c_hcbleu) -- Calcul du delta par rapport au tarif standard gain_bleu = c_hstandard - c_hcbleu gain_bleu = round(gain_bleu, 2) log('Gain en Tarif Bleu en Heures Creuses : '..gain_bleu..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HC Bleu: '..conso) tarif = tonumber(uservariables[bleuhc]) log('Tarif HC Bleu : '..tarif) cout = tostring(c_hcbleu) log('Cout HC Bleu : '..cout) delta = tostring(gain_bleu) log('Delta HC Bleu : '..delta) end if tempo == 'Blanc' then -- Mise à jour du P1 smartmeter HC Blanc local envidx = otherdevices_idx[compteurblahc] local envoiblahc = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoiblahc) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoiblahc } -- Calcul du coût HC Blanc local hcblanc = tonumber(uservariables['HC_tarif_hc_blanc']) log('Tarif Blanc en Heures Creuses : '..hcblanc) c_hcblanc = compt * hcblanc c_hcblanc = round(c_hcblanc, 2) log('Cout en Tarif Blanc en Heures Creuses : '..c_hcblanc) -- Calcul du delta par rapport au tarif standard gain_blanc = c_hstandard - c_hcblanc gain_blanc = round(gain_blanc, 2) log('Gain en Tarif Blanc en Heures Creuses : '..gain_blanc..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HC Blanc: '..conso) tarif = tonumber(uservariables[blanchc]) log('Tarif HC Blanc : '..tarif) cout = tostring(c_hcblanc) log('Cout HC Blanc : '..cout) delta = tostring(gain_blanc) log('Delta HC Blanc : '..delta) end if tempo == 'Rouge' then -- Mise à jour du P1 smartmeter HC Rouge local envidx = otherdevices_idx[compteurrouhc] local envoirouhc = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoirouhc) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoirouhc } -- Calcul du coût HC Rouge local hcrouge = tonumber(uservariables['HC_tarif_hc_rouge']) log('Tarif Rouge en Heures Creuses : '..hcrouge) c_hcrouge = compt * hcrouge c_hcrouge = round(c_hcrouge, 2) log('Cout en Tarif Rouge en Heures Creuses : '..c_hcrouge) -- Calcul du delta par rapport au tarif standard gain_rouge = c_hstandard - c_hcrouge gain_rouge = round(gain_rouge, 2) log('Gain en Tarif Rouge en Heures Creuses : '..gain_rouge..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HC Rouge: '..conso) tarif = tonumber(uservariables[rougehc]) log('Tarif HC Rouge: '..tarif) cout = tostring(c_hcrouge) log('Cout HC Rouge : '..cout) delta = tostring(gain_rouge) log('Delta HC Rouge : '..delta) end -- Formattage des informations à envoyer objet = "[Tempo] Tarif "..tempo.." Consommation pendant la plage Heures Creuses le "..date_jour.."" corps1 = "Compteur global : "..c_edf.." kWh le "..date_jour.." - "..uservariables[hhmmfinhc].."" corps2 = "Conso de la plage Heures Creuses "..uservariables[hhmmdebhc].."-"..uservariables[hhmmfinhc].." le "..date_jour.." : "..compt.." kWh " corps3 = "Cout au tarif "..tempo.." de "..tarif.." = "..cout.." euro(s) " corps4 = "Cout au tarif standard de "..hstandard.." = "..c_hstandard.." euro(s) " if tonumber(cout) <= tonumber(c_hstandard) then corps5 = "Economie : "..delta.." euro(s) " else corps5 = "Surcout : "..delta.." euro(s) " end corps = ""..corps1.."<br>"..corps2.."<br>"..corps3.."<br>"..corps4.."<br>"..corps5.."<br>" -- Envoi du mail vers le destinataire destinataire = tostring(uservariables['mail']) commandArray['SendEmail']=''..objet..'#'..corps..'#'..destinataire..'' -- Envoi d'une notification ntfy en utilisant os.execute et curl -- Paramètres : -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic (à mettre à la fin du curl) -- Tags : ajout d'emoticons ex : -H "Tags: house,zap" -- Priority : 5-max/4-high/3-default/2-low/1-min ex : -H p:4 -- Title : titre du message ex : -H "t: Mon Titre" -- Corps du message : contenu de la notification ex : -d "Mon message" -- At : définir une date/heure d'envoi du message ex : -H "At: tomorrow, 8am" -- In : définir un délai d'envoi ex : -H "In: 15min" -- Delay : délai en temps unix ex : -H "Delay: 1639194738" -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic à mettre à la fin du curl -- Click : permet d'ouvrir une url rapidement en cliquant sur la notification (encore à développer et tester) -- Attach : pour ajouter des fichiers joints à la notification (encore à développer et tester) -- Actions : pour ajouter un bouton de commande dans le message de notification (encore à développer et tester) -- Email : pour envoyer la notification aussi sous forme d'email (encore à développer et tester) corps_ntfy = ""..corps1.."\n"..corps2.."\n"..corps3.."\n"..corps4.."\n"..corps5.."\n" os.execute('curl -H "t:'..objet..'" -H p:'..prio..' -H ta:'..tag..' -d "'..corps_ntfy..'" '..topic..'') print (corps) end return commandArray |
Et voici le second script .lua de gestion des Heures Pleines qui est lancé à 22h00 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
-- Script lua : script_time_tempo_22.lua -- Script d'envoi de la consommation EDF par mail sur une plage horaire donnée + -- Suivi dans un compteur de type P1 Smart Meter -- Etape 1 : Valorisation de la variable de début de période -- Etape 2 : Calcul de la conso sur la plage Heures Pleines -- 07/11/2022 : Version initiale -- 10/11/2022 : Ajout d'une phase d'initialisation des dispositifs et des variables -- 11/11/2022 : Correction d'anomalies et valorisation automatique de l'IDX du compteur de plage -- 18/02/2023 : Adaptation à l'offre Tempo commandArray = {} -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') local debug = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir -- Début de la zone à renseigner --------------------------------------- -- Variables à initialiser - éviter les accents et les espaces local prefixehp = 'HP_' -- Préfixe qui va être utilisé pour le nommage des variables utilisateur heures pleines local prefixehc = 'HC_' -- Préfixe qui va être utilisé pour le nommage des variables utilisateur heures creuses local heure_debuthp = '06' -- Heure de début de la plage local minute_debuthp = '00' -- Minute de début de la plage local heure_finhp = '22' -- Heure de fin de la plage local minute_finhp = '00' -- Minute de fin de la plage local heure_debuthc = '22' -- Heure de début de la plage local minute_debuthc = '00' -- Minute de début de la plage local heure_finhc = '06' -- Heure de fin de la plage local minute_finhc = '00' -- Minute de fin de la plage local idx_compteur = '3754' -- IDX du dispositif de mesure de la consommation d'électricité -- Variables utilisées par ntfy local topic = "dxdomo.dnset.com:XXX/ntfy_XXXX_tempo" local tag = "zap,house,sunny" local prio = 3 local corps_ntfy = "\n" -- Fin de la zone à renseigner - Ne pas modifier au delà --------------- -- Ne pas modifier sauf si l'on souhaite adapter spécifiquement les noms des dispositifs ou des variables local hhmmdebhp = ""..prefixehp.."hm_deb" -- Nom de la variable utilisateur contenant l'heure de début de la plage HP local hhmmfinhp = ""..prefixehp.."hm_fin" -- Nom de la variable utilisateur contenant l'heure de fin de la plage HP local compdebhp = ""..prefixehp.."compteur_deb" -- Nom de la variable utilisateur contenant la valeur du compteur en début de plage HP local cumphasehp = ""..prefixehp.."cumul" -- Nom de la variable utilisateur contenant le cumul des valeurs de la plage HP local bleuhp = ""..prefixehp.."tarif_hp_bleu" -- Nom de la variable utilisateur contenant le tarif heures pleines bleues local blanchp = ""..prefixehp.."tarif_hp_blanc" -- Nom de la variable utilisateur contenant le tarif heures pleines blanches local rougehp = ""..prefixehp.."tarif_hp_rouge" -- Nom de la variable utilisateur contenant le tarif heures pleines rouges local hstandardhp = ""..prefixehp.."tarif_h_standard" -- Nom de la variable utilisateur contenant le tarif heures standards local compteurhp = ""..prefixehp.."compteur" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes globales local compteurblehp = ""..prefixehp.."compteur_bleu" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif bleu en HP local compteurblahp = ""..prefixehp.."compteur_blanc" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif blanc en HP local compteurrouhp = ""..prefixehp.."compteur_rouge" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif rouge en HP local hhmmdebhc = ""..prefixehc.."hm_deb" -- Nom de la variable utilisateur contenant l'heure de début de la plage HC local hhmmfinhc = ""..prefixehc.."hm_fin" -- Nom de la variable utilisateur contenant l'heure de fin de la plage HC local compdebhc = ""..prefixehc.."compteur_deb" -- Nom de la variable utilisateur contenant la valeur du compteur en début de plage HC local cumphasehc = ""..prefixehc.."cumul" -- Nom de la variable utilisateur contenant le cumul des valeurs de la plage HC local bleuhc = ""..prefixehc.."tarif_hc_bleu" -- Nom de la variable utilisateur contenant le tarif heures creuses bleues local blanchc = ""..prefixehc.."tarif_hc_blanc" -- Nom de la variable utilisateur contenant le tarif heures creuses blanches local rougehc = ""..prefixehc.."tarif_hc_rouge" -- Nom de la variable utilisateur contenant le tarif heures creuses rouges local compteurhc = ""..prefixehc.."compteur" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes globales local compteurblehc = ""..prefixehc.."compteur_bleu" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif bleu en HC local compteurblahc = ""..prefixehc.."compteur_blanc" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif blanc en HC local compteurrouhc = ""..prefixehc.."compteur_rouge" -- Nom du dispositif P1 Smartmeter dans lequel seront stockées les valeurs quotidiennes au tarif rouge en HC local hstandard = "tarif_h_standard" -- Nom de la variable utilisateur contenant le tarif heures standards local tempoj = "Tempo_du_jour" -- Nom du dispositif de type texte indiquant la couleur Tempo du jour local tempod = "Tempo_demain" -- Nom du dispositif de type texte indiquant la couleur Tempo du lendemain local compidx = "IDX_compteur_edf" -- Nom de la variable utilisateur contenant l'IDX du dispositif de suivi de consommation (compteur EDF) -- Adaptation des variables (passage en numérique pour le test d'activation du script heure_debut = tonumber(heure_debuthc) minute_debut = tonumber(minute_debuthc) -- Recherche de l'IDX du compteur de début de phase -- idxphase = otherdevices_idx[""..prefixehc.."compteur"] -- log('Compteur IDX : '..idxphase..'') -- Valorisation de l'IDX du compteur de début de phase -- if uservariables[comphaseidxhc] == 0 then -- commandArray['Variable:'..comphaseidxhc]= tostring(idxphase) -- log('Valorisation de la variable utilisateur '..comphaseidxhc..' valeur = '..idxphase..'') -- end -- Execution du script à l'heure de début indiquée if (time.hour == heure_debut) and (time.min == minute_debut) -- if (time.hour == 16) and (time.min == 31) -- ligne pour les tests de mise au point then -- Récupération des variables externes idxedf = tonumber(idx_compteur) -- Récupération des noms des devices à partir des idx nom = getDeviceName(idxedf) -- Récupération de la valeur du compteur edf local configedf = assert(io.popen('/usr/bin/curl "http://'..domoticzIP..':'..domoticzPORT..'/json.htm?type=devices&rid='..compidx..'"')) local blocjsonedf = configedf:read('*all') configedf:close() local jsonValeuredf = json:decode(blocjsonedf) -- print (blocjsonedf) -- Récupération de la valeur du compteur global du compteur Linky de consommation c_edf = tonumber(string.match(otherdevices_svalues[nom],"(%d+%.*%d*)")) -- print ("Compteur global Linky consommation debut periode : "..c_edf.."") c_edf = c_edf / 1000 -- Mise à jour de la variable utilisateur de début de période commandArray['Variable:'..compdebhc]= tostring(c_edf) log('Compteur en debut de periode HC : '..tostring(c_edf)..'') -- Récupération de la valeur du compteur de début de période HP compteur_deb = tonumber(uservariables[compdebhp]) -- Récupération de la valeur du compteur global EDF pour la période HP compteur_plage = tonumber(uservariables[cumphasehp]) log('conso_EDF_plage - Compteur : '..compteur_plage) -- Calcul de la consommation EDF pendant la plage compt = c_edf - compteur_deb compt = round(compt, 3) log('conso_EDF_plage - Compteur : '..compt) -- Mise à jour du compteur de la plage (P1 smartmeter) compteur_plage = compteur_plage + compt log('conso_EDF_plage - Compteur avec cumul : '..compteur_plage) commandArray['Variable:'..prefixehp.."cumul"]= tostring(compteur_plage) compteur_nodecimale = tostring(compteur_plage * 1000) -- Mise à jour du P1 smartmeter HP global local envidx = otherdevices_idx[compteurhp] local envoihp = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoihp) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoihp } -- Calcul du coût standard de référence local hstandard = tonumber(uservariables['tarif_h_standard']) log('Tarif Standard : '..hstandard) c_hstandard = compt * hstandard c_hstandard = round(c_hstandard, 2) log('Cout en Tarif Standard : '..c_hstandard) tempo = otherdevices[tempoj] log('Periode tarifaire : '..tempo) if tempo == 'Bleu' then -- Mise à jour du P1 smartmeter HP Bleu local envidx = otherdevices_idx[compteurblehp] local envoiblehp = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoiblehp) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoiblehp } -- Calcul du coût HP bleu local hpbleu = tonumber(uservariables['HP_tarif_hp_bleu']) log('Tarif Bleu en Heures Pleines : '..hpbleu) c_hpbleu = compt * hpbleu c_hpbleu = round(c_hpbleu, 2) log('Cout en Tarif Bleu en Heures Pleines : '..c_hpbleu) -- Calcul du delta par rapport au tarif standard gain_bleu = c_hstandard - c_hpbleu gain_bleu = round(gain_bleu, 2) log('Gain en Tarif Bleu en Heures Pleines : '..gain_bleu..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HP Bleu: '..conso) tarif = tonumber(uservariables[bleuhp]) log('Tarif HP Bleu : '..tarif) cout = tostring(c_hpbleu) log('Cout HP Bleu : '..cout) delta = tostring(gain_bleu) log('Delta HP Bleu : '..delta) end if tempo == 'Blanc' then -- Mise à jour du P1 smartmeter HP Blanc local envidx = otherdevices_idx[compteurblahp] local envoiblahp = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoiblahp) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoiblahp } -- Calcul du coût HP Blanc local hpblanc = tonumber(uservariables['HP_tarif_hp_blanc']) log('Tarif Blanc en Heures Pleines : '..hpblanc) c_hpblanc = compt * hpblanc c_hpblanc = round(c_hpblanc, 2) log('Cout en Tarif Blanc en Heures Pleines : '..c_hpblanc) -- Calcul du delta par rapport au tarif standard gain_blanc = c_hstandard - c_hpblanc gain_blanc = round(gain_blanc, 2) log('Gain en Tarif Blanc en Heures Pleines : '..gain_blanc..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HP Blanc: '..conso) tarif = tonumber(uservariables[blanchp]) log('Tarif HP Blanc : '..tarif) cout = tostring(c_hpblanc) log('Cout HP Blanc : '..cout) delta = tostring(gain_blanc) log('Delta HP Blanc : '..delta) end if tempo == 'Rouge' then -- Mise à jour du P1 smartmeter HP Rouge local envidx = otherdevices_idx[compteurrouhp] local envoirouhp = envidx..'|0|'..compteur_nodecimale..';0;0;0;0;0' log('Envoi dans UpdateDevice = '..envoirouhp) commandArray[#commandArray+1] = { ['UpdateDevice'] = envoirouhp } -- Calcul du coût HP Rouge local hprouge = tonumber(uservariables['HP_tarif_hp_rouge']) log('Tarif Rouge en Heures Pleines : '..hprouge) c_hprouge = compt * hprouge c_hprouge = round(c_hprouge, 2) log('Cout en Tarif Rouge en Heures Pleines : '..c_hprouge) -- Calcul du delta par rapport au tarif standard gain_rouge = c_hstandard - c_hprouge gain_rouge = round(gain_rouge, 2) log('Gain en Tarif Rouge en Heures Pleines : '..gain_rouge..' euros') -- Valorisation pour mail et notification conso = tostring(compt) log('Consommation HP Rouge: '..conso) tarif = tonumber(uservariables[rougehp]) log('Tarif HP Rouge: '..tarif) cout = tostring(c_hprouge) log('Cout HP Rouge : '..cout) delta = tostring(gain_rouge) log('Delta HP Rouge : '..delta) end -- Formattage des informations à envoyer objet = "[Tempo] Tarif "..tempo.." Consommation pendant la plage Heures Pleines le "..date_jour.."" corps1 = "Compteur global : "..c_edf.." kWh le "..date_jour.." - "..uservariables[hhmmfinhp].."" corps2 = "Conso de la plage Heures Pleines "..uservariables[hhmmdebhp].."-"..uservariables[hhmmfinhp].." le "..date_jour.." : "..compt.." kWh " corps3 = "Cout au tarif "..tempo.." de "..tarif.." = "..cout.." euro(s) " corps4 = "Cout au tarif standard de "..hstandard.." = "..c_hstandard.." euro(s) " if tonumber(cout) <= tonumber(c_hstandard) then corps5 = "Economie : "..delta.." euro(s) " else corps5 = "Surcout : "..delta.." euro(s) " end corps = ""..corps1.."<br>"..corps2.."<br>"..corps3.."<br>"..corps4.."<br>"..corps5.."<br>" -- Envoi du mail vers le destinataire destinataire = tostring(uservariables['mail']) commandArray['SendEmail']=''..objet..'#'..corps..'#'..destinataire..'' -- Envoi d'une notification ntfy en utilisant os.execute et curl -- Paramètres : -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic (à mettre à la fin du curl) -- Tags : ajout d'emoticons ex : -H "Tags: house,zap" -- Priority : 5-max/4-high/3-default/2-low/1-min ex : -H p:4 -- Title : titre du message ex : -H "t: Mon Titre" -- Corps du message : contenu de la notification ex : -d "Mon message" -- At : définir une date/heure d'envoi du message ex : -H "At: tomorrow, 8am" -- In : définir un délai d'envoi ex : -H "In: 15min" -- Delay : délai en temps unix ex : -H "Delay: 1639194738" -- Topic à utiliser : indique le nom du serveur + l'identifiant du Topic à mettre à la fin du curl -- Click : permet d'ouvrir une url rapidement en cliquant sur la notification (encore à développer et tester) -- Attach : pour ajouter des fichiers joints à la notification (encore à développer et tester) -- Actions : pour ajouter un bouton de commande dans le message de notification (encore à développer et tester) -- Email : pour envoyer la notification aussi sous forme d'email (encore à développer et tester) corps_ntfy = ""..corps1.."\n"..corps2.."\n"..corps3.."\n"..corps4.."\n"..corps5.."\n" os.execute('curl -H "t:'..objet..'" -H p:'..prio..' -H ta:'..tag..' -d "'..corps_ntfy..'" '..topic..'') print (corps) end return commandArray |
La mise au point des deux derniers scripts n’est pas totalement terminée (ma maîtrise de la gestion des P1 Smartmeter est plutôt faible 😐 ), mais voici ce que j’obtiens actuellement et qui me convient bien 😉 :

Pour un suivi mensuel plus global, j’utilise un classeur excel dans lequel je rentre chaque jour 3 informations (couleur du tarif, consommation en heures pleines et consommation en heures creuses) et le tableau calcule automatiquement les valeurs intéressantes.
Ci-dessous une simulation pour février pour valider le fonctionnement du tableau.


Le tableau est disponible pour ceux qui veulent faire une simulation ou un suivi (me demander la dernière version).






