[LUA] [Update 2022] Qualité de l'air dans les Hauts de France

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.
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: LUA : Qualité de l'air dans les Hauts de France

Message par Chrominator »

tu as bien enlevé les paires de signes - qui mettent l'appel de cette fonction en commentaire ?

Exemple : remplacer

Code : Tout sélectionner

--	voir_les_logs(poluant)
par

Code : Tout sélectionner

	voir_les_logs(poluant)
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
rito
Messages : 25
Inscription : 21 oct. 2019, 18:30

Re: LUA : Qualité de l'air dans les Hauts de France

Message par rito »

Oui :(
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: LUA : Qualité de l'air dans les Hauts de France

Message par Chrominator »

Alors poste ton script, si ça fonctionne chez d'autres et pas chez toi il doit bien y avoir un truc différent.
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
rito
Messages : 25
Inscription : 21 oct. 2019, 18:30

Re: LUA : Qualité de l'air dans les Hauts de France

Message par rito »

voici le script que j ai modifié avec mes ID

Code : Tout sélectionner

--[[
	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.
		   2020-01-03 : Particles pollutant names changed - no parenthesis anymore since 2019-12-12.
		   
 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 
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 

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 = "D:/Tools/curl-7.55.1-win64-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 = 146         	-- renseigner l'id du device Qualité de l'air associé si souhaité, sinon nil (custom, nom de l'axe : Atmo)
local dz_poll_dominant = 147        -- renseigner l'id du device polluant dominant associé si souhaité, sinon nil (type text)
local dz_indice_alert = 148         -- 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 = nil               	-- renseigner l'id du device dioxyde d'azote associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_no = nil               	-- renseigner l'id du device monoxyde d'azote associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_o3 = nil                  	-- renseigner l'id du device Ozone associé si souhaité, sinon nil (custom, nom de l'axe : µg/m³)
local dz_pm10 = 153               	-- 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 = 155         	-- renseigner l'idx du device city_name associé si souhaité, sinon nil (type text)
local send_notification = 1       	-- 0: aucune notification, 1: toutes, 4: Bon, 5: Moyen, 7: Médiocre, 9: Mauvais, 10: Très mauvais

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
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
pour info , je suis sur raspberry pi,

Code : Tout sélectionner

curl --version
curl 7.64.0 (arm-unknown-linux-gnueabihf) libcurl/7.64.0 OpenSSL/1.1.1d zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh2/1.8.0 nghttp2/1.36.0 librtmp/2.3
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

Code : Tout sélectionner

 whereis curl
curl: /usr/bin/curl
j ai un autre scipt en lua qui fonctionne et me remonte la valeur d un compteur local, donc je ne pense pas que curl soit en cause


merci de votre aide si precieuse !
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: LUA : Qualité de l'air dans les Hauts de France

Message par Chrominator »

Je suis désolé, je n'ai pas réussi à reproduire cette erreur :
Voici la trace de ton script sur mon système :

Code : Tout sélectionner

 2020-01-09 21:40:02.572 Status: LUA: Station : Saint-Omer
2020-01-09 21:40:02.573 Status: LUA: Longitude : 2.259780494421469700
2020-01-09 21:40:02.573 Status: LUA: Latitude : 50.748224095133520000
2020-01-09 21:40:02.573 Status: LUA: ,"NOPOL":"03","UNITE":"microg\/m3","NOM_COURT_MES":"N2_SO1","NSIT":"1051","J_DATE":"2020-01-09 20:00","value":"7.90"}
2020-01-09 21:40:02.573 Status: LUA: Dernière mesure : 2020-01-09 20:00
2020-01-09 21:40:02.573 Status: LUA: Unité microg\/m3
2020-01-09 21:40:02.573 Status: LUA: Mesure : 7.90
2020-01-09 21:40:02.573 Status: LUA: indice NO2=1
2020-01-09 21:40:02.574 Status: LUA: ,"NOPOL":"02","UNITE":"microg\/m3","NOM_COURT_MES":"NO_SO1","NSIT":"1051","J_DATE":"2020-01-09 20:00","value":"1.10"}
2020-01-09 21:40:02.574 Status: LUA: Dernière mesure : 2020-01-09 20:00
2020-01-09 21:40:02.574 Status: LUA: Unité microg\/m3
2020-01-09 21:40:02.574 Status: LUA: Mesure : 1.10
2020-01-09 21:40:02.574 Status: LUA: ,"NOPOL":"08","UNITE":"microg\/m3","NOM_COURT_MES":"OZ_SO1","NSIT":"1051","J_DATE":"2020-01-09 20:00","value":"41.40"}
2020-01-09 21:40:02.574 Status: LUA: Dernière mesure : 2020-01-09 20:00
2020-01-09 21:40:02.574 Status: LUA: Unité microg\/m3
2020-01-09 21:40:02.574 Status: LUA: Mesure : 41.40
2020-01-09 21:40:02.574 Status: LUA: indice O³=2
2020-01-09 21:40:02.574 Status: LUA: ,"NOPOL":"24","UNITE":"microg\/m3","NOM_COURT_MES":":00177","NSIT":"1051","J_DATE":"2020-01-09 20:00","value":"2.90"}
2020-01-09 21:40:02.574 Status: LUA: Dernière mesure : 2020-01-09 20:00
2020-01-09 21:40:02.575 Status: LUA: Unité microg\/m3
2020-01-09 21:40:02.575 Status: LUA: Mesure : 2.90
2020-01-09 21:40:02.575 Status: LUA: indice PM10=1
2020-01-09 21:40:02.575 Status: LUA: Qualité Air = 2
2020-01-09 21:40:02.575 Status: LUA: Poluant dominant : O³
2020-01-09 21:40:02.579 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_q_air2.lua
Les widgets sont bien mis à jour.
Je ne vais pas pouvoir aider davantage.
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
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: [LUA] Qualité de l'air dans les Hauts de France

