Sinon, ça marche nickel, merci au créateur.
Par contre, le code LUA est à retravailler,
- les réglages d'IQA ont l'air un peu wtf sur les PM2.5 : IQA "moyenne" avec des PM2.5 entre 40 et 47 µg/m3. Le seuil de l'OMS est à 25 µg/m3 sur 24H (50 pour les PM10)
- Le code LUA écrase les valeurs PM si le taux de CO2 dépasse 1000 PPM
Code LUA corrigé (en intégrant les corrections pour l'update domoticz + l'interrupteur LED). La qualité de l'air se base maintenant sur l'indicateur le plus dégradé. Les seuils sont en variable si vous souhaitez les modifier
Code : Tout sélectionner
--[[
name : script_time_qualite_air_maison.lua
auteur : Stef D.
Version : 3.1
date de création : 21/12/2017
Date de mise à jour : 21/12/2017
Principe : Ce script récupère les infos de poussières du capteur SDS011 et les envoie dans les bon customs sensor.
Déduit l'indice de qualité de l'air en fonction des poussières et du CO2 en prenant en compte prioritairement le CO2.
Pilote également les LED intégrées au Air Can.
URL du projet : https://easydomoticz.com/forum/viewtopic.php?f=24&t=5520
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local pm = 'XXXX' -- renseigner le nom du device température + humidité utilisé pour l'envoie des infos poussière
local pm10 = XXX -- renseigner l'idx du device taux de particules
local pm25 = XXX -- renseigner l'idx du device taux de particules
local qualite = XXX -- renseigner l'idx du device texte
local ip_sens = 'XXX.XXX.X.XX -- renseigner l'adresse IP de la AirCan
local co2 = 'XXXX -- renseigner le nom de votre dummy sensor utilisé pour la valeur CO2
local OnOffLed = 'XXXX' -- renseigner le nom de l'interrupteur LED
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
-- Seuils concentration max :
-- PM25 / recommandation OMS : < 25 µg/m3 sur 24H (IQA = 3 / moyen)
-- PM10 / recommandation OMS : < 50 µg/m3 sur 24H (IQA = 3 / moyen)
-- CO2 : < 1000 PPM (IQA = 3 / moyen). Pas vraiment de seuil fiable : 400 PPM = normal en extérieur / 1100 PPM tolérable en intérieur / 5000 PPM limite haute pour 8H d'expositon
local Seuil1PM25 = 8
local Seui12PM25 = 13
local Seui13PM25 = 25
local Seui14PM25 = 35
local Seui15PM25 = 50
local Seuil1PM10 = 16
local Seui12PM10 = 26
local Seui13PM10 = 50
local Seui14PM10 = 70
local Seui15PM10 = 100
local Seuil1CO2 = 600
local Seui12CO2 = 800
local Seui13CO2 = 1000
local Seui14CO2 = 2000
local Seui15CO2 = 3000
--------------------------------------------
commandArray = {}
now = os.date("*t")
if now.min%3 == 0 then -- Toutes les 3 minutes
val_PM25, val_PM10, etat1= otherdevices_svalues[pm]:match("([^;]+);([^;]+)")
if pm10 ~= nil then
commandArray[1]={['UpdateDevice']= pm10 .. "|0|" .. val_PM10}
end
if pm25 ~= nil then
commandArray[2]={['UpdateDevice']= pm25 .. "|0|" .. val_PM25}
end
val_10 = tonumber(val_PM10)
val_25 = tonumber(val_PM25)
val_co2 = tonumber(otherdevices_svalues[co2])
if (val_25 > Seui15PM25) or (val_10 > Seui15PM10) or (val_co2 > Seui15CO2) then val_iqa = 6
elseif (val_25 > Seui14PM25) or (val_10 > Seui14PM10) or (val_co2 > Seui14CO2) then val_iqa = 5
elseif (val_25 > Seui13PM25) or (val_10 > Seui13PM10) or (val_co2 > Seui13CO2) then val_iqa = 4
elseif (val_25 > Seui12PM25) or (val_10 > Seui12PM10) or (val_co2 > Seui12CO2) then val_iqa = 3
elseif (val_25 > Seuil1PM25) or (val_10 > Seuil1PM10) or (val_co2 > Seuil1CO2) then val_iqa = 2
else val_iqa = 1
end
if val_iqa == 1 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,0,0,255"')
elseif val_iqa == 2 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,0,127,255"')
elseif val_iqa == 3 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,0,125,0"')
elseif val_iqa == 4 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,180,120,0"')
elseif val_iqa == 5 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,231,62,1"')
elseif val_iqa == 6 and (otherdevices[OnOffLed] == 'On') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,255,0,0"')
elseif (otherdevices[OnOffLed] == 'Off') then os.execute('curl "'..ip_sens..'/control?cmd=NeoPixelAll,0,0,0"')
end
if val_iqa == 1 then texte = 'TRES BON'
elseif val_iqa == 2 then texte = 'BON'
elseif val_iqa == 3 then texte = 'MOYEN'
elseif val_iqa == 4 then texte = 'MEDIOCRE'
elseif val_iqa == 5 then texte = 'MAUVAIS'
elseif val_iqa == 6 then texte = 'TRES MAUVAIS'
end
--print(texte)
commandArray['UpdateDevice'] = qualite..'|0|'..texte
end
return commandArray