Présentation de ma domotique

Décrivez votre installation de Domotique,ce que vous gérez, quels sont les points forts de votre config illustrez par des photos, partagez et faites nous envie !
Répondre
yazul
Messages : 3
Enregistré le : 01 mai 2019, 10:36

Présentation de ma domotique

Message par yazul » 01 mai 2019, 11:12

Bonjour,

je suis informaticien, j'utilise Linux et les logiciels libres.

J'ai installé ma domotique autours d'un raspberry (paspbian) avec un dongle USB zwave en 3 étapes :

Chauffage
6 radiateurs avec vannes Danfoss LC13
Remarques :
  • attention à la mise en place de la vanne, la fermeture peut ne pas fonctionner si le vissage n'est pas effectué au bon moment :o
  • ne vous attendez pas à pouvoir lire quelque chose sur le mini-écran de la vanne : il faut être pile en face avec un éclairage correcte, du coup, c'est presque impossible :evil:
  • utilisez plutôt une version "concurrente" qui retourne la température courante et le % d'ouverture, ça peut aider à comprendre ce qui se passe ! :geek:
un site perso me permet de définir les plages de chauffage et les températures souhaitées pour chaque pièce (définition par jour de semaine, jour calendaire, heure...)

ce qui me manque : le pilotage de la vanne 3 voies (c'est en manuel) pour finir de piloter la quantité de chaleur globale (et donc les 2 autres radiateurs qui doivent rester ouverts). Mais un moteur semble coûter plus de 200€ :cry: et il faut ajouter les modules de pilotage, les sondes de température...

VMC
  • une VMC neuve pour remplacer l'ancienne HS
  • une module FIBARO FGS-222 pour activer les 2 vitesses de la VMC
  • une sonde température/humidité dans la SDB pour déclencher la VMC
  • un peu de soft (lua) pour :
    • activer la VMC V2 si humidité > "seuil haut" et arrêter si < "seuil bas"
    • activer plusieurs fois par jours (2h pour 30 min, ...)
    • activer à la demande
dans l'idéal, je souhaite piloter également ma hotte de cuisine (histoire de pouvoir coupler ça avec la VMC mais aussi de forcer l'arrêt en cas d'oubli) mais ça me demande de démonter et bidouiller leur électronique...

Volets roulants (en cours)
piloter mes 6 volets roulants (installation prochaine) avec 6 modules FIBARO FGR-223.
Aucun bouton mécanique : pilotage avec nos mobiles, tablettes ou PC (voir la TV depuis un autre raspberry) depuis un mini-site web. Il y aura quand même un bouton de secours près du tableau électrique 8-)


Et d'autres idées en attente : portier, gestion de présence, alarme (principale ou complément)...
domoticz / zwave / chauffage / vmc / VR (et bientôt plus ?)
raspberry / linux

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


yazul
Messages : 3
Enregistré le : 01 mai 2019, 10:36

Chauffage, VMC, VR

Message par yazul » 29 oct. 2019, 10:53

Après une première présentation, je refais le point sur mon installation.

Côté informatique : un RPI3 avec domoticz, un dongle ZWAVE et un RFXCOM (j'ai également un NAS perso, tous les fichiers utilisés par le RPI3 sont dessus pour limiter l'usage de la carte SD).

VMC :

une simple VMC dans les combles reliée à cuisine, SDB, buanderie..
Un module FIBARO FGS-222 permet de piloter les 2 vitesses de la VMC :
- depuis une sonde hygro (heiman, à changer car pas fiable) : déclenchement si %humidité > 70% et arrêt dès que < 55% ou 2H de fonctionnement)
- 2 x 1 heure par jour pour purger l'air

Volets roulants

ce sont des volets PROFALUX (moteur SOMFY) avec 4 fils (montée, descente, neutre, terre).
chaque volet est piloté par un module FGRM-223.
IMG_20191026_173039.jpg
Tableau FGRM-223 des VR
IMG_20191026_173039.jpg (81.68 Kio) Vu 416 fois
Les VR sont pilotés depuis domoticz mais surtout depuis une appli Web perso permettant de gérer rapidement les 5 positions de chaque VR (0%, 25%, 50%, 99% et 100%) individuellement ou par groupe de volet (avant, arrière de la maison, ...).

Une mini-télécommande RFXCOM (0%, 99%, 100%) gère certains volets.

Chauffage

