LUA : Qualité de l’air dans le monde

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
ebretteville
Messages : 58
Enregistré le : 08 févr. 2016, 23:06
Localisation : Cherbourg - Caen | France
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par ebretteville » 01 nov. 2017, 17:14

Juste la ligne recommandée est cochée, ça à l'air de fonctionner!

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.


npir
Messages : 3
Enregistré le : 26 févr. 2018, 11:35

Re: LUA : Qualité de l’air dans le monde

Message par npir » 26 févr. 2018, 14:12

Bonjour et merci pour tout le travail et toutes ces informations.

J'ai mis en place le script "qualité de l'air" mais celui-ci me génère une erreur :
Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_qualite_air.lua: /home/pi/domoticz/scripts/lua/script_time_qualite_air.lua:152: attempt to index field 'h' (a nil value)

J'ai l'impression que ceci est dû au fait qu'il n'y a pas de relevé d'humidité sur la station près de chez moi. J'ai bon ? Que faudrait-il modifier pour ne plus avoir d'erreur dans les logs ?

Merci à tous

christophe2836
Messages : 190
Enregistré le : 26 déc. 2017, 22:27
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par christophe2836 » 26 févr. 2018, 18:00

Parfait !!

Mis en place sur mon domoticz en synology et simplement parfait.

Merci !!

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par papoo » 26 févr. 2018, 22:40

npir a écrit :Bonjour et merci pour tout le travail et toutes ces informations.

J'ai mis en place le script "qualité de l'air" mais celui-ci me génère une erreur :
Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_qualite_air.lua: /home/pi/domoticz/scripts/lua/script_time_qualite_air.lua:152: attempt to index field 'h' (a nil value)

J'ai l'impression que ceci est dû au fait qu'il n'y a pas de relevé d'humidité sur la station près de chez moi. J'ai bon ? Que faudrait-il modifier pour ne plus avoir d'erreur dans les logs ?

Merci à tous
passe simplement la variable local debugging à false

Code : Tout sélectionner

local debugging = false
si cela ne fonctionne toujours pas ou si tu souhaite garder les logs
commente (ajoute -- devant) les lignes 152 et 164
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

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.


npir
Messages : 3
Enregistré le : 26 févr. 2018, 11:35

Re: LUA : Qualité de l’air dans le monde

Message par npir » 03 mars 2018, 09:34

Merci beaucoup
je vais essayer le «coup des lignes» car effectivement j'aimerai ne plus avoir d'erreur avant de désactiver le debugging.

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par papoo » 03 mars 2018, 11:14

j'ai fais quelques modifs pour t’éviter d'avoir à commenter le code
il faut maintenant mettre le nom du device et non plus l'IDX

https://github.com/papo-o/domoticz_scri ... e_lair.lua
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

npir
Messages : 3
Enregistré le : 26 févr. 2018, 11:35

Re: LUA : Qualité de l’air dans le monde

Message par npir » 12 mars 2018, 12:17

Impec ! Merci !

ebretteville
Messages : 58
Enregistré le : 08 févr. 2016, 23:06
Localisation : Cherbourg - Caen | France
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par ebretteville » 11 juil. 2018, 15:42

Bonjour,

Une petite question, suite à une invalidité sur la P° de la station proche de chez moi, j'ai mis en place la version 1.1 en lieu et place de la 1.0.

De ce passage a cette version j'ai une erreur qui est apparue:

Code : Tout sélectionner

 2018-07-11 16:21:24.249 Status: LUA: <font color='#f3031d'>=========== Qualité de l'air (v1.1) ===========</font>
2018-07-11 16:21:24.250 Error: EventSystem: in Affichage pollution AQICN: [string "--[[..."]:102: attempt to concatenate global 'dz_pm25' (a nil value)
2018-07-11 16:21:25.254 Status: LUA: <font color='#f3031d'>=========== Qualité de l'air (v1.1) ===========</font>
2018-07-11 16:21:25.255 Error: EventSystem: in Affichage pollution AQICN: [string "--[[..."]:102: attempt to concatenate global 'dz_pm25' (a nil value)
2018-07-11 16:21:30.076 Error: Broadlink hardware (26) thread seems to have ended unexpectedly
Mon script:

Code : Tout sélectionner

