Bij deze wil ik mijn vraaggestuurde MV-systeem even delen. Misschien dat mensen er ideeen uitputten of feedback voor mij hebben tbv optimaliseren ervan. Samenstelling: Orcon MVS15, Qubino Zwave 0-10v aansturing, 2x CO2 meter mh-z19 icm wemos, diverse humidity sensors in het huis en 1 PM2.5/PM10 fijnstof sensor (SDS011). Uitlezen en aansturen middels Domoticz.
In mijn nieuwbouwwoning hangt een Orcon MVS15 mechanische ventilatie (geen WTW dus). Om deze aan te sturen gebruik ik een Qubino 0-10V aansturing. 0-10V is perfect om de ventilatie tussen 0-100% te sturen. De Orcon had standaard geen 0-10v aansluiting, maar de motor was dat wel. De kabels doorgeknipt en de qubino er tussen gehangen. De originele 0-10v aansturen is nu input op de qubino zodat ik met originele wandzenders nog steeds de waardes kan inlezen en dus manual kan sturen.
De ventilatie stuur ik op 3 zaken:
1. Luchtvochtigheid in de badkamer, relatief gemeten tov de slaapkamer. Als verschil groter is dan 5%-punten gaat deze aan. Komt deze boven de 20% verschil dan ventilatie op 100% (alles ertussen een percentage). Werkt goed om de luchtvochtigheid in de badkamer op peil te houden. Als luchtvochtigheid begint af te nemen gaat de ventilatiesnelheid om vloeiende stapjes terug tbv het geluid (en noodzaak).
2. co2 sensoren, 1 in de slaapkamer en 1 in de keuken. Als deze boven 800ppm komen gaat de ventilatie aan. Bij 1300 of hoger op 100%. In de meeste gevallen met 2-3 mensen in de woonkamer blijft het niveau nog wel onder de 800-900. In de slaapkamer (waar ook afzuiging is) loopt het in de nacht langzaam op tot de 1000 en blijft dan wel op niveau door ventilatie. Ook als er visite is loopt het in de woonkamer op tot 1000, maar hoe meer er geademd wordt, des te meer de ventilatie gaat.
3. fijnstof 2.5m/10m sensor in de keuken. Komt PM10 boven de 45 ug/m3 gaat aan. Boven de 75 ug/m3 op 100%. Dit werkt eigenlijk alleen met koken waar deze sensor perfect voor is. Zodra ik ga koken (iets anders dan water), komen die niveaus op de 100. Brandt iets aan schiet deze naar 300-1000+. Goed om dan ook te ventileren.
Manueel kan ik de ventilatie ook sturen. Als ik deze manueel stuur, gaat het systeem 30 minuten niet meer automatisch sturen (had vaak genoeg dat ik ventilatie wat hoger zetten en dan binnen paar tellen deze automatisch weer terug ging of andersom)
In de nacht is maximale ventilatie 50% ivm het geluid.
Hier de Domoticz / LUA code:
Lua:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
| function changedsince(device)
t1 = os.time()
ts = otherdevices_lastupdate[device]
year = string.sub(ts, 1, 4)
month = string.sub(ts, 6, 7)
day = string.sub(ts, 9, 10)
hour = string.sub(ts, 12, 13)
minutes = string.sub(ts, 15, 16)
seconds = string.sub(ts, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difftime=(os.difftime(t1,t2))
return difftime
end
commandArray = {}
if ((devicechanged['Badkamer Xiaomi'] or devicechanged['Slaapkamer'] or devicechanged['co2sensor Woonkamer'] or devicechanged['co2sensor Slaapkamer'] or devicechanged['Ventilatie']) and changedsince('BadkamerButton') > 1800 and changedsince('Ventilatie') > 2 and (uservariables['FanManual'] == '0' or changedsince('Ventilatie') > 1800) ) then
lower_hum_threshold = 5
upper_hum_threshold = 20
lower_co2_threshold = 800
upper_co2_threshold = 1300
lower_fijnstof_threshold = 45
upper_fijnstof_threshold = 75
perc_low = 18
perc_high = 95
hour = os.date("*t").hour
badkamer_hum = tonumber(otherdevices_humidity['Badkamer Xiaomi'])
slaapkamer_hum = tonumber(otherdevices_humidity['Slaapkamer'])
woonkamer_co2 = tonumber(otherdevices_svalues['co2sensor Woonkamer']:match("([^;]+)"))
slaapkamer_co2 = tonumber(otherdevices_svalues['co2sensor Slaapkamer']:match("([^;]+)"))
woonkamer_fijnstof = tonumber(otherdevices_svalues['Fijnstof Woonkamer PM10']:match("([^;]+)"))
ventilatie = tonumber(otherdevices_svalues['Ventilatie']:match("([^;]+)"))
diff_hum = badkamer_hum - slaapkamer_hum
if (diff_hum < lower_hum_threshold) then
perc = perc_low
elseif (diff_hum >= upper_hum_threshold) then
perc = perc_high
else
perc = tonumber((diff_hum - lower_hum_threshold) * 100 / (upper_hum_threshold - lower_hum_threshold))
end
highest_co2 = woonkamer_co2
if (slaapkamer_co2 > highest_co2) then
highest_co2 = slaapkamer_co2
end
if (highest_co2 < lower_co2_threshold) then
perc_co2 = perc_low
elseif (highest_co2 >= upper_co2_threshold) then
perc_co2 = perc_high
else
perc_co2 = tonumber((highest_co2 - lower_co2_threshold) * 100 / (upper_co2_threshold - lower_co2_threshold))
end
if (woonkamer_fijnstof < lower_fijnstof_threshold) then
perc_fijnstof = perc_low
elseif (woonkamer_fijnstof >= upper_fijnstof_threshold) then
perc_fijnstof = perc_high
else
perc_fijnstof = tonumber((woonkamer_fijnstof - lower_fijnstof_threshold) * 100 / (upper_fijnstof_threshold - lower_fijnstof_threshold))
end
if (perc_co2 > perc) then
perc = perc_co2
end
if (perc_fijnstof > perc) then
perc = perc_fijnstof
end
perc = math.floor(perc + 0.5)
if ( perc < perc_low ) then
perc = perc_low
elseif ( perc > perc_high ) then
perc = perc_high
end
if (hour >= 0 and hour <= 6 and perc > 50) then --- Minder geluid snachts
perc = 50
end
if (perc ~= ventilatie) then
if (devicechanged['Ventilatie']) then
print('Manually changed the fan to level ' .. ventilatie)
commandArray['Variable:FanManual'] = '1'
else
print ("Ventilatie op " .. perc)
--uservariables['FanLevel'] = perc
commandArray['Ventilatie'] = 'Set Level ' .. perc
commandArray['Variable:FanManual'] = '0'
end
end
end
return commandArray |
De code en grenswaardes hebben een hoop finetuning nodig gehad.
[
Voor 6% gewijzigd door
ThinkPad op 06-07-2020 20:14
. Reden: code-tag aangepast naar code=lua voor betere syntax markering :) ]