Comparaison de temperature pour chauffage

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
koody
Messages : 6
Inscription : 10 mars 2016, 09:08

Comparaison de temperature pour chauffage

Message par koody »

Bonjour à tous,

Je possède une sonde qui m'envoie la température et l'humidité de ma pièce.
J'aimerai utiliser cette sonde pour réguler mon chauffage mais je ne sais pas comment aller chercher uniquement la valeur de la température en lua. Quelqu'un pourrait-il m'aider ?
Je veux juste enclencher un relais si la temperature est plus basse que 21 degrés et couper le relais si la temperature est supérieure ou égale à 21 degrés.

Merci pour votre aide
koody
Raspberry PI2 + DOMOTICZ + RFXcom + Mi LIGHT + KODI
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Comparaison de temperature pour chauffage

Message par balajol »

Bonsoir,
Le script de vil1driver ma servi de base pour réaliser le mien
J' utilise principalement des sondes Oregon T+ H% . Tu devrais y retrouver les commandes de base.

Code : Tout sélectionner

-- Ce script permet de maintenir la température------   http://easydomoticz.com/forum/viewtopic.php?f=10&t=233-----Scipt_time_Thermostat_14_Sans_EASY--Fonctionnel
 
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort'], "(%d+%.*%d*)"))--     20 --'Consigne-Danfoss-Confort' -- Température de consigne confort en semaine
local consigne_conf_plus = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort-Plus'], "(%d+%.*%d*)"))--21 -- Température de consigne confort plus le weekend
local consigne_eco = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Eco'], "(%d+%.*%d*)"))--17 --'Consigne-Danfoss-Eco' -- Température de consigne économique
local consigne_abs = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Hors-Gel'], "(%d+%.*%d*)"))--10 --'Consigne-Danfoss-Hors-Gel' -- Température de consigne lors d'abscence prolongée

local moyenne_sondes= 'Moyenne_T_Cuisine_Salon' -- Capteur virtuel, calculé par Lua, moyenne des Temp cuisine et salon
local sonde_Salon = 'Oregon_Salle_4' -- Nom de la sonde de température  Salon
local sonde_cuisine = 'Oregon_Cuisine_3' -- Nom de la sonde de température Cuisine
local Temperature_TOPP_Bureau_Rdc_ = "Temperature_TOPP_Bureau_Rdc"
local Oregon_Bureau_C2_ = "Oregon_Bureau_C2"
local mode = 'mode_Eco-Conf-(Off:Eco--On:Conf)' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local Presence = 'Presence_Partielle(On)_Hors_Gel(Off)' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)

local Easymatic_Domoticz= 'Mode-Chaudière' --Selecteur pour passer de la commande déportée filaire de la chaudière à Domoticz, connecteur à enficher sur la carte de la chaudiere poue revenir
--à l' Easymatic + cavalier sur entree thermostat
HeureFinConfort=uservariables["Heure-Fin_Confort"]---Variables utilisateur renseignées par sélecteur et blocky
HeureDebutConfort=uservariables["Heure-Debut_Confort"]-- " " " 
--------------------------------
-- Fin des variables à éditer --
--------------------------------
time = os.date("*t") 

commandArray = {}

if ( time.min%4 == 0 ) then--Lancement Script toutes les 4 minutes

if (otherdevices['Choix_sonde_chauf'] == 'Sonde_Cuisine') then
    sonde = sonde_cuisine
elseif (otherdevices['Choix_sonde_chauf'] == 'Sonde_Salon') then
    sonde = sonde_Salon
elseif (otherdevices['Choix_sonde_chauf'] == 'Moyenne_sondes') then
    sonde = moyenne_sondes
elseif (otherdevices['Choix_sonde_chauf'] == 'Sonde_Ch_Rdc') then
    sonde = Temperature_TOPP_Bureau_Rdc_