Une chaudière (électro-fuel) et des radiateurs.
Chaque radiateur (sauf 2) utilisent des vannes DANFOSS
IMG_20191029_100242.jpg
Vanne DANFOSS
IMG_20191029_100242.jpg (98.56 Kio) Vu 416 fois
inconvénients : elles ne renvoient pas la température mesurée, l'installation est délicate (il est facile de ne pas visser correctement la vanne), l'affichage n'est pas bien lisible.

la température de chaque radiateur est défini selon le jour et la plage horaire.

La vanne 3 voie est équipée d'un moteur ELESTA-AMP230
IMG_20191029_100117.jpg
Vanne 3 voies
IMG_20191029_100117.jpg (72.36 Kio) Vu 416 fois
il m'a fallu le tourner d'1/8 de tour pour conserver toute la course de la vanne (1/4 de tour)

le pilotage de la vanne est également géré par un module FGRM-223 (2 sens, gestion par %, ça ressemble à un VR).
IMG_20191026_173132.jpg
Tableau chaudière
IMG_20191026_173132.jpg (93.46 Kio) Vu 416 fois
j'ai du rechercher quel type de pilotage fonctionnait correctement : "Roller blind" aurait dû fonctionner mais c'est finalement "roller blind with built-in driver" qui a réussi a gérer le moteur.

2 sondes (oregon scientific, THGN132N en RFXCOM) renvoient la température intérieure/extérieure.
Une matrice me permet de définir pour chaque couple de températures le % d'ouverture de la vanne.


idées en attente

