En 2021, j’ai fait installer 2 climatisations air-air réversibles de marque Daikin, un caisson pour la zone Chambres et un caisson pour le Séjour. Chaque climatisation est indépendante, elle a sa propre pompe à chaleur à l’extérieur de la maison.
En 2022, j’ai installé (avec Mathieu et Sébastien – voir le forum) 8 panneaux photovoltaïques avec des micro-onduleurs Enphase pour mon auto-consommation.
L’objet de cet article est d’expliquer comment Domoticz lance automatiquement la climatisation ou le chauffage en fonction du contexte. Mon objectif étant de climatiser (ou de chauffer) automatiquement uniquement lorsque la production photovoltaïque est suffisante (i.e. gratuitement). Cela ne m’empêche pas d’utiliser manuellement la clim (ou le chauffage) lorsque je le souhaite.
Pour lancer ou arrêter la clim, voici ce que j’utilise :
Pilotage des caissons de climatisation
En complément à cet article du forum, voici la méthode pour enregistrer les codes Infra-Rouges depuis la télécommande.

A partir de l’interface zigbee2mqtt dans l’onglet « Expose », cliquer sur ON dans la zone learn_ir_code, puis appuyer sur la télécommande de la climatisation en direction du dispositif et à une distance de 10 cm environ. Le nouveau code reçu par le dispositif s’affiche dans la zone learned_ir_code. Il ne reste plus qu’à faire un copier/coller de ce code vers le script où vous allez l’utiliser.

