Erreur string

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Erreur string

Message par Wolfen38 »

Salut,

J'ai un script qui récupère des infos météo, et qui en fonction change le nom d'un inter virtuel, voila le script :

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

--------------------------------------------
----------- Variables à éditer -------------
-------------------------------------------- 
--https://api.openweathermap.org/data/2.5/onecall?lat=45.6131965&lon=5.4592937&appid=12667c7ef8ee2e467cc74691ddc052c4&lang=fr&units=metric

local api = 'xxxxxxxxxxxxxxxxxxx' -- Remplacer par votre clé API
local lat = '45.6131965' --  Remplacer par ici votre latittude
local long = '5.4592937' -- Remplacer par votre longitude

--Sélectionner le chemin vers votre fichier JSON.lua en enlevant les dé commentant  la ligne pour votre système d'exploitation

--json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
--json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Syno

--------------------------------------------
---------- Fin variables à éditer ----------
-------------------------------------------- 

commandArray = {}

time=os.time()
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')
local debug = true

--recupere les minutes
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

if minutes==20 then

  -- L'appel et l'enregistrement des prévisions dans la variable jsonValeur

  config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'&lang=fr&units=metric"'))
  blocjson = config:read('*all')
  config:close()
  jsonValeur = json:decode(blocjson)

--------------------------------------------
---- Code à modifier selon vos besoins -----
-------------------------------------------- 

    -- L'enregistrement des données souhaitées dans des variables (vous pouvez en ajouter autant que vous voulez)

    --temp = jsonValeur.current.temp
    --rose = jsonValeur.current.dew_point
    --weather = jsonValeur.current.weather[1].description
	
--<debut Essai soleil	
		if (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		commandArray['Variable:Soleil'] = '1'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour ensoleillé : '..Etat)
		else
		commandArray['Variable:Soleil'] = '0'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour couvert : '..Etat)
end

--Fin Essai soleil	

--<debut Essai météo du jour	
		if (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='pluie') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 10'
		elseif (jsonValeur.current.weather[1].description=='couvert') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='légères chutes de neige') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 40'
end

--Fin Essai Essai météo du jour
	
	if (jsonValeur.daily[1].rain) then 
	rain = jsonValeur.daily[1].rain
else
	rain = 0
end

if (jsonValeur.daily[2].rain) then 
	rain2 = jsonValeur.daily[2].rain
else
	rain2 = 0
