[LUA] [Update 2022] Qualité de l'air dans les Hauts de France
-
Chrominator
- Messages : 1042
- Inscription : 19 déc. 2015, 07:29
- Localisation : France
Re: LUA : Qualité de l'air dans les Hauts de France
Le script fonctionne toujours.
L'erreur signifie qu'il y a un souci avec la station choisie.
Est-ce que cette station affiche des résultats sur http://www.atmo-hdf.fr/acceder-aux-donn ... tions.html ?
exemple en cliquant sur la carte :
L'erreur signifie qu'il y a un souci avec la station choisie.
Est-ce que cette station affiche des résultats sur http://www.atmo-hdf.fr/acceder-aux-donn ... tions.html ?
exemple en cliquant sur la carte :
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
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 dans les Hauts de France
En complément, le nom des particules polluantes a été modifié par le site le 12/12/19 ;
De Particules (PM10) et Particules (PM2.5) on est passé maintenant à Particules PM10 et Particules PM2.5 ce qui générait l'erreur : lua:141: bad argument #2 to 'sub' (number expected, got nil).
Il faut juste remplacer le nouveau nom donné aux particules dans le script (lignes 355 et 368).
J'ai mis à jour le script du premier post avec cette mise à jour.
De Particules (PM10) et Particules (PM2.5) on est passé maintenant à Particules PM10 et Particules PM2.5 ce qui générait l'erreur : lua:141: bad argument #2 to 'sub' (number expected, got nil).
Il faut juste remplacer le nouveau nom donné aux particules dans le script (lignes 355 et 368).
J'ai mis à jour le script du premier post avec cette mise à jour.
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
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
Re: LUA : Qualité de l'air dans les Hauts de France
Merci pour cette réponse très rapide!
La station remonte bien l information (amiens) et j ai essayé avec celle de St omer qui selon le post fonctionne et me donne la même erreur
J ai mis un rafraîchissement d 1 minute et ça m affiche toujours l erreur
J ai essayé d installer le script dans le répertoire script /lua et dans l onglet événement directement dans domoticz (fonction Time)
Quelle est la meilleure façon ?
Encore merci
La station remonte bien l information (amiens) et j ai essayé avec celle de St omer qui selon le post fonctionne et me donne la même erreur
J ai mis un rafraîchissement d 1 minute et ça m affiche toujours l erreur
J ai essayé d installer le script dans le répertoire script /lua et dans l onglet événement directement dans domoticz (fonction Time)
Quelle est la meilleure façon ?
Encore merci
Re: LUA : Qualité de l'air dans les Hauts de France
Bonsoir, Meilleurs Voeux à Tous,
Merci Chrominator pour cette Mise à Jour
Après ces modifications, le script fonctionne de nouveau. (Je pensais ces derniers jours que la station était HS)
@Rito Voici ma version du script (Sous Windows)
Cdt
Bertrand
Merci Chrominator pour cette Mise à Jour
Après ces modifications, le script fonctionne de nouveau. (Je pensais ces derniers jours que la station était HS)
@Rito Voici ma version du script (Sous Windows)
Code : Tout sélectionner
--#!/usr/bin/lua https://easydomoticz.com/forum/viewtopic.php?p=68282#p68282
--[[
Script récoltant les données des polluants mesurés dans une ville des Hauts de France
Auteur : Chrominator (quelques morceaux de code viennent du script_time_qualite_air.lua et ont pour auteur papoo)
cf https://easydomoticz.com/forum/viewtopic.php?f=17&t=4044&hilit=script_time_qualite_air.lua
Version 1.0
Changes :
2017-09-09 : Initial version
2017-09-27 : Warn only in case of index change + detail of pollutant indexes sent in notification
2017-10-27 : Exit if no pollutant is available from the station
2019-04-04 : stations document moved from http to https - changed.
TODO : Convert in European Citeair indexes on demand
Ability to use several stations in order to get all pollutants.
Principe :
Récupération de la page affichant les mesures des Hauts de France http://www.atmo-hdf.fr/acceder-aux-donnees/mesures-des-stations.html
La page est téléchargée, elle contient toutes les mesures de toutes les stations
puis focus sur la station ciblée parmi les suivantes :
1134 Saint-Amand-les-Eaux
1027 Gravelines Les Huttes
1052 Gravelines Petit-Fort-Philippe
1079 Noeux-les-Mines
1114 Wattignies
1115 Lens Varsovie
1137 Boulogne-sur-Mer
1138 Lille Leeds
1539 Amiens 14 Juillet.
1536 Hirson
1541 Saint-Quentin Victor Hugo
1139 Isbergues [Aucun polluant mesuré]
1523 Arrest
1534 Beauvais Aéroport
1527 Creil
1509 Nogent sur Oise
1530 Rieux
1526 Saint-Quentin Stade
1529 Roye
1519 Salouël
1125 Saint-Laurent-Blangy
1110 Béthune Stade
1049 Outreau
1047 Sangatte
1120 Calais Berthelot
1126 Calais Parmentier
1009 Cambrai
1029 Dunkerque Port
1030 Malo-les -Bains
1038 Mardyck
1039 Loon-Plage
1118 Gravelines PC/Drire
1127 Cappelle-la-Grande
1129 Grande-Synthe
1003 Douai Theuriet
1093 Harnes
1131 Lens Stade
1007 Maubeuge
1065 Lille Fives
1073 Roubaix Serres
1067 Tourcoing
1059 Marcq-en-Baroeul
1066 Halluin
1051 Saint Omer
Chaque polluant est comparé aux seuils définissant l'indice de pollution.
1 = Très bon 10 = Très mauvais
L'indice le plus haut parmi SO² NO² O³ et PM10 procure l'indice de qualité de l'air.
]]---------------------------------------------------------------------------------------------------
--variables à modifier----------------
-- Renseigner le chemin vers votre cURL
-- OSx : à définir
if package.config:sub(1,1) == '\\' then curl = "C:/curl-7.50.3-win32-mingw/bin/curl.exe" -- Windows
else curl = "/usr/bin/curl" -- Linux
end
-- n° de la station qui mesure la qualité de l'air
-- (Voir valeur dans les commentaires ci-dessus)
local station = 1051 -- Le code de votre station sans les < >
local NO2_indice = 0
local O3_indice = 0
local PM10_indice = 0
local PM25_indice = 0
local SO2_indice = 0
local poldom = "SO2"
local laps = 3 -- Nombre d'heures au terme desquelles on ne met plus à jour domoticz (la mesure est trop ancienne).
local dz_air_quality = 1020 -- renseigner l'id du device Qualité de l'air associé si souhaité, sinon nil (custom, nom de l'axe : Atmo)
local dz_poll_dominant = nil -- renseigner l'id du device polluant dominant associé si souhaité, sinon nil (type text)
local dz_indice_alert = 1025 -- renseigner l'id du device alert pollution associé si souhaité, sinon nil (dummy - alert)
local dz_so2 = nil -- renseigner l'id du device dioxyde de soufre associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_no2 = 1022 -- renseigner l'id du device dioxyde d'azote associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_no = 1033 -- renseigner l'id du device monoxyde d'azote associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_o3 = 1024 -- renseigner l'id du device Ozone associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_pm10 = 1021 -- renseigner l'id du device taux de particules associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_pm25 = nil -- renseigner l'id du device taux de particules associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_city_name = 1023 -- renseigner l'idx du device city_name associé si souhaité, sinon nil (type text)
local send_notification = 10 -- 0: aucune notification, 1: toutes, 4: Bon, 5: Moyen, 7: Médiocre, 9: Mauvais, 10: Très mauvais
DEBUG = false
function voir_les_logs (s) -- nécessite la variable DEBUG
if DEBUG then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
-- Decode les paramètres de la station ou de la mesure
function DecodeParm(chaine, parm)
-- Renvoie la valeur du parametre
i, j = string.find(chaine, '"'..parm..'"')
k, l = string.find(chaine, ':"', j)
if k == nil then return nil end
m, n = string.find(chaine, '","', j)
if m == nil then
m, n = string.find(chaine, '"}', j)
end
return string.sub(chaine, l+1, m-1)
end
-- Recherche la mesure du polluant et renvoie les valeurs mesurées
function DecodePol(chaine, pol)
cherche='"NCON":"'..pol..'",'
-- Renvoie les informations du polluant
i, j = string.find(chaine, cherche)
k, l = string.find(chaine, '},', j)
poluant = string.sub(chaine, j, k)
-- voir_les_logs(poluant)
return DecodeParm(poluant, "J_DATE"), DecodeParm(poluant, "UNITE"), DecodeParm(poluant, "value")
end
-- Transforme les caractères unicodes en caractères lisibles.
function Unicode(chaine)
chaine = string.gsub(chaine, "\\u00e0", "à")
chaine = string.gsub(chaine, "\\u00e2", "â")
chaine = string.gsub(chaine, "\\u00e4", "ä")
chaine = string.gsub(chaine, "\\u00e7", "ç")
chaine = string.gsub(chaine, "\\u00e8", "è")
chaine = string.gsub(chaine, "\\u00e9", "é")
chaine = string.gsub(chaine, "\\u00ea", "ê")
chaine = string.gsub(chaine, "\\u00eb", "ë")
chaine = string.gsub(chaine, "\\u00ee", "î")
chaine = string.gsub(chaine, "\\u00ef", "ï")
chaine = string.gsub(chaine, "\\u00f4", "ô")
chaine = string.gsub(chaine, "\\u00f6", "ö")
chaine = string.gsub(chaine, "\\u00f9", "ù")
chaine = string.gsub(chaine, "\\u00fb", "û")
chaine = string.gsub(chaine, "\\u00fc", "ü")
return chaine
end
-- Fonction déterminant l'indice du polluant
function AttribueIndice(pol, idx)
for i=10, 1, -1 do
if tonumber(pol) <= idx[i] then
indice = i
end
end
return indice
end
-- Vérifie que la mesure n'est pas trop ancienne, pour décider de mettre à jour Domoticz ou pas.
function CheckLapse(DATE, outdated)
p="(%d+)-(%d+)-(%d+) (%d+):(%d+)"
year,month,day,hour,min=DATE:match(p)
horodatage = os.time({year=year,month=month,day=day,hour=hour,min=min})
voir_les_logs(os.date("%c", horodatage))
timelapse = os.time()-horodatage
voir_les_logs("Dernière mesure il y a "..tostring(timelapse).." secondes ("..os.date("%H", timelapse-3600).." heures "..os.date("%M", timelapse-3600).." minutes).")
if timelapse > 3600*outdated then return false
else return true
end
end
commandArray = {}
time = os.date("*t")
if time.min %15 == 0 then -- tous les 1/4 d'heure
--[[
Seuils de l’indice français Atmo
Valeurs obtenues sur http://www.atmo-hdf.fr/tout-savoir-sur-l-air/indice-de-la-qualite-de-l-air.html
--]]
-- Dioxyde de soufre (SO2)
SO2_idx = {}
SO2_idx[1]=39
SO2_idx[2]=79
SO2_idx[3]=119
SO2_idx[4]=159
SO2_idx[5]=199
SO2_idx[6]=249
SO2_idx[7]=299
SO2_idx[8]=399
SO2_idx[9]=499
SO2_idx[10]=9000
-- Poussières en suspension (PM10)
PM10_idx = {}
PM10_idx[1]=6
PM10_idx[2]=13
PM10_idx[3]=20
PM10_idx[4]=27
PM10_idx[5]=24
PM10_idx[6]=41
PM10_idx[7]=49
PM10_idx[8]=64
PM10_idx[9]=79
PM10_idx[10]=9000
-- Dioxyde d'azote (NO2)
NO2_idx = {}
NO2_idx[1]=29
NO2_idx[2]=54
NO2_idx[3]=84
NO2_idx[4]=109
NO2_idx[5]=134
NO2_idx[6]=164
NO2_idx[7]=199
NO2_idx[8]=274
NO2_idx[9]=399
NO2_idx[10]=9000
-- Ozone (0³)
O3_idx = {}
O3_idx[1]=24
O3_idx[2]=54
O3_idx[3]=79
O3_idx[4]=104
O3_idx[5]=129
O3_idx[6]=149
O3_idx[7]=179
O3_idx[8]=209
O3_idx[9]=239
O3_idx[10]=9000
-- Indice Atmo
Atmo = {}
Atmo[0]='0 - N/D'
Atmo[1]='1 - Très bon'
Atmo[2]='2 - Très bon'
Atmo[3]='3 - Bon'
Atmo[4]='4 - Bon'
Atmo[5]='5 - Moyen'
Atmo[6]='6 - Médiocre'
Atmo[7]='7 - Médiocre'
Atmo[8]='8 - Mauvais'
Atmo[9]='9 - Mauvais'
Atmo[10]='10 - Très Mauvais'
local atmo=assert(io.popen(curl..' "https://www.atmo-hdf.fr/acceder-aux-donnees/mesures-des-stations.html"'))
local InfoAtmo = atmo:read('*all')
atmo:close()
i, j = string.find(InfoAtmo, '"NSIT":"'..station..'"')
-- Si la station a bien été trouvée on continue, sinon fin de traitement
--
if i ~= 0 then
k, l = string.find(InfoAtmo, ',{', j)
site=string.sub(InfoAtmo, i, k-1)
-- Recherche des mesures de la station en question et réduction à ce périmètre.
i, j = string.find(site, '"MESURE"')
k, l = string.find(site, '}}')
mesure = string.sub(site, i, k)
LibelleSite = Unicode(DecodeParm(site, 'ISIT'))
Longi = DecodeParm(site, 'LONGI')
Lati = DecodeParm(site, 'LATI')
-- Récupère la liste des poluants mesurés
-- Toutes les stations ne mesurent pas tous les poluants
nopol = DecodeParm(site, "NOPOL")
if nopol == nil then voir_les_logs("Aucun poluant n'est mesuré sur cette station - Fin du programme")
else
voir_les_logs("Station : "..LibelleSite)
voir_les_logs("Longitude : "..Longi)
voir_les_logs("Latitude : "..Lati)
-- voir_les_logs(mesure)
if dz_city_name ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_city_name ..'|0|'.. LibelleSite} end
-- Dioxyde de soufre, SO2
if string.find(nopol, "01") ~= nil then
SO2J_DATE, SO2unite, SO2 = DecodePol(mesure, "Dioxyde de soufre")
voir_les_logs("Dernière mesure : "..SO2J_DATE)
voir_les_logs("Unité "..SO2unite)
voir_les_logs("Mesure : "..SO2)
if dz_so2 ~= nil and CheckLapse(SO2J_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_so2 ..'|0|'.. SO2} end
SO2_indice = AttribueIndice(SO2, SO2_idx)
voir_les_logs("indice SO2 :"..SO2_indice)
end
-- Dioxyde d'azote NO2
if string.find(nopol, "03") ~= nil then
NO2J_DATE, NO2unite, NO2 = DecodePol(mesure, "Dioxyde d'azote")
voir_les_logs("Dernière mesure : "..NO2J_DATE)
voir_les_logs("Unité "..NO2unite)
voir_les_logs("Mesure : "..NO2)
if dz_no2 ~= nil and CheckLapse(NO2J_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_no2 ..'|0|'.. NO2} end
NO2_indice = AttribueIndice(NO2, NO2_idx)
voir_les_logs("indice NO2="..NO2_indice)
if SO2_indice < NO2_indice then poldom = "NO2" end
end
-- Monoxyde d'azote NO
if string.find(nopol, "02") ~= nil then
-- voir_les_logs(mesure)
NOJ_DATE, NOunite, NO = DecodePol(mesure, "Monoxyde d'azote")
voir_les_logs("Dernière mesure : "..NOJ_DATE)
voir_les_logs("Unité "..NOunite)
voir_les_logs("Mesure : "..NO)
if dz_no ~= nil and CheckLapse(NOJ_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_no ..'|0|'.. NO} end
end
-- Ozone O3
if string.find(nopol, "08") ~= nil then
O3J_DATE, O3unite, O3 = DecodePol(mesure, "Ozone")
voir_les_logs("Dernière mesure : "..O3J_DATE)
voir_les_logs("Unité "..O3unite)
voir_les_logs("Mesure : "..O3)
if dz_o3 ~= nil and CheckLapse(O3J_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_o3 ..'|0|'.. O3} end
O3_indice = AttribueIndice(O3, O3_idx)
voir_les_logs("indice O³="..O3_indice)
if math.max(SO2_indice, NO2_indice) < O3_indice then poldom = "O³" end
end
-- Particules (PM10)
if string.find(nopol, "24") ~= nil then
PM10J_DATE, PM10unite, PM10 = DecodePol(mesure, "Particules PM10")
voir_les_logs("Dernière mesure : "..PM10J_DATE)
voir_les_logs("Unité "..PM10unite)
voir_les_logs("Mesure : "..PM10)
if dz_pm10 ~= nil and CheckLapse(PM10J_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm10 ..'|0|'.. PM10} end
PM10_indice = AttribueIndice(PM10, PM10_idx)
voir_les_logs("indice PM10="..PM10_indice)
if math.max(SO2_indice, NO2_indice, O3_indice) < PM10_indice then poldom = "PM10" end
end
-- Particules (PM2.5)
if string.find(nopol, "39") ~= nil then
PM25J_DATE, PM25unite, PM25 = DecodePol(mesure, "Particules PM2.5")
voir_les_logs("Dernière mesure : "..PM25J_DATE)
voir_les_logs("Unité "..PM25unite)
voir_les_logs("Mesure : "..PM25)
if dz_pm25 ~= nil and CheckLapse(PM25J_DATE, laps) then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_pm25 ..'|0|'.. PM25} end
end
-- L'indice de qualité de l'air prends la valeur de l'indice le plus défavorable.
local air_quality = math.max(NO2_indice, O3_indice, PM10_indice, SO2_indice)
voir_les_logs("Qualité Air = "..air_quality)
voir_les_logs("Poluant dominant : "..poldom)
if dz_air_quality ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_air_quality ..'|0|'.. air_quality} end
if dz_poll_dominant ~= nil then commandArray[#commandArray+1] = {['UpdateDevice'] = dz_poll_dominant ..'|0|'.. poldom} end
if uservariables['Atmo_indice'] ~= tostring(air_quality) then
commandArray['Variable:Atmo_indice'] = tostring(air_quality)
if dz_indice_alert ~= nil then
if tonumber(air_quality) <= 2 then -- niveau 1 ou 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!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pas de pollution --- --- ---",DEBUG)
elseif tonumber(air_quality) <= 4 then -- niveau 3 ou 4
commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|2|Pollution Faible'}
if send_notification > 0 and send_notification < 3 then
commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution Faible!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pollution Faible --- --- ---",DEBUG)
elseif tonumber(air_quality) <= 5 then -- niveau 5
commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|3|Pollution Moyenne'}
if send_notification > 0 and send_notification < 4 then
commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution Moyenne!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pollution Moyenne --- --- ---",DEBUG)
elseif tonumber(air_quality) <= 7 then -- niveau 6 ou 7
commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|3|Pollution Forte'}
if send_notification > 0 and send_notification < 5 then
commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution Forte!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pollution Forte --- --- ---",DEBUG)
elseif tonumber(air_quality) <= 9 then -- niveau 8 ou 9
commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|3|Pollution très Forte'}
if send_notification > 0 and send_notification < 6 then
commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution très Forte!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pollution très Forte --- --- ---",DEBUG)
elseif tonumber(air_quality) > 9 then -- niveau 10
commandArray[#commandArray+1] = {['UpdateDevice'] = dz_indice_alert..'|4|Pollution extrèmement forte'}
if send_notification > 0 and send_notification < 7 then
commandArray[#commandArray+1] = {['SendNotification'] = 'Alerte Pollution#Pollution extrèmement forte!<br><br>Indice Atmo : '..Atmo[air_quality]..'<br>Poluant dominant : '..poldom..'<br><br>Indice NO2 : '..Atmo[NO2_indice]..'<br>Indice o3 : '..Atmo[O3_indice]..'<br>Indice SO2 : '..Atmo[SO2_indice]..'<br>Indice PM10 : '..Atmo[PM10_indice]..'#0'}
end
voir_les_logs("--- --- --- Pollution extrèmement forte --- --- ---",DEBUG)
else
voir_les_logs("niveau non defini")
end
end
end
end
end
end
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, SOMFY RTS,Sonoff ..
Re: LUA : Qualité de l'air dans les Hauts de France
merci pour cette reponse.... qui ne résout pas le problème
pour info je suis sous raspberry pi
j ai mis la station de ST omer
mon dispositif de test ; ( créé avec DUMMY custom sensor)
idx: 145 Matériel: ATMO ID:00082145 nom : pm10 Type: General Sous-type:Custom Sensor
Donnée: 0 µg/m³
j ai du commenter la permiere ligne --#!/usr/bin/lua car ca me mettait une erreur
la je seche !
pour info je suis sous raspberry pi
j ai mis la station de ST omer
mon dispositif de test ; ( créé avec DUMMY custom sensor)
idx: 145 Matériel: ATMO ID:00082145 nom : pm10 Type: General Sous-type:Custom Sensor
Donnée: 0 µg/m³
j ai du commenter la permiere ligne --#!/usr/bin/lua car ca me mettait une erreur
la je seche !
-
Chrominator
- Messages : 1042
- Inscription : 19 déc. 2015, 07:29
- Localisation : France
Re: LUA : Qualité de l'air dans les Hauts de France
La première ligne est le shebang qui identifie explicitement le binaire de l’interpréteur du script, LUA dans notre cas.
Pas grave de le mettre en commentaire avec Domoticz qui s'en sortira quand même.
Bien sûr ce script est de type time, donc il faut le nommer script_time_q_air.lua par exemple et le placer dans le répertoire ~/domoticz/scripts/lua.
A propos de ton erreur, il me faudrait plus d'éléments car même en testant mon script avec la station 1539 d'Amiens 14 juillet je n'ai aucune erreur.
Au passage, cette station ne mesure que les particules les plus fines PM 2.5, il y en a une autre nommée Amiens St Pierre qui mesure beaucoup plus de polluants (ID 1535).
Je viens de remarquer que certaines stations n'existent plus par rapport à la liste d'origine.
Vérifie que celle que tu as choisi n'est pas en rouge ci-dessous :
La liste actuelle est la suivante :
1134 Saint-Amand-les-Eaux
1079 Noeux-les-Mines
1114 Wattignies
1115 Lens Varsovie
1137 Boulogne-sur-Mer
1138 Lille Leeds
1539 Amiens 14 Juillet.
1541 Saint-Quentin Victor Hugo
1139 Isbergues
1142 Saint-Pol-sur-Mer
1523 Arrest
1534 Beauvais Aéroport
1527 Creil
1509 Nogent sur Oise
1530 Rieux
1526 Saint-Quentin Stade
1529 Roye
1519 Salouël
1125 Saint-Laurent-Blangy
1110 Béthune Stade
1049 Outreau
1047 Sangatte
1120 Calais Berthelot
1126 Calais Parmentier
1030 Malo-les -Bains
1038 Mardyck
1118 Gravelines PC/Drire
1127 Cappelle-la-Grande
1129 Grande-Synthe
1003 Douai Theuriet
1093 Harnes
1007 Maubeuge
1065 Lille Fives
1073 Roubaix Serres
1059 Marcq-en-Baroeul
1066 Halluin
1132 Campagne-lès-Boulonnais
1133 Cartignies
1051 Saint-Omer
1001 Valenciennes Acacias
1006 Valenciennes Wallon
1011 Denain
1535 Amiens Saint-Pierre
1542 Beauvais Dr. Lamotte
Si malgré le choix d'une station de cette liste, tu as toujours l'erreur, pourrais-tu ajouter dans le script la ligne suivante, sous la ligne où tu as indiqué le n° de la station :
Ça devrait permettre d'obtenir quelque chose comme ce qui suit dans les log, que tu pourras poster ici pour que j'essaie d'identifier l'erreur.
Pas grave de le mettre en commentaire avec Domoticz qui s'en sortira quand même.
Bien sûr ce script est de type time, donc il faut le nommer script_time_q_air.lua par exemple et le placer dans le répertoire ~/domoticz/scripts/lua.
A propos de ton erreur, il me faudrait plus d'éléments car même en testant mon script avec la station 1539 d'Amiens 14 juillet je n'ai aucune erreur.
Au passage, cette station ne mesure que les particules les plus fines PM 2.5, il y en a une autre nommée Amiens St Pierre qui mesure beaucoup plus de polluants (ID 1535).
Je viens de remarquer que certaines stations n'existent plus par rapport à la liste d'origine.
Vérifie que celle que tu as choisi n'est pas en rouge ci-dessous :
La liste actuelle est la suivante :
1134 Saint-Amand-les-Eaux
1079 Noeux-les-Mines
1114 Wattignies
1115 Lens Varsovie
1137 Boulogne-sur-Mer
1138 Lille Leeds
1539 Amiens 14 Juillet.
1541 Saint-Quentin Victor Hugo
1139 Isbergues
1142 Saint-Pol-sur-Mer
1523 Arrest
1534 Beauvais Aéroport
1527 Creil
1509 Nogent sur Oise
1530 Rieux
1526 Saint-Quentin Stade
1529 Roye
1519 Salouël
1125 Saint-Laurent-Blangy
1110 Béthune Stade
1049 Outreau
1047 Sangatte
1120 Calais Berthelot
1126 Calais Parmentier
1030 Malo-les -Bains
1038 Mardyck
1118 Gravelines PC/Drire
1127 Cappelle-la-Grande
1129 Grande-Synthe
1003 Douai Theuriet
1093 Harnes
1007 Maubeuge
1065 Lille Fives
1073 Roubaix Serres
1059 Marcq-en-Baroeul
1066 Halluin
1132 Campagne-lès-Boulonnais
1133 Cartignies
1051 Saint-Omer
1001 Valenciennes Acacias
1006 Valenciennes Wallon
1011 Denain
1535 Amiens Saint-Pierre
1542 Beauvais Dr. Lamotte
Si malgré le choix d'une station de cette liste, tu as toujours l'erreur, pourrais-tu ajouter dans le script la ligne suivante, sous la ligne où tu as indiqué le n° de la station :
Code : Tout sélectionner
DEBUG = trueCode : Tout sélectionner
2020-01-04 09:05:02.316 var stations = [{"IDENTIFIANT":"SM_VAC","NSIT":"1134","NDEPART":"59","NINSEE":"59526","ISIT":"Saint-Amand-les-Eaux","NOM_COURT_SIT":":00000","AXE":"Centre technique municipal - ruelle des \u00e9coles","CODE_POSTAL":"59230","NO_TELEPHONE":"0629236301","NO_ZONE":null,"NO_RTC":"3","ADRESSE_IP":"185.209.141.140:80","MPST":"SUPERU","MPST1_U":null,"MPST2_U":null,"MPST3_U":null,"MPST4_U":null,"MPST5_U":null,"MPST_SU_LOCAL":null,"MPST_NOUVEAU":"SUPERU","LONGI":"3.427944608825841400","LATI":"50.456472222221780000","ALTI":"22","LAMBERTX":"677660","LAMBERTY":"2607386","NOM_GESTION":"Artois-Gohelle-Hainaut","D
2020-01-04 09:05:02.317 Status: LUA: k=23320
2020-01-04 09:05:02.317 Status: LUA: l=23321
2020-01-04 09:05:02.317 Status: LUA: Station : AMIENS Trafic
2020-01-04 09:05:02.317 Status: LUA: Longitude : 2.282472222221680400
2020-01-04 09:05:02.317 Status: LUA: Latitude : 49.877152777777326000
2020-01-04 09:05:02.317 Status: LUA: Dernière mesure : 2020-01-04 08:00
2020-01-04 09:05:02.317 Status: LUA: Unité microg\/m3
2020-01-04 09:05:02.318 Status: LUA: Mesure : 1.00
2020-01-04 09:05:02.318 Status: LUA: Sat Jan 4 08:00:00 2020
2020-01-04 09:05:02.318 Status: LUA: Dernière mesure il y a 3902 secondes (01 heures 05 minutes).
2020-01-04 09:05:02.318 Status: LUA: Qualité Air = 0
2020-01-04 09:05:02.318 Status: LUA: Poluant dominant : SO2
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
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
Re: LUA : Qualité de l'air dans les Hauts de France
Malheureusement j avais déjà mis débug=true mais rien ne remonte !
J avais mis la station de st omer étant sur qu elle fonctionne .
J ai crée la variable dans domoticz en l’an mettant en entier mais j ai essayé en chaîne et c est pareil !
J avais mis la station de st omer étant sur qu elle fonctionne .
J ai crée la variable dans domoticz en l’an mettant en entier mais j ai essayé en chaîne et c est pareil !
-
Chrominator
- Messages : 1042
- Inscription : 19 déc. 2015, 07:29
- Localisation : France
Re: LUA : Qualité de l'air dans les Hauts de France
Désolé, juste pour être sûr :rito a écrit : 04 janv. 2020, 10:28 Malheureusement j avais déjà mis débug=true mais rien ne remonte !
Si tu mets débug=true quand j'écris de mettre DEBUG = true, c'est normal qu'on ne se comprenne pas.
Il faudrait enlever les signes - qui sont devant l'appel de la fonction voir_les_logs et ajouter la fonction suivante dans le script :
Code : Tout sélectionner
function voir_les_logs (s) -- nécessite la variable DEBUG
if DEBUG then
if s ~= nil then
print (s)
else
print ("aucune valeur affichable")
end
end
end
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
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
Re: LUA : Qualité de l'air dans les Hauts de France
Mes excuses pour cette faute , j avais bien mis les espaces sans majuscule pour true ( vive la correction automatique) mais DEBUG en maj
J essaie la nouvelle fonction de debug ce soir
Encore merci pour la précieuse aide !
J essaie la nouvelle fonction de debug ce soir
Encore merci pour la précieuse aide !
Re: LUA : Qualité de l'air dans les Hauts de France
je ne comprend pas, meme en mettant
je n ai aune remontee d erreur mais toujours ce :
j ai essayé avec plsuieurs stations
je ne comprend pas !
Code : Tout sélectionner
DEBUG = true
function voir_les_logs (s) -- nécessite la variable DEBUG
if DEBUG then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>")
else
print ("<font color='#f3031d'>aucune valeur affichable</font>")
end
end
end
function voir_les_logs (s) -- nécessite la variable DEBUG
if DEBUG then
if s ~= nil then
print (s)
else
print ("aucune valeur affichable")
end
end
endCode : Tout sélectionner
2020-01-05 01:25:00.203 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_q_air.lua: /home/pi/domoticz/scripts/lua/script_time_q_air.lua:304: attempt to perform arithmetic on global 'k' (a nil value)je ne comprend pas !