Erreur Script LUA : nil value

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 <\>.
PoDeZebi
Messages : 53
Inscription : 27 oct. 2020, 08:08

Erreur Script LUA : nil value

Message 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 !
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: Erreur Script LUA : nil value

Message par boum »

Code : Tout sélectionner

Print ≠ print
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Erreur Script LUA : nil value

Message par denis_brasseur »

Effectivement, tout est dans le log, le numéro de ligne (28) et l'erreur (Print).
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur Script LUA : nil value

Message 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()
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
PoDeZebi
Messages : 53
Inscription : 27 oct. 2020, 08:08

Re: Erreur Script LUA : nil value

Message 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 !
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Erreur Script LUA : nil value

Message 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 .........
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
PoDeZebi
Messages : 53
Inscription : 27 oct. 2020, 08:08

Re: Erreur Script LUA : nil value

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