[Résolu] Salutations quand telephone detecté

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 <\>.
Répondre
ziaziung
Messages : 183
Inscription : 13 févr. 2015, 14:04

[Résolu] Salutations quand telephone detecté

Message par ziaziung »

Bonjour à toutes et tous.
J'utilise ce script lua trouvé sur le forum qui détecte lorsque mon portable rejoint mon réseau local :

hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end

--Si le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence

if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
ping_success_tel1=os.execute('ping -c1 192.168.1.121')

if ping_success_tel1 then
commandArray['Presence']='On'
commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu'
detecte='oui'
else
if otherdevices['Presence']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
commandArray['Presence']='Off'
end
end
end


Sauf qu'il me dit bienvenu toutes les dix minutes.
Comment faire pour qu'il ne le dise la première fois que mon téléphone se connecte et que tant qu'il ne s'est pas déconnecté ou reconnecté il ne me dise rien?
Dernière modification par ziaziung le 11 déc. 2016, 10:24, modifié 1 fois.
Raspi B+ et 2. RfxcomE. Volets Somfy. Sondes de température "AliExpress". Domoticz version 4.10761
T0ny Oh
Messages : 38
Inscription : 06 sept. 2016, 16:29

Re: Salutations quand telephone detecté

Message par T0ny Oh »

En fait pour économiser la batterie les smartphones mettent en veille le wifi et le "réveillent" à interval réguliers. Chez toi je suppose qu'il doit se réveiller toutes les 10 minutes. Tu doit avoir une appli qui est paramétrée pour faire de la consulte toutes les 10 minutes (regarde la config de ton client mail c'est souvent ça) ou dans les paramètre du téléphone. Et si l'envie te prends de vouloir laisser le wifi actif en permanance je ne peux que te le déconseiller.

Avis perso mais ce genre de méthode n'est pas du tout viable. Il vaux mieux se faire un shortcut sur le quel tu clique pour déclarer ta présence.
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Salutations quand telephone detecté

Message par thier »

tu remplaces

Code : Tout sélectionner

if ping_success_tel1 then
commandArray['Presence']='On'
commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu'
detecte='oui'
par

Code : Tout sélectionner

if ping_success_tel1 then
			if (otherdevices['Presence']=='Off') then 
			commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu'
			commandArray['Presence']='On'
			detecte='oui'
			else
			commandArray['Presence']='On'
			detecte='oui'
			end
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
ziaziung
Messages : 183
Inscription : 13 févr. 2015, 14:04

Re: Salutations quand telephone detecté

Message par ziaziung »

Merci de vos reponses.
Voici le script modifié, mais cela ne change rien (bienvenu toutes les 10 minutes) :
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end

--Si le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence

if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
ping_success_tel1=os.execute('ping -c1 192.168.1.121')

if ping_success_tel1 then
if (otherdevices['Presence']=='Off') then
commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu%20maitre'
commandArray['Presence']='On'
detecte='oui'
else
commandArray['Presence']='On'
detecte='oui'
end
else
if otherdevices['Presence']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
commandArray['Presence']='Off'
end
end
end

return commandArray
Raspi B+ et 2. RfxcomE. Volets Somfy. Sondes de température "AliExpress". Domoticz version 4.10761
cedric2975
Messages : 15
Inscription : 16 nov. 2016, 17:31

Re: Salutations quand telephone detecté

Message par cedric2975 »

Salut,

moi j'ai creer une tempo de 15 minutes avant de valider mon absence.
Si tel non détecté pendant 15 minutes, alors départ du roomba, sinon reset compteur.
Tu peux mettre 20-30-1heure ou plus

Le script_time du ping, classique :

Code : Tout sélectionner

commandArray = {}


function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)

  return difference

end

time = os.date("*t")


if (otherdevices['Presence']=='Off'  or otherdevices['Presence']=='On') and timedifference(otherdevices_lastupdate['Presence']) > 60
 then  
   ping_success_tel1=os.execute('ping -c1 192.168.1.xx') -- IP Cédric
   ping_success_tel2=os.execute('ping -c1 192.168.1.yy') -- IP Cat


----- Cédric -------

       if ping_success_tel1 and  otherdevices['Cédric']=='Off' -- pas cédric et ping ok --> cédric est rentrée
        then
         commandArray['Cédric']='On'
         print ('Arrivée de Cédric')
        else  
           if ping_success_tel1 and  otherdevices['Cédric']=='On' --ping ok et cédric deja la -->rien
           then 

        else
           if otherdevices['Cédric']=='Off'    then -- echec du ping mais  déja absent
           commandArray['Cédric'] ='Off'
       
        else 
           if otherdevices['Cédric']=='On' then -- échec du ping donc changement d'etat --->>départ
           commandArray['Cédric'] ='Off'   
           print ('Départ de Cédric ')   
    
           end
           end
           end
       end

