demande d'aide script lua

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 <\>.
crashcoq
Messages : 4
Inscription : 30 nov. 2016, 16:21

demande d'aide script lua

Message 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
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: demande d'aide script lua

Message 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...
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
georges.attali
Messages : 58
Inscription : 19 févr. 2016, 21:35

Re: demande d'aide script lua

Message 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
crashcoq
Messages : 4
Inscription : 30 nov. 2016, 16:21

Re: demande d'aide script lua

Message 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é.
Répondre