[LUA] Qualité de l’air dans le monde

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.
Elfnoir
Messages : 13
Inscription : 11 avr. 2015, 09:40

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

Message par Elfnoir »

Moi en tout cas, débutant en tout, je ne ferais aucun commentaires...à part Merci, le script fonctionne :-D
Ma petite femme pourra recevoir un message tous les matins où elle va bosser pour savoir comment est la pollution sur Paris!
ebretteville
Messages : 79
Inscription : 08 févr. 2016, 23:06
Localisation : Cherbourg - Caen | France
Contact :

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

Message par ebretteville »

Rien à dire, c'est tout à fait ce que je cherchais, avant peut-être de me faire un capteur type mysensors.org. En plus, une station de ce nouveau site a deux pas de la maison. Nickel! Et bravo pour la facilité d emise en oeuvre.
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

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

Message par totof60 »

Merci le script fonctionne parfaitement

J'allais dire dommage qu'il n'y ai pas de station proche de chez moi, mais finalement c'est peut être bon signe ?!

Une fonction à peut être rajouter c'est le nom et lieu de la station qui donne les infos lorsqu'on est en mode "détection" géo automatique
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
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

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

Message par totof60 »

Une petite amélioration du script ; indication de la station qui relève les données

On peut se rendre compte où est la station la plus proche ... la mienne est à plus de 100 Km :(

On rajoute une ligne pour le nouveau device

Code : Tout sélectionner

local dz_city_name = nil         -- renseigner l'idx du device city_name associé si souhaité, sinon nil (type text)
et deux lignes pour récupérer les infos

Code : Tout sélectionner

-- Mise à jour du devise city_name si il existe
      voir_les_logs("--- --- --- city_name : "..jsonValeur.data.city.name.." --- --- ---",debugging) 
      if dz_city_name ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_city_name..'|0|'.. tostring(jsonValeur.data.city.name)}end 
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
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

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

Message par dokho »

Bonsoir,

Seul ombre au tableau pour moi: les stations de ma ville (Bordeaux) n'ont pas été mises à jour depuis janvier ...

Et sur le script d'origine je n'ai pas les prévisions, uniquement les données du jour (et elles ne sont dispo qu'à 11h) ...


En tout cas bravo pour ce script, ceux qui ont la chance d'avoir des stations à jour près de chez eux ont accès à une mine d'information :)
ebretteville
Messages : 79
Inscription : 08 févr. 2016, 23:06
Localisation : Cherbourg - Caen | France
Contact :

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

Message par ebretteville »

Peut-être un paramètre pour espacer les notifications, en cas d'alerte pollution c'est quasi 10 mails en 2 min ;-)

Sent from my MI MAX using Tapatalk
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

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

Message par Chrominator »

C'est vrai, la mise à jour des stations c'est un peu quand ça veut.
Mais c'est quand même un super script, bien construit et plein d'enseignements pour ceux qui veulent apprendre LUA.

Cet ajout de la station est une très bonne initiative, merci pour cette modification.
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
brd80
Messages : 16
Inscription : 22 juil. 2017, 18:21

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

Message par brd80 »

Bonjour à tous ,

je débute avec Domoticz et surtout Lua... et j'ai utilisé / étudié le script de Papoo.

Dans un autre projet j'utilise le site Airvisual pour récupérer la qualité de l'air, car même si il ne fournit pas l'ensemble des éléments qu'aqicn.org, il présente deux avantages à mon sens:
- avoir des mises a jour des indices beaucoup plus fréquentes (pour le moment au moins 1 x par jour)
- permettre de rechercher une station proche de votre localisation, en vous laissant définir le rayon maximal.

http://www.airvisual.com/world

L'api permet donc d'avoir accès à l'indice "qualité de l'air", au polluant principal (ainsi qu'aux relevés météo et indications de la situation de la station)
La clef gratuite pour l'utilisation de l'API permet 10 000 appels par mois!

J'ai donc modifié le script de Papoo, je pourrai le partager, mais je ne voudrai pas que son auteur le prenne mal étant donné que j'ai utilisé son travail (ce qui m'a permis de faire mes premiers pas sous Lua)...

A vous de me dire ;)
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

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

