[LUA] Qualité de l'air de votre maison

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

[LUA] Qualité de l'air de votre maison

Message par totof60 »

Bonjour à tous.

stephdes nous a fait un super tuto afin de réaliser un capteur de particules chez soi
viewtopic.php?f=24&t=5412

Dans son tuto il pointe vers le site du OK Lab Stuttgart
http://luftdaten.info/fr/accueil/
Le projet très bien documenté en Français propose de réaliser un capteur de particules et de transmettre les données sur un site d'alerte.

Tellement bien documenté que je me suis empressé de commander la sonde laser pour une quinzaine d'Euro : SDS011
https://fr.aliexpress.com/af/SDS011.htm ... isViewCP=y

Je ne reviendrai pas sur la création du capteur puisque tout est documenté sur le site.
Le capteur est en fonction, et il est possible de récupérer les données en local ( certainement aussi sur l'API)

Donc voici un petit tuto et partage de mon script
Le script est basé sur celui de papoo qui signe des script tellement clairs et documentés qu'un noobs comme moi arrive à les modifier.
merci à lui .

COTE DOMOTICZ :

- Création d'un Matériel de type Dummy , capteur virtuel , type de capteur : Custom Sensor, Nom : "Qualité air maison PM10", Nom de l'axe : "µg/m3" on notera son IDX

- Création d'un Matériel de type Dummy , capteur virtuel , type de capteur : Custom Sensor, Nom : "Qualité air maison PM2.5", Nom de l'axe : "µg/m3" on notera son IDX

- Création d'un Matériel de type Dummy , capteur virtuel , type de capteur :"Alerte", Nom : "Qualité air maison PM2.5" on notera son IDX

Le script :

Code : Tout sélectionner

--[[
name : script_time_qualite_air_maison.lua
auteur : chris
Script honteusement pompé sur celui de Papoo, merci à lui 
date de création : 19/12/2017
Date de mise à jour : 19/192/2017
Principe : Ce script a pour but d'interroger le capteur de particules de la maison  pour récupérer les informations de pollution 
le capteur est basé sur le projet du OK Lab Stuttgart
URL du projet : http://luftdaten.info/fr/accueil/
URL post :http://easydomoticz.com/forum/viewtopic.php?f=17&t=5519

]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "Qualité de l\'air maison"
local version = "0.50"
local debugging = true 
local IPsensor = "192.168.0.43"   -- renseigner l'IP  du capteur de particules
local dz_pm10 = 121               -- renseigner l'idx du device taux de particules associé si souhaité, sinon nil(custom sensor) 
local dz_pm25 = 122               -- renseigner l'idx du device taux de particules associé si souhaité, sinon nil(custom sensor)
local dz_indice_alert = 123         -- renseigner l'idx du device alert pollution associé si souhaité, sinon nil (dummy - alert)
local send_notification = 2       -- 0: aucune notification, 1: toutes, 2: (50 > Pollution <=100), 3: (100 > Pollution <=150), 4: (150 > Pollution <=200), 5: (Pollution > 200)
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------

--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
-- json = (loadfile "D:\\domoticz\\scripts\\lua\\json.lua")()  -- For Windows
function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then
      if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
      else
      print ("<font color='#f3031d'>aucune valeur affichable</font>")
      end
    end
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
 now = os.date("*t")
 if now.min%10 == 0 then -- Toutes les 10 minutes

   local config=assert(io.popen('/usr/bin/curl -m5 "http://'..IPsensor..'/data.json"'))

   voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
    local blocjson = config:read('*all')
    config:close()
  -- print (blocjson)
   
   local jsonValeur = json:decode(blocjson)
   
   for valeur,i in pairs(jsonValeur.sensordatavalues) do
   
      -- Mise à jour du devise pm10 si il existe et si une valeur est disponible
     
             if dz_pm10 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm10 ..'|0|'.. tostring(jsonValeur.sensordatavalues[1].value)} 
      end   
      -- Mise à jour du devise pm25 si il existe et si une valeur est disponible
      
             if dz_pm25 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm25 ..'|0|'.. tostring(jsonValeur.sensordatavalues[2].value)} 
     end
     
 end
 local pm25 = jsonValeur.sensordatavalues[2].value
      --Mise à jour du devise aqi si il existe   
      if dz_indice_alert ~= nil then   
         if tonumber(pm25) <= 50   then -- niveau 2
            commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|1|Pas de Pollution'}
            if send_notification > 0 and send_notification < 2 then
            commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pas de Pollution!'}
            end
            voir_les_logs("--- --- --- Pas de pollution --- --- ---",debugging)

         elseif tonumber(pm25) <= 100   then -- niveau 3
            commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|2|Polution Faible'}
            if send_notification > 0 and send_notification < 3 then
            commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution Faible!'}
            end
            voir_les_logs("--- --- --- Pollution Faible --- --- ---",debugging)   

         elseif tonumber(pm25) <= 150   then -- niveau 4
            commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|3|Pollution Forte'}
            if send_notification > 0 and send_notification < 4 then
            commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution Forte!'}
            end
            voir_les_logs("--- --- --- Pollution Forte --- --- ---",debugging)     

         elseif tonumber(pm25) > 150  then -- niveau 5
            commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|4|Pollution tres forte'}
            if send_notification > 0 and send_notification < 5 then
            commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution tres forte!'}
            end
            voir_les_logs("--- --- --- Pollution très forte --- --- ---",debugging)
         else
            voir_les_logs("niveau non defini")
         end
 end
    
     
      if debugging == true then --affichage des informations disponibles en mod debugging
     pm10 = jsonValeur.sensordatavalues[1].value
     pm25 = jsonValeur.sensordatavalues[2].value
     voir_les_logs("--- --- --- pm10 : ".. pm10 .." --- --- ---",debugging)
     voir_les_logs("--- --- --- pm25 : ".. pm25 .." --- --- ---",debugging)
     end
     voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
     