--[[
name : script_time_qualite_air.lua
encodage UTF8 sans BOM
auteur : papoo
date de création : 06/05/2017
Date de mise à jour : 03/03/2018
Principe : Ce script a pour but d'interroger l'API du site http://http://aqicn.org pour récupérer les informations de pollutions
Cette API utilise une clé gratuite, Il faut donc s'incrire sur http://aqicn.org/data-platform/token/  pour avoir accès à cette clé de 40 caractères
Enregistrez cette clé dans une variable utilisateur et renseignez sont nom dans token_aqicn
URL site : https://pon.fr/qualite-de-lair-dans-le-monde/
URL post : https://easydomoticz.com/forum/viewtopic.php?f=17&t=4044 http://pon.fr/qualite-de-lair-dans-le-monde/
url github : https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_qualite_de_lair.lua
Les données des polluants sont au format de l'indice de qualité de l'air commun européen (AQI) http://www.airqualitynow.eu/about_indices_definition.php
--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "Qualité de l\'air"
local version = "1.1"
local debugging = true           -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local dev_air_quality = "[AQICN] Qualité air"   --28      -- renseigner le nom du device Qualité de l'air associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dev_indice_alert = "[AQICN] Alerte qualité de l'air"  -- 29      -- renseigner le nom du device alert pollution associé si souhaité, sinon nil (dummy - alert)
local dev_poll_dominant = "[AQICN] Polluant dominant"   -- 30      -- renseigner le nom du device polluant dominant associé si souhaité, sinon nil (type text)
local dev_co = "[AQICN] CO" -- 31               -- renseigner le nom du device monoxide de carbonne associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dev_no2 = "[AQICN] NO2"   -- 32               -- renseigner le nom du device dioxyde d'azote associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dev_o3 = "[AQICN] O3" -- 33               -- renseigner le nom du device Ozone associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dev_p = "[AQICN] P° atmo" -- 34               -- renseigner le nom du device pression atmosphérique  associé si souhaité, sinon nil (barometre)
local dev_pm10 = "[AQICN] PM10" -- 35            -- renseigner le nom du device taux de particules associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dev_pm25 = "[AQICN] PM25" -- 36            -- renseigner le nom du device taux de particules associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local send_notification = 3       -- 0: aucune notification, 1: toutes, 2: (50 > Pollution <=100), 3: (100 > Pollution <=150), 4: (150 > Pollution <=200), 5: (Pollution > 200)
local token_aqicn = "api_aqicn"    -- renseigner le nom de la variable contenant le token aqicn de 40 caractères préalablement créé (variable de type chaine)
--[[ si vous souhaitez une localisation via votre adresse ip laissez les variables ville, latitude, et longitude à nil
    si vous souhaitez une autre localisation utilisez la variable ville
    si votre ville comporte plusieurs stations et que vous souhaitez récupérer les informations de la station la plus proche,
    renseigner vos latitude longitude en laissant ville à nil
]]--
local ville = nil              -- renseigner le nom de la ville dont vous souhaitez remonter les informations de pollution ex : "limoges", nil si vous souhaitez utiliser Latitude et longitude (plus precis)
local latitude = 47.39519          -- renseigner la latitude du lieu dont vous souhaitez remonter les informations de pollution ex : "45.84"
local longitude = 0.70429          -- renseigner la longitude du lieu dont vous souhaitez remonter les informations de pollution ex : "1.26"

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local geo =""
if ville == nil and (latitude == nil or longitude == nil) then geo = 'here' elseif ville ~= nil then geo = ville else geo = 'geo:'.. latitude ..';'.. longitude end
--------------------------------------------
---------------- 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 = {}
time = os.date("*t")
if ((time.min-1) % 5) == 0 then -- toutes les 5 minutes en commençant par xx:01
   voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)   

    if dev_air_quality then
        dz_air_quality = otherdevices_idx[dev_air_quality]
        if dz_air_quality then voir_les_logs("--- --- --- ".. dev_air_quality .." idx : ".. dz_air_quality,debugging) end
    end
    if dev_indice_alert then
        dz_indice_alert = otherdevices_idx[dev_indice_alert]
        if dz_indice_alert then voir_les_logs("--- --- --- ".. dev_indice_alert .." idx : ".. dz_indice_alert,debugging) end
    end
    if dev_poll_dominant then
        dz_poll_dominant = otherdevices_idx[dev_poll_dominant]
        if dz_poll_dominant then voir_les_logs("--- --- --- ".. dev_poll_dominant .." idx : ".. dz_poll_dominant,debugging) end
    end
    if dev_co then
        dz_co = otherdevices_idx[dev_co]
        if dz_co then voir_les_logs("--- --- --- ".. dev_co .." idx : ".. dz_co,debugging) end
    end   
    if dev_no2 then
        dz_no2 = otherdevices_idx[dev_no2]
        if dz_no2 then voir_les_logs("--- --- --- ".. dev_no2 .." idx : ".. dz_no2,debugging) end
    end   
    if dev_o3 then
        dz_o3 = otherdevices_idx[dev_o3]
        if dz_o3 then  voir_les_logs("--- --- --- ".. dev_o3 .." idx : ".. dz_o3,debugging) end
    end   
    if dev_p then
        dz_p = otherdevices_idx[dev_p]
        if dz_p then voir_les_logs("--- --- --- ".. dev_p .." idx : ".. dz_p,debugging) end
    end
    if dev_pm10 then
        dz_pm10 = otherdevices_idx[dev_pm10]
        if dz_pm10 then voir_les_logs("--- --- --- ".. dev_pm10 .." idx : ".. dz_pm10,debugging) end
    end   
    if dev_pm25 then
        dz_pm25 = otherdevices_idx[dev_pm25]
        if dev_pm25 then voir_les_logs("--- --- --- ".. dev_pm25 .." idx : ".. dz_pm25,debugging) end
    end
   
   
   local API_key = uservariables[token_aqicn]
    voir_les_logs('--- --- --- /usr/bin/curl -m8 "https://api.waqi.info/feed/'.. geo ..'/?token='.. API_key ..'"',debugging)
   local config=assert(io.popen('/usr/bin/curl -m8 "https://api.waqi.info/feed/'.. geo ..'/?token='.. API_key ..'"'))
    local blocjson = config:read('*all')
   config:close()

   local jsonValeur = json:decode(blocjson)
    if jsonValeur then
        for valeur,i in pairs(jsonValeur.data.iaqi) do
            -- Mise à jour du devise co si il existe et si une valeur est disponible
            if valeur == 'co' then voir_les_logs("--- --- --- co : "..jsonValeur.data.iaqi.co.v .." --- --- --- ",debugging) 
                    if dz_co ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_co ..'|0|'.. tostring(jsonValeur.data.iaqi.co.v)} end
            end
            -- Mise à jour du devise no2 si il existe et si une valeur est disponible
            if valeur == 'no2' then voir_les_logs("--- --- --- no2 : "..jsonValeur.data.iaqi.no2.v .." --- --- --- ",debugging)
                    if dz_no2 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_no2 ..'|0|'.. tostring(jsonValeur.data.iaqi.no2.v)} end
            end
             -- Mise à jour du devise o3 si il existe et si une valeur est disponible
            if valeur == 'o3' then voir_les_logs("--- --- --- o3 : "..jsonValeur.data.iaqi.o3.v .." --- --- --- ",debugging)
                    if dz_o3 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_o3 ..'|0|'.. tostring(jsonValeur.data.iaqi.o3.v)} end
            end
            -- Mise à jour du devise p si il existe et si une valeur est disponible
            if valeur == 'p' then voir_les_logs("--- --- --- pression : "..jsonValeur.data.iaqi.p.v .." --- --- --- ",debugging) 
                    if dz_p ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_p ..'|0|'.. tostring(jsonValeur.data.iaqi.p.v)} end
            end   
            -- Mise à jour du devise pm10 si il existe et si une valeur est disponible
            if valeur == 'pm10' then voir_les_logs("--- --- --- pm10 : "..jsonValeur.data.iaqi.pm10.v .." --- --- --- ",debugging)
                     if dz_pm10 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm10 ..'|0|'.. tostring(jsonValeur.data.iaqi.pm10.v)} end
            end   
            -- Mise à jour du devise pm25 si il existe et si une valeur est disponible
            if valeur == 'pm25' then voir_les_logs("--- --- --- pm25 : "..jsonValeur.data.iaqi.pm25.v .." --- --- --- ",debugging) 
                    if dz_pm25 ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm25 ..'|0|'.. tostring(jsonValeur.data.iaqi.pm25.v)} end
            end

        end
    else
        print('la requete Json ne retourne aucun résultat exploitable')
    end   
      -- Mise à jour du devise aqi si il existe
      voir_les_logs("--- --- --- Qualite de l\'air : "..jsonValeur.data.aqi .." --- --- --- ",debugging)
      if dz_air_quality ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_air_quality..'|0|'.. tostring(jsonValeur.data.aqi)} end
      -- Mise à jour du devise poll_dominante si il existe
      voir_les_logs("--- --- --- polluant dominant : "..jsonValeur.data.dominentpol .." --- --- --- ",debugging) 
      if dz_poll_dominant ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_poll_dominant..'|0|'.. tostring(jsonValeur.data.dominentpol)}end

      local aqi = jsonValeur.data.aqi
      --Mise à jour du devise aqi si il existe   
      if dz_indice_alert ~= nil then   
         if tonumber(aqi) <= 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(aqi) <= 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(aqi) <= 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(aqi) > 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
   aqi = jsonValeur.data.aqi
   url = jsonValeur.data.attributions[1].url
   name = jsonValeur.data.attributions[1].name
   lat_long = jsonValeur.data.city.geo[1]..":"..jsonValeur.data.city.geo[2]
   dominentpol = jsonValeur.data.dominentpol
   city_name = jsonValeur.data.city.name
   city_url = jsonValeur.data.city.url
   local s = jsonValeur.data.time.s
   local tz = jsonValeur.data.time.tz
   local v = jsonValeur.data.time.v
   local h = jsonValeur.data.iaqi.h.v
   local t = jsonValeur.data.iaqi.t.v
   if aqi then voir_les_logs("--- --- --- aqi : ".. aqi .." --- --- ---",debugging) end
   if url then voir_les_logs("--- --- --- url : "..url .." --- --- ---",debugging) end
   if name then voir_les_logs("--- --- --- name : ".. name .." --- --- ---",debugging) end
   if lat_long then voir_les_logs("--- --- --- coordonnees gps : ".. lat_long .." --- --- ---",debugging) end
   if city_name then voir_les_logs("--- --- --- city_name : ".. city_name .." --- --- ---",debugging) end
   if city_url then voir_les_logs("--- --- --- city_url : ".. city_url .." --- --- ---",debugging) end
   if dominentpol then voir_les_logs("--- --- --- dominentpol : ".. dominentpol .." --- --- ---",debugging) end
   if s then voir_les_logs("--- --- --- date et heure :".. s .." --- --- ---",debugging) end
   if tz then voir_les_logs("--- --- --- time zone :".. tz .." --- --- ---",debugging) end
   if v then voir_les_logs("--- --- --- timestamp :".. v .." --- --- ---",debugging) end
   if h then voir_les_logs("--- --- --- hygrometrie : ".. h .." --- --- --- ",debugging) end
   if t then voir_les_logs("--- --- --- température :".. t .." --- --- --- ",debugging) end
   end
   voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
   
    
