Page 1 sur 1

Erreur Script LUA : nil value

Publié : 06 déc. 2023, 16:39
par PoDeZebi
Bonjour à tous,
Je suis sous Domoticz Version: 2023.2.
Afin d'allumer 2 ampoules a certaines heures j'utilise un capteur de présence Ikéa.
J'utilisais un script depuis pas mal de temps, sans problème, mais depuis une semaine, il ne fonctionne plus du tout, sans que je n'ai rien modifié (Ou alors je ne sais pas trop comment... tant que domoticz fonctionne, je n'y touche pas !!!)

Code : Tout sélectionner

function timebetween(s,e)
	timenow = os.date("*t")
	year = timenow.year
	month = timenow.month
	day = timenow.day
	s = s .. ":00"  -- add seconds in case only hh:mm is supplied
	e = e .. ":00"
	shour = string.sub(s, 1, 2)
	sminutes = string.sub(s, 4, 5)
	sseconds = string.sub(s, 7, 8)
	ehour = string.sub(e, 1, 2)
	eminutes = string.sub(e, 4, 5)
	eseconds = string.sub(e, 7, 8)
	t1 = os.time()
	t2 = os.time{year=year, month=month, day=day, hour=shour, min=sminutes, sec=sseconds}
	t3 = os.time{year=year, month=month, day=day, hour=ehour, min=eminutes, sec=eseconds}
	sdifference = os.difftime (t1, t2)
	edifference = os.difftime (t1, t3)
	isbetween = false
	if sdifference >= 0 and edifference <= 0 then
		isbetween = true
	end
--~ 	print(" s:" .. s  .. "  e:" .. e .. "  sdifference:" .. sdifference.. "  edifference:" .. edifference)
	return isbetween
end

commandArray = {}
Print "debut de script"
    if devicechanged['Sensor'] == 'On' then    
        Print "switch on"
       if timebetween("23:00:00","23:59:59") or timebetween("00:00:00","07:15:00") then
            print "Heure et sensor ok"
            if devicechanged['Lampe 1']=='Off' and devicechanged['Lampe 2']=='Off' then
                commandArray[#commandArray+1]={['Sensor']='Off'}
                commandArray[#commandArray+1]={['Lampe 1']='On'}
                commandArray[#commandArray+1]={['Lampe 1']='Set Level:10'}
                commandArray[#commandArray+1]={['Lampe 2']='On'}
              commandArray[#commandArray+1]={['Lampe 2']='Set Level:10'}
                commandArray[#commandArray+1]={['Lampe 1']='Off AFTER 180'}
                commandArray[#commandArray+1]={['Lampe 2']='Off AFTER 180'}
            end
        else
            print "Heure NOK"
        end
    end

 
    
return
Mon trigger est bien sur Device (oui, j'ai un peu chercher sur le forum quand même :) ), et j'ai cette erreur des que je passe la main devant mon capteur :
2023-12-06 16:37:00.463 Error: EventSystem: in Script #1: [string "function timebetween(s,e) ..."]:28: attempt to call a nil value (global 'Print')
J'ai fait les MAJ, relancer les services Domoticz, et cette erreur a lieu que je sois en trigger Device ou All...
Je suis un peu paumer... Merci par avance de votre aide !

Re: Erreur Script LUA : nil value

Publié : 06 déc. 2023, 17:44
par boum

Code : Tout sélectionner

Print ≠ print

Re: Erreur Script LUA : nil value

Publié : 06 déc. 2023, 18:28
par denis_brasseur
Effectivement, tout est dans le log, le numéro de ligne (28) et l'erreur (Print).

Re: Erreur Script LUA : nil value

Publié : 06 déc. 2023, 18:34
par Keros
Et pour éviter que ce soit vu comme une variable, la syntaxe est print("Mon message").
La syntaxe est bonne à la fin de ta fonction timebetween()

Re: Erreur Script LUA : nil value

Publié : 07 déc. 2023, 11:22
par PoDeZebi
Mais quel boulet !!! :lol:

J'avais rajouter tout ces print pour debugger, mais finalement j'ai fais encore plus de dégat...

Du coup, j'ai modifié ! Mais je me retrouve avec une autre erreur du même type !
Error: EventSystem: in Script #1: [string "function timebetween(s,e) ..."]:29: attempt to index a nil value (global 'devicechanged')
A savoir que j'ai cet erreur avec le trigger sur All (a ce moment j'ai bien le print "debut du script"), comme sur Device (mais la je n'ai pas le début du script...)

Merci mille fois de votre aide !

Re: Erreur Script LUA : nil value

Publié : 07 déc. 2023, 18:22
par denis_brasseur
devicechanged ne fonctionne ni avec un script de type time, ni de type all. Ton script doit être de type device, le seul type a accepter devicechanged.

Et anomalie sur la ligne 33 :

Code : Tout sélectionner

if devicechanged['Lampe 1']=='Off' and devicechanged['Lampe 2']=='Off' then
Il faudrait avoir 2 changements simultanés d'état en plus de celui de la ligne 29.
Il doit plutôt s'agir de

Code : Tout sélectionner

if otherdevices['Lampe 1'] == 'Off and .........

Re: Erreur Script LUA : nil value

Publié : 08 déc. 2023, 16:42
par PoDeZebi
Merci beaucoup !
Problème résolu...
Je ne comprends toujours pas pourquoi cela a fonctionner des mois, et d'un coup cela s'est arreter !

Merci encore !