-----    CAT ------

       if ping_success_tel2 and  otherdevices['Cat']=='Off' -- pas Cat et ping ok --> Cat est rentrée
        then
         commandArray['Cat']='On'
         print ('Arrivée de Cat')

        else  
           if ping_success_tel2 and  otherdevices['Cat']=='On' --ping ok et Cat deja la -->rien
           then 
           commandArray['Cat'] ='Off'

        else
           if otherdevices['Cat']=='Off' then -- echec du ping mais  déja absent
        
        else 
           if otherdevices['Cat']=='On' then -- échec du ping donc changement d'etat --->>départ
           commandArray['Cat'] ='Off'   
           print ('Départ de Cat ')   

   
           end
           end
           end
       end
end

return commandArray

Le script_device , il faut creer un variable nopingcounter:

Code : Tout sélectionner


t=tonumber(otherdevices_svalues['ConsigneT'])
compteur_ping_fail=tonumber(uservariables['nopingcounter'])


time = os.date("*t")
commandArray = {}




  if devicechanged['Presence'] == 'Off'  then
         t = 20
         commandArray['ConsigneT']='Set Level '..t
         commandArray['Variable:consigne']=otherdevices_svalues['ConsigneT']
          if  (time.hour>8 and time.hour<18) then 
              commandArray['RoombaClean']='On'
              commandArray['OpenURL'] = 'https://smsapi.free-mobile.fr/sendmsg?user=xxxxxxx&pass=zzzzzzzz&msg=RoombaClean !!'
              print('Départ du Roomba.')
          end 
  
  end
 

 


-- quelqu'un arrive
  if (devicechanged['Cat'] =='On' or devicechanged['Cédric']=='On' ) and otherdevices['Presence']=='Off'      -- Si quelqu'un arrive et qu'il n'y avait personne, retour roomba à la base et augmentation de la temprérature de 3 °c
    then
        commandArray['Presence']='On'
        commandArray['RoombaDock']='On'             
        t = t + 30
        commandArray['ConsigneT']='Set Level '..t
        commandArray['Variable:consigne']=otherdevices_svalues['ConsigneT']  --synchro

        
  end


-- tout le monde est parti
  if   ((devicechanged['Cat'] =='Off' and otherdevices['Cédric']=='Off' ) and otherdevices['Presence']=='On') or ((devicechanged['Cédric'] =='Off' and otherdevices['Cat']=='Off' ) and otherdevices['Presence']=='On') or 
         ((devicechanged['Cat'] =='Off'and devicechanged['Cédric']=='Off' ) and otherdevices['Presence']=='On')  --
  then
                   
  end

   
   if (otherdevices['Cat'] =='Off' and  otherdevices['Cédric']=='Off' ) and otherdevices['Presence']=='On'
    then 
    compteur_ping_fail = compteur_ping_fail +1
    commandArray['Variable:nopingcounter']=tostring(compteur_ping_fail)
  print('Plus personne depuis ' .. compteur_ping_fail .. ' minutes')
   end


 if compteur_ping_fail >=15 then  -- ici le temps de non détection avant de valider l'absence
       commandArray['Presence']='Off'
       compteur_ping_fail = 0
       commandArray['Variable:nopingcounter']=tostring(compteur_ping_fail)
       print ('Plus personne  depuis' .. compteur_ping_fail ..' minutes, passage en mode - Maison vide -')

   end


   
   if (devicechanged['Cat'] =='On' or devicechanged['Cédric']=='On' ) then
        compteur_ping_fail = 0
        commandArray['Variable:nopingcounter']=tostring(compteur_ping_fail)

   end



-- personne n'arrive,ni ne part...
   if (devicechanged['Cat'] =='Off' and devicechanged['Cédric']=='Off' )  and otherdevices['Presence']=='Off'
    
    then
       print('Aucun changement')
   end

  return commandArray
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Salutations quand telephone detecté

Message par thier »

Comme ça sa devrait fonctionner.

Code : Tout sélectionner

if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
ping_success_tel1=os.execute('ping -c1 192.168.1.121')

	if ping_success_tel1 then
		if (otherdevices['Presence']=='Off') then
		commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu%20maitre'
		commandArray['Presence']='On'
		detecte='oui'
	
		elseif (otherdevices['Presence']=='On') then 
		commandArray['Presence']='On'
		detecte='oui'
		end
	else --On passe l'interrupteur virtuel à Off car le ping est HS
	commandArray['Presence']='Off'
	end
