[LUA] YASDC (Yes Another Script De Chauffage) !

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.
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa »

Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
valentin44
Messages : 15
Inscription : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 »

Nissa a écrit :Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
quand tu parles de la variables "puissance", c'est celle qui se trouve dans le script, faut il en créer une dans domoticz dans "variables d'utilisateur" ?

j'ai cela comme code j'ai bien un radiateur salon avec une puissance 1000 w

local piece={}-- Tableau Rajouter ici les radiateurs
piece['0']='salon'
local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'

-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa »

Non, la variable puissance n'est utilisée que dans le script pour mettre à jour le capteur virtuel de consommation électrique ici =>
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end

A noter que la MAJ du capteur n'a lieu, c'est logique, que si le radiateur est allumé. Comme toi tu inverses ce fonctionnement, tu dois modifier cette condition.
A+

valentin44 a écrit :
Nissa a écrit :Bonjour valentin44,
Le capteur chauffage-conso est mis à jour en cumulant la variable puissance qui contient la valeur présente dans le tableau Watt.
Le tableau watt doit-être synchro avec le tableau piece ( Le radiateur de la piece['0'] a comme puissance watt['0']='1000', etc...)
quand tu parles de la variables "puissance", c'est celle qui se trouve dans le script, faut il en créer une dans domoticz dans "variables d'utilisateur" ?

j'ai cela comme code j'ai bien un radiateur salon avec une puissance 1000 w

local piece={}-- Tableau Rajouter ici les radiateurs
piece['0']='salon'
local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'

-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
valentin44
Messages : 15
Inscription : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 »

Nissa a écrit :Non, la variable puissance n'est utilisée que dans le script pour mettre à jour le capteur virtuel de consommation électrique ici =>
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end

A noter que la MAJ du capteur n'a lieu, c'est logique, que si le radiateur est allumé. Comme toi tu inverses ce fonctionnement, tu dois modifier cette condition.
A+

je passe par un switch temporaire lui est allumé ce qui lance le Module OFF sur le radiateur donc la chauff

mais du coup le code est le même sauf que au lieu d'allumer directement le switch physique c'est un switch virtuel donc il ne devrait pas y avoir d'incidence
je remets le code

Code : Tout sélectionner

local piece={}-- Tableau Rajouter ici les radiateurs 
    piece['0']='salon'
 

local watt={}-- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
    watt['0']='1000'


-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044   -- idx du capteur virtuel de consommation électrique
local reset = false -- force la mise à zero de la consomation instantané (laisser à false pour un fonctionnement normal) true/false
local hysteresis = 0.4  -- Valeur seuil pour éviter que le relais ne cesse de commuter dans les 2 sens
local debug = false     -- true or false pour voir tous les messages debug dans le log
local verbose = true    -- Print ou non des logs
-- email
local mail = 'xxx'  -- pour réception alerte sonde muette (chauffage coupé)

-- domoticz
local url = '192.168.1.39:8080' -- user:pass@ip:port de domoticz, pour la création des variables

----------------------------------------------
--       Fin de la partie configuration       --
----------------------------------------------
time=os.date("*t")

function timedifference(d)
    t1 = os.time()
    s = otherdevices_lastupdate[d]
    year = string.sub(s, 1, 4)
    month = string.sub(s, 6, 7)
    day = string.sub(s, 9, 10)
    hour = string.sub(s, 12, 13)
    minutes = string.sub(s, 15, 16)
    seconds = string.sub(s, 18, 19)

    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = os.difftime (t1, t2)
    return difference
end

cumul_power = 0 -- initialisation de la puissance instantanee des radiateurs en fonctionnement

for key, valeur in pairs(piece) do
    -- Maj des variables en fonction de la valeur de la table 
    local le_radiateur_est_sur_ON = false   -- Etat du radiateur false ou true
    local sonde_KO = false                  -- Sonde de temperature HS
    local sonde = string.format("%s%s", "Temperature_", valeur) -- Nom de la sonde de température
    local presence = string.format("%s%s", "Chauffage_on_off_", valeur) -- Interrupteur manuel indiquant la presence
    local calendrier = string.format("%s%s", "Chauffage_calendrier_", valeur)
    local radiateur = string.format("%s%s", "Radiateur_inversseur_", valeur)   -- Nom de l'interrupteur de chauffage
    log = '***'
    log2 = '***'
    
    local heure = string.sub(os.date("%X"), 1, 5)   -- Recuperation de l'heure du systeme
    local lastSeen = string.sub(os.date("!%X", timedifference(sonde)), 1, 5)    -- Heure de la derniere releve de la sonde de temperature
    
    puissance=tonumber(watt[key])   -- Puissance en watt du radiateur
    