end
	
	rain = jsonValeur.daily[1].rain
	rain2 = jsonValeur.daily[2].rain
	
	if rain ~= nil then 
	
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 10'
		
	else
	commandArray['Variable:Pluie-jour'] = '0'
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 20'
	
	end
	
	if rain2 ~= nil then 
	commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
	print(getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 10'
	else
	commandArray['Variable:Pluie-lendemain'] = '0'
	print(getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 20'
	end
	

--------------------------------------------
--------- Fin code à modifier  -------------
--------------------------------------------
end

return commandArray
Mais j'ai ce message dans les log

Code : Tout sélectionner

2022-04-05 07:20:01.472 Error: EventSystem: commandArray in script /home/pi/domoticz/scripts/lua/script_time_meteo.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}
Hier, ca fonctionnait, mais plus aujourd'hui, donc j'imagine que c'est les accents de "dégagé" qui le gène, mais je ne sais pas comment faire.

Merci.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

Ca ne doit pas être une question d'accent en fait.

J'ai l'impression que si le temps change, ca fonctionne, mais si le temps reste inchangé, j'ai l'erreur dans les logs...
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

Toujours pas trouvé de solution, et mon ami google est pas très aidant...

J'ai supprimé ce bloc, et plus d'erreur

Code : Tout sélectionner

	if rain ~= nil then 
	
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	print("Pluie du jour bis : " ..rain)
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 10'
		
	else
	commandArray['Variable:Pluie-jour'] = '0'
	print("Pluie du jour bis 2 : " ..rain)
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 20'
	
	end
Donc l'erreur est surement dans ce bloc.

Ce qui est étrange, c'est que ce bloc était présent dans le fichier et fonctionnait très bien jusqu'à hier.

Quand j'ai rajouté la partie du haut, ca fonctionnait aussi.

Et ce matin, j'ai juste rajouté 2 conditions :

Code : Tout sélectionner

		if (jsonValeur.current.weather[1].description=='peu nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='partiellement nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
Donc je vois pas pourquoi le fait de rajouter des condition en haut planterait le bas qui fonctionnait bien...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

Je ne comprends pas pourquoi tu fais des conditions pour ensuite appliquer une valeur du Json :

Code : Tout sélectionner

	if (jsonValeur.daily[1].rain) then 
	rain = jsonValeur.daily[1].rain
else
	rain = 0
end

if (jsonValeur.daily[2].rain) then 
	rain2 = jsonValeur.daily[2].rain
else
	rain2 = 0
end
	
	rain = jsonValeur.daily[1].rain
	rain2 = jsonValeur.daily[2].rain
Sinon, tu as des prints qui s'affichent dans les logs ?
Ce serait intéressant d'avoir des print() différents en fonction de chaque condition et si possible avec les valeurs des variables utilisées.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

Bah je vérifie si il y a une valeur de précipitation, car si il n'y en a pas, je dois mettre 0 sinon ca plante.

Voici les log avec des print au début :

Code : Tout sélectionner

2022-04-05 19:13:00.914 Virtualsensor: Light/Switch (Demain - pluie : 1.71mm)
2022-04-05 19:13:00.969 Virtualsensor: Light/Switch (Aujourdhui - soleil)
2022-04-05 19:13:00.888 Status: LUA: Météo du jour couvert : nuageux
2022-04-05 19:13:00.888 Status: LUA: Aujourdhui - soleil
2022-04-05 19:13:00.888 Status: LUA: Pluie du jour 2 0
2022-04-05 19:13:00.888 Status: LUA: Pluie du lendemain : 1.71
2022-04-05 19:13:00.888 Status: LUA: Pluie du jour bis : 0
2022-04-05 19:13:00.889 Status: LUA: 0
2022-04-05 19:13:00.889 Status: LUA: Demain - pluie : 1.71mm
2022-04-05 19:13:00.891 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_meteo.lua
2022-04-05 19:13:00.891 Error: EventSystem: commandArray in script /home/pi/domoticz/scripts/lua/script_time_meteo.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}
2022-04-05 19:13:01.334 Virtualsensor: Light/Switch (Aujourdhui - soleil)
2022-04-05 19:13:01.284 Status: dzVents: Info: ------ Start external script: icone-pluie-jour.lua: Device: "Aujourdhui - soleil (Virtualsensor)", Index: 404
2022-04-05 19:13:01.285 Status: dzVents: start icon 0.0
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=setused&used=true&name=Aujourdhui+-+soleil&description=&idx=404&switchtype=18&customimage=117
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: method = GET
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=command&param=renamedevice&idx=404&name=Aujourdhui+-+soleil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: method = GET
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-05 19:13:01.285 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-05 19:13:01.286 Status: dzVents: Debug: Constructed timed-command: Set Level 20
2022-04-05 19:13:01.286 Status: dzVents: Debug: Constructed timed-command: Set Level 20 NOTRIGGER
2022-04-05 19:13:01.287 Status: dzVents: Info: ------ Finished icone-pluie-jour.lua
2022-04-05 19:13:01.289 Status: dzVents: Info: ------ Start external script: icone-pluie-demain.lua: Device: "Demain - pluie : 1.71mm (Virtualsensor)", Index: 406
2022-04-05 19:13:01.290 Status: dzVents: start icon 1.71
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=setused&used=true&name=Demain+-+pluie+%3A+1.71mm&description=&idx=406&switchtype=18&customimage=116
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: method = GET
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=command&param=renamedevice&idx=406&name=Demain+-+pluie+%3A+1.71mm
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: method = GET
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-05 19:13:01.290 Status: dzVents: Debug: Constructed timed-command: Set Level 10
2022-04-05 19:13:01.290 Status: dzVents: Debug: Constructed timed-command: Set Level 10 NOTRIGGER
2022-04-05 19:13:01.292 Status: dzVents: Info: ------ Finished icone-pluie-demain.lua
et je remets le script car j'arrete pas de tenter de le modifier :

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

--------------------------------------------
----------- Variables à éditer -------------
-------------------------------------------- 
--https://api.openweathermap.org/data/2.5/onecall?lat=45.6131965&lon=5.4592937&appid=12667c7ef8ee2e467cc74691ddc052c4&lang=fr&units=metric

local api = 'xxxxxxxxxxxxxxxxxxxxx -- Remplacer par votre clé API
local lat = '45.6131965' --  Remplacer par ici votre latittude
local long = '5.4592937' -- Remplacer par votre longitude

--Sélectionner le chemin vers votre fichier JSON.lua en enlevant les dé commentant  la ligne pour votre système d'exploitation

--json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
--json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Syno

--------------------------------------------
---------- Fin variables à éditer ----------
-------------------------------------------- 

commandArray = {}

-- Récupère les IDX des widgets.
idxjour = '404'
idxdemain = '406'

time=os.time()
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')
local debug = true

--recupere les minutes
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

if minutes==13 then

  -- L'appel et l'enregistrement des prévisions dans la variable jsonValeur

  config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'&lang=fr&units=metric"'))
  blocjson = config:read('*all')
  config:close()
  jsonValeur = json:decode(blocjson)