Message par papoo »

aucun problème c'est à ça que cela sert. tu peux donc nous proposer ton script
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
brd80
Messages : 16
Inscription : 22 juil. 2017, 18:21

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

Message par brd80 »

ok, voici le script adapté du code de Papoo

Code : Tout sélectionner

--[[
name : script_time_qualite_air-Airviual.lua -- site Airvisual
Script original : papoo - Adptation au site Airvisual par brd80
date de création : 22/07/17
Date de mise à jour : 22/07/2017 
Principe : Ce script a pour but d'interroger l'API du site airvisual pour récupérer les informations de pollutions
Cette API utilise une clé gratuite, Il faut donc s'incrire sur http://www.airvisual.com/  pour avoir accès à cette clé
Enregistrez cette clé dans une variable utilisateur et renseignez sont nom dans token_airvisual
URL post : http://easydomoticz.com/forum/viewtopic.php?f=17&t=4044
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local nom_script = "Qualité de l\'air Airvisual"
local version = "1.00"
local debugging = false          -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local dz_air_quality = 74         -- renseigner l'idx du device Qualité de l'air associé si souhaité, sinon nil (custom, nom de l'axe : AQI)
local dz_indice_alert = 76         -- renseigner l'idx du device alert pollution associé si souhaité, sinon nil (dummy - alert)
local dz_poll_dominant = 77         -- renseigner l'idx du device polluant dominant associé si souhaité, sinon nil (type text)
local send_notification = 0       -- 0: aucune notification, 1: toutes, 2: (50 > Pollution <=100), 3: (100 > Pollution <=150), 4: (150 > Pollution <=200), 5: (Pollution > 200)
local token_airvisual = "airvisual"    -- renseigner l'idx de la variable contenant le token aqicn de 40 caractères préalablement créé (variable de type chaine)
local dz_city_name = 75         -- renseigner l'idx du device city_name associé si souhaité, sinon nil (type text)
--[[ 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 = "48.888237"          -- renseigner la latitude du lieu dont vous souhaitez remonter les informations de pollution ex : "45.84"
local longitude = "2.686930"        -- renseigner la longitude du lieu dont vous souhaitez remonter les informations de pollution ex : "1.26"
local distance = "30" -- Distance de rayon maximale en kilomètres pour la recherche par rapport à votre localisation  
--------------------------------------------
----------- 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 = 'lat='.. latitude ..'&lon='.. longitude..'&rad='.. distance 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) % 30) == 0 then -- toutes les 30 minutes en commençant par xx:01
   local API_key = uservariables[token_airvisual] 
   local config=assert(io.popen('/usr/bin/curl -m5 "http://api.airvisual.com/v2/nearest_city?'.. geo ..'&key='.. API_key ..'"'))
   

   voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
    local blocjson = config:read('*all')
    config:close()
   --print (blocjson)

   local jsonValeur = json:decode(blocjson)


    
      -- Mise à jour du devise city_name si il existe
      voir_les_logs("--- --- --- city_name : ".. jsonValeur.data.city .." --- --- ---",debugging) 
      if dz_city_name ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_city_name..'|0|'.. tostring(jsonValeur.data.city) .. " (" .. jsonValeur.data.current.pollution.ts .. ")"} end
   
      -- Mise à jour du devise aqi si il existe
      voir_les_logs("--- --- --- Qualite de l\'air : ".. jsonValeur.data.current.pollution.aqius .." --- --- --- ",debugging)
      if dz_air_quality ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_air_quality..'|0|'.. tostring(jsonValeur.data.current.pollution.aqius)} end
      -- Mise à jour du devise poll_dominante si il existe
      voir_les_logs("--- --- --- polluant dominant : ".. jsonValeur.data.current.pollution.mainus .." --- --- --- ",debugging)  
      if dz_poll_dominant ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_poll_dominant..'|0|'.. tostring(jsonValeur.data.current.pollution.mainus)} end

      local aqi = jsonValeur.data.current.pollution.aqius
      --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   
   
    voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
        
end --if time

return commandArray
Répondre