commandArray = {}
    
    if (debug) then print ('>>>>>>>>>>>>>>>Initialisation '..puissance..' Radiateur>'..valeur) end
    
----------------------------------------------
------         Alerte mail              ------
--     si la sonde est muette depuis 30'    --
----------------------------------------------

    if (lastSeen >= '00:30' and lastSeen < '00:32') then
        commandArray['SendEmail']='Domoticz Alerte#Alerte sonde chambre '..piece..' muette#'..mail
        if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Envoi mail probleme de sonde ') end
    end

----------------------------------------------
------          Gestion consigne        ------
----------------------------------------------
    
    -- récupération de la valeur du thermostat
    
    if (otherdevices[presence] == 'On') then    -- si la presence est active (interrupteur manuel 'Chauffage_on_off_XXXX')

        if (otherdevices[calendrier] == 'On') then  -- ET calendrier ON (Chauffage_calendrier_XXXX)
            consigne = tonumber(otherdevices_svalues[consigne_confort])
        else
            consigne = tonumber(otherdevices_svalues[consigne_eco])
         end

    else      -- presence = OFF
    consigne = tonumber(otherdevices_svalues[consigne_ecoplus])

    end
    
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initialisation Consigne chambre '..valeur..' > '..consigne) end
    
    -- on récupère la température fournie par la sonde
    local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
    
    if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Recup valeur sonde chambre '..valeur..' > '..temperature) end

----------------------------------------------
--  Inititialisation des Variables d etat  --
----------------------------------------------

    if (otherdevices[radiateur] == 'On') then le_radiateur_est_sur_ON = true end 
    
    if lastSeen > '00:10' then 
        local sonde_KO = true
    log2 = '***        Sonde muette '
    end

----------------------------------------------
------       Gestion du radiateur       ------
--- selon temperature relevee et consigne   --
----------------------------------------------
    
    if (le_radiateur_est_sur_ON) and not (sonde_KO) then
    log = '*** IF 1 >                        Le Radiateur est en marche'
        status = 1
        if temperature >= (consigne + hysteresis) then
        commandArray[radiateur]='Off'
        log = '*** IF 2 >   Arret du Radiateur'
        status = 0 -- Pour eviter le delai de la Maj du device (variable utilisee dans le if du calcul de conso)
        end
    else
        log = '*** IF 3 >                 Le Radiateur est arrete'
        status = 0
        if temperature <= (consigne - hysteresis) and not (sonde_KO) then
         commandArray[radiateur]='On'
            log = '*** IF 4 >                 Allumage du Radiateur'
            status = 1
        end
    end

-- calcul de la conso (npower = puissance actuelle / energy = puissance cumulee)

        npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)") -- extraction des valeurs stockees dans le device conso
    
    if (status == 1) then -- le radiateur est allume
        cumul_power = tonumber(cumul_power + puissance)
        energy = tonumber(energy + (puissance / 60))    -- puissance journaliere cumulee 
    else    -- Le radiateur est eteint
        energy = tonumber(energy)
        end
    
        power = tonumber(cumul_power)   -- puissance instantanee 
    
    -- envoi de la conso dans le capteur virtuel d'énergie

if (reset) then
        power = 0
        energy = 0
    end
    
    commandArray[3]={['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy}
    
    -- logs
    if (verbose) then
    print ' '
    print('********************* Chauffage '..valeur..' *********************')
    print('***                 Il fait '..temperature..'°C pour une consigne de '..consigne..'°C souhaités')
    print(log,log2)
    print('********************************************************************')
    end

end -- fin de tableau
    return commandArray
Dernière modification par vil1driver le 11 févr. 2019, 18:02, modifié 1 fois.
Raison : Suppression email dans le script
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa »

Le compteur de conso est,mis à jour lorsque la variable statut est à 1. Elle est mise à 1 lorsque radiateur=on. Dans ton cas quand radiateur est à on, il est, en fait, eteint de ce que j'ai'compris. Donc tu dois inverser le if statut.
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
valentin44
Messages : 15
Inscription : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 »

et le IDX c'est lequel qu'il faut mettre

local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique

IDX du radiateur reel ?
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa »

C'est l'id du capteur virtuel pas du radiateur
A+
valentin44 a écrit :et le IDX c'est lequel qu'il faut mettre

local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique

IDX du radiateur reel ?
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
valentin44
Messages : 15
Inscription : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 »

Bonjour

Apres plusieurs journées d'utilisation de ce script j'ai aujourd'ui mon salon et ma salle de bain ( j'ai un petit logement) :D
Le script fonctionne super bien, encore merci pour le taff :)