end --if time

return commandArray

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par papoo » 11 juil. 2018, 18:41

pour revenir à une version avec idx
modifie chaque ligne comportant otherdevices_idx comme l'exemple si dessous

Code : Tout sélectionner

dz_pm25 = otherdevices_idx[dev_pm25]
devient

Code : Tout sélectionner

dz_pm25 = dev_pm25
ebretteville a écrit : j'ai une erreur qui est apparue:

Code : Tout sélectionner

 2018-07-11 16:21:24.249 Status: LUA: <font color='#f3031d'>=========== Qualité de l'air (v1.1) ===========</font>
2018-07-11 16:21:24.250 Error: EventSystem: in Affichage pollution AQICN: [string "--[[..."]:102: attempt to concatenate global 'dz_pm25' (a nil value)
2018-07-11 16:21:25.254 Status: LUA: <font color='#f3031d'>=========== Qualité de l'air (v1.1) ===========</font>
2018-07-11 16:21:25.255 Error: EventSystem: in Affichage pollution AQICN: [string "--[[..."]:102: attempt to concatenate global 'dz_pm25' (a nil value)
2018-07-11 16:21:30.076 Error: Broadlink hardware (26) thread seems to have ended unexpectedly
il s'agit d'un concaténation pour l'affichage des logs, tu peux soit passer la variable debugging à false ou commenter la ligne 102 en ajoutant -- devant
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

ebretteville
Messages : 58
Enregistré le : 08 févr. 2016, 23:06
Localisation : Cherbourg - Caen | France
Contact :

Re: LUA : Qualité de l’air dans le monde

Message par ebretteville » 11 juil. 2018, 18:47

Pour les devices j'ai trouvé, j'ai mis entre guillements.

Pour le debugging = flase j'ai encore l'erreur, je tentes de le mettre à true et de commenter la ligne 102

Merci papoo

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