- détection de présence (mini-puces bluetooth ?)
- alarme fumée, ...
- intégration de la présence dans la gestion du chauffage
- alarme selon présence (remplacement de l'alarme indépendant actuelle)
- climatisation pilotée (il existe des modules simulant une télécommande de clim).
- écran de synthèse

bon, j'ai du boulot jusqu'à ma retraite !
domoticz / zwave / chauffage / vmc / VR (et bientôt plus ?)
raspberry / linux

Warp
Messages : 59
Enregistré le : 29 mars 2015, 12:35
Localisation : IDF

Re: Présentation de ma domotique

Message par Warp » 18 nov. 2019, 17:04

Salut yazul, (si cela peut-être utile)

Pour la VMC j'utilise un "McoHome Technology Co Ltd MH-S412 Two-load" pour piloter les deux virtesses.
mco-home-touch-panel-z-wave-2-buttons-white-mh-s412.jpg
mco-home-touch-panel-z-wave-2-buttons-white-mh-s412.jpg (8.3 Kio) Vu 183 fois
Pour le détecteur de présence/humidité dans les salles de bains j'utilise : "AEON Labs ZW100 MultiSensor 6+"
aeotec-zw100-multisensor6-capteur-6-en-1-mouvement-temperature-humidite-lumiere-vibration-uv-z-wave.jpg
aeotec-zw100-multisensor6-capteur-6-en-1-mouvement-temperature-humidite-lumiere-vibration-uv-z-wave.jpg (6.36 Kio) Vu 183 fois
La petite vitesse se déclenche pour 10mn lors de la présence de qq dans une des salles de bains, la deuxième vitesse est activé en cas d'élévation de l'humidité, et arrêté automatiquement lors d'un retour à la normal.
VMC.PNG
VMC.PNG (15.1 Kio) Vu 185 fois
Sensor.PNG
Sensor.PNG (12.67 Kio) Vu 185 fois
VMC time.lua

Code : Tout sélectionner

--[[
 
This script controls the humidity in a typical bathroom setting by detecting
relative rises in humidity in a short period.
Of course it requires a humidity sensor and a binary switch controlling a VMC.
(there is no provision for variable speed ventilators here!)
 
How it works (assuming the default constants as defined below):
Every 5 minutes a reading is done. Every reading is stored together
with the previous reading and is stored in two user variables (humidityS1Tmin5 and humidityS1Tmin10).
So it has two reading over the past 10 minutes.
It then takes the lowest of the two and compares it with the latest reading and
calculates a delta.target
If the delta is 3 or higher (see constants) then the VMC will be turned
on, it calculates the target humidity and the 'humidity-decrease program' is started (VMCFollowsProgram=1).
From then on, every 5 minutes the current humidity is compared to the
stored target humidity. Basically if that target is reached, the VMC is turned off
and the 'program' is ended.
Of course, it is possible that the target is never reached (might start raining outside
or whatever). Then there is a failsafe (VMC_MAX_TIME) after which the ventilator
will be turned off.
 
Also, it will detect if the ventilator is manually switched off during a program
or when it is switched on before the program starts.
 
Along the lines it prints to the log and sends notifications
but of course you can turn that off by removing those lines.
 
--]]
 
commandArray = {}
   

-- declare some constants
-- adjust to your specific situation
local thisfilename = "/var/tmp/HumidityJsonAllDevData.tmp"
SAMPLE_INTERVAL = 5                 -- time in minutes when a the script logic will happen
VMC_DELTA_TRIGGER = 3               -- augmentation de l'humidité qui va déclencher la VMC
VMC_MAX_TIME = 24                   -- nombre maximal de cycles de la VMC en position allumé,
                                    -- dans le cas où on n'a jamais atteint le taux d'humidité cible
TARGET_OFFSET = 4                   -- La VMC s'arrète si la (target+offset) est atteinte.
                                    -- (peut-être qu'il prend trop de temps pour atteindre la vraie cible en raison de serviettes humides, etc.)

VMC_NAME = 'VMC_Rapide'                     -- exact device name of the switch turning on/off the ventilator
SENSOR1_NAME = 'TH_SDE'              -- le nom exact du périphérique de capteur d'humidité
SENSOR2_NAME = 'TH_SDB'              -- le nom exact du périphérique de capteur d'humidité
 
TEST_MODE = false                   -- lorsqu'il est vrai HUMVAR_TEST_MODE est utilisé à la place du capteur réel
TEST_MODE_HUMVARS1 = 51             -- fake humidity value, give it a test value in domoticz/uservars
TEST_MODE_HUMVARS2 = 60             -- fake humidity value, give it a test value in domoticz/uservars
PRINT_MODE = false		    -- lorsqu'il est vrai rensignera les logs et envéras des notifications
 
if PRINT_MODE == true then
   print('VMC control')
end
--
-- **** functions ****
-- Init timedifference
--
function timedifference (s)
  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
-- Init file
--
function init_file(file)
   humCounter = 0
   humidityS1Tmin5 = 0
   humidityS1Tmin10 = 0
   targetVMCOffS1Humidity = 0
   VMCMaxS1Timer = 0
   humidityS2Tmin5 = 0
   humidityS2Tmin10 = 0
   targetVMCOffS2Humidity = 0
   VMCMaxS2Timer = 0
   VMCFollowsProgram = 0
   write_file(file)
   return 
end
-- Write file
--
function write_file(file)
  local f = io.open(file, "w")
  f:write('humCounter = ' .. humCounter .. '\n')
  f:write('humidityS1Tmin5 = ' .. humidityS1Tmin5 .. '\n')
  f:write('humidityS1Tmin10 = ' .. humidityS1Tmin10 .. '\n')
  f:write('targetVMCOffS1Humidity = ' .. targetVMCOffS1Humidity .. '\n')
  f:write('VMCMaxS1Timer = ' .. VMCMaxS1Timer .. '\n')
  f:write('humidityS2Tmin5 = ' .. humidityS2Tmin5 .. '\n')
  f:write('humidityS2Tmin10 = ' .. humidityS2Tmin10 .. '\n')
  f:write('targetVMCOffS2Humidity = ' .. targetVMCOffS2Humidity .. '\n')
  f:write('VMCMaxS2Timer = ' .. VMCMaxS2Timer .. '\n')
  f:write('VMCFollowsProgram = ' .. VMCFollowsProgram .. '\n')
  f:close()
  return 
end
-- see if the file exists
function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end
-- get all lines from a file, returns an empty 
-- list/table if the file does not exist
function lines_from(file)
  if not file_exists(file) then 
    init_file(file)
    -- return {} 
  end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = line
  end
  return lines
end

 
-- get the global variables:
-- this script runs every minute, humCounter is used to create SAMPLE_INTERVAL periods
-- tests the functions above
local file = thisfilename
local lines = lines_from(file)


if (otherdevices['VMC_Lent']=='On' and timedifference(otherdevices_lastupdate['VMC_Lent']) > 600) then
    commandArray['VMC_Lent'] = 'Off'
end

-- print all line numbers and their contents
for k,v in pairs(lines) do
    svariable, snumber = v:match("([^,]+)=([^,]+)")
    if (tostring(svariable) == 'humCounter ') then 
	humCounter = tonumber(snumber)
    elseif (tostring(svariable) == 'humidityS1Tmin5 ') then        -- youngest reading
	humidityS1Tmin5 = tonumber(snumber)
    elseif (tostring(svariable) == 'humidityS1Tmin10 ') then       -- oldest reading
	humidityS1Tmin10 = tonumber(snumber)
    elseif (tostring(svariable) == 'targetVMCOffS1Humidity ') then -- target humidity
	targetVMCOffS1Humidity = tonumber(snumber)
    elseif (tostring(svariable) == 'VMCMaxS1Timer ') then
	VMCMaxS1Timer = tonumber(snumber)
    elseif (tostring(svariable) == 'humidityS2Tmin5 ') then        -- youngest reading
	humidityS2Tmin5 = tonumber(snumber)
    elseif (tostring(svariable) == 'humidityS2Tmin10 ') then       -- oldest reading
	humidityS2Tmin10 = tonumber(snumber)
    elseif (tostring(svariable) == 'targetVMCOffS2Humidity ') then -- target humidity
	targetVMCOffS2Humidity = tonumber(snumber)
    elseif (tostring(svariable) == 'VMCMaxS2Timer ') then
	VMCMaxS2Timer = tonumber(snumber)
    elseif (tostring(svariable) == 'VMCFollowsProgram ') then    -- marker indicating that the
	VMCFollowsProgram = tonumber(snumber)                    -- decrease program is started
    end
end


targetS1 = 0 -- will hold the target humidity when the program starts
targetS2 = 0 -- will hold the target humidity when the program starts
 
-- get the current humidity value
if (TEST_MODE) then
    currentS1 = TEST_MODE_HUMVARS1
    currentS2 = TEST_MODE_HUMVARS2
else
    currentS1 = otherdevices_humidity[SENSOR1_NAME]
    currentS2 = otherdevices_humidity[SENSOR2_NAME]  
end
 
-- check if the sensor is on or has some weird reading
if (currentS1 == 0 or currentS1 == nil or currentS2 == 0 or currentS2 == nil) then
    print('currentS1 or currentS2 is 0 or nil. Skipping this reading')
    commandArray['SendNotification'] = 'currentS1 or currentS2 is 0 or nil. Skipping this reading'
    return commandArray
end
 
if PRINT_MODE == true then
		print('Current humidity S1:' .. currentS1)
		print('humidityS1Tmin5: ' .. humidityS1Tmin5)
		print('humidityS1Tmin10: ' .. humidityS1Tmin10)
		print('VMCMaxS1Timer: ' .. VMCMaxS1Timer)
		print('targetVMCOffS1Humidity:' .. targetVMCOffS1Humidity)
		print('Current humidity S2:' .. currentS2)		
		print('humidityS2Tmin5: ' .. humidityS2Tmin5)
		print('humidityS2Tmin10: ' .. humidityS2Tmin10)
		print('VMCMaxS2Timer: ' .. VMCMaxS2Timer)
		print('targetVMCOffS2Humidity:' .. targetVMCOffS2Humidity)
		print('humCounter:' .. humCounter)
		print('VMCFollowsProgram:' .. VMCFollowsProgram)
end
 
-- increase cycle counter
humCounter = humCounter + 1
 
if (humCounter >= SAMPLE_INTERVAL) then
 
    if (humidityS1Tmin5 == 0) then
        -- initialization, assume this is the first time
        humidityS1Tmin5 = currentS1
        humidityS1Tmin10 = currentS1
    end
    if (humidityS2Tmin5 == 0) then
        -- initialization, assume this is the first time
        humidityS2Tmin5 = currentS2
        humidityS2Tmin10 = currentS2
    end    
 
    humCounter = 0 -- reset the cycle counter
 
    -- pick the lowest history value to calculate the delta
    -- this also makes sure that two relative small deltas in the past 2*interval minutes are treated as one larger rise
    -- and therefore will still trigger the ventilator
    -- I don't want to use a longer interval instead because I want the ventilator to start as soon as possible
    -- (so rather after 5 minutes instead of after 15 minutes because the mirrors in the bathroom become kinda useless ;-)

    -- Choisir la valeur de l'histoire la plus basse pour calculer le delta 
    -- ce qui rend aussi sûr que deux relativement petits deltas dans les dernières minutes d'intervalle 2 * sont traitées comme une seule grande hausse 
    -- et ne seront donc encore déclencher le ventilateur 
    -- Je ne veux pas utiliser un intervalle plus long à la place parce que je veux que le ventilateur commence dès que possible 
    -- (donc plutôt au bout de 5 minutes au lieu de 15 minutes, parce que les miroirs dans la salle de bains devient un peu inutile ;-)

    deltaS1 = currentS1 - math.min(humidityS1Tmin10, humidityS1Tmin5)
    deltaS2 = currentS2 - math.min(humidityS2Tmin10, humidityS2Tmin5)    
if PRINT_MODE == true then
	print('DeltaS1: ' .. deltaS1)
	print('DeltaS2: ' .. deltaS2)	
end
 
    -- pick the lowest history value
    targetS1 = math.min(humidityS1Tmin10, humidityS1Tmin5) + TARGET_OFFSET
    targetS2 = math.min(humidityS2Tmin10, humidityS2Tmin5) + TARGET_OFFSET    
 
    -- shift the previous measurements
    humidityS1Tmin10 = humidityS1Tmin5
    humidityS2Tmin10 = humidityS2Tmin5    
    -- and store the currentS1 & currentS2
    humidityS1Tmin5 = currentS1
    humidityS2Tmin5 = currentS2
 
    if (otherdevices[VMC_NAME]=='Off' or (otherdevices[VMC_NAME]=='On' and VMCFollowsProgram==0)) then
        -- either the VMC is off or it is on but the decrease program has not started
        -- in that latter case we start the program anyway. This could happen if someone turns on the ventilator
        -- manually because he/she is about to take a shower and doesn't like damp mirrors.
        -- I don't do this because the ventilator removes heat from the bathroom and I want this to happen
        -- as late as possible ;-)
	    -- Soit le ventilateur est éteint, ou il est allumé mais le programme de déshumidification n'a pas commencé
        -- Dans ce dernier cas, nous commençons le programme de toute façon. Cela pourrait se produire si quelqu'un se met en marche le ventilateur
        -- Manuellement, car il / elle est sur le point de prendre une douche et ne veux pas de miroirs humides.
        -- Je ne fais pas cela parce que le ventilateur évacue la chaleur de la salle de bains et je veux que cela se produise
        -- Le plus tard possible;-)
 
        if (VMCFollowsProgram == 1 and otherdevices[VMC_NAME]=='Off') then
	    -- probable que quelqu'un a éteint le ventilateur tandis que le programme de déshumidification est exécuté.
            VMCFollowsProgram = 0
        end
 
        -- see if we have to turn it on
        if (deltaS1 >= VMC_DELTA_TRIGGER) then
            -- time to start the VMC
            commandArray[VMC_NAME] = 'On'
            targetVMCOffS1Humidity = targetS1
            targetVMCOffS2Humidity = targetS2
 
            if (VMCFollowsProgram == 1) then
                print('VMC was already on but we start the de-humidifying program')
            end
 
            VMCFollowsProgram = 1
 
            -- set the safety stop
            VMCMaxS1Timer = VMC_MAX_TIME
 
			if PRINT_MODE == true then
                print('Rise in humidity. Turning on the vents. DeltaS1: ' .. deltaS1)
                print('Target humidity for turning the VMC: ' ..targetVMCOffS1Humidity)
                commandArray['SendNotification'] = 'VMC is on#The VMC was activated at humidity level S1:' .. currentS1 .. ' S2:' .. currentS2 .. '#0'
			end
        end
        if (deltaS2 >= VMC_DELTA_TRIGGER) then
            -- time to start the VMC
            commandArray[VMC_NAME] = 'On'
            targetVMCOffS2Humidity = targetS2
            targetVMCOffS1Humidity = targetS1            
 
            if (VMCFollowsProgram == 1) then
                print('Ventilator was already on but we start the de-humidifying program')
            end
 
            VMCFollowsProgram = 1
 
            -- set the safety stop
            VMCMaxS2Timer = VMC_MAX_TIME
 
			if PRINT_MODE == true then
                print('Rise in humidity. Turning on the vents. DeltaS2: ' .. deltaS2)
                print('Target humidity for turning the VMC: ' ..targetVMCOffS2Humidity)
                commandArray['SendNotification'] = 'VMC is on#The VMC was activated at humidity level S2:' .. currentS2 .. ' S1:' .. currentS1 .. '#0'
			end
        end    
 
    else
        if (VMCMaxS1Timer > 0 or VMCMaxS2Timer > 0) then
            -- possible that someone started the ventialator manually
            if VMCMaxS1Timer > 0 then VMCMaxS1Timer = VMCMaxS1Timer - 1 end
            if VMCMaxS2Timer > 0 then VMCMaxS2Timer = VMCMaxS2Timer - 1 end
        end
 
 
        if (VMCFollowsProgram == 1) then -- not manually started
 
            if (deltaS1 >= VMC_DELTA_TRIGGER) then
                -- ok, there is another VMC_DELTA_TRIGGER rise in humidity
                -- when this happen we reset the VMCMaxS1Timer to a new count down
                -- because we have to ventilate a bit longer due to the extra humidity
                
                if PRINT_MODE == true then
				    print('Another large increase detected, resetting max timer. DeltaS1: ' .. deltaS1)
                    commandArray['SendNotification'] = 'humidity increase#Another large increase detected, at humidity level S1:' .. currentS1 .. ' S2:' .. currentS2 .. ' targetVMCOffS1Humidity:' .. targetVMCOffS1Humidity .. '#0'
				end
                VMCMaxS1Timer = VMC_MAX_TIME
            end
            if (deltaS2 >= VMC_DELTA_TRIGGER) then
                -- ok, there is another VMC_DELTA_TRIGGER rise in humidity
                -- when this happen we reset the VMCMaxS1Timer to a new count down
                -- because we have to ventilate a bit longer due to the extra humidity
                
                if PRINT_MODE == true then
				    print('Another large increase detected, resetting max timer. DeltaS2: ' .. deltaS2)
                    commandArray['SendNotification'] = 'humidity increase#Another large increase detected, at humidity level S2:' .. currentS2 .. ' S1:' .. currentS1 .. ' targetVMCOffS2Humidity:' .. targetVMCOffS2Humidity .. '#0'
				end
                VMCMaxS2Timer = VMC_MAX_TIME
            end            
 
            -- first see if it can be turned off
            if (
                ((currentS1 <= targetVMCOffS1Humidity or targetVMCOffS1Humidity==0) and (currentS2 <= targetVMCOffS2Humidity or targetVMCOffS2Humidity==0)) 
                or (VMCMaxS1Timer==0 and VMCMaxS2Timer==0)
                ) then
                commandArray[VMC_NAME] = 'Off'
                msg = ''
 
                if ((VMCMaxS1Timer==0 and VMCMaxS2Timer==0) and (currentS1 > targetVMCOffS1Humidity or currentS2 > targetVMCOffS2Humidity)) then
                    msg = 'Target not reached but safety time-out is triggered.'
                    if PRINT_MODE == true then
					    print(msg)
					end
                else
                    msg = 'Target humidity reached'
                    if PRINT_MODE == true then
					    print(msg)
					end
                end
 				if PRINT_MODE == true then
                    print('Arret de la VMC')
                    msg = msg .. '\ncurrentS1:' .. currentS1
                    msg = msg .. '\ntargetVMCOffS1Humidity:' .. targetVMCOffS1Humidity
                    msg = msg .. '\ncurrentS2:' .. currentS2
                    msg = msg .. '\ntargetVMCOffS2Humidity:' .. targetVMCOffS2Humidity
                    msg = msg .. '\nVMCMaxS1Timer:' .. VMCMaxS1Timer
                    msg = msg .. '\nVMCMaxS2Timer:' .. VMCMaxS2Timer                    
				end
				if PRINT_MODE == true then
                    print('Arret de la VMC')
                    msg = msg .. '\nArret de la VMC'
                    msg = msg .. '\nhumidity level S1:' .. currentS1 .. ' S2:' .. currentS2 
				end
 
                targetVMCOffS1Humidity = 0
                VMCMaxS1Timer = 0
                targetVMCOffS2Humidity = 0
                VMCMaxS2Timer = 0                
                VMCFollowsProgram = 0
                -- reset history in this case.. we start all over
                -- Tmin10 is still in the 'ventilator=On'-zone
                humidityS1Tmin10 = humidityS1Tmin5
                humidityS2Tmin10 = humidityS2Tmin5                
                 if PRINT_MODE == true then
				    commandArray['SendNotification'] = 'VMC is off#' .. msg .. '#0'
				end
 
            else
                -- we haven't reached the target yet
               if PRINT_MODE == true then
			    print('Humidity deltaS1: ' .. deltaS1)
			    print('Humidity deltaS2: ' .. deltaS2)
			   end
            end
        end
    end
 
