Script Bonjour

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 <\>.
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Script Bonjour

Message par Pyrrhus »

Salut,
j'ai écrit un script "bonjour.sh" qui lance kodi et qui lit une chanson précise.
Je suis sur Raspberry 2 et j'aimerais que ce script ne se lance qu'une seule fois dans la journee, lorsque je me lève et que le "motion sensor" me détecte pour la première fois dans la journée.
J'ai commencé à rédiger mon script_device_bonjour.lua mais pour l'instant il me lance mon bonjour.sh chaque fois que le motion sensor me detecte...
Je ne sais pas ajouter la condition "une seule fois dans la journee la premiere fois que le motion sensor passe sur On".

Code : Tout sélectionner

commandArray = {}
local timeNow= os.date("*t")
if devicechanged['Motion Sensor'] == 'On' and timeNow.hour >6
then
   os.execute ('/home/pi/domoticz/scripts/bonjour.sh &')    
   end
return commandArray
Comme vous le voyez je tatonne, j'essai de faire en sorte le lua ne fonctionne qu'à partir de 6h du matin mais de toute façon il fonctionne tout le temps et ce n'est pas ce que je veux... A l'aide !
Merci
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Script Bonjour

Message par patrice »

Bonsour
Le *t ne te donne pas l'heure
c'est
local timeNow= os.date("%H")
print (timeNow)

tu verras dans le log l'heure courante
détail ici http://www.gammon.com.au/scripts/doc.php?lua=os.date
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Script Bonjour

Message par papoo »

En incrémentant une variable dans domoticz et en testant sa condition à chaque détection? Avec une remise à zéro chaque matin?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: Script Bonjour

Message par Pyrrhus »

Merci pour vos réponses !
Malheureusement je n'arrive pas à avoir un script fonctionnel.
Deja, meme sans parler de variable et de condition temporelle, j'ai un probleme avec le 'devicechanged' . J'obtiens un

Code : Tout sélectionner

domoticz/scripts/lua/script_time_bonjour.lua:3: attempt to index global 'devicechanged' (a nil value)
.

Je reprends donc a zero avec un script qui marche:

Code : Tout sélectionner

commandArray = {}
if otherdevices['Motion Sensor'] == 'On'       
then
   os.execute('/home/Pi/domoticz/scripts/bonjour.sh &')   
end
return commandArray
Mais bon... le bonjour.sh se déclenche chaque fois que je passe devant le motion sensor...
Deja je ne comprends pas pourquoi "devicechanged" marche pas alors que "otherdevices" fonctionne
Ensuite, j'ai essayé de creer une variable chaine dans domoticz: je la nomme, je selectionne le type "chaine" et dans valeur je ne sais pas quoi mettre...
Bref j'ai passé la nuit a essayer et je n'arrive à rien à part le script de base.
Je galère LOL
J'espère que vous pourrez m'aider, sinon je me débrouillerai avec un script bash et un cron... que je maitrise mieux que le lua !
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Script Bonjour

Message par Neutrino »

Pour utiliser devicechanged, il faut nommer ton script en script_device et non en script_time.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: Script Bonjour

Message par Pyrrhus »

Merci Neutrino, on avance !
j'ai donc renommer en script_device_bonjour.lua et le voici

Code : Tout sélectionner

commandArray = {}
if devicechanged['Motion Sensor'] == 'On'       
then
   os.execute('/home/Pi/domoticz/scripts/bonjour.sh &')   
end
return commandArray
chaque fois que je passe devant le capteur le bonjour.sh se met en route. Ensuite je fais quoi ? Comment creer la variable qui lui permet de se lancer qu'une fois par jour ?

Est-ce que c'est un bon début pour la condition "se lancer apres 6H ?"

Code : Tout sélectionner

commandArray = {}
local timeNow= os.date("%H")
print (timeNow)
if devicechanged['Motion Sensor'] == 'On' and timeNow >6      
then
   os.execute('/home/Pi/domoticz/scripts/bonjour.sh &')   
end
return commandArray
Merci pour votre aide
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script Bonjour

Message par vil1driver »

salut,
Pyrrhus a écrit :(...)
Est-ce que c'est un bon début pour la condition "se lancer apres 6H ?"
pourquoi pas ;)

il te faut définir la logique bien avant de savoir comment le transcrire en code..

tu veux qu'il ne le dise qu'une fois, donc il faut bien à un moment donné, mémoriser qu'il y a eu annonce.
et à un moment donné, réinitialiser cette mémoire pour à nouveau pouvoir avoir l'annonce.

--> on peut annoncer, on ne peut plus, on peut de nouveau, etc...

cette mémorisation se fait effectivement avec les variables utilisateur, car le script lui même ne peut rien mémoriser.
le wiki t'aidera pour savoir comment lire/écrire, jouer avec les variables utilisateur.
http://www.domoticz.com/wiki/Events

je verrais bien 2 scripts,

script_device_bonjour.lua

Code : Tout sélectionner

SI il est plus de 6h ET il y a mouvement ET la variable est à zero ALORS
    passer la variable à 1
    dire bonjour
FIN
script_time_bonjour.lua

Code : Tout sélectionner

SI il est 5h ALORS
    passer la variable à 0
FIN
Ps: il y a différentes façons d'avoir l'heure, ta première méthode (timeNow.hour) était bonne aussi.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Pyrrhus
Messages : 130
Inscription : 11 juin 2015, 14:57

Re: Script Bonjour

Message par Pyrrhus »

Bonjour et bon lundi de Pâques !
Vil1driver > Je n'ai pas de soucis avec la logique car je suis arrivé à mes fins :) . Par contre c'est avec le lua dont j'ai beaucoup de mal avec la syntaxe... :(
Voici comment j'ai fait:
- j'ai créé une variable "entier" appelé "goodmorning" de valeur 0
- un script bash appelant le json de domoticz via curl pour passer la variable a 1. j'utilise un cron qui lance le script tous les matins a 6H du lundi au vendredi
- un interrupteur virtuel "bonjour"qui lance mon bonjour.sh une fois sur "On"
- un blocky
if motion sensor=On and goodmorning=1
do set goodmorning=0
do set bonjour=On

Je voulais éviter cette usine à gaz mais vraiment... j'y arrive pas en lua :oops: et faut que je dorme car ça fait 2 nuits que j'étais sur ce problème !!
Merci pour votre aide mais en lua je ne sais faire que des choses très très simples...
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Script Bonjour

Message par papoo »

avec une variable utilisateur de type 2 ( chaine)
en lua , pour lire et comparer à un chiffre cette variable utilisateur

Code : Tout sélectionner

if (tonumber(uservariables[nom_de_ta_variable_utilisateur]) > 0)
pour écrire dans ta variable

Code : Tout sélectionner

commandArray['Variable:nom_de_ta_variable_utilisateur']= tostring(0)
pour lui donner la valeur 0 (zéro)
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
jacob
Messages : 22
Inscription : 11 févr. 2016, 15:21

Re: Script Bonjour

Message par jacob »

Regarde ici: https://www.domoticz.com/forum/viewtopi ... 404#p78266
Un script qui ne se lance qu'une fois dans la journée sur détection d'un capteur de mouvement ;)
Domoticz v3.4834 / Raspberry Pi
RFXTRX433E v1001
Répondre