Message par balajol »

Bonjour à tous,
A priori le script est de nouveau en défaut:
Erreur_script_pollution.JPG
Erreur_script_pollution.JPG (17.83 Kio) Consulté 2133 fois
J'ai essayé Lille à la place de St Omer , toujours l'erreur.

Cdt

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 ..
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Qualité de l'air dans les Hauts de France

Message par Chrominator »

Difficile d'analyser, la ligne 141 est un commentaire dans mon script (que j'ai sans doute fait un peu évolué) et un .find dans celui posté le 3 janvier 2020.

Possible qu'à l'heure du message d'erreur, aucun polluant n'était mesuré.
Ce n'est plus le cas depuis 14h aujourd'hui.
Est-ce que ça remarche "tout seul" ?
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
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: [LUA] Qualité de l'air dans les Hauts de France

Message par balajol »

Bonsoir Chrominator,
A priori ca fait un moment qu'il ne fonctionne plus je n'avais pas eu le temps de regarder.
J' utilise normalement la dernière version avec la modif https, Elle fonctionnait le 03 Janvier 2020.
Je vais creuser un peux.
Merci de ton retour.
Cdt
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 ..
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Qualité de l'air dans les Hauts de France

Message par Chrominator »

En effet, j'avais pas remarqué que ça marchait plus depuis 5 mois chez moi ! :o
C'est la page web qui donne les informations sur les polluants, et c'est le professeur Nimbus qui l'a générée :lol:

Dans le script, vous trouverez pour chaque polluant quelques lignes comme cela :

Capture d’écran 2022-03-24 220542.png
Capture d’écran 2022-03-24 220542.png (29.17 Kio) Consulté 2096 fois
Donc au menu, remplacer :
  • Dioxyde de soufre par Dioxyde de soufre phase gazeus (oui sans le "e", Nimbus a fait une faute de frappe)
  • Dioxyde d'azote par Dioxyde d'azote phase gazeuse
  • Monoxyde d'azote par Monoxyde d'azote phase gazeuse
  • et enfin Ozone par \\t Ozone phase gazeuse (et oui, Nimbus a inséré une tabulation dans le nom de la rubrique)
Bon je ne sais pas dire si Nimbus voulait lever le doute quand à l'analyse dans l'air de substances solides ou liquides (si c'était le cas on serait très mal), mais là on sait que c'est du gaz.

Etant données les modifs qu'on a pu faire les uns et les autres dans ce script, je trouve plus simple de vous donner les moyens de modifier le vôtre, mais si vous voulez le mien, comme on dit dans la région, vous m'direz ! :lol:
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
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: [LUA] [Update 2022] Qualité de l'air dans les Hauts de France

Message par balajol »

Re,
Bien vu , fonctionne de nouveau
Merci :P
Cdt
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 ..
Répondre