if PRINT_MODE == true then
    print('New values >>>>>>>>>>>')
    print('humidityS1Tmin5: ' .. humidityS1Tmin5)
    print('humidityS1Tmin10: ' .. humidityS1Tmin10)
    print('VMCMaxS1Timer: ' .. VMCMaxS1Timer)
    print('targetVMCOffS1Humidity:' .. targetVMCOffS1Humidity)
    print('humidityS2Tmin5: ' .. humidityS2Tmin5)
    print('humidityS2Tmin10: ' .. humidityS2Tmin10)
    print('VMCMaxS2Timer: ' .. VMCMaxS2Timer)
    print('targetVMCOffS2Humidity:' .. targetVMCOffS2Humidity)
    print('humCounter:' .. humCounter)
    print('VMCFollowsProgram:' .. VMCFollowsProgram)
end
 
end
 
-- save the globals
write_file(file)

return commandArray   

VMC device.lua

Code : Tout sélectionner

--
-- Script qui permet de gérer 
-- La VMC avec les interrupteurs
--

commandArray = {}

--------------------------------------------------
-- Init
--------------------------------------------------

local TimeBetween = 1 -- time that needs to be between 

function round(x)
  return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
function datetimedifferencenow(s)
   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
-- retourne le temps en minutes depuis la dernière màj du périphérique
function TimeDiff(device)
  timestamp = otherdevices_lastupdate[device] or device
  y, m, d, H, M, S = timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)")
  difference = round((os.difftime(os.time(), os.time{year=y, month=m, day=d, hour=H, min=M, sec=S})/60))
  return difference
