Aller au contenu
sebcbien

Domotisation D'une Vmc Double Flux Storkair (550)

Recommended Posts

Bonjour,

Voici ce dont je dispose chez moi:

post-826-0-10056600-1420394136_thumb.jpg
 
Ce tuto assez complexe me permet de domotiser ma ventilation Storkair 550
.
La partie Fibaro n'est pas trop complexe, ce qui l'est plus c'est la partie commande et lecture de la VMC (qui n'est pas prévue pour cela à  l'origine...)
 
Cette partie à  été réalisée avec un raspberry, un bricolage pour transformer ses signaux TTL en RS232 et un script en Python
 
Des connaissances en Linux sont donc demandées et aussi en "électronique"
 
Donc avant de faire un long (très long) tuto, j'aimerais savoir si ça intéresserait quelques personnes (et pas juste pour la beauté du tuto hein ;) )
 
  • Upvote 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Top top, mais je suis sur un Duolix Max moi... J'ai également commencé un truc, mais très très très simple par rapport àtoi. Beau travail. Question, tu te connectes directement sur la carte électroniques ou comme la Duolix max tu as une télécommande et tu récupères les signaux ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, directement sur la carte. Ils vendent un petit contrôleur câblé qui se connecte en rs232. Avec d'autres personnes, on a "reverse-enginered" le protocole et on peut donc la contrôler.

Sent From my Vic20

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah je dis GG !

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour ma part, fortement intéressé par le concept, mais je m'oriente aussi sur une Atlantic Duolix Max  ...

 

@ Nico, comment tu récupères les infos ? (il y a un module RF - comme sur d'autres équipements de la même marque, mais je crois pas que le protocole soit utilisable par un module autre que celui d'Atlantic)

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, quand je trouverai un peu de temps je détaillerai le principe,

Le plus compliqué (interface raspberry-vmc) je ne l'aborderai que rapidement.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, le temps, toujours pas, mais voici le virtual device: Vitesse_VMC.vfib

En gros, il y a un script sous chaque bouton de vitesse qui push les paramètres vers une url.

exemple pour définir la vitesse2:

 

--------------------------------------------------
-- VMC Speed
-- Control of VMC StorkAir / ComfoAir / Zehnder 
-- sebcbien
-- Juin 2014
--------------------------------------------------

local thismodule=fibaro:getSelfId()
local ipraspberry = fibaro:get(thismodule, 'IPAddress')
local speedwrite = "2"
local extraitpourcent = ""
local vitesse = ""
local RendementVMC = ""
local Notifier = 93 -- VD notifier

fibaro:setGlobal("VMC_Speed", "Normale")