elseif (otherdevices['Choix_sonde_chauf'] == 'Sonde_Bureau') then
    sonde = Oregon_Bureau_C2_
    
    end
    
    if (otherdevices['Presence_Partielle(On)_Hors_Gel(Off)'] == 'Off') then
     sonde = moyenne_sondes
     end
    local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
    
    local today = os.date("%A")
    if (otherdevices['Presence_Jour_Vacances'] == 'Off') and ((today == "Saturday" or (today == "Sunday" and time.hour < 1)) or
        (otherdevices['Jour_Ferie'] == 'On' and time.hour < 1 ) or (otherdevices['ToucheB-Telec2-Mode_Presence_Jour'] == 'On')) then
        
--Si WE ou Jour_Ferie = "On"  ou Forcage Manuel par telecommande 2 Touche B:  Presence_Jour_Vacances= "On" .  Après 23 h, Mise à Off par Planning..
--Si presence  Lundi, Mettre à On après 23 H.
--sans cela impossible de mettre à Off avant Minuit, on ne pourrait le faire que Manuellement le Matin ou automatiquement à 18 H le Lundi par Planning.
--Laisse la possibilité Lundi Presence_Jour programmé la veille après 23 H


commandArray['Presence_Jour_Vacances'] = 'On'

end

   
   if (otherdevices['Presence_Jour_Vacances'] == 'On') then--Le WE, Ferie ou Mode-confort-plus  Application Consigne thermostat   "Consigne-Danfoss-Confort-Plus"
      consigne_conf = consigne_conf_plus
      

   else
      consigne_conf = consigne_conf_semaine-- Sinon Application "Consigne-Danfoss-Confort"
      

   end
 
      -- si le swicth " Presence(On)_Hors-Gel(Off)" est actif (On:Presence) 
   
   if (otherdevices[Presence] == 'On') then
   
   
   --Si on est en Mode confort entre "Heure_depart_confort" et "Heure_Arret_Confort", journée de présence totale type "vacances à la Maison"  et plage Journée totale
   --OU  Mode confort, Journée Fractionnée (travail)   consigne = Confort
   if ((otherdevices[mode] == 'On') and (otherdevices['Presence_Jour_Vacances'] == 'On') and (time.hour >= HeureDebutConfort and time.hour < HeureFinConfort)) or
   ((otherdevices[mode] == 'On') and (otherdevices['Presence_Jour_Vacances'] == 'Off') and  ((time.hour >= 6 and time.hour < 7) or (time.hour >= 17 and time.hour < 23))) then
      
   consigne = consigne_conf
   else
   consigne = consigne_eco
   
   end
   else
    consigne = consigne_abs -- Si " Presence(On)_Hors-Gel(Off)" = Off, Consigne "hors Gel"
    
   end
  
  --Chaudiere en Marche (Chauffe)  si:"Mode-Chaudière" sur "Cde-Domoticz"  et  Sortie thermostat  à On (Contact thermostat sur carte chaudiere fermé) ou demande ECS et
  --tempEcsChaudiere < Consigne Seuil_Bas T° ECS
  
  if ((otherdevices['Mode-Chaudière'] == 'Cde-Domoticz') and (temperature < consigne) and (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'Off')) then-- Passage retour chauffage par ballon solaire
        commandArray['Soutient_Solaire_Chauffage'] = 'On'
    else
     commandArray['Soutient_Solaire_Chauffage'] = 'Off'   
    end
  
   if (otherdevices['Mode-Chaudière'] == 'Cde-Domoticz') and ((temperature < consigne) or (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'On')) then
   
    commandArray['Marche_Chaudiere'] = 'On'
    
       print('Marche Chaudiere -. Marche .-')

    else 
            
      
      --  Chaudiere  arrêtée si: "Marche_Chaudiere" sur Off (Position DOMOTICZ) et interupteur autorisation ECS à Off   (Bruleur arreté et circulateur quelques minutes apres)
      
    if (otherdevices['Mode-Chaudière'] == 'Cde-Domoticz') and (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'Off' ) then 
    
      commandArray['Marche_Chaudiere'] = 'Off'
      
      print('Chaudiere -. Stop .-')
    end 
      end

   print('il fait '..temperature..'°C pour '..consigne..'°C souhaité par thermostat Domoticz')--Imprime dans les Logs T° mesurée actuelle et consigne thermostat
   
   -- commandArray['Variable:consigne_thermostat']= tostring(consigne)--Renseignement Variable utilisateur de la consigne utilisée par le thermostat  
   --Plus utilisé, Nécessaire pour "scipt_time_val_consigne.."
   
   commandArray['OpenURL'] = 'http://Adresse DOMOTICZ:Port/json.htm?type=command&param=udevice&idx=IDXduDEVICE&nvalue=0&svalue='..consigne..''--renseigne directement le thermostat virtuel " Val_Cons_Actu" qui permet
   --d' afficher dans un dummy thermostat la valeur de consigne
   