end --if time
      
   


return commandArray
Dans les variables à éditer:

local debugging: true pour voir le debug dans les log sinon false
local IPsensor : on notera l'IP du capteur précédemment créé
local dz_pm10 : notez l'IDX du custom sensor précédemment créé
local dz_pm25 : notez l'IDX du custom sensor précédemment créé
local dz_indice_alert: notez l'IDX du capteur virtuel alerte précédemment créé
local send_notification: selon votre choix activez le niveau d'alerte

Le script est à mettre dans l’éditeur evenements
de type LUA et TIME
Image

Et le résultat :
Image
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: LUA: qualité de l'air de votre maison

Message par Chrominator »

Je viens de suivre ton tuto.

Merci, ça fonctionne impec. :D
Il ne me reste plus qu'à l'installer à l'extérieur.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: LUA: qualité de l'air de votre maison

Message par Chrominator »

J'ai revu un peu le script.
J'ai remplacé les seuils existants par ceux de l'indice Atmo qui prend en compte les PM10.
Les PM2.5 qui sont testées dans le script n'indiqueront probablement jamais de pollution, les seuils sont bien trop hauts.
https://www.sciencesetavenir.fr a écrit :SEUILS. Les seuils limites fixés par l'Union européenne pour la qualité de l'air sont de 40 µg par m3 pour les PM10 et de 25 µg par m3 pour les PM2,5. L'OMS recommande pour sa part de limiter l'exposition à 20µg par m3 pour les PM10 et à 10 µg par m3 pour les PM2,5. Mais les chercheurs relèvent que dans leur étude, le risque de cancer du poumon subsiste même à des concentrations inférieures aux normes européennes et qu'il augmente en fonction du niveau atteint.
https://www.sciencesetavenir.fr/sante/p ... uils_25899
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: LUA: qualité de l'air de votre maison

Message par totof60 »

Je peux malheureusement te confirmer que les seuils sont régulièrement dépassés.