Il faut prendre quelques précautions avant d’envoyer le code car c’est une longue séquence qui contient beaucoup d’informations. Si l’on souhaite mettre la clim sur ON, bien s’assurer que la télécommande est sur OFF avant d’appuyer sur la télécommande + régler la température sur la valeur voulue ainsi que les divers autres paramètres (chaud/froid, balayage horizontal/vertical, vitesse, silence, etc.). En effet, le code obtenu reprend tous les paramètres configurés sur la télécommande.
|
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 |
-- Script DzVents qui active ou arrête le caisson de climatisation du séjour -- en utilisant un émetteur Infra-Rouge zigbee MOES UFO-R11 -- via l'envoi d'un payload à zibgee2mqtt -- script basé sur un script publié par waaren dans le forum Domoticz : -- https://www.domoticz.com/forum/viewtopic.php?p=291971&hilit=mosquitto_pub#p291971 -- 05/09/2022 : Version initiale -- 26/09/2022 : Ajout des modes : Chauffage/Climatisation/Automatique/Silence -- Nom du device à piloter dans zigbee2mqtt (ne doit pas contenir de blanc ni de lettres accentuées) -- Le nom doit être identique pour le switch virtuel dans Domoticz qui permettra le lancement du script local myDevicename = 'Clim_Sejour' -- Topic à utiliser pour la clim à piloter local myTopic = 'zigbee2mqtt/'..myDevicename..'/set' return { on = { devices = { myDevicename, }, }, logging = { level = domoticz.LOG_DEBUG, -- change to LOG_ERROR when ok }, execute = function(dz) -- Variables à valoriser -- Payload à envoyer à Zigbee2MQTT pour arrêter la clim - Arret local payload_arret = '{ "ir_code_to_send": "A/sBVAHgCQMLtWK5DbsGtAEcBbQB4AMB4AcPQAHAE0AHQANAAUAH4AcDwAFAF+AjAeATL0AbwANAAeAPC8ABQB9AAUAHQAPgHQEC+wG04BIB4CFH4CkB4FNbwAHgFd3gVQFA3+AHA8ABQBcB04vigYfgHwFAt8AD4AMB4QNn4Asf4CMB4AM/wAvgAwfgKwHAP+AfAeAnL+ATAUBLQAHAB8ABQA9AA+AjAeATL0AbQANAAQscBbQBHAW0AbQBtAE=" }' -- Payload à envoyer à Zigbee2MQTT pour mettre la clim en mode Chauffage - On/Chaud/Silence/21/RotH local payload_chaud = '{ "ir_code_to_send": "DdUBVgE0AlYB1QGxAdUBQAdAAwu2YsINvQaxARgFsQHgAwHgAQ8C1QGxoAHAE0AHARgFgBcBGAXAAwDVoAsC1QGxoAEDGAWxAYAB4AET4BMB4BMvQBuAAwDVYAcBsQHAB4ABARgFgAOAAcAbwAfgDQEC1QGx4AYB4AkRwAFAX4ABgCOABeAZAYAngAXgEwEBGAWAI+ADBeAfAeAJM4AR4BMB4Bkh4AMBgC2ABeAfAYAtgAXgBQEBGAVAA4AZQAUFGAWxAa6LwodAEQGxAYAFBbEBGAWxAcAB4AcTQBtAA0ABQAeAAwDVoAcBsQHAAeADC0ABAtUBsSAB4AMF4A0BgCGAAYALAdUB4ANL4AULAtUBsSABQAUDGAWxAUAB4AcHgAFAIQGxAeAJBeANAQIYBdUgAwGxAUABQAfgBwNAAQLVAbHgIgEB1QHAQ+ANAQLVAbEgAYAFgAHgES+AJYAF4AEB4AcP4AMBQEtAAUAH4AMnQA9AA4ABgBmABeARAeALL0ATwANAAYALCdUBGAWxAbEBsQE=" }' -- Payload à envoyer à Zigbee2MQTT pour mettre la clim en mode Climatisation - On/Froid/Silence/24/RotH local payload_froid = '{ "ir_code_to_send": "A+oBbAHgCQMLm2LVDbwGsgEaBbIB4AMB4AcPQAHAE0AHBBoF6gGyIAEBGgXgCQPAAUAb4CMB4BMvwBvgAwfAC0ABQAtAA0ABQJlAC8AH4AcBQBfgCwHgDxdAAUBPQAHgEyPgDxvgAxcE6gFsAbLgAgEC6gGyYAHAX0ABwBPgCwHgAxvgAwvgEwHgAyfgAwvgEwHgAyfgDwvgBwHgBSfgAecC6gGyYAFA4+ADA+ADFwGsi+IvhwGyAUABQAfgBwPAAUAX4D8B4ANLQAvAA+APAeAXH8ED4A8B4AM/wAvgAwfgKwHAP+AfAeAnL+ATAUBLQAHAB8ABQA9AA+AjAeALL8ATQAdAA0ABCxoFsgEaBbIBsgGyAQ==" }' -- Fin des variables -- Cas où le switch selector passe à Arret = Arrêt de la clim if (dz.devices(''..myDevicename..'').state == 'Arret') then myMessage = payload_arret dz.log(''..myDevicename..' - Arrêt de la clim ') end -- Cas où le switch selector passe à Chaud = Passage en mode Chauffage if (dz.devices(''..myDevicename..'').state == 'Chaud') then myMessage = payload_chaud dz.log(''..myDevicename..' - Passage en mode Chauffage ') end -- Cas où le switch selector passe à Froid = Passage en mode Climatisation if (dz.devices(''..myDevicename..'').state == 'Froid') then myMessage = payload_froid dz.log(''..myDevicename..' - Passage en mode Climatisation ') end local function osCommand(cmd) dz.log(''..myDevicename..' - Executing Command : ' .. cmd,dz.LOG_DEBUG) local fileHandle = assert(io.popen(cmd .. ' 2>&1 || echo ::ERROR::', 'r')) local commandOutput = assert(fileHandle:read('*a')) local returnTable = {fileHandle:close()} if commandOutput:find '::ERROR::' then -- something went wrong dz.log(''..myDevicename..' - Error ==>> ' .. tostring(commandOutput:match('^(.*)%s+::ERROR::') or ' ... but no error message ' ) ,dz.LOG_DEBUG) else -- all is fine!! dz.log(''..myDevicename..' - ReturnCode : ' .. returnTable[3] .. '\ncommandOutput:\n' .. commandOutput, dz.LOG_DEBUG) end return commandOutput,returnTable[3] -- rc[3] contains returnCode end local function sendMQTT(message, topic) osCommand ( 'mosquitto_pub' .. ' -t ' .. myTopic .. " -m '" .. myMessage .. "'") end sendMQTT(myMessage, myTopic) end } |
Voici le script dzVents que j’utilise pour le séjour, il intègre les 3 modes que je souhaite Arrêt/Climatisation/Chauffage. J’ai le même script pour la zone des chambres et les payloads à envoyer sont les mêmes.
Le script lua qui lance les scripts dzVents en fonction du contexte.
|
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 |
-- Script d'optimisation de l'auto-consommation -- Analyse périodique de la consommation et de la production -- Choix d'activer certains appareils si la consommation est à zéro -- si la production est significative -- et en fonction de la température des pièces -- 21/08/2022 : Version initiale -- 05/09/2022 : Ajout des seuils pour l'activation de la clim ou du chauffage -- 14/09/2022 : Ajout du contrôle du fonctionnement de la pompe de la piscine définir le seuil (haut ou bas) -- 23/09/2022 : Ajout du pilotage de la clim des chambres -- 24/09/2022 : Début d'intégration du mode hiver -- 26/09/2022 : Mise en place du pilotage chauffage ou climatisation -- 09/10/2022 : Différentiation des seuils de température (clim1 ou clim2) -- 12/10/2022 : Priorisation de la zone des chambres pour le chauffage -- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940) dofile('/home/pi/domoticz/scripts/lua/modules.lua') local scriptName = 'Auto-Consommation' local scriptVersion = 'V 0.5 ADx' local function log(message) -- Décommenter la ligne du dessous pour afficher les logs / Commenter pour ne pas afficher les logs print("[Auto-Consommation - Pilotage Clim/Chauffage] "..message) end -- Variables du script -- Nom des devices à piloter local nomclim1 = uservariables["ac_clim1_nom"] local idxclim1 = otherdevices_idx[""..nomclim1..""] local nomclim2 = uservariables["ac_clim2_nom"] local idxclim2 = otherdevices_idx[""..nomclim2..""] -- Périodicité d'exécution de ce script local t = tonumber(uservariables["ac_cycle"]) -- Compteurs stockés pour le calcul de consommation de la période local cyconso = tonumber(uservariables["ac_conso"]) local cyvente = tonumber(uservariables["ac_vente"]) local cyprod = tonumber(uservariables["ac_prod"]) -- Variables utilisateurs pour le réglage des paramètres local idxedf = tonumber(uservariables['idxedf']) local idxenphase = tonumber(uservariables['idxenphase']) local idxfronius = tonumber(uservariables['idxfronius']) -- Saison été ou hiver local saison = uservariables["ac_saison"] -- Seuil de contrôle pour la conso EDF du cycle précédent local sc = tonumber(uservariables["ac_seuil_conso_cycle-1"]) -- Décision 4 local d4 = 0 -- Objet du mail envoyé qui varie en fonction de la décision local objet = "objet" local function clim1off() -- Arrêt Clim1 if otherdevices[nomclim1] ~= "Arret" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim1..'&switchcmd=Set%20Level&level=00'} log("Arret de "..nomclim1.." IDX = "..idxclim1) else log(""..nomclim1.." IDX = "..idxclim1.." deja arretee ") end end local function clim2off() -- Arrêt Clim2 if otherdevices[nomclim2] ~= "Arret" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim2..'&switchcmd=Set%20Level&level=00'} log("Arret de "..nomclim2.." IDX = "..idxclim2) else log(""..nomclim2.." IDX = "..idxclim2.." deja arretee ") end end local function clim1onc() -- Activation Chauffage Clim1 if otherdevices[nomclim1] ~= "Chaud" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim1..'&switchcmd=Set%20Level&level=10'} log("Activation de "..nomclim1.." IDX = "..idxclim1.." en mode chauffage ") else log(""..nomclim1.." IDX = "..idxclim1.." deja active en mode chauffage ") end end local function clim2onc() -- Activation Chauffage Clim2 if otherdevices[nomclim2] ~= "Chaud" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim2..'&switchcmd=Set%20Level&level=10'} log("Activation de "..nomclim2.." IDX = "..idxclim2.." en mode chauffage ") else log(""..nomclim2.." IDX = "..idxclim2.." deja active en mode chauffage ") end end local function clim1onf() -- Activation Climatisation Clim1 if otherdevices[nomclim1] ~= "Froid" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim1..'&switchcmd=Set%20Level&level=20'} log("Activation de "..nomclim1.." IDX = "..idxclim1.." en mode climatisation ") else log(""..nomclim1.." IDX = "..idxclim1.." deja active en mode climatisation ") end end local function clim2onf() -- Activation Climatisation Clim2 if otherdevices[nomclim2] ~= "Froid" then commandArray[#commandArray+1]={['OpenURL']=domoticzURL..'/json.htm?type=command¶m=switchlight&idx='..idxclim2..'&switchcmd=Set%20Level&level=20'} log("Activation de "..nomclim2.." IDX = "..idxclim2.." en mode climatisation ") else log(""..nomclim2.." IDX = "..idxclim2.." deja active en mode climatisation ") end end commandArray = {} -- Execution du script toutes les t minutes (variable utilisateur ac_cycle) uniquement en journée if dayTime and ((time.min) % t == 0) then -- Valorisation du seuil de production en fonction de l'état de la pompe de la piscine -- seuil haut avec piscine (On) et seuil bas sans piscine (Off) if otherdevices["Piscine"] == "On" then sp = tonumber(uservariables["ac_seuil_prod_h"]) log("Seuil de production : "..sp.." Watt(s)") else sp = tonumber(uservariables["ac_seuil_prod_b"]) log("Seuil de production : "..sp.." Watt(s)") end -- Valorisation du seuil de température en fonction de la saison (été ou hiver) et de la zone (clim1 ou clim2) if uservariables["ac_saison"] == "ete" then stemp1 = tonumber(uservariables["ac_seuil_ete_clim1"]) log("Seuil de temperature ete : "..stemp1.." degres pour "..nomclim1.."") stemp2 = tonumber(uservariables["ac_seuil_ete_clim2"]) log("Seuil de temperature ete : "..stemp2.." degres pour "..nomclim2.."") else stemp1 = tonumber(uservariables["ac_seuil_hiver_clim1"]) log("Seuil de temperature hiver : "..stemp1.." degres pour "..nomclim1.."") stemp2 = tonumber(uservariables["ac_seuil_hiver_clim2"]) log("Seuil de temperature hiver : "..stemp2.." degres pour "..nomclim2.."") end -- Récupération des noms des devices à partir des idx local nom = getDeviceName(idxedf) local nom1 = getDeviceName(idxenphase) local nom2 = getDeviceName(idxfronius) -- Récupération des températures local t_chambre = round(tonumber(otherdevices_temperature["Sonde Chambre"]),1) local t_sejour = round(tonumber(otherdevices_temperature["Sonde Sejour"]),1) log("Cycle : "..t.." minutes") -- log("Seuil de temperature : "..stemp.." degres") -- log("Saison : "..saison.." ") -- log("Seuil de Production : "..sp.." Watt(s)") log("Seuil Conso EDF du cycle moins un : "..sc.." kWh") log("Temperature Chambre : "..t_chambre.." degres") log("Temperature Sejour : "..t_sejour.." degres") log(""..nomclim1.." = "..otherdevices[nomclim1].."") log(""..nomclim2.." = "..otherdevices[nomclim2].."") -- Récupération des informations de consommation local conso = jsonInfos(nom) -- log("conso Name : "..conso.Name) -- log("conso Data : "..conso.Data) -- log("conso Usage : "..conso.Usage) -- log("conso Counter : "..conso.Counter) -- Récupération des informations de vente (enphase) local vente = jsonInfos(nom1) -- log("vente Name : "..vente.Name) -- log("vente Data : "..vente.Data) -- log("vente Usage : "..vente.Usage) -- log("vente Counter : "..vente.Counter) -- Récupération des informations de production (fronius) local prod = jsonInfos(nom2) -- log("prod Name : "..prod.Name) -- log("prod Data : "..prod.Data) -- log("prod Usage : "..prod.Usage) -- Changement de format des informations récupérées -- Compteur de consommation local counter_conso = conso.Counter -- log("Counter Conso : "..counter_conso) local c_conso = tonumber(counter_conso) -- log("Counter Conso num : "..c_conso.."") -- Usage de consommation local usage_conso = conso.Usage -- log("Usage Conso : "..usage_conso) local l = string.len(usage_conso) -- log("Longueur Usage Conso : "..l) local jour_conso = string.sub(usage_conso,1,l-4) -- log("Nouveau Usage Conso : "..jour_conso) local i_conso = tonumber(jour_conso) -- log("Usage Conso num : "..i_conso.."") -- Compteur de vente local counter_vente = vente.Counter -- log("Counter Vente : "..counter_vente) local c_vente = tonumber(counter_vente) -- log("Counter Vente num : "..c_vente.."") -- Usage de vente local usage_vente = vente.Usage -- log("Usage Vente : "..usage_vente) local l = string.len(usage_vente) -- log("Longueur Usage Vente : "..l) local jour_vente = string.sub(usage_vente,1,l-4) -- log("Nouveau Usage Vente : "..jour_vente) local i_vente = tonumber(jour_vente) -- log("Usage Vente num : "..i_vente.."") -- Data de production local data_prod = prod.Data -- log("Data Prod : "..data_prod) local l = string.len(data_prod) -- log("Longueur Data Prod : "..l) local tot_prod = string.sub(data_prod,1,l-4) -- log("Nouveau Data Prod : "..tot_prod) local c_prod = tonumber(tot_prod) -- log("Data Prod num : "..c_prod.."") -- Usage de production local usage_prod = prod.Usage -- log("Usage Prod : "..usage_prod) local l = string.len(usage_prod) -- log("Longueur Usage Prod : "..l) local jour_prod = string.sub(usage_prod,1,l-4) -- log("Nouveau Usage Prod : "..jour_prod) local i_prod = tonumber(jour_prod) -- log("Usage Prod num : "..i_prod.."") -- Stockage de la valeur des compteurs conso et prod dans des variables utilisateur commandArray['Variable:ac_conso']= tostring(c_conso) commandArray['Variable:ac_vente']= tostring(c_vente) commandArray['Variable:ac_prod']= tostring(c_prod) -- log("Compteur instantane de consommation : "..i_conso.."") -- log("Compteur instantane de vente : "..i_vente.."") -- log("Compteur instantane de production : "..i_prod.."") -- log("Compteur global de consommation : "..c_conso.."") -- log("Compteur global de vente : "..c_vente.."") -- log("Compteur global de production : "..c_prod.."") local deltaconso = c_conso - cyconso local deltavente = c_vente - cyvente local deltaprod = c_prod - cyprod local deltaconso = round(tonumber(deltaconso),3) local deltavente = round(tonumber(deltavente),3) local deltaprod = round(tonumber(deltaprod),3) local t = math.floor(t) -- Logique de déclenchement de la clim ou du chauffage -- Prise de décision 1 en fonction de la consommation if i_conso == 0 then log("Decision 1 - Consommation : "..i_conso.." Watt => GO ") -- Prise de décision 2 en fonction de la production if i_prod > sp then log("Decision 2 - Production : "..i_prod.." Watts => GO ") -- Prise de décision 3 en fonction de la consommation du cycle précédent if deltaconso < sc then log("Decision 3 - Consommation du cycle moins un : "..deltaconso.." Watts => GO") -- Prise de décision 4 en fonction de la température de la pièce -- Température du séjour pour l'été et activation des 2 clims if (t_sejour > stemp1 and uservariables["ac_saison"] == "ete") then -- Activation de la climatisation si elle n'est pas déjà active clim1onf() clim2onf() objet = "[Auto-Conso] Activation de la climatisation (Séjour et Chambres) le "..date_jour.." à "..heure.." " d4 = 3 log("Decision 4 - Temperature sejour : "..t_sejour.." degres ("..saison..") => GO ") end -- Température de la chambre pour l'hiver et activation en fonction des températures des pièces if (t_chambre < stemp2 and uservariables["ac_saison"] == "hiver") then -- Activation du chauffage dans la zone chambres s'il n'est pas déjà activé clim2onc() objet = "[Auto-Conso] Activation du chauffage dans la zone Chambres le "..date_jour.." à "..heure.." " d4 = 2 log("Decision 4 (d4 = "..d4.." - Temperature chambres : "..t_chambre.." degres ("..saison..") => GO ") if (t_sejour < stemp1 and uservariables["ac_saison"] == "hiver") then -- Activation du chauffage dans la zone séjour s'il n'est pas déjà activé clim1onc() objet = "[Auto-Conso] Activation du chauffage (Séjour et Chambres) le "..date_jour.." à "..heure.." " d4 = 1 log("Decision 4 (d4 = "..d4.." - Temperature sejour : "..t_sejour.." degres ("..saison..") => GO ") end end if d4 == 1 or d4 == 2 or d4 == 3 then -- Formattage des informations à envoyer local corps0 = ""..date_jour.." - "..heure.." - Saison : "..saison.." " local corps1 = "Consommation EDF : "..i_conso.." Watt(s) - Compteur : "..c_conso.." kWh " local corps2 = "Auto-Conso Fronius : "..i_prod.." Watt(s) - Compteur : "..c_prod.." kWh " local corps3 = "Vente Enphase : "..i_vente.." Watt(s) - Compteur : "..c_vente.." kWh " local corps4 = "Température Chambre : "..t_chambre.."° - seuil : "..stemp2.."° " local corps5 = "Température Séjour : "..t_sejour.."° - seuil : "..stemp1.."° " local corps6 = "Cycle d'exécution : toutes les "..t.."' " local corps7 = "Consommation EDF pendant le cycle écoulé : "..deltaconso.." kWh " local corps8 = "Production Fronius pendant le cycle écoulé : "..deltaprod.." kWh " local corps9 = "Production Enphase pendant le cycle écoulé : "..deltavente.." kWh " local corps = ""..corps0.."<br>"..corps1.."<br>"..corps2.."<br>"..corps3.."<br>"..corps4.."<br>"..corps5.."<br>"..corps6.."<br>"..corps7.."<br>"..corps8.."<br>"..corps9.."<br>" -- Envoi du mail vers le destinataire local destinataire = tostring(uservariables['mail']) commandArray['SendEmail']=''..objet..'#'..corps..'#'..destinataire..'' -- Envoi pushbullet (possiblité d'envoyer à plusieurs destinataires) -- Valorisation des variables pour l'envoi de la notification pushbullet local systeme = 'pushbullet' local corps_push = ""..corps0.."\n"..corps1.."\n"..corps2.."\n"..corps3.."\n"..corps4.."\n"..corps5.."\n"..corps6.."\n"..corps7.."\n"..corps8.."\n"..corps9.."" -- Envoi de la notification par Domoticz avec les paramètres valorisés (clé utilisateur + clé API) -- Décommenter la ligne suivante pour utiliser pushbullet -- commandArray['SendNotification']=''..objet..'#'..corps_push..'####'..systeme..'' print(corps) else log("Decision 4 - Temperature cote sejour : "..t_sejour.." degres ("..saison..") => NOGO ") log("Decision 4 - Temperature cote chambres : "..t_chambre.." degres ("..saison..") => NOGO ") clim1off() clim2off() end else log("Decision 3 - Consommation du cycle moins un : "..deltaconso.." Watts => NOGO") clim1off() clim2off() end else log("Decision 2 - Production : "..i_prod.." Watts => NOGO ") clim1off() clim2off() end else log("Decision 1 - Consommation : "..i_conso.." Watt => NOGO ") clim1off() clim2off() end end return commandArray |
La décision de lancer la climatisation (ou le chauffage) est basée sur plusieurs critères qui sont décrits dans l’article de Piblog, je rajoute les règles sur les températures qui s’appliquent après les règles déjà décrites :
- Si l’on est en été et que la température est supérieure à un seuil défini dans les variables utilisateur (un seuil pour la zone chambres et un seuil pour le séjour) alors on active la clim avec les valeurs prévues dans le code infra-rouge.
- Si l’on est en hiver, c’est pareil mais si la température est inférieure aux seuils.
Il y a pas mal de logs (utiles pour le debug) et un mail qui indique l’activation avec le résumé du contexte lors de la prise de décision.
Dans le script, on active des switchs de type selector et le changement d’état déclenche les scripts dzVents ad hoc qui envoient le code Infra-Rouge au caisson.

Il est envisageable de rajouter des niveaux avec des températures différentes : Chaud 22° – Chaud 19° – Froid 25° – etc.

Nota : Dans le script lua, à partir de la ligne 156, il y a un exemple intéressant de récupération de différentes valeurs d’un IDX présentes dans un json.

Dans le mail, on voit bien toutes les conditions de démarrage, on a un bilan de la consommation/production instantanée (lignes 2-3-4) et la situation pendant le dernier 1/4 d’heure (car le cycle est à 15′).