end   
return commandArray

Cdt
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, SOMFY RTS,Sonoff ..
koody
Messages : 6
Inscription : 10 mars 2016, 09:08

Re: Comparaison de temperature pour chauffage

Message par koody »

Merci pour les conseils.
Si j'ai bien compris, tout se passe dans cette ligne de commande pour aller stocker la valeur de la température dans une variable:

Code : Tout sélectionner

local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
Corrigez-moi si je me trompe
koody
Raspberry PI2 + DOMOTICZ + RFXcom + Mi LIGHT + KODI
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Comparaison de temperature pour chauffage

Message par landaisbenj »

Pour etre clair tu stock bien une valeur dans une variable, mais il s'agit d'une variable interne au script au moment de son execution.

--Indication de la creation d'une variable propre a l'execution du script:

Code : Tout sélectionner

local
...Nom de la variable:

Code : Tout sélectionner

temperature = 
--Ouverture d'une methode mathematique:

Code : Tout sélectionner

math.
...d'arrondi inferieur du parametre entre parenthese:

Code : Tout sélectionner

floor
...ou le paramètre etant un calcul simple avec un device: otherdevices_temperature[sonde]

Code : Tout sélectionner

(10*tonumber(otherdevices_temperature[sonde]))/10
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
koody
Messages : 6
Inscription : 10 mars 2016, 09:08

Re: Comparaison de temperature pour chauffage

Message par koody »

Merci pour le décorticage :-)

Grace à votre aide, j'ai pu isoler la valeur de l'humidité avec:

Code : Tout sélectionner

local humidity = tonumber(otherdevices_humidity[sonde])
Par contre, pour comparer simplement la valeur de ma sonde de température avec un thermostat virtuel dans domoticz, c'est plutôt galère!
pourtant le thermostat ne possède qu'une valeur en réel, non?

Jérôme
koody
Raspberry PI2 + DOMOTICZ + RFXcom + Mi LIGHT + KODI
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Comparaison de temperature pour chauffage

Message par landaisbenj »

Il faut que tu découvre tout ce qui se cache derrière otherdevice...etc

Créer un bouton virtuel test. Et créer un script device pour se bouton.
Tu mets juste un print dedans avec otherdevice[sonde] ex:

Code : Tout sélectionner

commandArray{}

If devicechanged['test'] then
print(otherdevice_temperature['sonde'])
End
Return commandArray
Et à la place de otherdevice_temperature tu en essai plein. Tu verra tout ce qui t'affiche.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
koody
Messages : 6
Inscription : 10 mars 2016, 09:08

Re: Comparaison de temperature pour chauffage

Message par koody »

landaisbenj a écrit :Il faut que tu découvre tout ce qui se cache derrière otherdevice...etc

Créer un bouton virtuel test. Et créer un script device pour se bouton.
Tu mets juste un print dedans avec otherdevice[sonde] ex:

Code : Tout sélectionner

commandArray{}

If devicechanged['test'] then
print(otherdevice_temperature['sonde'])
End
Return commandArray
Et à la place de otherdevice_temperature tu en essai plein. Tu verra tout ce qui t'affiche.
J'ai compris le principe.
Merci pour les conseils
koody
Raspberry PI2 + DOMOTICZ + RFXcom + Mi LIGHT + KODI
Répondre