end

--------------------------------------------------
-- Main
--------------------------------------------------

-- ============================================
-- Si présence dans SDB ou SDE -> VMC_Lent->On
-- ============================================
if ((devicechanged['Sensor_SDE']=='On' or devicechanged['Sensor_SDB']=='On') 
    and otherdevices['VMC_Rapide']=="Off" and otherdevices['VMC_Lent']=="Off") then    
    commandArray['VMC_Lent'] = 'On'    
end
-- ============================================
-- Si présence dans SDB ou SDE -> VMC_Lent->On
-- ============================================

if ((devicechanged['VMC']) and ((TimeDiff('VMC_Lent') > TimeBetween) or (TimeDiff('VMC_Rapide') > TimeBetween))) then
	if devicechanged['VMC'] == 'Arret' then               
		commandArray['VMC_Lent'] = 'Off'
		commandArray['VMC_Rapide'] = 'Off'			
	elseif devicechanged['VMC'] == 'Lent' then          
		commandArray['VMC_Lent'] = 'On'
	elseif devicechanged['VMC'] == 'Rapide' then     
		commandArray['VMC_Rapide'] = 'On'  			
	end
elseif ((devicechanged['VMC_Lent'] or devicechanged['VMC_Rapide'])  and (TimeDiff('VMC') > TimeBetween)) then

    if devicechanged['VMC_Rapide'] == 'On' then
        commandArray['VMC'] = 'Set Level: 20'
    elseif devicechanged['VMC_Rapide'] == 'Off' then
        if otherdevices['VMC_Lent'] == 'On' then
            commandArray['VMC'] = 'Set Level: 10'
        else
            commandArray['VMC'] = 'Set Level: 0'
        end
    end
    if devicechanged['VMC_Lent'] == 'On' then
        if otherdevices['VMC_Rapide'] == 'Off' then
            commandArray['VMC'] = 'Set Level: 10'
        end
    elseif devicechanged['VMC_Lent'] == 'Off' then
        if otherdevices['VMC_Rapide'] == 'Off' then
            commandArray['VMC'] = 'Set Level: 0'
        end
    end
    
end

return commandArray

Raspberry 2B:USB Z-Stick (GEN5):Edimax EW-7811UN:Huawei E220 3G
4xQubino ZMNHCD1
Everspring SE812 & ST812
Mcohome MH-S411, MH-S412 & MH7H
2xAEON LABS ZW-100
2xFibaro FGSD-002:Fibaro FGFS-101:Fibaro FGS-221 & KLF-050

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre