Xiaomi PM2.5 dans dmtcz

Depuis que Domoticz intègre nativement la gateway Zigbee Xiaomi retrouvez ici un espace de discussion dedié
Répondre
irishmat33
Messages : 1
Enregistré le : 22 janv. 2017, 10:21

Xiaomi PM2.5 dans dmtcz

Message par irishmat33 » 21 mai 2018, 08:48

Bonjour

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


tekkharibo
Messages : 261
Enregistré le : 28 déc. 2017, 09:51
Localisation : Albi

Re: Xiaomi PM2.5 dans dmtcz

Message par tekkharibo » 11 juin 2018, 13:41

je pense que c'est tout simplement incompatible avec domoticz actuellement comme pas mal de produit xiaomi
ex :
le detecteur de plante est compatible via un plugin
la Xiaomi Philips Bubl n'est pas compatible
...
Projet de domotique low-cost : Mon installation MAJ 09/12/2019
Dans le doute reboot !
Si vous êtes pas loin d'Albi on peut se rencontrer pour partager

JEANLUC
Messages : 2
Enregistré le : 21 août 2018, 15:27

Re: Xiaomi PM2.5 dans dmtcz

Message par JEANLUC » 21 août 2018, 15:30

Voici le plugin pour l’intégrer
Plugin Download: https://github.com/febalci/DomoticzXiaomiPM2.5

gaeldelsart
Messages : 8
Enregistré le : 08 déc. 2018, 11:41

Re: Xiaomi PM2.5 dans dmtcz

Message par gaeldelsart » 25 mai 2019, 17:21

Bonjour à tous.

Je remercie l'auteur du programme pour intégrer l'appareil dans Domoticz. Cela fonctionne très bien, sous Windows 10 avec python 32bit installé.
Mon Xiaomi PM2.5 refusait de s'inscrire sur l'application android Xiaomi Home malgré l'avoir paramétré en chinois. Maintenant, je peux avoir les informations sur Domoticz.
Néanmoins, il est nécessaire de passer par l'application la première fois pour inscrire le code wifi dans l'appareil, même si une erreur apparaît à la fin. Le wifi sera stocké dans l'appareil, sauf si une réinitialisation est effectué.

Personnellement, j'ai utilisé un script LUA time afin, d'une part, de convertir la valeur de PPM en µg/m3, et d'autre part, afficher la qualité de l'air.
De ce fait, j'ai créé un custom sensor, et un dispositif "alert".
Ensuite, je reprend la valeurs en PPM, et je divise par 2,9. Cela correspond à la masse molaire de l'air (2,8965 g/mol) divisé par 10.

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
Image
http://www.gaeldelsart.com/easydomoticz ... i_pm25.png

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


gaeldelsart
Messages : 8
Enregistré le : 08 déc. 2018, 11:41

Re: Xiaomi PM2.5 dans dmtcz

Message par gaeldelsart » 02 juin 2019, 09:41

Bonjour,

Suite à mon message précédent, j'ai constaté que la valeur n'est pas en PPM mais en AQI, qui est un index de qualité.
De plus, la courbe de conversion n'est pas linéaire, et donc la formule que j'ai appliqué n'est pas la bonne.
Voici le tableau et la bonne formule de conversion.

Tableau AQI Chinois :

BON - AQI 0 à 50 - 0 à 12 µg/m3
MOYEN - AQI 51 à 100 - 12.1 à 35.4 µg/m3
MEDIOCRE - AQI 101 à 150 - 35.5 à 55.4 µg/m3
MAUVAIS - AQI 151 à 200 - 55.5 à 150.4 µg/m3
TRES MAUVAIS - AQI 201 à 300 - 150.5 à 250.4 µg/m3
DANGEREUX - AQI 301 à 400 - 250.5 à 350.4 µg/m3
DANGEREUX - AQI 401 à 500 - 350.5 à 500.4 µg/m3

Formule de conversion PM2.5 en µg/m3 vers AQI Chinois :

Valeurs mesurée en µg/m3 = Y
AQI = [((Y - PM min) * (AQI max - AQI min)) / (PM max - PM min)] + AQI min
Choisir la ligne en fonction de Y dans le tableau ci-dessus
AQI min et max correspond à la plage dans le tableau ci-dessus
PM min et max correspond à la plage dans le tableau ci-dessus en µg/m3

Formule de conversion AQI Chinois vers PM2.5 en µg/m3 :

Valeurs mesurée en AQI = Z
PM2.5 µg/m3 = [((Z - AQI min) * (PM max - PM min)) / (AQI max - AQI min)] + PM min
Choisir la ligne en fonction de Z dans le tableau ci-dessus
AQI min et max correspond à la plage dans le tableau ci-dessus
PM min et max correspond à la plage dans le tableau ci-dessus en µg/m3

exemple AQI=73
PM2.5 µg/m3 = [((73 - 51) * (35.4 - 12.1)) / (100 - 51)] + 12.1
AQI 73 = 22.56 µg/m3 PM2.5

Voici le code LUA Time corrigé :

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre