Besoin d'aide sur erreur script LUA

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
Redfirebrooks
Messages : 42
Enregistré le : 23 févr. 2018, 22:02

Besoin d'aide sur erreur script LUA

Message par Redfirebrooks »

Bonsoir tout le monde

j'ai un script LUA qui fonctionnait correctement et qui s'est mis à générer une erreur sans que je sache pourquoi.
Je l'ai installé il y a quelques années et tellement de vodka est passé depuis dans mon gosier que je n'ai plus un très grand souvenir de sont écriture... Bref, j'ai peut être merdé lorsque j'ai cherché à le désactiver en utilisant mon iPhone et j'ai peut être fait une modification involontaire à cette occasion à cause de l'affichage pas très reponsive...

Si une bonne âme pouvait me guider donc pour résoudre mon petit problème.

l'erreur est :

Code : Tout sélectionner

Error: EventSystem: in ThermostatSdBFinal: [string "TempVariable = 'TempSDB'..."]:8: attempt to index a nil value (global 'devicechanged')
le script que j'utilise (honteusement inspiré)

Code : Tout sélectionner

TempVariable = 'TempSDB'
Sonde = 'Température Salle de bain'
selectorheatzy = 'Chauffage Salle de bain'
local TempConsign = tonumber(otherdevices_svalues['Thermostat Salle de bain'])
local hysteresis = 0.5

commandArray = {}
    if (devicechanged[Sonde]) then
        sSDBTemp, sSDBHumidity = otherdevices_svalues[Sonde]:match("([^;]+);([^;]+)")
        sSDBTemp = tonumber(sSDBTemp)
        sSDBHumidity = tonumber(sSDBHumidity)
        print("Mode actuel : " .. otherdevices[selectorheatzy])
        print("SDB Temperature " .. sSDBTemp)
        print("SDB Humidite " .. sSDBHumidity)
        print("Temperature consigne du Thermostat " .. TempConsign)
        commandArray['Variable:'..TempVariable..''] = tostring(sSDBTemp)
       
        if sSDBTemp < (TempConsign - hysteresis) then
            print("Ecart avec la température de consigne " .. sSDBTemp-TempConsign)
            
            if otherdevices[selectorheatzy] ~= "Confort" then
                print("Je passe en mode confort")
                commandArray[selectorheatzy] = 'Set Level: 10'
                --print("Le radiateur est maintenant en mode " .. otherdevices[selectorheatzy])
            elseif otherdevices[selectorheatzy] == "Confort" then
                print("Je suis déjà en mode confort")
            end 
            
            elseif sSDBTemp > (TempConsign + hysteresis) then
                print("Temperature actuelle supérieure à la température de consigne")
                    if otherdevices[selectorheatzy] == "Hors Gel" then
                        print("Le radiateur est en mode " .. otherdevices[selectorheatzy]) 
                        print("Je ne fais rien")
                    elseif otherdevices[selectorheatzy] ~= "Hors Gel" then
                        print("Le radiateur est en mode " .. otherdevices[selectorheatzy])
                        print("Je passe le radiateur en mode Eco")
                        commandArray[selectorheatzy] = 'Set Level: 30'
                        print("Le radiateur est maintenant en mode " .. otherdevices[selectorheatzy])
                    end 
            
        end
    end
return commandArray

pronoob
Messages : 18
Enregistré le : 16 oct. 2021, 18:16

Re: Besoin d'aide sur erreur script LUA

Message par pronoob »

Salut,

Soit le device 'Température Salle de bain'
A changé de nom

Soit tu as modifié le Trigger (device/time)

Redfirebrooks
Messages : 42
Enregistré le : 23 févr. 2018, 22:02

Re: Besoin d'aide sur erreur script LUA

Message par Redfirebrooks »

Merci de ton retour pronoob

J'ai bien mon device qui porte le nom de 'Température Salle de bain'
J'ai essayé le TRIGGER en mode ALL ou TIME mais même erreur...

Redfirebrooks
Messages : 42
Enregistré le : 23 févr. 2018, 22:02

Re: Besoin d'aide sur erreur script LUA

Message par Redfirebrooks »

Petit update

j'ai rajouté en première ligne à mon script

Code : Tout sélectionner

--variables
et l'erreur est devenue

Code : Tout sélectionner

Error: EventSystem: in ThermostatSdBFinal: [string "--variables..."]:9: attempt to index a nil value (global 'devicechanged')

denis_brasseur
Messages : 721
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Besoin d'aide sur erreur script LUA

Message par denis_brasseur »

Redfirebrooks a écrit : 14 janv. 2022, 23:26 Merci de ton retour pronoob

J'ai bien mon device qui porte le nom de 'Température Salle de bain'
J'ai essayé le TRIGGER en mode ALL ou TIME mais même erreur...
L'erreur ligne 8 correspond à la ligne

Code : Tout sélectionner

if (devicechanged[Sonde]) then
Ton script ne doit pas etre de type All ou Time, mais de type Device, devicechanged ne fonctionnant pas en type Time.

En ajoutant une ligne dans ton code, ta ligne 8 est devenue la ligne 9

Donc un problème de type de script.
https://easydomoticz.com/mon-premier-sc ... ondations/
Attention :

Sachez que suivant le type de script vous accéderez ou pas a telle ou telle table.
  • Les scripts_device utilisent 6 tables de Domoticz: devicechanged, otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
  • Les scripts_variable : 6 tables : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables, uservariables_lastupdate et uservariablechanged
  • Les script_time connaissent 5 tables Domoticz : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
Cela signifie que dans un script_time_xxxx.lua si j’utilise la fonction devicechanged j’aurais une erreur :Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_xxxx.lua:9: attempt to index global ‘devicechanged’ (a nil value)

car cette fonction n’existe pas pour les script Time.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
Chauffe Eau Atlantic LINEO
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

Répondre