Il y a déjà plusieurs sujets concernant des domotisations de VMC double flux. Je ne vais revenir dessus.
Personnellement, je peux piloter ma VMC DF: OFF,ON, vitesse double et vitesse 15% (vacances).
J'avais des petits soucis d'aspiration d'air pollué dans certaines conditions de vent et évenements extérieurs... par ex, un voisin qui fait bruler n'importe quoi ou juste des retours de feux de cheminées l'hiver.
J'ai donc créé un raccord de gaine VMC (en 150mm) avec mon imprimante 3D pour y intégrer un capteur de pollution xiaomi PM2.5.
ce capteur est connecté à la jeedom par l'incontournable plugin xiaomi
Maintenant, quand il y a un évenement extérieur néfaste, la VMC se coupe 58min et refait un test au bout de 1h (histoire de ventiler le conduit).
ci-joint le fichier pour l'imprimante 3D.
https://www.thingiverse.com/thing:3849215
Pour ceux qui n'ont pas d'imprimante, vous pouvez aussi juste acheter un raccord et y découper un carré de la taille du capteur xiaomi...
bons bricolages
Pour ceux qui veulent baisser le cout, vous pouvez aussi programmer un pizero avec un capteur BM680 qui envoie les infos à la jeedom.
J'ai essayé mais je ne suis pas satisfait des résultats. le BM680 renvoie des valeurs difficilement exploitables et sa mesure devient stable après 24h...
le lien du capteur BM680: https://shop.pimoroni.com/products/bme680-breakout
Si ca interesse quelqu'un, ci-joint le programme en python (programme existant que j'ai légèrement modifié pour envoyer la valeure via API http)
Code : Tout sélectionner
#!/usr/bin/env python
import bme680
import time
import urllib2
print("""indoor-air-quality.py - Estimates indoor air quality.
Runs the sensor for a burn-in period, then uses a
combination of relative humidity and gas resistance
to estimate indoor air quality as a percentage.
Press Ctrl+C to exit!
""")
try:
sensor = bme680.BME680(bme680.I2C_ADDR_PRIMARY)
except IOError:
sensor = bme680.BME680(bme680.I2C_ADDR_SECONDARY)
# These oversampling settings can be tweaked to
# change the balance between accuracy and noise in
# the data.
sensor.set_humidity_oversample(bme680.OS_2X)
sensor.set_pressure_oversample(bme680.OS_4X)
sensor.set_temperature_oversample(bme680.OS_8X)
sensor.set_filter(bme680.FILTER_SIZE_3)
sensor.set_gas_status(bme680.ENABLE_GAS_MEAS)
sensor.set_gas_heater_temperature(320)
sensor.set_gas_heater_duration(150)
sensor.select_gas_heater_profile(0)
# start_time and curr_time ensure that the
# burn_in_time (in seconds) is kept track of.
start_time = time.time()
curr_time = time.time()
burn_in_time = 300
burn_in_data = []
try:
# Collect gas resistance burn-in values, then use the average
# of the last 50 values to set the upper limit for calculating
# gas_baseline.
print('Collecting gas resistance burn-in data for 5 mins\n')
while curr_time - start_time < burn_in_time:
curr_time = time.time()
if sensor.get_sensor_data() and sensor.data.heat_stable:
gas = sensor.data.gas_resistance
burn_in_data.append(gas)
print('Gas: {0} Ohms'.format(gas))
time.sleep(1)
gas_baseline = sum(burn_in_data[-50:]) / 50.0
# Set the humidity baseline to 40%, an optimal indoor humidity.
hum_baseline = 40.0
# This sets the balance between humidity and gas reading in the
# calculation of air_quality_score (25:75, humidity:gas)
hum_weighting = 0.25
print('Gas baseline: {0} Ohms, humidity baseline: {1:.2f} %RH\n'.format(
gas_baseline,
hum_baseline))
while True:
if sensor.get_sensor_data() and sensor.data.heat_stable:
gas = sensor.data.gas_resistance
gas_offset = gas_baseline - gas
hum = sensor.data.humidity
hum_offset = hum - hum_baseline
# Calculate hum_score as the distance from the hum_baseline.
if hum_offset > 0:
hum_score = (100 - hum_baseline - hum_offset)
hum_score /= (100 - hum_baseline)
hum_score *= (hum_weighting * 100)
else:
hum_score = (hum_baseline + hum_offset)
hum_score /= hum_baseline
hum_score *= (hum_weighting * 100)
# Calculate gas_score as the distance from the gas_baseline.
if gas_offset > 0:
gas_score = (gas / gas_baseline)
gas_score *= (100 - (hum_weighting * 100))
else:
gas_score = 100 - (hum_weighting * 100)
# Calculate air_quality_score.
air_quality_score = hum_score + gas_score
print('Gas score: {0:.2f} Ohms,humidity: {1:.2f} %RH,air quality: {2:.2f}'.format(
hum,
air_quality_score))
#remplacer les xxxx par les valeurs requises
url1 = "https://api.eedomus.com/set?api_user=xxxx&api_secret=xxxx&action=periph.value&periph_id=xxxx&value=%s" % gas_score
url2 = "https://api.eedomus.com/set?api_user=xxxx&api_secret=xxxx&action=periph.value&periph_id=xxxx&value=%s" % hum
url3 = "https://api.eedomus.com/set?api_user=xxxx&api_secret=xxxx&action=periph.value&periph_id=xxxx&value=%s" % air_quality_score
response1 = urllib2.urlopen(url1)
html = response1.read()
response2 = urllib2.urlopen(url2)
html = response2.read()
response3 = urllib2.urlopen(url3)
html = response3.read()
time.sleep(30)
except KeyboardInterrupt:
pass