Page 2 sur 4
Re: Erreur string
Publié : 06 avr. 2022, 14:05
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.
Re: Erreur string
Publié : 06 avr. 2022, 20:52
par Keros
De rien

Re: Erreur string
Publié : 11 avr. 2022, 11:03
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¶m=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é....
Re: Erreur string
Publié : 11 avr. 2022, 12:31
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.
Re: Erreur string
Publié : 11 avr. 2022, 12:50
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
Re: Erreur string
Publié : 11 avr. 2022, 20:29
par Keros
Tu n'aurais pas des scripts qui se mélangent ?
Re: Erreur string
Publié : 11 avr. 2022, 21:09
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....
Re: Erreur string
Publié : 11 avr. 2022, 21:30
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.
Re: Erreur string
Publié : 11 avr. 2022, 21:33
par Neutrino
Toujours mettre les variables avec 'local' dans les dzvents.
Re: Erreur string
Publié : 13 avr. 2022, 19:12
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é ?