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

Re: Erreur string

Message par Wolfen38 »

Bon, ca fonctionne, mais je ne sais pas pourquoi....

J'ai scindé mon script en 2 scripts, que je lance à 1min d'intervalle, et ca roule....

Merci pour ton aide.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

De rien ;)
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 ca recommence sans raison...

Mon script pour météo du moment :

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=xxxxxxxxxxxxxxxxxxxxxxxxxx&lang=fr&units=metric

local api = 'xxxxxxxxxxxxxxxxxxxx' -- 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.

idxactuel = '591'

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==05 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 (weather=='ciel dégagé' or weather=='peu nuageux' or weather=='partiellement nuageux') then 
		commandArray['Variable:Soleil'] = '1'
		print('Météo du jour ensoleillé : '..weather)
		else
		commandArray['Variable:Soleil'] = '0'
		print('Météo du jour couvert : '..weather)
end

--Fin Essai soleil	

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

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


	
	
	
	--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 le log correspondant :

Code : Tout sélectionner

2022-04-11 10:05:03.066 Status: LUA: Météo du jour couvert : nuageux
2022-04-11 10:05:03.067 Status: LUA: IDX 591 : Aujourdhui - soleil
2022-04-11 10:05:03.068 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_meteo-actuelle.lua
2022-04-11 10:05:03.335 Status: dzVents: Info: ------ Start external script: icone-pluie-jour.lua: Device: "Aujourdhui - soleil (Virtualsensor)", Index: 404
2022-04-11 10:05:03.336 Status: dzVents: start icon 0.0
2022-04-11 10:05:03.336 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-11 10:05:03.336 Status: dzVents: Debug: OpenURL: method = GET
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: url = http://127.0.0.1:8080/json.htm?type=command&param=renamedevice&idx=404&name=Aujourdhui+-+soleil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: method = GET
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: post data = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: headers = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: OpenURL: callback = nil
2022-04-11 10:05:03.337 Status: dzVents: Debug: Constructed timed-command: Set Level 20
2022-04-11 10:05:03.337 Status: dzVents: Debug: Constructed timed-command: Set Level 20 NOTRIGGER
2022-04-11 10:05:03.339 Status: dzVents: Info: ------ Finished icone-pluie-jour.lua
2022-04-11 10:05:03.342 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2022-04-11 10:05:03.362 Status: EventSystem: reset all device statuses...
Je ne comprends pas pourquoi il appelle le 404, alors que dans ce script je ne joue que sur l'inter 591....

Et dans l'autre script, je me retrouve avec le retour de l'erreur '2022-04-11 09:06:01.251 Error: EventSystem: commandArray in script /home/pi/domoticz/scripts/lua/script_time_meteo-arrosage.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}'

Samedi et hier, nickel, et depuis ce matin, ca remerde, j'ai rien touché....
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

Ce ne serait pas un problème avec le Json qui ne récupèrerait pas toutes les infos ? Cela m'arrive de temps en temps qu'il n'y est pas toutes les infos, un peu comme si la fin du fichier n'avait pas finie d'être transmise. C'est le coté "aléatoire" qui me fait penser à ça.

Essaye peut-être de rajouter des conditions pour vérifier qu'il y ait bien des données avant de les envoyer.
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 »

Au début des log le print " temps couvert : nuageux" le nuageux c'est l'info récupérer par le json donc il récupère bien l'info du temps présent.

Par contre après il lance un script avec l'idx 404 qui n'a rien avoir avec le script car dans le script je ne gère que l'idx 591.

C'est ça que je ne comprends pas. Et surtout pourquoi hier c'était bon et plus aujourd'hui

Envoyé de mon Mi 9T Pro en utilisant Tapatalk

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

Re: Erreur string

Message par Keros »

Tu n'aurais pas des scripts qui se mélangent ?
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 »

Oui possible.

J'ai des script en dzvent qui modifient l'icone d'un widget, j'ai modifié celui qui gère l'icone de l'idx 591, et maintenant ca a l'air de fonctionner....
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur string

Message par Keros »

Quand je remonte la discussion, je vois qu'il y avait des essais avec l'IDX 404. Je pense que tu as ces bouts de lignes encore quelque part qui tournent.
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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Erreur string

Message par Neutrino »

Toujours mettre les variables avec 'local' dans les dzvents.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Erreur string

Message par Wolfen38 »

ca a bien fonctionner un moment et ca rebloque.

J'ai ce script pour recuperer le temps actuel :

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=xxxxxxxxxxxxxxx&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 = {}

-- Récupère les IDX des widgets.

idxactuel = '591'

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==05 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 (weather=='ciel dégagé' or weather=='peu nuageux' or weather=='partiellement nuageux') then 
		commandArray['Variable:Soleil'] = '1'
		print('Météo du jour ensoleillé : '..weather)
		else
		commandArray['Variable:Soleil'] = '0'
		print('Météo du jour couvert : '..weather)
end

--Fin Essai soleil	

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

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


	

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

return commandArray
Ensuite, j'ai un script pour modifier l'icone du widget 591 :

Code : Tout sélectionner

-- Icon changer

local ICON_RAINAC = 116
local ICON_SUNAC = 117
local ICON_NUAGEAC = 127
local ICON_NEIGEAC = 128

return {
    logging = {
	level = domoticz.LOG_DEBUG, -- Select one of LOG_DEBUG, LOG_INFO, LOG_ERROR, LOG_FORCE to override system log level
	},
	on = {
        devices = {591},
        },
		
		

    execute = function(dz, item)
	
	    --local pluieac = dz.variables('Pluie-jour').value
    --print('start icon ' .. pluieac)

	
	if item.level == 10 then
	    item.setIcon(ICON_RAINAC)
		item.rename('Aujourdhui - pluie')
		item.switchSelector(10).silent()
 elseif item.level == 20 then
        item.setIcon(ICON_SUNAC)
		item.rename('Aujourdhui - soleil')
        item.switchSelector(20).silent()
 elseif item.level == 30 then
        item.setIcon(ICON_NUAGEAC)
		item.rename('Aujourdhui - couvert')
        item.switchSelector(30).silent()
 elseif item.level == 40 then
        item.setIcon(ICON_NEIGEAC)
		item.rename('Aujourdhui - neige')
        item.switchSelector(40).silent()
		    
    end
	
	   
    end
 

}

Et un autre pour modifier l'icone du widget 404 (qui normalement ne devrait même pas etre appelé par le 1er script) :

Code : Tout sélectionner

-- Icon changer

local ICON_RAINJ = 116
local ICON_SUNJ = 117

return {
    logging = {
	level = domoticz.LOG_DEBUG, -- Select one of LOG_DEBUG, LOG_INFO, LOG_ERROR, LOG_FORCE to override system log level
	},
	on = {
        devices = {404},
        },
		
		

    execute = function(dz, item)
	
	
    local pluiej = dz.variables('Pluie-jour').value
    --print('start icon ' .. pluiej)
	
	if item.level == 10 then
	    item.setIcon(ICON_RAINJ)
		item.rename('Aujourdhui - pluie : '..pluiej..'mm')
		item.switchSelector(10).silent()
 elseif item.level == 20 then
        item.setIcon(ICON_SUNJ)
		item.rename('Aujourdhui - soleil')
        item.switchSelector(20).silent()
		    
    end
	
	   
    end
 

}

Vous voyez une raison pour que le dernier script soit appelé ?
Répondre