[LUA+Bash] Calcul de DJU

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Calcul de DJU

Message par papoo »

Je corrige dès que je rentre
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
benbidouille
Messages : 102
Inscription : 11 déc. 2017, 11:48

Re: Calcul de DJU

Message par benbidouille »

Pas d'Urgence, modif version 1.25 faite localement et ça marche ;)
Reste juste la publication officielle sur le forum
RPI3 + WDPiDrive + UPS Pico HV3.0B HAT + Teleinfo USB (6) + 1Wire GPIO + DS18B20 (15)+ Gateway MySensor NRF24, Sensors , Relais ... + Gateway Velux .... + Gestion Pompe à Chaleur + NRFDoctor .... tout en DIY
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Calcul de DJU

Message par papoo »

correction et mis à jour 1.25 effectuées :)
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Calcul de DJU

Message par papoo »

@benbidouille
on dirait que les deux méthodes se valent
2018-01-09 21_35_50-Domoticz.png
2018-01-09 21_35_50-Domoticz.png (10.19 Kio) Consulté 9449 fois
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
benbidouille
Messages : 102
Inscription : 11 déc. 2017, 11:48

Re: Calcul de DJU

Message par benbidouille »

@papoo,

Effectivement très proche, à croire que nous sommes tous deux sur Limoges et synchronisés à la seconde près, Incroyable ;)
DJU.JPG
DJU.JPG (27.55 Kio) Consulté 9444 fois
temp.JPG
temp.JPG (39.87 Kio) Consulté 9444 fois
En dépit du décalage des horaires de mesures 18:00/18:00 vs 0:00/0:00 il en manque très peu pour que la méthode Intégrale égale la méthode MF à 0 heure pour atteindre 12DJU.

Cette quasi égalité est due au profil de température du jours très lissée, si différence il doit y avoir, ce sera sur des profils de température plus accidentés.

Il faut désormais attendre le cumul de DJU sur une semaine voir plus pour comparer, nul doute que ce sera intéressant.

Bref, assurément la méthode Intégrale est la plus fidèle pour quantifier des besoins en energie, maintenant je doute que la méthode Météo France aboutisse à des résultats radicalement différents, je suppose (mais n'en sais rien) que sur une saison la différence est inférieure à10%.
Cordialement
RPI3 + WDPiDrive + UPS Pico HV3.0B HAT + Teleinfo USB (6) + 1Wire GPIO + DS18B20 (15)+ Gateway MySensor NRF24, Sensors , Relais ... + Gateway Velux .... + Gestion Pompe à Chaleur + NRFDoctor .... tout en DIY
thuglife
Messages : 35
Inscription : 28 janv. 2017, 23:08

Re: Calcul de DJU

Message par thuglife »

Voici le script de papoo adapté avec les DJC si je n'ai pas fait d'erreur.

Ajout variable à éditer :

Code : Tout sélectionner

local var_user_djc = 'CalcDJC'
local cpt_djc = 'DJC'
Ajout variable à ne pas éditer

Code : Tout sélectionner

local djc
local somme_djc
Ajout d'une fonction :

Code : Tout sélectionner

--==============================================================================================
function calc_djc(temperature)
djc  = tonumber((temperature - 18)*1/1440)
return dju
end
Programme :

Code : Tout sélectionner

-- calcul DJU et DJC
if otherdevices_svalues[temp_ext] ~= nil then
    if (uservariables[var_user_dju] == nil) then creaVar(var_user_dju,2,0)end
    if (uservariables[var_user_djc] == nil) then creaVar(var_user_djc,2,0)end
    temperature = tonumber(string.match(otherdevices_svalues[temp_ext], "%d+%.*%d*"))
    if temperature < 18 then --si la température extérieure est inférieure à 18
        voir_les_logs("--- --- Température extérieure : ".. temperature .."°C inférieure à 18°C --- ---",debugging)
        dju = calc_dju(temperature)
        voir_les_logs("--- --- DJU : ".. round(dju,5) .." --- ---",debugging)
        voir_les_logs("--- --- Variable DJU : ".. round(tonumber(uservariables[var_user_dju]),4) .." --- ---",debugging)
        somme_dju = tonumber(uservariables[var_user_dju]) + dju
        voir_les_logs("--- --- somme DJU : ".. round(somme_dju,4) .." --- ---",debugging)   
        commandArray[#commandArray+1] = {['Variable:'.. var_user_dju] = tostring(somme_dju)}
        cpt_dju_index = otherdevices_svalues[cpt_dju]
        voir_les_logs("--- --- compteur DJU : ".. cpt_dju_index .." --- ---",debugging)
        somme_djc = tonumber(uservariables[var_user_djc])
        voir_les_logs("--- --- somme DJC : ".. somme_djc .." --- ---",debugging)
    else --si la température extérieure est supérieure à 18
        voir_les_logs("--- --- Température extérieure : ".. temperature .."°C  supérieure à 18°C --- ---",debugging)
        djc = calc_djc(temperature)
        voir_les_logs("--- --- DJC : ".. round(djc,5) .." --- ---",debugging)
        voir_les_logs("--- --- Variable DJC : ".. round(tonumber(uservariables[var_user_djc]),4) .." --- ---",debugging)
        somme_djc = tonumber(uservariables[var_user_djc]) + djc
        voir_les_logs("--- --- somme DJC : ".. round(somme_djc,4) .." --- ---",debugging)   
        commandArray[#commandArray+1] = {['Variable:'.. var_user_djc] = tostring(somme_djc)}
        cpt_djc_index = otherdevices_svalues[cpt_djc]
        voir_les_logs("--- --- compteur DJC : ".. cpt_djc_index .." --- ---",debugging)
        somme_dju = tonumber(uservariables[var_user_dju])
        voir_les_logs("--- --- somme DJU : ".. somme_dju .." --- ---",debugging)
    end -- fin si temp ext
 
    if tonumber(uservariables[var_user_dju]) > 1 and cpt_dju ~= nil then -- si variable dju supérieure à 1 on incrémente le compteur de 1 et on réduit la variable de 1
    voir_les_logs("--- --- mise a jour compteur DJU --- ---",debugging)   
    reste_dju = tonumber(uservariables[var_user_dju]) - 1
        if timeDiff(cpt_dju,'d') < 119 then  -- on vérifie si le compteur à été rafraichi depuis moins de deux minutes si c'est le cas on soustrait 1 de la variable
            voir_les_logs("--- --- dernier rafraichissement compteur DJU : ".. timeDiff(cpt_dju,'d') .." secondes --- ---",debugging)
            commandArray[#commandArray+1] = {['Variable:'.. var_user_dju] = tostring(reste_dju)}           
            voir_les_logs("--- --- reste DJU : ".. tonumber(uservariables[var_user_dju]) .." --- ---",debugging)
        else  -- si le compteur n'as pas été rafraichi depuis moins de 2 minutes on l'incremente de 1
            cpt_dju_index = tonumber(cpt_dju_index) + 1
            commandArray[#commandArray+1] = {['UpdateDevice'] = GetDeviceIdxByName(cpt_dju) .. '|0|'..tostring(cpt_dju_index)}
        end
    end
    if tonumber(uservariables[var_user_djc]) > 1 and cpt_djc ~= nil then -- si variable djc supérieure à 1 on incrémente le compteur de 1 et on réduit la variable de 1
    voir_les_logs("--- --- mise a jour compteur DJC --- ---",debugging)   
    reste_djc = tonumber(uservariables[var_user_djc]) - 1
        if timeDiff(cpt_djc,'d') < 119 then  -- on vérifie si le compteur à été rafraichi depuis moins de deux minutes si c'est le cas on soustrait 1 de la variable
            voir_les_logs("--- --- dernier rafraichissement compteur DJC : ".. timeDiff(cpt_djc,'d') .." secondes --- ---",debugging)
            commandArray[#commandArray+1] = {['Variable:'.. var_user_djc] = tostring(reste_djc)}           
            voir_les_logs("--- --- reste DJC : ".. tonumber(uservariables[var_user_djc]) .." --- ---",debugging)
        else  -- si le compteur n'as pas été rafraichi depuis moins de 2 minutes on l'incremente de 1
            cpt_djc_index = tonumber(cpt_djc_index) + 1
            commandArray[#commandArray+1] = {['UpdateDevice'] = GetDeviceIdxByName(cpt_djc) .. '|0|'..tostring(cpt_djc_index)}
        end
    end   
else
    voir_les_logs("--- --- le device : ".. temp_ext .." n\'existe pas --- ---",debugging)
end -- fin si otherdevices_svalues[temp_ext] ~= nil
-- fin calcul DJU et DJC
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Calcul de DJU

Message par papoo »

@ thuglife : j'attendais que l'on soit en saison pour ajouter les degrés jour réfrigération mais tu l'as réalisé avant, merci.
pour être complet il manque la création variable à ne pas éditer local reste_djc.
j'ai ajouté ton code à mon script en modifiant un peu, en voici les raisons :
j'ai renommé tes djc en djf la norme voulant que DJC soit les degrés jour de Chauffe et les DJF les degrés jour Froid. les deux composant les DJU. source wikipedia
du coup j'ai renommé les dju en djc
j'ai ajouté la possibilité de ne calculer que les DJC, pour ceux qui ne climatisent pas
reste à attendre un temps plus clément pour que l'on puisse enfin avoir un peu plus chaud
https://easydomoticz.com/forum/viewtopi ... 879#p46879
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
thuglife
Messages : 35
Inscription : 28 janv. 2017, 23:08

Re: Calcul de DJU

Message par thuglife »

OK, peut être prendre en compte ceux qui n'ont pas de Gaz mais que de l'elec.
Choix Gaz / Elec pour être complet
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Calcul de DJU

Message par papoo »

ceux qui ont du chauffage électrique compte déjà l’énergie (kwh) il n'y a pas de conversion à faire, peu d’intérêt d'ajouter un compteur supplémentaire si?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
thuglife
Messages : 35
Inscription : 28 janv. 2017, 23:08

Re: Calcul de DJU

Message par thuglife »

oui c'est pas faux
Répondre