end
Quand tu es perdu dans un script, met des print qui t'indiqueront par ou tu passe dans ton script.
Le problème de ton script est peut être ici else if otherdevices['Presence']=='On' then commandArray['Presence']='Off' ce qui remet à chaque fin de script presence à zéro. Donc dans 10 minutes tu repasses par la branche avec l'alerte vocale. Un print après la ligne if otherdevices['Presence']=='On' aurais pu te mettre sur la voie (ou pas...).
Après, pour le confort de lecture quand tu mets un script, utilise la balise Code.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
ziaziung
Messages : 183
Inscription : 13 févr. 2015, 14:04

Re: Salutations quand telephone detecté

Message par ziaziung »

Bonsoir. Merci pour votre aide.
J'ai essayé le code ci-dessous mais ca fait toujours la meme chose : 'Bienvenu' toutes les 10 minutes.

Ce que je voudrai :
Tous les jours a minuit l'interrupteur Presence est passé à Off (ca, c'est fait automatiquement directement dans domoticz).
Ensuite, tant que mon telephone n'est pas connecté a mon reseau, rien.
Dès qu'il se connecte, 'Bienvenu', puis plus rien tant ce qu'il ne se deconnecte puis se reconnecte pas, si c'est le cas : 'bienvenu'. ....

Code : Tout sélectionner


commandArray = {}

--Cette fonction calcule la différence de temps (en secondes) entre maintenant
--et la date passée en paramètre.
function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)
  return difference
end

--Si le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
print('B1')
if (otherdevices['Presence']=='Off') then
     print(' presennce = off')
     ping_success_tel1=os.execute('ping -c1 192.168.1.121')
     if ping_success_tel1 then
                                                            commandArray['OpenURL']='192.168.1.120/speakv.php?text=Bienvenu'
                                                            commandArray['Presence']='On'
                                                            print('presence passé a on')
     end
 elseif timedifference(otherdevices_lastupdate['Presence']) > 600 then
                                                                   print('presence = on et temps > 10 minutes')
                                                                   ping_success_tel1=os.execute('ping -c1 192.168.1.121')
                                                                   if ping_success_tel1 then commandArray['Presence']='On' else commandArray['Presence']='Off' end
                                                                   end


return commandArray


Raspi B+ et 2. RfxcomE. Volets Somfy. Sondes de température "AliExpress". Domoticz version 4.10761
bruno_ghost17
Messages : 97
Inscription : 01 févr. 2016, 18:56
Localisation : Rochefort(17)

Re: Salutations quand telephone detecté

Message par bruno_ghost17 »

salut

tu pourrais utiliser un flag qui se mets a 1 une fois le "salut" fait , dans les conditions du salut tu ajoutes la condition que ton flag soit a 0

tu remets ton flag a 0 si le telephone n'est plus sur le wifi .
pour le flag tu pourrais utiliser les Variables utilisateur.
enfin c'est une idée ...

Bruno.
Raspi 2 - RFxCom - sondes Oregon
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Salutations quand telephone detecté

Message par thier »

Les print que tu as mis ne te mette pas sur la voie?
Après je pense qu'il faudrait remplacer timedifference(otherdevices_lastupdate['Presence']) > 600 par otherdevices_lastupdate(Presence] > 600.
Si tu as l'alerte vocal c'est que tu passes par if (otherdevices['Presence']=='Off') then toutes les 10 mn.
puisque c'est ici que tu remets presence a off

Code : Tout sélectionner

if ping_success_tel1 then
commandArray['Presence']='On' 
else commandArray['Presence']='Off'
 end
ajoute un print et regarde les logs

Code : Tout sélectionner

if ping_success_tel1 then
commandArray['Presence']='On' 
else commandArray['Presence']='Off'
print('presence mis à Off')
end
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
ziaziung
Messages : 183
Inscription : 13 févr. 2015, 14:04

Re: Salutations quand telephone detecté

Message par ziaziung »

Bonjour à toutes et tous. Merci encore pour votre aide.
Le script que j'ai proposé dans mon dernier post fonctionne parfaitement, c'est juste qu'il entrait en conflit avec un autre (en fait, je tente de detecter un deuxième telephone).
Raspi B+ et 2. RfxcomE. Volets Somfy. Sondes de température "AliExpress". Domoticz version 4.10761
Répondre