Je cherche sans succes a ajouter ma sonde pm2.5 dans domoticz. J ai la gateway que je fais bien remonter mais pas la sonde. Je viens de comprendre que la sonde pm2.5 n est pas prise en charge par la passerelle xiaomi. comment faire
Merci d'avance
Code : Tout sélectionner
-- Xiaomi PM2.5.lua
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local pm = 'Xiaomi PM2.5 - Miio AQI' -- renseigner le nom du device d'origine avec valeurs en ppm
local pm25 = 239 -- renseigner l'idx du device custom sensor taux de particules
local qualite = 240 -- renseigner l'idx du device alert
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end
------------------- --------------------
---------------- Script ----------------
------------------- --------------------
commandArray = {}
now = os.date("*t")
if now.min%1 == 0 then -- Toutes les 1 minutes
val_PM25 = otherdevices_utility[pm]
val_PM25_c = arrondir(tonumber(val_PM25) / 2.9 , 1) -- conversion ppm vers µg/m3 en divisant par la masse molaire de l'air /10
print("Xiaomi PM2.5 : PM2.5 = "..val_PM25_c);
if pm25 ~= nil then
commandArray[2]={['UpdateDevice']= pm25 .. "|0|" .. val_PM25_c}
end
val_25 = arrondir(tonumber(val_PM25) / 2.9 , 1) -- conversion ppm vers µg/m3 en divisant par la masse molaire de l'air /10
if (val_25 < 23) then val_iqa = 1
elseif ( 22 < val_25) and (val_25 < 41) then val_iqa = 2
elseif ( 40 < val_25) and (val_25 < 47) then val_iqa = 3
elseif ( 46 < val_25) and (val_25 < 58) then val_iqa = 4
elseif ( 57 < val_25) and (val_25 < 69) then val_iqa = 5
elseif ( val_25 > 68) then val_iqa = 6
end
print("Xiaomi PM2.5 : IQA = "..val_iqa)
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
if val_iqa == 1 then alert = '1'
elseif val_iqa == 2 then alert = '1'
elseif val_iqa == 3 then alert = '2'
elseif val_iqa == 4 then alert = '3'
elseif val_iqa == 5 then alert = '4'
elseif val_iqa == 6 then alert = '4'
end
-- récupération du texte qualité
recup_texte = otherdevices_svalues['Xiaomi PM2.5 - Qualité']
print("Xiaomi PM2.5 : Qualité = "..texte)
if texte ~= recup_texte then
commandArray['UpdateDevice'] = qualite..'|'..alert..'|'..texte
end
end
return commandArray

Code : Tout sélectionner
-- Xiaomi PM2.5.lua
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local pm = 'Xiaomi PM2.5 - Miio AQI' -- renseigner le nom du device d'origine avec valeurs en ppm
local pm25 = 239 -- renseigner l'idx du device custom sensor taux de particules
local qualite = 240 -- renseigner l'idx du device alert
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end
------------------- --------------------
---------------- Script ----------------
------------------- --------------------
commandArray = {}
now = os.date("*t")
if now.min%1 == 0 then -- Toutes les 1 minutes
val_PM25 = otherdevices_utility[pm]
if (val_PM25 < 51) then val_PM25_c = arrondir(tonumber((((val_PM25)-0)*(12-0))/(50-0))+0 , 1)
elseif ( 50 < val_PM25) and (val_PM25 < 101) then val_PM25_c = arrondir(tonumber((((val_PM25)-51)*(35.4-12.1))/(100-51))+12.1 , 1)
elseif ( 100 < val_PM25) and (val_PM25 < 151) then val_PM25_c = arrondir(tonumber((((val_PM25)-101)*(55.4-35.5))/(150-101))+35.5 , 1)
elseif ( 150 < val_PM25) and (val_PM25 < 201) then val_PM25_c = arrondir(tonumber((((val_PM25)-151)*(150.4-55.5))/(200-151))+55.5 , 1)
elseif ( 200 < val_PM25) and (val_PM25 < 301) then val_PM25_c = arrondir(tonumber((((val_PM25)-201)*(250.4-150.5))/(300-201))+150.5 , 1)
elseif ( 300 < val_PM25) and (val_PM25 < 401) then val_PM25_c = arrondir(tonumber((((val_PM25)-301)*(350.4-250.5))/(400-301))+250.5 , 1)
elseif ( 400 < val_PM25) and (val_PM25 < 501) then val_PM25_c = arrondir(tonumber((((val_PM25)-401)*(500.4-350.5))/(500-401))+350.5 , 1)
elseif ( val_PM25 > 501) then val_PM25_c = arrondir(tonumber(val_PM25) , 1)
end
print("Xiaomi PM2.5 : PM2.5 = "..val_PM25_c);
if pm25 ~= nil then
commandArray[2]={['UpdateDevice']= pm25 .. "|0|" .. val_PM25_c}
end
if (val_PM25_c < 23) then val_iqa = 1
elseif ( 22 < val_PM25_c) and (val_PM25_c < 41) then val_iqa = 2
elseif ( 40 < val_PM25_c) and (val_PM25_c < 47) then val_iqa = 3
elseif ( 46 < val_PM25_c) and (val_PM25_c < 58) then val_iqa = 4
elseif ( 57 < val_PM25_c) and (val_PM25_c < 69) then val_iqa = 5
elseif ( val_PM25_c > 68) then val_iqa = 6
end
print("Xiaomi PM2.5 : IQA = "..val_iqa)
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
if val_iqa == 1 then alert = '1'
elseif val_iqa == 2 then alert = '1'
elseif val_iqa == 3 then alert = '2'
elseif val_iqa == 4 then alert = '3'
elseif val_iqa == 5 then alert = '4'
elseif val_iqa == 6 then alert = '4'
end
-- récupération du texte qualité
recup_texte = otherdevices_svalues['Xiaomi PM2.5 - Qualité']
print("Xiaomi PM2.5 : Qualité = "..texte)
if texte ~= recup_texte then
commandArray['UpdateDevice'] = qualite..'|'..alert..'|'..texte
end
end
return commandArray