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 commandArraylocal 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

Et le résultat :

