Page 1 sur 1

demande d'aide script lua

Publié : 30 nov. 2016, 16:30
par crashcoq
Bonjour

Je me suis crée un petit script pour la recuperation des infos precipitations de DarkSky en lua.

voici ce que je recupere en JSON (partie qui m'interese seulement)

Code : Tout sélectionner

"latitude": 43.4872,
	"longitude": 1.5838,
	"timezone": "Europe/Paris",
	"offset": 1,
	"hourly": {
		"summary": "Dégagé durant toute la journée.",
		"icon": "clear-day",
		"data": [
			{
				"time": 1480518000,
				"summary": "Dégagé",
				"icon": "clear-day",
				"precipIntensity": 0,
				"precipProbability": 0,
				"temperature": 11.42,
				"apparentTemperature": 11.42,
				"dewPoint": 2.73,
				"humidity": 0.55,
				"windSpeed": 4.71,
				"windBearing": 115,
				"cloudCover": 0,
				"pressure": 1031.25,
				"ozone": 290.45
			},
J'ai ecrit ce script en lua (je mets uniquement la partie qui marche pas)

Code : Tout sélectionner

CommandArray = {}

JSON = (loadfile "/domoticz/scripts/lua/JSON.lua")()
local jsondata=assert(io.popen('curl "https://api.darksky.net/forecast/___cle__api___/43.4872,1.5838?units=auto&lang=fr&exclude=currently,flags"'))
local jsondevices = jsondata:read('*all')
jsondata:close()
local jsonLocation = JSON:decode(jsondevices)
local indexArray=0

for x=2,48,1 do
    local pluie=jsonLocation.hourly.data[x].precipProbability
    local hour_pluie = jsonLocation.hourly.data[x].time
    local intensity_pluie = jsonLocation.hourly.data[x].precipIntensity
    local date = os.date("%A %d/%m/%Y %H:%M", hour_pluie)
    intensity_pluie=tonumber(intensity_pluie)
    pluie=tonumber(pluie)
    date=tostring(date)
    print(type(intensity_pluie))
    print(type(date))
    print(intensity_pluie)
    print(date)

    commandArray[indexArray] = {['UpdateDevice'] = '236|2|'..intensity_pluie..';0'}
    indexArray=indexArray+1
--    commandArray[indexArray] = {['Probabilité pluie'] = date}
    commandArray[indexArray] = {['UpdateDevice'] = '235|2|'..'date'}
    indexArray=indexArray+1
En reponse via le log, je me fait gronder par domoticz sur une erreur que je ne vois pas ...

Code : Tout sélectionner

 2016-11-30 16:28:01.252 LUA: number
2016-11-30 16:28:01.252 LUA: string
2016-11-30 16:28:01.252 LUA: 0
2016-11-30 16:28:01.252 LUA: Wednesday 30/11/2016 17:00
2016-11-30 16:28:01.252 Error: EventSystem: in Prevision meteo: [string "CommandArray = {}..."]:23: attempt to index global 'commandArray' (a nil value) 
J'ai donc une erreur dans la maniere de faire le commandArray

Code : Tout sélectionner

    commandArray[indexArray] = {['UpdateDevice'] = '236|2|'..intensity_pluie..';0'}
Je ne comprends pas d'ou vient l'heure ....
j'ai essayer de passer en tostring ou tonumber, meme probleme et meme reponse dans le log

Si on pouvait me donner un coup de main, merci d'avance

Re: demande d'aide script lua

Publié : 30 nov. 2016, 17:08
par thier
A priori il n'aime pas ta façon de faire commandArray[indexArray]. Il te dit que la valeur indexArray est une valeur nul "commandArray' (a nil value)". Fais des print de tes indexArray pour confirmer ou remplace par commandeArray[1] puis 2 puis 3...

Re: demande d'aide script lua

Publié : 30 nov. 2016, 22:14
par georges.attali
+1
1) on ne voit pas l'initialisation de indexArray
2) lua est sensible à la casse : tu as déclaré CommandArray, tu utilise commandArray, c'est pas pareil ;-(
bye
GD

Re: demande d'aide script lua

Publié : 01 déc. 2016, 09:48
par crashcoq
Merci beaucoup pour vos réponses très réactives, il y avait bien ce soucis de déclaration de indexArray
Ca marche beaucoup mieux maintenant.
Je vais finir le script et je le mettrai ici pour ceux qui serait intéressé.