--------------------------------------------
---- Code à modifier selon vos besoins -----
-------------------------------------------- 

    -- L'enregistrement des données souhaitées dans des variables (vous pouvez en ajouter autant que vous voulez)

    --temp = jsonValeur.current.temp
    --rose = jsonValeur.current.dew_point
    --weather = jsonValeur.current.weather[1].description
	
--<debut Essai soleil	


		if (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		commandArray['Variable:Soleil'] = '1'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour ensoleillé : '..Etat)
		else
		commandArray['Variable:Soleil'] = '0'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour couvert : '..Etat)
end

--Fin Essai soleil	

--<debut Essai météo du jour	
		if (jsonValeur.current.weather[1].description=='peu nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='partiellement nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='pluie') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 10'
		elseif (jsonValeur.current.weather[1].description=='couvert') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='nuageux') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='légères chutes de neige') then 
		print(getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 40'
end

--Fin Essai Essai météo du jour

--Récupération précipitation jour et lendemain
	
	if (jsonValeur.daily[1].rain) then 
	rain = jsonValeur.daily[1].rain
	print("Pluie du jour : " ..rain)
else
	rain = 0
	print("Pluie du jour 2 " ..rain)
end

if (jsonValeur.daily[2].rain) then 
	rain2 = jsonValeur.daily[2].rain
	print("Pluie du lendemain : " ..rain2)
else
	rain2 = 0
	print("Pluie du lendemain 2 : " ..rain2)
end
--Fin Récupération précipitation jour et lendemain


--MAJ widget précipitation jour et lendemain
	
	if rain ~= nil then 
	
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	print("Pluie du jour bis : " ..rain)
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 10'
		
	else
	commandArray['Variable:Pluie-jour'] = '0'
	print("Pluie du jour bis 2 : " ..rain)
	print(getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 20'
	
	end
	
	if rain2 ~= nil then 
	commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
	print(getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 10'
	else
	commandArray['Variable:Pluie-lendemain'] = '0'
	print(getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 20'
	end
	
--Fin MAJ widget précipitation jour et lendemain
	
	
	
	--Pluiejour = uservariables['Pluie-jour']
	--Pluielendemain = uservariables['Pluie-lendemain']
	--commandArray[#commandArray+1]={['UpdateDevice'] =idxjour..'|0|' .. tostring(Pluiejour)}
	--commandArray[#commandArray+1]={['UpdateDevice'] =idxdemain..'|0|' .. tostring(Pluielendemain)}

	

--------------------------------------------
--------- Fin code à modifier  -------------
--------------------------------------------
end

return commandArray
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

Je trouve bizarre la ligne de log à 0 :?
2022-04-05 19:13:00.888 Status: LUA: Pluie du jour bis : 0
2022-04-05 19:13:00.889 Status: LUA: 0
Si je suis ton code, ça correspondrait à la ligne
if rain ~= nil then

commandArray['Variable:Pluie-jour'] = tostring(rain)
print("Pluie du jour bis : " ..rain)
print(getDeviceName(404))
commandArray[getDeviceName(404)] ='Set Level: 10'

else
commandArray['Variable:Pluie-jour'] = '0'
print("Pluie du jour bis 2 : " ..rain)
print(getDeviceName(404))
commandArray[getDeviceName(404)] ='Set Level: 20'

end

if rain2 ~= nil then
commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
print(getDeviceName(406))
commandArray[getDeviceName(406)] ='Set Level: 10'
else
commandArray['Variable:Pluie-lendemain'] = '0'
print(getDeviceName(406))
commandArray[getDeviceName(406)] ='Set Level: 20'
end
Cela voudrait dire que getDeviceName(406) retourne 0 ce qui pourrait faire le défaut après.
Tu pourrais modifier tes print() pour éviter d'afficher seulement une valeur dont on n'est pas sur de la correspondance. Par exemple print("IDX 406 : "..getDeviceName(406))
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

Voila, j'ai précisé mes oprint, et en effet le 0 correspondait au idx406

Voila le script

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

--------------------------------------------
----------- Variables à éditer -------------
-------------------------------------------- 
--https://api.openweathermap.org/data/2.5/onecall?lat=45.6131965&lon=5.4592937&appid=12667c7ef8ee2e467cc74691ddc052c4&lang=fr&units=metric

local api = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' -- Remplacer par votre clé API
local lat = '45.6131965' --  Remplacer par ici votre latittude
local long = '5.4592937' -- Remplacer par votre longitude

--Sélectionner le chemin vers votre fichier JSON.lua en enlevant les dé commentant  la ligne pour votre système d'exploitation

--json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
--json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Syno

--------------------------------------------
---------- Fin variables à éditer ----------
-------------------------------------------- 

commandArray = {}

-- Récupère les IDX des widgets.
idxjour = '404'
idxdemain = '406'

time=os.time()
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')
local debug = true

--recupere les minutes
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

if minutes==55 then

  -- L'appel et l'enregistrement des prévisions dans la variable jsonValeur

  config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'&lang=fr&units=metric"'))
  blocjson = config:read('*all')
  config:close()
  jsonValeur = json:decode(blocjson)

--------------------------------------------
---- Code à modifier selon vos besoins -----
-------------------------------------------- 

    -- L'enregistrement des données souhaitées dans des variables (vous pouvez en ajouter autant que vous voulez)

    --temp = jsonValeur.current.temp
    --rose = jsonValeur.current.dew_point
    --weather = jsonValeur.current.weather[1].description
	
--<debut Essai soleil	


		if (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		commandArray['Variable:Soleil'] = '1'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour ensoleillé : '..Etat)
		else
		commandArray['Variable:Soleil'] = '0'
		Etat=jsonValeur.current.weather[1].description
		print('Météo du jour couvert : '..Etat)
end

--Fin Essai soleil	

--<debut Essai météo du jour	
		if (jsonValeur.current.weather[1].description=='peu nuageux') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='partiellement nuageux') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='ciel dégagé') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif (jsonValeur.current.weather[1].description=='pluie') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 10'
		elseif (jsonValeur.current.weather[1].description=='couvert') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='nuageux') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif (jsonValeur.current.weather[1].description=='légères chutes de neige') then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 40'
end

--Fin Essai Essai météo du jour

--Récupération précipitation jour et lendemain
	
	if (jsonValeur.daily[1].rain) then 
	rain = jsonValeur.daily[1].rain
	print("Pluie du jour : " ..rain)
else
	rain = 0
	print("Pluie du jour 2 : " ..rain)
end

if (jsonValeur.daily[2].rain) then 
	rain2 = jsonValeur.daily[2].rain
	print("Pluie du lendemain : " ..rain2)
else
	rain2 = 0
	print("Pluie du lendemain 2 : " ..rain2)
end
--Fin Récupération précipitation jour et lendemain


--MAJ widget précipitation jour et lendemain
	
	if rain ~= 0 then 
	
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	print("Pluie du jour bis : " ..rain)
	print("IDX 404 : "..getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 10'
		
	else
	commandArray['Variable:Pluie-jour'] = '0'
	print("Pluie du jour bis 2 : " ..rain)
	print("IDX 404 : "..getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 20'
	
	end
	
	if rain2 ~= 0 then 
	commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
	print("Pluie du lendemain bis : " ..rain2)
	print("IDX 406 : "..getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 10'
	else
	commandArray['Variable:Pluie-lendemain'] = '0'
	print("Pluie du lendemain bis 2 : " ..rain2)
	print("IDX 406 : "..getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 20'
	end
	
--Fin MAJ widget précipitation jour et lendemain
	
	
	
	--Pluiejour = uservariables['Pluie-jour']
	--Pluielendemain = uservariables['Pluie-lendemain']
	--commandArray[#commandArray+1]={['UpdateDevice'] =idxjour..'|0|' .. tostring(Pluiejour)}
	--commandArray[#commandArray+1]={['UpdateDevice'] =idxdemain..'|0|' .. tostring(Pluielendemain)}

	

--------------------------------------------
--------- Fin code à modifier  -------------
--------------------------------------------
end

return commandArray
et les log

Code : Tout sélectionner

2022-04-06 04:55:00.977 Status: LUA: Météo du jour couvert : couvert
2022-04-06 04:55:00.978 Status: LUA: IDX 591 : Aujourdhui - soleil
2022-04-06 04:55:00.978 Status: LUA: Pluie du jour : 0.49
2022-04-06 04:55:00.978 Status: LUA: Pluie du lendemain : 13.76
2022-04-06 04:55:00.978 Status: LUA: Pluie du jour bis : 0.49
2022-04-06 04:55:00.978 Status: LUA: IDX 404 : 0
2022-04-06 04:55:00.978 Status: LUA: Pluie du lendemain bis : 13.76
2022-04-06 04:55:00.978 Status: LUA: IDX 406 : Demain - pluie : 13.76mm
2022-04-06 04:55:00.978 Error: EventSystem: commandArray in script /home/pi/domoticz/scripts/lua/script_time_meteo.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}
2022-04-06 04:55:01.149 Virtualsensor: Light/Switch (Demain - pluie : 13.76mm)
2022-04-06 04:55:01.175 Virtualsensor: Light/Switch (Aujourdhui - soleil)
2022-04-06 04:55:01.482 Virtualsensor: Light/Switch (Aujourdhui - soleil)
2022-04-06 04:55:01.120 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_meteo.lua
2022-04-06 04:55:01.431 Status: dzVents: Info: ------ Start external script: icone-pluie-jour.lua: Device: "Aujourdhui - soleil (Virtualsensor)", Index: 404
2022-04-06 04:55:01.432 Status: dzVents: start icon 0.49
2022-04-06 04:55:01.432 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=setused&used=true&name=Aujourdhui+-+soleil&description=&idx=404&switchtype=18&customimage=117
2022-04-06 04:55:01.432 Status: dzVents: Debug: OpenURL: method = GET
2022-04-06 04:55:01.432 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-06 04:55:01.432 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-06 04:55:01.432 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-06 04:55:01.433 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=command&param=renamedevice&idx=404&name=Aujourdhui+-+soleil
2022-04-06 04:55:01.433 Status: dzVents: Debug: OpenURL: method = GET
2022-04-06 04:55:01.433 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-06 04:55:01.433 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-06 04:55:01.433 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-06 04:55:01.433 Status: dzVents: Debug: Constructed timed-command: Set Level 20
2022-04-06 04:55:01.433 Status: dzVents: Debug: Constructed timed-command: Set Level 20 NOTRIGGER
2022-04-06 04:55:01.434 Status: dzVents: Info: ------ Finished icone-pluie-jour.lua
2022-04-06 04:55:01.436 Status: dzVents: Info: ------ Start external script: icone-pluie-demain.lua: Device: "Demain - pluie : 13.76mm (Virtualsensor)", Index: 406
2022-04-06 04:55:01.437 Status: dzVents: start icon 13.76
2022-04-06 04:55:01.437 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=setused&used=true&name=Demain+-+pluie+%3A+13.76mm&description=&idx=406&switchtype=18&customimage=116
2022-04-06 04:55:01.437 Status: dzVents: Debug: OpenURL: method = GET
2022-04-06 04:55:01.437 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-06 04:55:01.437 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=command&param=renamedevice&idx=406&name=Demain+-+pluie+%3A+13.76mm
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: method = GET
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-06 04:55:01.438 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-06 04:55:01.438 Status: dzVents: Debug: Constructed timed-command: Set Level 10
2022-04-06 04:55:01.438 Status: dzVents: Debug: Constructed timed-command: Set Level 10 NOTRIGGER
2022-04-06 04:55:01.439 Status: dzVents: Info: ------ Finished icone-pluie-demain.lua
Outre le log d'erreur, y a rien qui fonctionne maintenant.

La météo du jour étant couvert, l'idx591 devrait etre couvert, et non pas soleil.
Et l'idx404 devrait etre un pluie 0.49

Quelle galère.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

C'est dingue, j'ai gardé que cette partie qui fonctionnait bien avant ;

Code : Tout sélectionner

--Récupération précipitation jour et lendemain
	
	if (jsonValeur.daily[1].rain) then 
	rain = jsonValeur.daily[1].rain
	print("Pluie du jour : " ..rain)
else
	rain = 0
	print("Pluie du jour 2 : " ..rain)
end

    if (jsonValeur.daily[2].rain) then 
	rain2 = jsonValeur.daily[2].rain
	print("Pluie du lendemain : " ..rain2)
else
	rain2 = 0
	print("Pluie du lendemain 2 : " ..rain2)
end
--Fin Récupération précipitation jour et lendemain


--MAJ widget précipitation jour et lendemain
	
	if rain ~= nil then 
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	print("Pluie du jour bis : " ..rain)
	print("IDX 404 : "..getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 10'
	else
	commandArray['Variable:Pluie-jour'] = '0'
	print("Pluie du jour bis 2 : " ..rain)
	print("IDX 404 : "..getDeviceName(404))
	commandArray[getDeviceName(404)] ='Set Level: 20'
	end
	
	if rain2 ~= nil then 
	commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
	print("Pluie du lendemain bis : " ..rain2)
	print("IDX 406 : "..getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 10'
	else
	commandArray['Variable:Pluie-lendemain'] = '0'
	print("Pluie du lendemain bis 2 : " ..rain2)
	print("IDX 406 : "..getDeviceName(406))
	commandArray[getDeviceName(406)] ='Set Level: 20'
	end
	
--Fin MAJ widget précipitation jour et lendemain
Sachant que le problème est sur le debut, j'ai copié la 2eme partie, coller en haut et juste remplacer les rain2 par rain et les 406 par 404, donc c'est exactement la même syntaxe, et j'ai toujours l'erreur '2022-04-06 09:27:01.536 Error: EventSystem: commandArray in script /home/pi/domoticz/scripts/lua/script_time_meteo-arrosage.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}

Je pige pas pourquoi ca bloque sur le debut du script et pas la fin alors que c'est identique...
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

J'y comprends plus rien, je viens juste de modifier le texte de mes print, et ca fonctionne... et je parle bien des textes entre "", pas des variables....

Me reste maintenant le problème avec le début du script qui fonctionne sur le même principe, mais le widget ne se met pas à jour....

Code : Tout sélectionner

--<debut Essai météo du jour	
		if weather=='peu nuageux' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif weather=='partiellement nuageux' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif weather=='ciel dégagé' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 20'
		elseif weather=='pluie' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 10'
		elseif weather=='couvert' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 30'
		elseif weather=='nuageux' then 
		commandArray[getDeviceName(591)] ='Set Level: 30'
		print("IDX 591 : "..getDeviceName(591))
		elseif weather=='légères chutes de neige' then 
		print("IDX 591 : "..getDeviceName(591))
		commandArray[getDeviceName(591)] ='Set Level: 40'
end

--Fin Essai Essai météo du jour
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

Remets nous ton script complet avec les logs correspondant.

Dans ton dernier exemple, tu remets print("IDX 591 : "..getDeviceName(591)) dans toutes les conditions. Ce n'est pas utile : Mets ce print une fois avant le If Cela te permettra de vérifier que c'est le bon widget qui sera changé. rajoute également un print pour savoir quelle est la valeur de weather.
Concernant les print() dans tes conditions, là ce serait de mettre des print(''peu nuageux'), print('partiellement nuageux'), comme ça tu sais quelle condition est remplie.
Tu peux même rajouter un else à la fin pour afficher un print('Condition non reconnue').

Plus ton débogage sera détaillé, plus tu arriveras à comprendre ce qui ce passe dans ton script.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre