Script allumage TV WIP

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 <\>.
francklek
Messages : 82
Inscription : 08 janv. 2016, 19:54

Script allumage TV WIP

Message par francklek »

Hello à tous, j'ai démarrer de convertir tous mes blocky en Lua pour plus de fonctions et parcequ'il faut bien apprendre !
J'ai un script pour démarrer la TV en fonction de la luminosité du salon. Le script doit d'abord comparer la luminosité d'un capteur avec celle d'un seuil (fixé aléatoirement pour l'instant) et allumer la freebox et fermer les volets si la luminosité est au dessu du seuil. Mon problème est que j'ai un message d'erreur lorsque je compare luminosité et seuil. Voici mon script

Code : Tout sélectionner

-- Script Freebox et luminosité --
--si jour allume freebox et ferme les volets, si sombre, allume freebox seule.
         

--seuil luminosité au delà de laquelle la condition est remplie
--
time = tonumber(os.date('%H'))
Seuil_Lux=999
Seuil_Lux=tonumber(Seuil_Lux)
valeur_lux = tonumber(otherdevices_svalues['Luminosite-salon'])
         commandArray = {}
        
  
if    (devicechanged['Inter TV'] == 'Double Click') and (otherdevices['TV'] == 'Off') then
         print ("luminosité :") print (valeur_lux) print (Seuil_Lux) print (time)
        
         if  (valeur_lux >= Seuil_Lux) and (time >= 9 and time < 19 ) and (otherdevices['Etat-Freebox'] == 'Off') then
        -- Fermeture des volets entre 9H et 19H Luminosité forte - allumage Box
   
        print("Condition remplie luminosité forte")
        commandArray ['Freebox_Player']='On'
         commandArray ['SalonSud'] = 'On'
        commandArray ['SalonNord'] = 'On'
        print ("allumage box + fermeture volets")
        commandArray['Group:Vert']='On'
        commandArray['Group:Vert']='Off AFTER 10'
        commandArray ['SalonSud'] = "Stop AFTER 14"
        commandArray ['SalonNord'] = "Stop AFTER 14"
        print("stop envoyé volets roulants")
                                              
                elseif (valeur_lux > Seuil_Lux) and (time >= 9 and time < 19 ) and (otherdevices['Etat-Freebox'] == 'On') then
                -- Fermeture des volets entre 9H et 19H Luminosité forte - Box allumée
                print("box déjà allumée donc fermeture volet")
                commandArray['SalonSud'] = 'On'
                commandArray['SalonNord'] = 'On'
                commandArray['SalonSud'] = "Stop AFTER 14"
                commandArray['SalonNord'] = "Stop AFTER 14"
                                           
                elseif (valeur_lux < Seuil_Lux) and (otherdevices['Etat-Freebox'] == 'Off') then
                -- Pas de fermeture - Luminosité faible - allumage Box                                                    
                print("pas assez de lumière pour fermer les volets")    
                commandArray ['Freebox_Player']='On'
    
                elseif (valeur_lux < Seuil_Lux) and (otherdevices['Etat-Freebox'] == 'On') then
                -- Luminosité faible - extinction Box
                print("Freebox déjà allumée , pas de soleil, on eteind ")
                commandArray ['Freebox_Player']='Off'
                commandArray['SalonSud'] = 'Off'
                commandArray['SalonNord'] = 'Off'
            end
                                                
            if (devicechanged['Inter TV'] == 'Double Click') and (otherdevices['TV'] == 'On') then
            -- Extinction Box      
            commandArray ['TV']='Off'
            commandArray['SalonSud'] = 'Off'
            commandArray['SalonNord'] = 'Off'
            commandArray['Group:Vert']='On'
            commandArray['Group:Vert']='Off AFTER 10'
        end
  end
        
   return commandArray
   
         
       
J'obtiens bien avec des print les valeurs seuil et luminosité mais lors de la comparaison des 2 valeurs j'ai un message d'erreur :
2017-11-14 17:17:13.430 LUA: luminosité :
2017-11-14 17:17:13.430 LUA: 1292
2017-11-14 17:17:13.430 LUA: 999
2017-11-14 17:17:13.430 LUA: 17
2017-11-14 17:17:13.431 Error: EventSystem: in script volet soleil 1: [string "-- Script mesure de la luminosité, si jour a..."]:18: attempt to compare number with string
Quelq'un pourrait m'aider et me dire ou je fais une erreur ???

Merci à tous
Dernière modification par francklek le 15 nov. 2017, 08:56, modifié 4 fois.
Pi 2 / RFXtrx433E 251 / Stick Zwave Gen5 / Freebox Delta /Xiaomi gateway / Yeelight / Tablette android murale/ Google Home/RM3 mini / Domoticz V4....
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Script allumage TV WIP

Message par rapinou »

Salut,
Tu as une variable nulle, si ce n'est pas les deux citées, c'est peut-être time.hour ? Tu as fait un print avec ?
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
francklek
Messages : 82
Inscription : 08 janv. 2016, 19:54

Re: Script allumage TV WIP

Message par francklek »

rapinou a écrit :Salut,
Tu as une variable nulle, si ce n'est pas les deux citées, c'est peut-être time.hour ? Tu as fait un print avec ?
C'est ce que j'ai remarqué. J'ai modifié le script avec pour l'heure : os.date('%H')

dans les logs j'ai bien mes 3 valeurs qui s'affichent (luminosité, seuil et heure) mais j'ai toujours la même erreur.

Le premier post a été corrigé
Pi 2 / RFXtrx433E 251 / Stick Zwave Gen5 / Freebox Delta /Xiaomi gateway / Yeelight / Tablette android murale/ Google Home/RM3 mini / Domoticz V4....
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Script allumage TV WIP

Message par rapinou »

Non, ce n'est plus la même erreur.
Maintenant il essaie de comparer un nombre avec une chaine.
Précédemment c'était un nombre avec une variable nulle.
A priori le problème vient donc de ta variable d'heure qu'il faut passer en nombre, essaie :

Code : Tout sélectionner

time = tonumber(os.date('%H'))
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
francklek
Messages : 82
Inscription : 08 janv. 2016, 19:54

Re: Script allumage TV WIP

Message par francklek »

J'avance, j'avance, effectivement en passant toutes les valeurs en entier je n'ai plus de message d'erreur mais le script s’arrête sans remplir de condition. Aucun print (hormis l'affichage des valeurs) ne s'exécute. Se pourrait il que je n'ai aucune option de remplie ou alors j'ai fais une bourde dans l'intrication des if et elseif ?

Le premier post a été corrigé
Pi 2 / RFXtrx433E 251 / Stick Zwave Gen5 / Freebox Delta /Xiaomi gateway / Yeelight / Tablette android murale/ Google Home/RM3 mini / Domoticz V4....
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Script allumage TV WIP

Message par rapinou »

Pour aider, revois l'indentation de ton code, car il est très difficilement lisible.
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
francklek
Messages : 82
Inscription : 08 janv. 2016, 19:54

Re: Script allumage TV WIP

Message par francklek »

rapinou a écrit :Pour aider, revois l'indentation de ton code, car il est très difficilement lisible.
Je viens de remettre en premier post le script identé correctement. J'ai cherché mais je n'ai pas trouvé ou j'ai fais une bourde. le script se déroule maintenant comme si aucune condition n'était remplie lors de l'appui sur le switch.
Pi 2 / RFXtrx433E 251 / Stick Zwave Gen5 / Freebox Delta /Xiaomi gateway / Yeelight / Tablette android murale/ Google Home/RM3 mini / Domoticz V4....
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Script allumage TV WIP

Message par rapinou »

Je te conseille de lire ça si tu veux de l'aide, car si le forum est rempli de bonnes âmes prêtes à aider, il faut tout de même leur simplifier la tâche au minimum : https://fr.wikipedia.org/wiki/Style_d%27indentation.

Pour le debug, il faut que tu fasses des print sur chacune des variables et chacune des conditions jusqu'à trouver l'erreur.
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
Répondre