Voici les deux scripts qu'il faudra adapter. J'ai essayer de mettre des commentaires pour expliquer son déroulement.
Le premier de type time, qui gère les compteurs et les coûts pour 6 radiateurs. Déjà tu devras adapter la ligne 62 pour que le script se lance.
Code : Tout sélectionner
--[[
Script_time_calcul_chauffage.lua
- Gestion des mises à jour des compteurs virtuels de chauffage quand un radiateur est allumé.
. Nécessite la création des variables ip domoticz (chaine ip:port), aujourdhui2 (Chaine), Costhier (Décimal), evolution cout mensuel chauffage (Décimale), mois en cours1 (Chaine). Elle doivent être renseignées à la création.
- Nécessite la création de virtuel text conso totale chauffage journalier, coût du chauffage.
- Nécessite la création de custom sensor de type general cout chauffage mensuel, cout chauffage journalier
- Gestion d'un compteur virtuel chauffage total avec calcul du cout total du chauffage.
- Gestion de la journée en cours et de la journée d'hier.
--]]
------------------------------------------------------------------------------------------------------------------------
--Edition des variables-------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local ip_domoticz = uservariables["ip domoticz"]
-- radiateur salon------------------------------------------------------------------------------------------------------
local puissance1 = 1500 -- puissance du chauffage salon en watt
local conso1 = 'conso chauffage salon' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id1 = 129 -- idx du compteur virtuel de consommation électrique
-- radiateur cuisine------------------------------------------------------------------------------------------------------
local puissance2 = 2000 -- puissance du chauffage cuisine en watt
local conso2 = 'conso chauffage cuisine' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id2 = 130 -- idx du compteur virtuel de consommation électrique
-- radiateur sdb------------------------------------------------------------------------------------------------------
local puissance3 = 2000 -- puissance du chauffage sdb en watt
local conso3 = 'conso chauffage sdb' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id3 = 131 -- idx du compteur virtuel de consommation électrique
-- radiateur parent------------------------------------------------------------------------------------------------------
local puissance4 = 1500 -- puissance du chauffage parents en watt
local conso4 = 'conso chauffage parents' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id4 = 221 -- idx du compteur virtuel de consommation électrique
-- radiateur 1------------------------------------------------------------------------------------------------------
local puissance5 = 1000 -- puissance du chauffage 1 en watt
local conso5 = 'conso chauffage 1' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id5 = 222 -- idx du compteur virtuel de consommation électrique
-- radiateur 2------------------------------------------------------------------------------------------------------
local puissance6 = 1500 -- puissance du chauffage 2 en watt
local conso6 = 'conso chauffage 2' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id6 = 234 -- idx du compteur virtuel de consommation électrique
--compteur totale chauffage------------------------------------------------------------------------------------------------------
local jour = os.date("%A") --récupération du jour. Gére l'affichagedes valeurs d'hier au changement de jour.
local mois = os.date("%B") --récupération du mois.
local puissance10 = 6500 -- puissance totale des radiateurs chauffage en watt
local conso10 = 'conso totale chauffage' -- nom du compteur virtuel de consommation électrique (type= instant + counter)
local conso_id10 = 132 -- idx du compteur virtuel de consommation total électrique
local prixdukw = 0.1567 --prix du kw ttc prix edf de base 26/02/2016
local conso_id11 = 438 -- idx du compteur virtuel de consommation total électrique d'hier
local mode_chauffage = 'chauffage' -- Nom de l'interrupteur qui gére le mode de marche du chauffage général
local marche_forcee_sdb = 'marche forcee chauffage sdb' --nom du bp qui gere la marche forcée de la salle de bains
------------------------------------------------------------------------------------------------------------------------
--fin des variables------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
commandArray = {}
------------------------------------------------------------------------------------------------------------------------------------
if (otherdevices[mode_chauffage] ~= 'Off' or otherdevices[marche_forcee_sdb] == 'On') then
--print('mois: '..moisencours)
-----------------------------------------------------------------------------------------------------
-- radiateur salon.-------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur salon'] == 'On') then
--print('test ')
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy1 = tonumber(energy1) + (puissance1 / 60)
npower1 = tonumber(npower1)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur salon'] == 'Off' ) then
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy1 = tonumber(energy1)
npower1 = tonumber(npower1)
-- print('test1')
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id1 .. '|0|' .. 0 .. ';' .. energy1} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
-- radiateur cuisine.----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur cuisine'] == 'On') then
npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy2 = tonumber(energy2) + (puissance2 / 60)
npower2 = tonumber(npower2)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id2 .. '|0|' .. puissance2 .. ';' .. energy2} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur cuisine'] == 'Off') then
npower2, energy2 = string.match(otherdevices_svalues[conso2], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy2 = tonumber(energy2)
npower2 = tonumber(npower2)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id2 .. '|0|' .. 0 .. ';' .. energy2} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
-- radiateur sdb.----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur sdb'] == 'On') then
npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy3 = tonumber(energy3) + (puissance3 / 60)
npower3 = tonumber(npower3)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id3 .. '|0|' .. puissance3 .. ';' .. energy3} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur sdb'] == 'Off') then
npower3, energy3 = string.match(otherdevices_svalues[conso3], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy3 = tonumber(energy3)
npower3 = tonumber(npower3)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id3 .. '|0|' .. 0 .. ';' .. energy3} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
-- radiateur parents.----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur parents'] == 'On') then
npower4, energy4 = string.match(otherdevices_svalues[conso4], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy4 = tonumber(energy4) + (puissance4 / 60)
npower4 = tonumber(npower4)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id4 .. '|0|' .. puissance4 .. ';' .. energy4} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur parents'] == 'Off') then
npower4, energy4 = string.match(otherdevices_svalues[conso4], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy4 = tonumber(energy4)
npower4 = tonumber(npower4)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id4 .. '|0|' .. 0 .. ';' .. energy4} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
-- radiateur 1.----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur 1'] == 'On') then
npower5, energy5 = string.match(otherdevices_svalues[conso5], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy5 = tonumber(energy5) + (puissance5 / 60)
npower5 = tonumber(npower5)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id5 .. '|0|' .. puissance5 .. ';' .. energy5} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur 1'] == 'Off') then
npower5, energy5 = string.match(otherdevices_svalues[conso5], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy5 = tonumber(energy5)
npower5 = tonumber(npower5)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id5 .. '|0|' .. 0 .. ';' .. energy5} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
-- radiateur 2.----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (otherdevices['radiateur 2'] == 'On') then
npower6, energy6 = string.match(otherdevices_svalues[conso6], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy6 = tonumber(energy6) + (puissance6 / 60)
npower6 = tonumber(npower6)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id6 .. '|0|' .. puissance6 .. ';' .. energy6} -- mise a jour du compteur virtuel
elseif (otherdevices['radiateur 2'] == 'Off') then
npower6, energy6 = string.match(otherdevices_svalues[conso6], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy6 = tonumber(energy6)
npower6 = tonumber(npower6)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id6 .. '|0|' .. 0 .. ';' .. energy6} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
--compteur total-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
----gestion des informations à afficher si au moins l'un des radiateurs est allumé-------------------------------------
if ((otherdevices['radiateur salon'] == 'On' or otherdevices['radiateur cuisine'] == 'On' or otherdevices['radiateur sdb'] == 'On' or otherdevices['radiateur parents'] == 'On' or otherdevices['radiateur 1'] == 'On' or otherdevices['radiateur 2'] == 'On') and jour == uservariables["aujourdhui2"] ) then
npower7, energy7 = string.match(otherdevices_svalues[conso10], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy7 = tonumber(energy1) + tonumber(energy2) + tonumber(energy3) + tonumber(energy4) + tonumber(energy5) + tonumber(energy6)
npower7 = tonumber(npower1) + tonumber(npower2) + tonumber(npower3) + tonumber(npower4) + tonumber(npower5) + tonumber(npower6)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id10 .. '|0|' .. npower7 .. ';' .. energy7} -- mise a jour du compteur virtuel
-----calcul du cout total du chauffage------------------------------------------------------------------------
costtotal1 = arrondir ((energy7 * prixdukw /1000),2)
-----calcul du cout journalier de chauffage-----------------------------------------------------------------------------------------------------
os.execute('bash /home/pi/domoticz/scripts/sh/parsecompteurchauffageglobal2.sh &') --met à jour le virtuel text de consommation quotidienne. & evite d'attendre le script sinon defaut 10 secondes
resultat1 = tonumber(string.sub(otherdevices_svalues['conso totale chauffage journalier'],1,6)) --recupere la valeur dans virtuel text de la conso quotidienne et garde 6 premiers caracteres
--print('resultat1 conso quotidienne: '..resultat1)
costjour1 = arrondir ((resultat1 * prixdukw),2) --arrondi a deux chiffres
--print('cout1 chauffage jour : '..costjour1)
costhier1 = uservariables['Costhier'] --valeur de costhier quand l'heure n'est pas l'heure de la raz
commandArray[#commandArray + 1]={['UpdateDevice'] = '135|1|Total: '..costtotal1..' € - Hier: '..costhier1..' € - Aujourdhui: '..costjour1..' €'} -- renseigne le virtuel text calcul du coût du chauffage
-----calcul du cout mensuel du chauffage
if (jour == uservariables["aujourdhui2"]) then --évite erreur aléatoire de calcul au changement de jour ou le cout d'hier est compté 2 fois
commandArray[#commandArray + 1]={['UpdateDevice'] = '882|1|'..costjour1} -- renseigne le custom sensor du coût journalier du chauffage pour pouvoir avoir son archivage
coutmoisencours = costjour1 + tostring(uservariables["evolution cout mensuel chauffage"])
--print('coutmoisencours: '..coutmoisencours)
commandArray[#commandArray + 1]={['UpdateDevice'] = '883|1|'..coutmoisencours} -- renseigne le custom sensor du coût mensuel du chauffage pour pouvoir avoir son archivage
end
----gestion des informations à afficher si les radiateurs sont éteints---------------------------------------------------
elseif ((otherdevices['radiateur salon'] == 'Off' and otherdevices['radiateur cuisine'] == 'Off' and otherdevices['radiateur sdb'] == 'Off' and otherdevices['radiateur parents'] == 'Off' and otherdevices['radiateur 1'] == 'Off' and otherdevices['radiateur 2'] == 'Off' ) and jour == uservariables["aujourdhui2"] ) then
npower8, energy8 = string.match(otherdevices_svalues[conso10], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy8 = tonumber(energy1) + tonumber(energy2) + tonumber(energy3) + tonumber(energy4) + tonumber(energy5) + tonumber(energy6)
npower8 = 0
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id10 .. '|0|' .. npower8 .. ';' .. energy8} -- mise a jour du compteur virtuel
end
-----------------------------------------------------------------------------------------------------
--compteur total-> décalage des valeurs vers hier pour avoir les valeurs n -1 affichées-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
if (jour ~= uservariables["aujourdhui2"]) then --c'est l'heure de la remise à zéro détectée par la différence de jour. La conso du jour devient la conso d'hier
os.execute('bash /home/pi/domoticz/scripts/sh/parsecompteurchauffageglobal2.sh &') --met à jour le virtuel text de consommation quotidienne. & evite d'attendre le script sinon defaut 10 secondes
resultat1 = tonumber(string.sub(otherdevices_svalues['conso totale chauffage journalier'],1,6)) --recupere la valeur dans virtuel text de la conso quotidienne et garde 6 premiers caracteres
--print('resultat1 conso quotidienne: '..resultat1)
costjour1 = arrondir ((resultat1 * prixdukw),2) --arrondi a deux chiffres
miseajourevolcoutmensuelchauffage = costjour1 + tostring(uservariables["evolution cout mensuel chauffage"])
commandArray[#commandArray + 1]={['Variable:evolution cout mensuel chauffage']= tostring(miseajourevolcoutmensuelchauffage)}
-----conservation du cout total depuis la mise en service du chauffage
npower9, energy9 = string.match(otherdevices_svalues[conso10], "(%d+%.*%d*);(%d+%.*%d*)") -- envoie de la conso dans le compteur virtuel d'énergie
energy9 = tonumber(energy1) + tonumber(energy2) + tonumber(energy3) + tonumber(energy4) + tonumber(energy5) + tonumber(energy6)
npower9 = tonumber(npower1) + tonumber(npower2) + tonumber(npower3) + tonumber(npower4) + tonumber(npower5) + tonumber(npower6)
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id10 .. '|0|' .. npower9 .. ';' .. energy9} -- mise a jour du compteur virtuel
print('energy12 :'..energy9)
print('npower12 :'..npower9)
----mise à jour du compteur virtuel de la consommation d'hier avec la valeur de la consommation totale du jour
consohier2 = otherdevices_svalues['conso totale chauffage journalier'] --récupère la consommation totale du jour
energyhier2 = 0
commandArray[#commandArray + 1]={['UpdateDevice'] = conso_id11 .. '|1|' .. consohier2 .. '; 0'} -- mise a jour du compteur virtuel de la consommation d'hier
--print('conso hier2 :'..consohier2)
-----calcul du cout total du chauffage----------------------------------------------------------------------------
costtotal2 = arrondir ((energy9 * prixdukw /1000),2)
--print('costtotal2 :'..costtotal2)
-----calcul du cout journalier et de la consommation du jour pour les décaler à hier--------------------------------------------------------
resultat2 = tonumber(string.sub(otherdevices_svalues['conso totale chauffage journalier'],1,6)) --recupere la valeur dans virtuel text de la conso quotidienne et garde les 6 premiers caracteres
--print('resultat2 :'..resultat2)
costjour2 = arrondir ((resultat2 * prixdukw),2) --arrondi à deux chiffres
--print('costjour2 ' ..costjour2)
commandArray[#commandArray + 1]={['Variable:Costhier'] = tostring(costjour2)} -- mise à jour de la variable utilisateur Costhier en stockant la variable Costjour = coût du jour avant la remise à zéro de costjour à minuit
costhier2 = costjour2
costjour3 = 0
print('costhier2 : ' ..costhier2)
--print('costjour ' ..costjour3)
--print('costtotal ' ..costtotal2)
commandArray[#commandArray + 1]={['UpdateDevice'] = '135|1|Total: '..costtotal2..' € - Hier: '..costhier2..' € - Aujourdhui: '..costjour3..' €'} -- renseigne le virtuel text calcul du coût du chauffage
commandArray[#commandArray + 1]={['UpdateDevice'] = '882|1|Total: '..costjour3} -- met le custom sensor du coût journalier à zéro du chauffage pour pouvoir avoir son archivage
--mise à jour de la variable "aujourdhui2"
commandArray[#commandArray + 1]={['Variable:aujourdhui2']= jour}
---remise à zéro du cout mensuel du chauffage au changement de mois
elseif (mois ~= uservariables["mois en cours1"]) then --c'est le changement de mois. La conso mensuel est remise à zéro
commandArray[#commandArray + 1]={['Variable:evolution cout mensuel chauffage'] = '0'}
commandArray[#commandArray + 1]={['Variable:mois en cours1'] = mois}
end
end
return commandArray
Le second, en bash qui te permet de parser le compteur total voir ligne 166. Si tu ne le mets pas dans /home/pi/domoticz/scripts/sh/ il faut adapter la ligne 166.
Tu dois renseigner IpDomoticz:PortDomoticz, IdxCompteurVirtuelConsoTotaleChauffage et IdxVirtuelTextConsoTotaleJour en fonction de ton cas
Code : Tout sélectionner
#!/bin/bash
#récupère la consommation quotidienne dans le compteur virtuel 'conso totale chauffage'
result=$(curl -s "http://IpDomoticz:PortDomoticz/json.htm?type=devices&rid=IdxCompteurVirtuelConsoTotaleChauffage"| jq -r .result[].CounterToday)
echo $result
#met le résultat dans le virtuel text 'conso totale jour'
curl -s 'http://IpDomoticz:PortDomoticz/json.htm?type=command¶m=udevice&idx=IdxVirtuelTextConsoTotaleJour&nvalue=0&svalue='$result''
Pour finir, quand tu maîtriseras Lua, tu verras que le premier script peux être simplifié (plusieur fois mêmes lignes de code qui se répètent = Faire une boucle avec un tableau d'entrée)