Domotiser vieille chaudiere avec prise Xiaomi

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
emylive
Messages : 39
Inscription : 21 mars 2017, 22:43

Domotiser vieille chaudiere avec prise Xiaomi

Message par emylive »

Bonjour à tous,

Je viens de domotiser ma vieille chaudière à gaz idéal standard créatis à l'aide de la prise wifi Xiaomi, du capteur de temperature Xiaomi, du détecteur de présence et du script de vil1driver mais je me demande si j'ai bien fait!

Pour le montage j'ai d'abord essayé au borne "thermostat d'ambiance" mais cela ne fonctionnait pas. J'ai donc branché sur "interrupteur mural phase impérativement en L"
grâce au script de vil1driver (merci beaucoup!!) cela fonctionne mais cela coupe complètement la chaudière! Est-ce un problème?

Code : Tout sélectionner

--[[ 

Type:          time
Name:          chauffage
 
Description:   Ce script permet de maintenir une température de confort,
            suivant la détection de notre présence (dans une plage horaire donnée),
            puis de progressivement abaisser la température en notre abscence.

Usage:         un interrupteur général 'mode' permet de passer du mode auto (conf/éco) au mode hors gêle.
            un second 'boost' permet de chauffer hors plage horaire (toujours sur détection de présence)
            un troisième 'guess' permet de forcer notre présence

            si nous faisons la fête, pour avoir du chauffage tant que la soirée à lieu
            activer 'boost'
            'boost' se désactivera de lui même après une heure sans détection de présence
            
            si vous voulez chauffer(confort) même sans détection de mouvement (bébé, personne alitée)
            activer 'guess'
            
            le script permet également de renseigner un capteur virtuel de consommation électrique.
            
Inertie:      lorsque le chauffage est allumé, on incrémente un compteur +1/min
            suivant ce compteur, la consigne à atteindre est abaissée de 0.1°C toutes les 10 minutes, avec un abaissement maxi de 0.5°C
            donc plus le temps passe, plus la température de la pièce augmente et plus la consigne baisse..

            lorsque la température rejoint la consigne(modifiée), on arrête de chauffer.
            on laisse un peu la pièce profiter de l'énergie accumulée dans les radiateurs.
            et on décrémente le compteur -1/min ce qui va remonter la consigne de 0.1°C toutes les 10 minutes
            donc plus le temps passe et plus la température continue de monter et plus la consigne augmente (jusqu'à relancer la chauffe)

            lorsque l'on atteint et/ou dépasse la consigne initiale le compteur est remis à zéro.
            au bout de 10 minutes à la consigne voulue, on remet en route le chauffe pour 2min puis on le stop 2min et on recommence.
            si cela nous fait dépasser la consigne on arrête.
            si on tombe sous la consigne, on aura gagné en réactivité car le radiateur sera préchauffé.

--]]
 
----------------------------------------------
------          Configuration          ------
----------------------------------------------

-- nom de zone
local zone = 'salon'                  -- nom de la zone pour affichage dans les logs et alerte mail

-- consignes
local consigne_conf = 'th_Salon'           -- nom de thermostat virtuel de gestion de la température de confort
local consigne_abs = 10                 -- Température lors d'abscence prolongée (hors gêle)
local consigne_1h = 0.5                  -- valeur d'abaissement de la consigne après 1 heure d'abscence
local consigne_2h = 1                  -- valeur d'abaissement de la consigne après 2 heure d'abscence
local consigne_3h = 1.5                  -- valeur d'abaissement de la consigne après 3 heure d'abscence

-- capteurs
local sonde = 'salon'                   -- Nom de la sonde de température
local presence = 'Xiaomi Motion detecteur'             -- Nom du capteur de mouvement
local mode = 'chauffage'                -- Nom de l'interrupteur virtuel général (On=auto Off=hors gêle)
local boost = 'boost'                  -- Nom de l'interrupteur virtuel pour déroger au couvre feu (chauffer hors plage de chauffe définie) 
local guess = 'guess'                  -- Nom de l'interrupteur virtuel pour forcer notre présence

-- période de chauffage
-- pour une période de 24h, mettre debut = '00:00' et fin = '24:00'
-- bien respecter le format hh:mm
local debut =    '06:00'
local fin =    '22:00'

-- radiateur
local radiateur = 'chaudiere'       -- Nom de l'interrupteur de chauffage
local puissance = 2700                  -- puissance du chauffage en watt
local conso = 'conso chauffage'            -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 107                  -- 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

-- inertie (beta)
local inertie = true                  -- radiateur à inertie true/false
local up = 1.5                        -- incrément du compteur par minute (vitesse d'abaissement de la consigne)
local down = 1.9                     -- décrément du compteur par minute (vitesse de remontée de la consigne)

-- email
local mail = 'emy**@gmail.com'         -- pour réception alerte sonde muette (chauffage coupé)

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

----------------------------------------------
--       Fin de la partie configuration       --
----------------------------------------------
 
function timedifference(d)
   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)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

-- quelle heure est-il
local heure = string.sub(os.date("%X"), 1, 5)
-- on regarde depuis combien de temps on est abscent
local abscence = string.sub(os.date("!%X", timedifference(presence)), 1, 5)
-- si demandé on simule une présence constante
if (otherdevices[guess] == 'On') then
   abscence = '00:00'
end   
-- notre dernière apparition était elle dans la plage horaire ?
if ((60*tonumber(string.sub(heure,1,2)) + tonumber(string.sub(heure,4,5))) - (60*tonumber(string.sub(abscence,1,2)) + tonumber(string.sub(abscence,4,5))) >= 60*tonumber(string.sub(debut,1,2)) + tonumber(string.sub(debut,4,5))) then
   inScope = true
else
   inScope = false
end
-- on regarde de quand date la dernière relève de température
local lastSeen = string.sub(os.date("!%X", timedifference(sonde)), 1, 5)

commandArray = {}

   --envoie d'une alerte mail si la sonde reste muette (pas de valeur reçue sur les 60 dernières minutes)
   if (lastSeen >= '00:60' and lastSeen < '00:62') then
      commandArray['SendEmail']='Domoticz Alerte#Alerte sonde '..zone..' muette#'..mail
   end
   
   -- création variable pour mémoriser la durée de chauffe,
   -- servant à éviter un fort dépassement de consigne suite à une longue période de chauffe (inertie des radiateurs)
   if (uservariables['chauffage_'..zone] == nil) then
      commandArray['OpenURL']=url..'/json.htm?type=command&param=saveuservariable&vname=chauffage_'..zone..'&vtype=2&vvalue=0'
      print('script chauffage '..zone..' interrompu pour création variable manquante')
      return commandArray
   end   
   
      
   -- gestion de la consigne
   -- récupération de la valeur du thermostat
   consigne_conf = tonumber(otherdevices_svalues[consigne_conf])
   -- si le thermostat général est actif
    if (otherdevices[mode] == 'On') then
      -- si il y a absence de moins d'une heure, la journée ou jusqu'au landemain matin si boost actif
        if ((inScope or otherdevices[guess] == 'On') and abscence <= '01:00' and ((heure >= debut and heure < fin) or otherdevices[boost] == 'On')) then 
         consigne = consigne_conf
      -- si absence de 1 à 2 heures la journée, abaissement de la consigne de 1°C
      elseif (inScope and abscence > '01:00' and abscence <= '02:00' and heure >= debut and heure < fin) then 
         consigne = consigne_conf - consigne_1h
      -- si absence de 2 à 3 heures la journée, abaissement de la consigne de 2°C   
      elseif (inScope and abscence > '02:00' and abscence <= '03:00' and heure >= debut and heure < fin) then
         consigne = consigne_conf - consigne_2h
      -- sinon, passage en consigne éco (3°C en dessous de la consigne confort)
      else
         consigne = consigne_conf - consigne_3h
         -- annulation boost, soirée terminée
         commandArray[boost] = 'Off'
      end
   else
      consigne = consigne_abs
   end   
   
   
   -- adaptation de la consigne pour tenir compte de l'inertie des radiateurs
   -- on soustrait/ajoute 0.1°C à la consigne, par tranche de 10 du compteur
   local count = tonumber(uservariables['chauffage_'..zone])
   if (count > 0) then
      adj = math.ceil(count / 10) / 10 - 0.1
   else
      adj = math.ceil(count / 10) / 10
   end   
   if (inertie) then
      consigne = consigne - adj
   end

   
   -- on récupère la température fournie par la sonde
    local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10

   
   -- si la température est supérieure ou égale à la consigne,
   -- ou que la sonde semble muette (10 min sans relève),
   if (temperature >= consigne or lastSeen > '00:10') then   
   
      -- on stop la chauffe 
      commandArray[radiateur]='Off'
      log = 'Radiateur -. OFF .-'


      -- calcul de la conso
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      if (otherdevices[radiateur] == 'On') then
         power = tonumber(npower - puissance)
         if (power < 0) then
            power = 0
         end
      else
         power = tonumber(npower)
      end   
      energy = tonumber(energy)
      
      
      -- si on dépasse la consigne voulue on remet le compteur à zero
      if (temperature > consigne + adj) then
         commandArray['Variable:chauffage_'..zone] = '0'
      -- on décrémente progessivement le compteur durée de chauffe (on ne passe sous zero que si on est à la consigne voulue)   
      elseif (otherdevices[radiateur] == 'Off' and (count > 0 or temperature == consigne + adj)) then
         commandArray['Variable:chauffage_'..zone] = tostring(count - down)
      end

      
   -- si la température est inférieur à la consigne et que la sonde est OK
   else
   
      -- on chauffe
      commandArray[radiateur]='On'
      log = 'Radiateur -. ON .-'


      
      -- calcul de la conso
      npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
      if (otherdevices[radiateur] == 'On') then
         power = tonumber(npower)
      else
         power = tonumber(npower + puissance)
      end   
      energy = tonumber(energy + (puissance / 60))
      
      
      -- si on tombe sous la consigne voulue et que le compteur est negatif, on le remet à zero
      if (temperature < consigne + adj and tonumber(uservariables['chauffage_'..zone]) < 0) then
         commandArray['Variable:chauffage_'..zone] = '0'
      -- sinon on incrémente le compteur durée de chauffe (max 100)
      elseif (otherdevices[radiateur] == 'On' and count + up <= 100) then   
         commandArray['Variable:chauffage_'..zone] = tostring(count + up)
      end
      
      
   end
   
   -- envoie de la conso dans le capteur virtuel d'énergie
   if (reset) then
      power = 0
   end   
   commandArray[3]={['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy}
   
   -- logs
   print('*** Chauffage '..zone..' ***')
   print(log)
   if inertie then
      print('Gestion de l\'inertie: count '..count)
   end
   if (otherdevices[boost] == 'On') then
      print('Couvre feu désactivé')
   end   
   if (inScope and otherdevices[guess] == 'Off')then
      print('Absence '..zone..' : '..abscence)
   elseif (otherdevices[guess] == 'On') then
      print('Présence continue activée')
   end   
   if (otherdevices[mode] == 'Off') then
      print('Thermostat général sur Off')
   elseif (lastSeen > '00:10') then
      print('Sonde muette !')
   else   
      print('il fait '..temperature..'°C pour '..consigne..'°C souhaité')
   end   
   print('*** *** *** *** *** ***')
return commandArray

Au départ je voulais juste pouvoir rallumer à distance ma chaudière lors de longues absences (2 semaines) mais se script m'a fait de l'oeil!

La chaudière ne sert qu'a chauffer le bas de la maison qui est une immense pièce à vivre et un bureau. Il n'y a que 3 radiateurs dont 1 dans le bureau qui reste souvent ouvert. Il n'y a pas de thermostat d'ambiance donc sans la domotique soit je baisse la température de l'eau de la chaudière ou je la coupe complètement pour régler la chaleur dans la maison !

Merci pour vos avis!! ;)
Dernière modification par emylive le 08 janv. 2018, 18:32, modifié 1 fois.
Domoticz+Xiaomi gateway
marc_bzh
Messages : 96
Inscription : 16 déc. 2017, 09:44
Localisation : Pornic (Dpt 44)

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par marc_bzh »

Si tu coupe la chaudière complétement a chaque fois c'est pas bon , les cartes électronique des chaudières ne supportent pas trop les coupures ...
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par balajol »

Bonjour,
Tu n as pas la doc de la chaudière ?
Actuellement elle est configurée pour fonctionner sans thermostat, il y a sûrement un cavalier sur la carte à déplacer pour utiliser cette entrée.
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 ..
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par balajol »

Re,
regarde ici, page 11 a priori tu as une entrée "thermostat d'ambiance"

http://www.remeha.be/wp-content/uploads ... E%20FR.pdf

Il y a surement un pont actuellement, tu l'enlève et tu y branche une "contact sec" commandé par la domotique.
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 ..
emylive
Messages : 39
Inscription : 21 mars 2017, 22:43

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par emylive »

Merci beaucoup pour votre aide !
J'ai essayé de brancher ma prise sur la borne thermostat, mais ça ne fonctionne pas. Ma prise est celle ci : http://www.domotique-info.fr/2015/10/te ... fi-xiaomi/

Je pense que je vais arrêter de me servir du script qui fonctionne très bien mais n'est pas adapté à ma chaudière et prise Xiaomi. Je vais m'en servir que pour remettre la chaudière en marche avant mon arrivée après une longue absence.

Je vais regarder les promos pour acheter un Nest ou Netatmo, cela doit être plus adapté.
Merci d'avoir pris du temps pour m'aider!

Envoyé de mon SM-N9005 en utilisant Tapatalk
Domoticz+Xiaomi gateway
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par balajol »

Re,
Oh la, il est urgent de se poser et ne pas faire n'importe quoi :o :o :o :o :o
La prise présentée est faite pour alimenter un appareil en 230 v et non un contact sec ...
Un contact sec est un interrupteur commandé à distance, il n'y a aucune alimentation dessus il ne fait que relier les 2 bornes.
Tu as des modèles en 433 Mhz ou z_wave, il est possible également possible de détourner une prise mais il faut la modifier pour supprimer cette alimentation.
Je pense que si tes connaissances en électricité sont inexistantes (ça n'est pas un jugement de valeur, on ne peut être expert dans tous les domaines) il faut te faire épauler pour ne pas faire de bêtises.
J'espère qu'en alimentant l'entrée thermostat tu n'as pas détruit la carte de la chaudière :? :?
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 ..
emylive
Messages : 39
Inscription : 21 mars 2017, 22:43

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par emylive »

Merci Balajol!!

Tu m'a bien aiguillé! Je me suis faite aider effectivement pour la partie branchement électrique et maintenant ma prise xiaomi fait "contact sec". Elle arrive maintenant à piloter le thermostat!
J'ai également réussi a faire fonctionner le deuxième script de vil1driver, je suis super contente!!
Je te remercie encore, ça change tout d'avoir une température constante et de ne plus avoir à aller dans le garage pour faire varier la chaudière :D
Emy
Domoticz+Xiaomi gateway
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Domotiser vieille chaudiere avec prise Xiaomi

Message par balajol »

Bonsoir,
:) parfait
Content d'avoir pu t'aider
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 ..
Répondre