Il prend aussi en compte les heures pleines et heures creuses pour estimer les coûts. Il faudra bien sûr créer les interrupteurs, sélecteurs et variables nécessaires.
I - Modules.lua
Dans modules.lua, j'ai ajouté les deux fonctions suivantes :
Code : Tout sélectionner
-- Récupérer valeur d'un device
function getValue(device)
return tonumber(otherdevices_svalues[device])
end
-- Récupérer valeur d'un device (string)
function getValueString(device)
return string.match(otherdevices_svalues[device], "(%d+%.*%d*);(%d+%.*%d*)")
end
Code : Tout sélectionner
-- Action sur l'élément chauffant
if heatTime > 0 then
commandArray[1] = {[pid['radiateur']] = marche}
commandArray[2] = {[pid['radiateur']] = arret..' AFTER '..heatTime}
-- Envoi de la consommation dans le compteur de consommation électrique
power, energy = getValueString(pid['conso']) -- Récupération de la valeur du compteur de consommation électrique
local conso_cycle = tonumber(pid['puissance'] / 3600 * heatTime) -- Consommation du cycle PID
energy = tonumber(energy + conso_cycle) -- Somme valeur initiale + consommation du cycle
commandArray[3] = {['UpdateDevice'] = pid['conso_id'] .. '|0|' .. pid['puissance'] .. ';' .. energy} -- Mise à jour du compteur (puissance instantanée + conso du cycle)
-- Calcul du coût EDF et envoi dans le compteur virtuel
local hp_hc = getValue(pid['hp_hc']) -- Récupération du planning HP/HC
local tarifhp = tonumber(uservariables[pid['tarifhp']]) -- Récupération des tarifs HP/HC
local tarifhc = tonumber(uservariables[pid['tarifhc']])
if hp_hc == pid['lvl_hp'] then -- Si on est en heures pleines :
cout_cycle = tonumber(conso_cycle * tarifhp / 1000) -- On calcule le coût du cycle PID
elseif hp_hc == pid['lvl_hc'] then -- Si on est en heures creuses :
cout_cycle = tonumber(conso_cycle * tarifhc / 1000) -- On calcule le coût du cycle PID
end
local compteur_init = getValue(pid['inc_meter']) -- Récupération de la valeur initiale du compteur
local compteur_maj = tonumber(compteur_init + cout_cycle) -- On ajoute le coût du cycle au compteur
commandArray[4] = {['UpdateDevice'] = pid['inc_meter_id'] .. '|0|' .. compteur_maj} -- Mise à jour du compteur
else
commandArray[pid['radiateur']] = arret
end
Maintenant, on passe sur le script de chauffage en lui-même. Modifier les variables dans local pid{} :
Code : Tout sélectionner
local pid={}
pid['debug'] = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
pid['zone'] = 'RDC' -- Nom de la zone pour affichage dans les logs et distinction de variables
pid['sonde'] = 'sonde_rdc' -- Nom de la sonde de température
pid['OnOff'] = 'OnOff' -- Nom de l'interrupteur virtuel de mise en route
pid['thermostat'] = 'thermostat_rdc' -- Consigne ou 'nom' de l'interrupteur virtuel de thermostat
pid['conso'] = 'Consommation chauffage RDC' -- Nom du compteur virtuel de consommation électrique
pid['puissance'] = 3500 -- Puissance du chauffage en watt
pid['conso_id'] = 20 -- idx du compteur virtuel de consommation électrique
pid['hp_hc'] = 'EDF HP / HC' -- Nom du sélecteur Heures pleines/Heures creuses
pid['tarifhp'] = 'Tarif HP' -- Nom de la variable utilisateur Tarif HP
pid['tarifhc'] = 'Tarif HC' -- Nom de la variable utilisateur Tarif HC
pid['inc_meter'] = 'Coût chauffage RDC' -- Nom du compteur virtuel de coût EDF
pid['inc_meter_id'] = 23 -- idx du compteur virtuel de coût EDF
pid['lvl_hp'] = 10 -- Niveaux du sélecteur HP/HC
pid['lvl_hc'] = 20
-- Actionneur
pid['radiateur'] = 'Fil pilote RDC' -- Nom de l'interrupteur de chauffage
pid['invert'] = false -- Si On et Off doivent être inversé ou non
-- PID
pid['Kp'] = 40 -- Coefficient proportionnel
pid['Ki'] = 10 -- Coefficient intégrateur
pid['Kd'] = 40 -- Coefficient dérivateur
pid['cycle'] = 10 -- Temps en minute d'un cycle PID
pid['secu'] = 30 -- Temps mini en seconde entre 2 ordres opposésPour que la puissance instantanée affichée dans le compteur de consommation électrique revienne à zéro dès que le fil pilote repasse à Off, je n'ai pas trouvé d'autre solution que de créer un autre script lua de type device :
Code : Tout sélectionner
-- Chargement des modules vil1driver
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
------------------------
-- Variables à éditer --
------------------------
local zone = 'RDC' -- Nom de la zone de chauffe pour affichage dans les logs et distinction de variables
local radiateur = 'Fil pilote RDC' -- Nom de l'interrupteur virtuel d'action fil pilote
local puissance = 3500 -- Puissance du chauffage en watt
local conso = 'Consommation chauffage RDC' -- Nom du compteur virtuel de consommation électrique
local conso_id = 20 -- idx du compteur virtuel de consommation électrique
--------------------------------
-- Fin des variables à éditer --
--------------------------------
commandArray = {}
if ( devicechanged[radiateur] == 'Off' ) then -- Si le fil pilote passe sur Off :
power, energy = getValueString(conso) -- Récupération de la valeur du compteur de consommation électrique
commandArray={['UpdateDevice'] = conso_id .. '|0|0;' .. energy} -- Mise à jour du compteur
end
return commandArray