function round(num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end 

VMC = Net.FHttp(ipraspberry,80)
payloademon = "/cgi-bin/VMCsetspeed.cgi?speed=" .. speedwrite
response, status, errorCode = VMC:GET(payloademon)
response ,status, errorCode = VMC:GET("/cgi-bin/VMCbinjson.cgi")
-- enregistrement du retour de l API dans une table

if (tonumber(status) == 200)
  then response = json.decode(response) 

	-- Wait for Notifier to be free
		--while (fibaro:getGlobalValue("Notifier_Use") == "In_Use") do fibaro:sleep(1000); end fibaro:setGlobal("Notifier_Use", "In_Use");
	-- Call Notifier  
		--fibaro:setGlobal("Notify_Msg", "Vitesse VMC: " .. speedwrite);
		--fibaro:call(Notifier, "pressButton", "5");
  else
fibaro:log("ErrorCode = " .. errorCode)
end

-- read VMC state
fibaro:call(thismodule, "pressButton", "10");

J'utilise un notificateur "maison" à  vous de le remplacer par l'action que vous désirez.

 

Le main loop permet de surveiller et de modifier l'icône et quelques paramètres Fibaro.

Je n'interroge pas le raspberry qui gère la VMC trop souvent car le protocole RS-232 utilisé pour gérer la VMC n'a pas été conçu pour un polling très fréquent et donc plante parfois si trop sollicité.

 

Des questions ?, n'hésitez pas ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

ah bah oui, ça va peut être vous intéresser de savoir comment lire les autres infos dans la VMC ?  :P

--------------------------------------------------
-- RaspVMC Fibaro Virtual Module
-- Sebastien Jauquet
-- Juin 2014
--------------------------------------------------

local thismodule=fibaro:getSelfId()
local ipraspberry = fibaro:get(thismodule, 'IPAddress')
local speedwrite = ""
local extraitpourcent = ""
local vitesse = ""
local RendementVMC = ""

-- IP of the VMC Rasp
VMC = Net.FHttp(ipraspberry,80)
response ,status, errorCode  = VMC:GET("/cgi-bin/VMCbinjson.cgi")
-- enregistrement du retour de l API dans une table
fibaro:debug("Status = " .. status) 

if (tonumber(status) == 200) then
response = json.decode(response) 
else
fibaro:log("ErrorCode = " .. errorCode)
fibaro:setGlobal("VENT_V3_TEMP", "0")
end

local vitesse = response.config.ventilateurs.vitesse - 1

fibaro:debug(vitesse) 

function round(num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end 

local extraitpourcent = response.data.ventilateurs.extraitpourcent
local vitesse = response.config.ventilateurs.vitesse
local Tairneuf = response.data.temperature.Tairneuf
local Textrait = response.data.temperature.Textrait
local Trepris = response.data.temperature.Trepris
local Tsoufflage = response.data.temperature.Tsoufflage
local Tconfort = response.data.temperature.Tconfort
local Mode = response.data.bypass.mode
local soufflagepourcent = response.data.ventilateurs.soufflagepourcent
local extraitpourcent = response.data.ventilateurs.extraitpourcent
local extraitrpm = round(response.data.ventilateurs.extraitrpm)
local soufflagerpm = round(response.data.ventilateurs.soufflagerpm)
local filtres = response.data.usage.filtres
local wallplug1 = fibaro:getValue(25, "valueSensor")

local RendementVMC = 1000*((Tsoufflage-Tairneuf)/(Trepris-Tairneuf))
RendementVMC = round(RendementVMC)/10
fibaro:call(thismodule, "setProperty", "ui.Label1.value", vitesse - 1 .. " (" .. extraitpourcent .. "%)")
fibaro:call(thismodule, "setProperty", "ui.Label2.value", RendementVMC .. "%")
fibaro:call(thismodule, "setProperty", "ui.Label3.value", Tairneuf .. "° -> " .. Textrait .. "°")
fibaro:call(thismodule, "setProperty", "ui.Label4.value", Trepris .. "° -> " .. Tsoufflage .. "°")
fibaro:call(thismodule, "setProperty", "ui.Label5.value", Tconfort .. "°")
fibaro:call(thismodule, "setProperty", "ui.Label6.value", Mode )
fibaro:call(thismodule, "setProperty", "ui.Label7.value", soufflagepourcent .. "% / " .. soufflagerpm .. "rpm")
fibaro:call(thismodule, "setProperty", "ui.Label8.value", extraitpourcent .. "% / " .. extraitrpm .. "rpm")
fibaro:call(thismodule, "setProperty", "ui.Label9.value", filtres .. " Heures")
fibaro:call(thismodule, "setProperty", "ui.Label10.value",wallplug1 .." watt")

--fibaro:call(thismodule, "setProperty", "ui.Label1.value", vitesse - 1 .. " (" .. extraitpourcent .. "%)")
--fibaro:call(thismodule, "setProperty", "ui.Label2.value", RendementVMC .. "%")
--fibaro:call(thismodule, "setProperty", "ui.Label3.value", Tairneuf .. "°  " .. Trepris .. "°  " .. Tsoufflage .. "°")

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici le VD:

Vitesse_VMC.vfib

Avec les dernières version de raspVMC sur raspberry pas mal d'options se sont ajoutées, j'ai donc modifié le VD.

dernière version de raspvmc: http://www.bricozone.be/fr/domotique/t-controler-sa-vmc-storkair-comfoair-zehnder-via-sa-domotique-page19-80339.html

 

Voici à  quoi le vd ressemble:

post-826-0-53829400-1446852971_thumb.jpg

 

Voici les graphiques qui en sortent:

ici on peut voir la vitesse de la vmc qui s'ajuste automatiquement si le taux de co2 monte.

post-826-0-58263300-1446852829_thumb.jpg

 

Partager ce message


Lien à poster
Partager sur d’autres sites

pour ceux qui ne veulent pas installer le VD, 

voici deux-trois codes principaux:

le bouton slider auto-manu:

--fibaro:debug(" ligne 125 à 127 commented for disabling speedwrite for jeedom");
--------------------------------------------------
-- RaspVMC Speed Controller
-- Control of VMC StorkAir / ComfoAir / Zehnder 
-- Sebastien Jauquet
-- Février 2015
--------------------------------------------------

-- Common button setup
local selfId = fibaro:getSelfId()
local ipraspberry = fibaro:get(selfId, 'IPAddress')
local EmonCMS_Prefix = "VMC_" -- prefix of the id of the inpus to be created in emoncms (convenient for testing to not alter current feeds)
local emoncms = Net.FHttp("emoncms.org",80)
local emoncms_api_key = "9a38f08201251c4584545a223ebdd13a" -- your EMONCMS WRITE api Key
local PushToEmonCMS = true -- true = push to emoncms - false = do not push
local emoncms_ok = true
local speedwrite = ""
local extraitpourcent = ""
local vitesse = ""
local RendementVMC = ""
local Bypass_Status
local CO2_Max_Value_Local = tonumber(fibaro:getGlobalValue("CO2_Max_Value"))
--local VMC_Lock = tonumber(fibaro:getGlobalValue("VMC_Lock"))
local VMC = Net.FHttp(ipraspberry,80)
local position = 50
local ValeurSlider = tonumber(fibaro:getValue(selfId, "ui.AutoOrManual.value"))
local VMC_Speed = fibaro:getValue(selfId, "ui.VgVmcSpeed.value")
local VMC_Lock = fibaro:getValue(selfId, "ui.VgVmcLock.value")
local msg1, msg2, msg3
fibaro:debug("lock: "..VMC_Lock.." speed: "..VMC_Speed)
-- IDs générés le : 28/09/16 à 23:10:26 - KAROTZ Say
local id2 = {--Cellier
VMC = 25
}

function VMC_SetIcon(speed)
	if speed == "Absent" then fibaro:call(selfId, "setProperty", "currentIcon", 1010) end
	if speed == "Lente" then fibaro:call(selfId, "setProperty", "currentIcon", 1011) end
	if speed == "Normale" then fibaro:call(selfId, "setProperty", "currentIcon", 1012) end
	if speed == "Rapide" then fibaro:call(selfId, "setProperty", "currentIcon", 1013) end
end

VMC_SetIcon(VMC_Speed)

function setSlider(position)
  fibaro:call(selfId, "setProperty", "ui.AutoOrManual.value", position)
  return position
end

function round(num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end 

if ValeurSlider < 49 then
  --fibaro:setGlobal("VMC_Lock", "0")
  fibaro:call(selfId, "setProperty", "ui.VgVmcLock.value", "Automatique")
  fibaro:debug("Silder Value: " .. ValeurSlider .. " Setting Auto/Unlocked Mode")
  setSlider(10)
end
if ValeurSlider > 50 then
  --fibaro:setGlobal("VMC_Lock", "1")
  fibaro:call(selfId, "setProperty", "ui.VgVmcLock.value", "Locked")
  fibaro:debug("Silder Value: " .. ValeurSlider .. " Setting Manual/Locked Mode")
  setSlider(90)
end

--local VMC_Lock = tonumber(fibaro:getGlobalValue("VMC_Lock"))
if ValeurSlider == 49 then PushToEmonCMS = false ValeurSlider = 50 end
if ValeurSlider == 50 then ---- 50 = demande du scheduler: read CO2, set Speed and push to emonCMS
	if VMC_Lock == "Automatique" then 
	--fibaro:debug("-- Waiting  Netatmo 50s befor Setting Speed depending of CO2_Max_Value -------")
	setSlider(10)
    	--fibaro:debug("Waiting 45 sec (25 sec minimum)for Netatmo Mod to calculate CO2 Max Value")
  		--fibaro:sleep(50*1000);
		
		
-- Common button setup--------------------------------------
	  if CO2_Max_Value_Local < 500 then
		speedwrite = "0"
		--fibaro:setGlobal("VMC_Speed", "Absent")
		VMC_Speed = "Absent"
		fibaro:call(selfId, "setProperty", "ui.VgVmcSpeed.value", "Absent")
	  end
	  if ((CO2_Max_Value_Local > 500) and (CO2_Max_Value_Local <800)) then
		speedwrite = "1"
		--fibaro:setGlobal("VMC_Speed", "Lente")
		VMC_Speed = "Lente"
		fibaro:call(selfId, "setProperty", "ui.VgVmcSpeed.value", "Lente")
	  end
	  if ((CO2_Max_Value_Local > 800) and (CO2_Max_Value_Local <1600)) then
		speedwrite = "2"
		--fibaro:setGlobal("VMC_Speed", "Normale")
		VMC_Speed = "Normale"
		fibaro:call(selfId, "setProperty", "ui.VgVmcSpeed.value", "Normale")
	  end
	  if CO2_Max_Value_Local > 1600 then
		speedwrite = "3"
		--fibaro:setGlobal("VMC_Speed", "Rapide")
		VMC_Speed = "Rapide"
		fibaro:call(selfId, "setProperty", "ui.VgVmcSpeed.value", "Rapide")
	  end
		payloademon = "/cgi-bin/VMCsetspeed.cgi?speed=" .. speedwrite
		response, status, errorCode = VMC:GET(payloademon)
		fibaro:debug("CO2_Max_Value = "..CO2_Max_Value_Local.." Setting Auto VMC Speed to: "..speedwrite.." Error Code: "..errorCode)

	elseif VMC_Lock == "Locked" then 
	--fibaro:debug("vmc lock 1")	
	setSlider(90)
		fibaro:debug("VG_VMC_Lock Locked, Setting Manual VMC Speed To "..VMC_Speed.." - CO2_Max_Value = "..CO2_Max_Value_Local)
		fibaro:getValue(selfId, "ui.VgVmcSpeed.value")
		if VMC_Speed == "Absent" then 
    -- if forced absent but co2>600, then force speed lente
    		if (CO2_Max_Value_Local > 600) then
				speedwrite = "1"
				fibaro:call(selfId, "setProperty", "ui.VgVmcSpeed.value", "Absent")
				--VMC_Speed = "Absent"
	  		else
    	   		speedwrite = "0"
  			end
  		end
		if VMC_Speed == "Lente" then speedwrite = "1" end
		if VMC_Speed == "Normale" then speedwrite = "2" end
		if VMC_Speed == "Rapide" then speedwrite = "3" end
		payloademon = "/cgi-bin/VMCsetspeed.cgi?speed=" .. speedwrite
		response, status, errorCode = VMC:GET(payloademon)
		fibaro:debug("CO2_Max_Value = "..CO2_Max_Value_Local.." Setting Manual VMC Speed to: "..speedwrite.." Error Code: "..errorCode)
	end

	-- wait 5 sec so the VMC can change speed
	if PushToEmonCMS == true then
		fibaro:debug("-- Reading VMC Parameters Then Pushing to EmonCMS (waiting 5 s)--------"); fibaro:sleep(5000)
		else fibaro:debug("Reading VMC Parameters ONLY (Not Pushing to EmonCMS (waiting 1 s))--------"); fibaro:sleep(1000)
	end
	-- Send request to the VMC Raspberry to read values
	response ,status, errorCode  = VMC:GET("/cgi-bin/VMCbinjson.cgi")

	-- enregistrement du retour de l API dans une table si status 200 (ok)
	if (tonumber(status) == 200)
		then response = json.decode(response) 
		else
		fibaro:log("ErrorCode = " .. errorCode)
    	fibaro:debug("VMC Get ErrorCode = " .. errorCode)
	end
	-- fibaro:debug("Status = " .. status) 
	-- fibaro:debug(vitesse) 

	-- Lecture de la réponse
	local extraitpourcent = response.data.ventilateurs.extraitpourcent
	local vitesse = response.config.ventilateurs.vitesse
	local Tairneuf = response.data.temperature.Tairneuf
	local Textrait = response.data.temperature.Textrait
	local Trepris = response.data.temperature.Trepris
	local Tsoufflage = response.data.temperature.Tsoufflage
	local Tconfort = response.data.temperature.Tconfort
	local Mode = response.data.bypass.mode
  	local Bypass = response.data.valvesetat.bypass
	local soufflagepourcent = response.data.ventilateurs.soufflagepourcent
	local extraitpourcent = response.data.ventilateurs.extraitpourcent
	local extraitrpm = round(response.data.ventilateurs.extraitrpm)
	local soufflagerpm = round(response.data.ventilateurs.soufflagerpm)
	local filtres = response.data.usage.filtres
	local wallplug1 = fibaro:getValue(2189, "power")
	local emoncms = Net.FHttp("emoncms.org",80)
	local RendementVMC = round(1000*((Tsoufflage-Tairneuf)/(Trepris-Tairneuf)))/10
		
		if RendementVMC < 130 and RendementVMC > 1 then
			--fibaro:debug("Rendement VMC OK: "..RendementVMC)
  			RendementVMC = RendementVMC
		else
  			fibaro:debug("Rendement VMC: "..RendementVMC.." Overriding to 100")
  			RendementVMC = 130
		end

	fibaro:call(selfId, "setProperty", "ui.Label1.value", vitesse - 1 .. " (" .. extraitpourcent .. "%)")
	fibaro:call(selfId, "setProperty", "ui.Label2.value", RendementVMC .. "%")
	fibaro:call(selfId, "setProperty", "ui.Label3.value", Tairneuf .. "° -> " .. Textrait .. "°")
	fibaro:call(selfId, "setProperty", "ui.Label4.value", Trepris .. "° -> " .. Tsoufflage .. "°")
	fibaro:call(selfId, "setProperty", "ui.Label5.value", Tconfort .. "°")
	if Bypass == 0 then Bypass_Status = "Inactif" else Bypass_Status = "actif" end  
	fibaro:call(selfId, "setProperty", "ui.Label6.value", Mode .. " - " .. Bypass_Status )
	fibaro:call(selfId, "setProperty", "ui.Label7.value", soufflagepourcent .. "% / " .. soufflagerpm .. "rpm")
	fibaro:call(selfId, "setProperty", "ui.Label7.value", soufflagepourcent .. "% / " .. soufflagerpm .. "rpm")
	fibaro:call(selfId, "setProperty", "ui.Label8.value", extraitpourcent .. "% / " .. extraitrpm .. "rpm")
	fibaro:call(selfId, "setProperty", "ui.Label9.value", filtres .. " Heures")
	fibaro:call(selfId, "setProperty", "ui.Label10.value",wallplug1 .." watt")
	
EmonCMS = {}; 
function EmonCMS:Push(payloademon)
fibaro:debug("EMONCMS Payload: " .. payloademon) ;
if emoncms_ok then 
	payloademon = "/input/post.json?json={" .. EmonCMS_Prefix .. payloademon .. "}&apikey=" .. emoncms_api_key;
	response, status, errorCode = emoncms:GET(payloademon);
		if status ~= "200" then
			emoncms_ok = false
			fibaro:debug("error response, oborting all push. - ".."response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ;
		end
	fibaro:sleep(500);
end
end

if PushToEmonCMS == true then
		payloademon = "VITESSE:" .. vitesse - 1
		EmonCMS:Push(payloademon);
		
		payloademon = "RENDEMENT:" .. RendementVMC
		EmonCMS:Push(payloademon);

		payloademon = "TEMP_AIR_NEUF:" .. Tairneuf
		EmonCMS:Push(payloademon);
		
		payloademon = "TEMP_AIR_EXTRAIT:" .. Textrait
		EmonCMS:Push(payloademon);

		payloademon = "TEMP_AIR_REPRIS:" .. Trepris
		EmonCMS:Push(payloademon);

		payloademon = "TEMP_AIR_SOUFFLAGE:" .. Tsoufflage
		EmonCMS:Push(payloademon);

		payloademon = "TEMP_CONFORT:" .. Tconfort
		EmonCMS:Push(payloademon);

		if Mode == "ete" then Mode = 1 else Mode = 0 end  
		payloademon = "MODE:" .. Mode
		EmonCMS:Push(payloademon);

		payloademon = "BYPASS:" .. Bypass
		EmonCMS:Push(payloademon);

		-- prevent false measurement to be sent to emonCMS
		if ((soufflagerpm - extraitrpm) > 170) or ((soufflagerpm - extraitrpm) < -170)
		then 
			fibaro:debug("soufflage rpm - extract NotOK 170> XX < -170 : " .. soufflagerpm - extraitrpm)
		else
			fibaro:debug("soufflage rpm - extract OK 170> XX < -170 : " .. soufflagerpm - extraitrpm)
			payloademon = "SOUFL_RPM:" .. soufflagerpm
			EmonCMS:Push(payloademon);

			payloademon = "EXTRACT_PRCENT:" .. extraitpourcent
			EmonCMS:Push(payloademon);

			payloademon = "EXTRACT_RPM:" .. extraitrpm
			EmonCMS:Push(payloademon);
			
			payloademon = "SOUFL_PRCENT:" .. soufflagepourcent
			EmonCMS:Push(payloademon);		
		end

		payloademon = "HEURES_FILTRES:" .. filtres
		EmonCMS:Push(payloademon);

		payloademon = "CONSOMATION:" .. wallplug1
		EmonCMS:Push(payloademon);
	end
end

-- Display status
	msg1 = "(CO2:" .. CO2_Max_Value_Local
	if VMC_Lock == "Locked" then msg2 = VMC_Speed.." " else msg2 = VMC_Speed.." " end
	msg3 = " à "..os.date("%H:%M")..")"
	fibaro:call(selfId, "setProperty", "ui.Status.value", msg2 .. msg1 .. msg3)	

	VMC_SetIcon(VMC_Speed)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

le bouton set V3 pendant 10 min:

local id = {
	PHONE_SEB				= 1347, ------- not in id2
    PHONE_GG				= 1327, ------- not in id2
	SCENE_EMAIL_DNODES		= 71, --------- not in id2
    SCENE_REVEIL_DOUCEUR	= 66 --------- not in id2
    }
	
local thismodule=fibaro:getSelfId()
local ipraspberry = fibaro:get(thismodule, 'IPAddress')
local VMC_Speed_Before = fibaro:getGlobal("VMC_Speed")
-- durée de la vitesse max (en minutes)
local temps = 10
--local pushtodeviceIDSeb = 1323 

fibaro:debug("vitesse before = " .. VMC_Speed_Before) 

-- set Manual (locked) and full speed:
fibaro:setGlobal("VMC_Lock", "1")
fibaro:setGlobal("VMC_Speed", "Rapide")
fibaro:call(id["PHONE_SEB"], "sendPush", "VMC is now in speed 3 for " .. temps .. " minutes");
-- Activate settings and read VMC state
fibaro:call(thismodule, "pressButton", "2");
------------------ sleep XX min (temps) -------------------
fibaro:sleep(temps*60*1000)
------------------ back to speed before ----------------
fibaro:setGlobal("VMC_Speed", VMC_Speed_Before)
fibaro:setGlobal("VMC_Lock", "0") -- back to auto
-- Activate settings and read VMC state
fibaro:call(thismodule, "pressButton", "3");

Partager ce message


Lien à poster
Partager sur d’autres sites

le bouton set T° confort à18°:

--------------------------------------------------
-- RaspVMC Speed Controller
-- Control of VMC StorkAir / ComfoAir / Zehnder 
-- Sebastien Jauquet
-- Novembre 2015
--------------------------------------------------

-- Common button setup
local thismodule = fibaro:getSelfId()
local ipraspberry = fibaro:get(thismodule, 'IPAddress')
local SetTConf = "18"
local VMC = Net.FHttp(ipraspberry,80)
-- ----------------------------
-- Double click --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(thismodule, "ui."..labelId..".value")
    if (current == msg) then
        fibaro:call(thismodule, "setProperty", "ui."..labelId..".value", " ")
    	return true
    else
        fibaro:call(thismodule, "setProperty", "ui."..labelId..".value", msg)
        fibaro:sleep(secondes*1000)
        fibaro:call(thismodule, "setProperty", "ui."..labelId..".value","")
	return fibaro:getValue(thismodule, "ui."..labelId..".value") == " "
    end
end

local label_id = "maintenance"   -- l'ID du label qui recevra le message
local duree = 4                  -- la durée max entre 2 clique (en seconde)
local message = "Push again before "..duree.." seconds to confirm" -- le message de confirmation

if ( confirm(message, label_id, duree) ) then
fibaro:log("CONFIRMED !")
  
fibaro:debug("Setting VMC TConfort at: "..SetTConf)
payloademon = "/cgi-bin/VMCsetTConf.cgi?tconf=" .. SetTConf
response, status, errorCode = VMC:GET(payloademon)
	if (tonumber(status) == 200)
		then response = json.decode(response) 
		else
		fibaro:log("Error !!! Code: " .. errorCode)
	end
local Tconfort = response.data.temperature.Tconfort
fibaro:debug("Response from VMC: TConfort = "..Tconfort)
-- Update display:
fibaro:call(thismodule, "pressButton", "2");
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Hi All,

 

Sorry, I don't speak French.

So far, I've managed to install and configure raspi + Fhem. Also I added to Fibaro VD created by sebcbien. VD does communicate with raspi/VMC over server.py and cgi modules (https://github.com/jcoenencom).

 

How can I interface Netatmo readings (CO2), through variables? What's a proper way of full VD configuration?

Partager ce message


Lien à poster
Partager sur d’autres sites

Have a look in my signature, I've made a vd+php to do it.

But you should be able to retrieve the c02 values from the official netatmo plugin from Fibaro.

Sent from my Note4

Partager ce message


Lien à poster
Partager sur d’autres sites

Hi again,

 

I use Fibaro netatmo plugin. Somehow I've managed to write something like that:

 

--[[
%% autostart
%% properties
1293 value
%% events
%% globals
--]]

while true do

if
( tonumber(fibaro:getValue(1293, "value")) ~= 0 )
then
    fibaro:setGlobal("CO2_Max_Value", tonumber(fibaro:getValue(1293, "value")));
end

fibaro:debug('Wartość CO2: ' .. tonumber(fibaro:getGlobalValue("CO2_Max_Value", "value")) .. ';');
fibaro:sleep(300000);
end

 

It does update variable CO2_Max_Value but there is small problem with multiple instances of this scene. How to run it periodically and not having multiple instances??

 

Just to confirm, in general, to use this VD you created you need only 3 variables:

- CO2_Max_Value

- VMC_Speed

- VMC_Lock

 

To understand slider and Auto functionality, when its value is less than 50, VD controls VMC speed automatically (depends on CO2 level), over 50 is only manual mode and what does setpoint 50 do??

Partager ce message


Lien à poster
Partager sur d’autres sites

Hi,

I'm away, so it's difficult to re-check my code.

 

Yes I think they are the only 3 GV

 

VMC_LOCK if when you force a manual speed, so the Automatic mode (with CO2 MAX) is disabled. I use it for example when I'm away, I put the Absent mode, Because I already kown that when back home 8 hours later, the CO2 will be at the minimum value.

 

I trigger the VMC VD from my netatmo VD (so just after CO2 value has been retrieved and stored in the GV.. The netatmo VD click the slider at 50, this trigger a different action in the code (check if auto or manual before changing speed)..

Clicking the Slider over 50 set manual mode and update the vmc lock GV

Clicking the Slider less than 50 set automatic mode and update the vmc lock GV

Partager ce message


Lien à poster
Partager sur d’autres sites

Hi again,

 

Finally, I've installed your netatmo VD plus php script on raspi as I want VMC VD to control fans speed. Seems like script does its job (json viewer shows all correct data) but once I want to update netatmo VD I receive via push, error info about resExt false and other readings are as true. What could be wrong?

 

Anyway, Merry Christmas and Happy a New Year!

Partager ce message


Lien à poster
Partager sur d’autres sites

My setup is with 2 thermostat and 3 netatmo. You have to modify the script a little to match your setup

Sent from my Note4

Partager ce message


Lien à poster
Partager sur d’autres sites

Mine is regular set with rain gauge. I've tried to edit lua code by removing all mod2 and so on sections plus amended average values calculation but as I was expecting - I did fuck up ;-) 

Now I can't get anything, either on VD itself or on the phone... Seems to be overcomplicated for me, haha!

Partager ce message


Lien à poster
Partager sur d’autres sites

Not easy indeed. Reload the vd and see where it calls a module you do not have

Sent from my Note4

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Sebcbien,

 

Je dispose d'une storkair 350 luxe avec comfosense, votre travail sur la 550 est-il compatible avec ma VMC ?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Normalement oui mais tu devras utiliser la dernière version de raspvmc qui a une nouvelle architecture et qui peut permettre de garder le confosense
Je n'en ai pas et j'ai gardé l'ancienne version

Sent from my SM-N910F using Tapatalk


Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Sebcbien,

 

Tout d'abord, merci pour votre travail avec jcoenen sur bricozone.

J'ai réussi hier à connecter ma WHR930 luxe avec confosense.

J'ai bien accès en local à ma VMC via l'URL: " ipraspberry/VMC3.html "   ( lecture et changement vitesses via boutons de la page web)

Mon confosense fonctionne 

J'ai installé votre dernier VD, renseigné l'ip et le port. 

Lecture de la VMC ok quand je clic sur le bouton READ and SET.

En revanche :

      Pas de mise à jour automatique du statue de la VMC ( dois-je créer une scène qui clique sur le bouton READ and SET du VD)

      Aucune réaction de la VMC quand je clique sur un bouton changement de vitesse ou température du VD ( slider <50 ou >50) 

      Pas de relation avec ma station netatmo ( je ne vois pas où mettre l'id de mon detecteur de CO2 )

 

J'ai parcouru le code du VD et je suis perdu...

Je vois en tête de code EmonCms, j'ai créer un compte, mais il sert à quoi?

 

Merci

 

       

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @dendi53

Pour un "débutant" tu t'attaque peut être à un peu gros, j'ai partagé ce VD, mais il n'est pas prévu pour être plug-play ... et il faut le modifier pour le faire à ta "sauce" ... et donc avoir un minimum de conaissances.

Pour le CO2, c'est cette ligne là qui lit la valeur dans une VG: (CO2_Max_Value) qui est mise à jour par mon VD "YAGDA": 

local CO2_Max_Value_Local = tonumber(fibaro:getGlobalValue("CO2_Max_Value"))

Pour EMONCMS, c'est juste si tu veut envoyer les valeurs sur cette plateforme pour les analyser ensuite, rien d'obligatoire, tu peux le désactiver avec ette ligne:

local PushToEmonCMS = true -- true = push to emoncms - false = do not push

pour le refresh, je demande à mon GEA d'appuyer sur le bouton une fois que d'autres paramètres sont à jour...

 

Enfin, je devrais mettre tout ça au passé, puisque maintenant je fais tout ça avec Mon Jeedom.... Beauuuuucoup plus simple...

Extrait:

2018-07-09_22-12-08.thumb.jpg.6668c2f0a0a53a092caa13fcb8a729ab.jpg

 

et pour pousser les valeurs vers emonCMS:

2018-07-09_22-18-54.jpg.8611b746278aa928f4ece245434b680c.jpg

Un chouià plus simple... :2:

 

Avec l'ajout de 2-3 scénarios pour automatiser tout ça:

Peut être moins beau que sur Fibaro, ça dépends de chacun.

2018-07-09_22-21-50.jpg.3b1bfe00554206cc065c775d3721da14.jpg

 

Ensuite j'envoie toutes les données à ma Fibaro.

 

Tout ceci pour dire... que je ne maintiens plus le code sur Fibaro... donc si ça plante suite à des mises à jour de Fibaro, je ne serai plus là pour tester ;)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×