Ce que je constate (exemple de ce matin)
mon programme ce matin s'active à 6h il fait 18 degré pour une température de confort a 21 donc mon radiateur s'allume pour chauffer ma pièce
l'interrupteur passe bien en ON (je le vois dans les log et visuellement sur l'interface) mais mon module 433 Mhz ne s'active pas, je le vois ce matin a 10h45 j'appuie manuellement sur on et la il s'active bien

je ne le constate pas tous les jours mais je dirai bien 1 à 2 fois par semaine, l'antenne est a coté du module donc pas de raison que cela ne passe pas.

mes questions:
ce phénomène est il connu ?
comment forcer le On ?
est il possible dans le code de rajouter un script de sécurité du genre
si la temperature n'augmente pas en moins de 15-30 min alors forcer un on ?

ou alors faire un reboot du pi ou de domoticz qui peut influencer le système ?

merci de vos retour

cordialement
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa »

Bonsoir Valentin44,
C'est ton module qui ne capte pas toujours. Pour cela j'utilise un script que j'ai pris sur ce forum. Je crois que c'est de l'irremplaçable VIL1DRIVER, mais je ne trouve plus son sujet d'origine. Voici donc le script que j'utilise chez moi.
Tu mets dans la table 'check' les modules qui peuvent poser problème. Toutes les 15 mn, ce script va chercher la valeur de chaque module dans domoticz et renvoie cette valeur au module.
C'est trés efficace.
A+

Code : Tout sélectionner

--Permet toutes les 15 minutes de renvoyer la commande actuelle sensée etre appliquée aux modules sensibles

local debug = false

commandArray = {}

--recupere les minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

if (debug) then print('************** Renforcement signal > Lancement du check a '..hours..'h'..minutes) end

-------Toutes les 15 minutes
if( (minutes==15) or (minutes==0) or (minutes==30) or (minutes==45) ) then
   local check={}
      check['0']='Chauffe-eau'
      check['1']='Eclairage_cabane'
      check['2']='Spot snake'
      check['3']='Prise auchan'
      check['4']='Eclairage portant couloir'

   --Parcours le Tableau
   for key, valeur in pairs(check) do
      print ('************** Renforcement signal > Check : '..valeur.. ' -> ' ..otherdevices[valeur])
      commandArray[valeur]=otherdevices[valeur]   
   end
end

return commandArray
 --------FIN Renforcement des envois de signal-------------------------------------
valentin44 a écrit :Bonjour

Apres plusieurs journées d'utilisation de ce script j'ai aujourd'ui mon salon et ma salle de bain ( j'ai un petit logement) :D
Le script fonctionne super bien, encore merci pour le taff :)

Ce que je constate (exemple de ce matin)
mon programme ce matin s'active à 6h il fait 18 degré pour une température de confort a 21 donc mon radiateur s'allume pour chauffer ma pièce
l'interrupteur passe bien en ON (je le vois dans les log et visuellement sur l'interface) mais mon module 433 Mhz ne s'active pas, je le vois ce matin a 10h45 j'appuie manuellement sur on et la il s'active bien

je ne le constate pas tous les jours mais je dirai bien 1 à 2 fois par semaine, l'antenne est a coté du module donc pas de raison que cela ne passe pas.

mes questions:
ce phénomène est il connu ?
comment forcer le On ?
est il possible dans le code de rajouter un script de sécurité du genre
si la temperature n'augmente pas en moins de 15-30 min alors forcer un on ?

ou alors faire un reboot du pi ou de domoticz qui peut influencer le système ?

merci de vos retour

cordialement
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
valentin44
Messages : 15
Inscription : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 »

Super,

je vais tester cela

c'est dommage qu'il n'y a pas un post qui résume tous les scripts "plug and play" comme le tien et bien d 'autres

cela valoriserai encore plus le travail réalisé
Répondre