Image
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
victor81
Messages : 152
Inscription : 25 juin 2017, 09:59
Localisation : Tarn

Re: LUA: qualité de l'air de votre maison

Message par victor81 »

bonjour, je viens de monter le capteur.
apparement il fonctionne car j'ai ses valeurs par le site internet.
cependant, j'ai une erraur pour les info dans domoticz:
dans les log d'erreur: " 2018-04-04 17:40:03.501 Error: EventSystem: in qualité_air_maison: [string "--[[..."]:58: attempt to index local 'jsonValeur' (a nil value)
2018-04-04 17:50:03.498 Error: EventSystem: in qualité_air_maison: [string "--[[..."]:58: attempt to index local 'jsonValeur' (a nil value)
2018-04-04 18:00:03.498 Error: EventSystem: in qualité_air_maison: [string "--[[..."]:58: attempt to index local 'jsonValeur' (a nil value)
2018-04-04 18:10:03.418 Error: EventSystem: in qualité_air_maison: [string "--[[..."]:58: attempt to index local 'jsonValeur' (a nil value)"

a votre avis, où ais je péché? :/
Rpi 3b jessie sur ssd, rflink48, domoticz 4.9700, YANA
ma presentation: https://easydomoticz.com/forum/viewtopi ... =21&t=6449
victor81
Messages : 152
Inscription : 25 juin 2017, 09:59
Localisation : Tarn

Re: LUA: qualité de l'air de votre maison

Message par victor81 »

je m'autorepond XD.
c'etait l'adresse ip qui n'etait pas bonne.... tout est relevé maintenant
merci de ce script! :)
Rpi 3b jessie sur ssd, rflink48, domoticz 4.9700, YANA
ma presentation: https://easydomoticz.com/forum/viewtopi ... =21&t=6449
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: LUA: qualité de l'air de votre maison

Message par totof60 »

;)
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: LUA: qualité de l'air de votre maison

Message par domcars0 »

Super petit script, merci beaucoup pour le partage!

Juste pour info, à ceux qui choisiraient dans domoticz des devices PPM10 et PPM25 de type "Qualité de l'air" (sous-type Voltcraft CO-20), il faut remplacer les lignes

Code : Tout sélectionner

       if dz_pm10 ~= nil then
                commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm10 ..'|0|'.. tostring(jsonValeur.sensordatavalues[1].value)}
        end
      -- Mise à jour du devise pm25 si il existe et si une valeur est disponible
        if dz_pm25 ~= nil then
                commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm25 ..'|0|'.. tostring(jsonValeur.sensordatavalues[2].value)}
        end
par

Code : Tout sélectionner

      if dz_pm10 ~= nil then
                commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm10 ..'|'.. tostring(jsonValeur.sensordatavalues[1].value)}
        end
      -- Mise à jour du devise pm25 si il existe et si une valeur est disponible
        if dz_pm25 ~= nil then
                commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm25 ..'|'.. tostring(jsonValeur.sensordatavalues[2].value)}
        end
(On enlève '|0', car ce type de device n'attend pas de valeur pour 'nvalue', voir https://www.domoticz.com/wiki/Domoticz_ ... ir_quality)
Dernière modification par domcars0 le 15 avr. 2018, 00:40, modifié 1 fois.
La liberté a un prix... celui de l'effort.
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: LUA: qualité de l'air de votre maison

Message par totof60 »

merci pour ton retour
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
Dom
Messages : 1
Inscription : 26 juil. 2018, 16:28

Re: LUA: qualité de l'air de votre maison

Message par Dom »

Bonjour,

Merci pour le Tuto

J'ai installé un Capteur de particules fines SDS011 sur un port USB de mon Raspberry PI avec Domoticz.
J'ai donc suivi le tuto mais utilisant le port USB je n'arrive pas à adapter le script pour non pas récupérer les données du capteur via le réseau mais sur le port USB.

Quelqu'un a t-il une solution ?

Merci par avance
Répondre