Détection de présence iPhone

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 <\>.
Sopalin
Messages : 97
Inscription : 04 juil. 2016, 10:07

Re: Détection de présence iPhone

Message par Sopalin »

J'ai finalement réussi à trouver un moyen infaillible de détection, enfin je pense :p

Il s'agit de récupérer l'info sur notre box internet, dans mon une livebox. Via une certaine requête la livebox renvoi un json que l'on peut parser pour récupérer les équipements connectés et vérifier si notre téléphone en fait partie.

La seule implication est d'avoir le wifi allumé en permanence mais plus de soucis de wifi qui se coupe en mode veille.
Pour l'instant ça marche sur windows via un script vbs, j'attends mon raspberry qui arrivera mardi pour migrer domoticz dessus. Je vais recoder le script en bash et le partager si des gens ont des livebox :)
georges.attali
Messages : 58
Inscription : 19 févr. 2016, 21:35

Re: Détection de présence iPhone

Message par georges.attali »

Ben, c'est papoo qu'à raison !!! :oops:
os.execute renvoie true ou nil.
j'ai corrigé comme papoo.
Bye, A +
GD
Sopalin
Messages : 97
Inscription : 04 juil. 2016, 10:07

Re: Détection de présence iPhone

Message par Sopalin »

L'avantage d'utilisé la box internet et qu'elle est à jour à chaque fois que le téléphone réactive son wifi, contrairement au ping ou autre nmap qui nécessesite de "pinger" pile au bon moment.

Pensez à modifier le mot de passe par celui de votre livebox :)

Code : Tout sélectionner

#!/bin/bash
clear
curl -o context -X POST -i -H "Content-type: application/json" -c ./cookies.txt "http://192.168.1.1/authenticate?username=admin&password=XXXXXXXX"
ID=$(tail -n1 context | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/"}}//1')
curl -b ./cookies.txt -X POST -H 'Content-Type: application/json' -H 'X-Context: '$ID'' -d '{"parameters":{}}' http://192.168.1.1/sysbus/Hosts:getDevices -o ./getHosts.txt
curl -i -b ./cookies.txt -X POST http://192.168.1.1/logout
rm cookies.txt
rm context
Puis le code LUA qui parse le résultat et vérifie le device est connecté avec un timeout à 15min, mais je pense qu'on peut le réduire sans trop de soucis à tester.

J'ai pas mis de variable pour l'ip du téléphone je vous laisse la modifier directement dans le script :)

Code : Tout sélectionner

---------------------------------
-- Script de détection de présence via livebox
-- Auteur : Sopalin 
-- Date : 22 Juillet 2016
-- Nécessite un switch classique
-- source :

---------------------------------
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


time = os.date("*t")
if((time.min % 5)==0) then

        --import des fontions pour lire le JSON
        json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

        
        --Récupération des informations sur la livebox
        --Utilisation d'un script VBS sous windows
        --Utilisation d'un script bash pour extraire les données
        ----------------------------------------------------------------
        --Lecture des données
        
        local f = assert(io.open("/home/pi/domoticz/scripts/bash/getHosts.txt","r"))
        local livebox = f:read('*all')
        f:close()
        --Décodage ud fichier
        local jsonLivebox = json:decode(livebox)
        --print("DEBUG")
        --print(timedifference(otherdevices_lastupdate['Presence Thomas']))
        devices = jsonLivebox['result']['status']
        --Parcours du fichier pour vérifier la présence d'un téléphone
        for result,status in pairs(devices) do
         
            if status['ipAddress'] =="192.168.1.40" then
                if status['active'] then
                    print("IP : "..status['ipAddress'].." is UP")
                    commandArray['Presence Thomas']='On'
                elseif  (status['active'] == false and otherdevices['Presence Thomas']=='On' and timedifference(otherdevices_lastupdate['Presence Thomas']) > 960) then
                    print("IP : "..status['ipAddress'].." is DOWN")
                    commandArray['Presence Thomas']='Off'
                end
            end    
            
        end
   
end

return commandArray
jackyhi
Messages : 97
Inscription : 09 mai 2016, 23:49

Re: Détection de présence iPhone

Message par jackyhi »

Bonjour Sopalin ta solution me semble pertinente et j'aimerais l'utiliser. Jusque maintenant j'ai essayé les scripts de détection de ping adresse IP dans un script_time_.lua sans succès!

J'ai lu tes commentaires et fichiers proposés le 27 juillet. Etant débutant dans la programmation peux-tu expliquer en détail l'installation du fichier /bin/bash sur le raspberry et expliquer comment tu le lances?

Pour le script lua je pense savoir faire, je suppose qu'il suffit que je remplace mon script existant par le tiens en modifiant avec mes paramètres.

Merci d'avance
Raspberry Pi2 VPN, Pi 3, Pi4 ,RFXCom, 6 volets BLYSS, sondes Temp_humid Attiny85, zigbee, Mysensors, RFLINK , Zwave capteurs portes Prises, Alarme avec 2 sirènes maison esp8266, Thermostat NETAMO vannes thermostatiques
Sopalin
Messages : 97
Inscription : 04 juil. 2016, 10:07

Re: Détection de présence iPhone

Message par Sopalin »

Salut Jacky,

Il y a donc 2 fichiers. Un fichier sh et unh script lua.
Le script lua tu peux le copier coller dans l'interface de domoticz, il se lancera automatiquement toutes les 5min.

Concernant le script bash, il faut créer un fichier .sh sur le raspberry, modifier le mot de passe par celui de ta livebox et voir si il se lance bien. Apperement ça peut ne pas marcher en fonction de la version de ta livebox, la mienne est assez vieille.

Si le script lancé en manuel fonctionne bien il te reste à ajouter le script dans la crontab pour qu'il se lance régulièrement également.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Détection de présence iPhone

Message par vil1driver »

Salut,

Concernant le script sh, ne pas oublier de le rendre exécutable ;)
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
jackyhi
Messages : 97
Inscription : 09 mai 2016, 23:49

Re: Détection de présence iPhone

Message par jackyhi »

J'ai fait ce que tu expliques et j'ai fait chmod +x de mon fichier baptisé PresentBox.sh
J'ai une box THOMSONTWG 850. Une question pratique : quelle syntaxe pour admin&password
"http://192.168.0.1/authenticate?usernam ... word=XXXXX" j'ai mis xxxxxx&xxxxx est ce correct ??
Mon Domoticz tourne sur un serveur Ubuntu 14.4

Je reçois le message d'erreur suivant lorsque je tappe en ligne de commande pi@PiUbuntu:~/domoticz/scripts/bash$ bash PresentBox.sh

PresentBox.sh: ligne 2: $'clear\r' : commande introuvable
curl: (3) Illegal characters found in URL
tail: impossible d'ouvrir «context» en lecture: Aucun fichier ou dossier de ce type
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 17 0 0 100 17 0 166 --:--:-- --:--:-- --:--:-- 168
curl: (56) Recv failure: Connexion ré-initialisée par le correspondant
curl: (3) Illegal characters found in URL
rm: impossible de supprimer «cookies.txt\r»: Aucun fichier ou dossier de ce type
rm: impossible de supprimer «context\r»: Aucun fichier ou dossier de ce type

voici le fichier PresentBox.sh:

Code : Tout sélectionner

#!/bin/bash
clear
curl -o context -X POST -i -H "Content-type: application/json" -c ./cookies.txt "http://192.168.0.1/authenticate?username=admin&password=xxxx&xxxx"
ID=$(tail -n1 context | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/"}}//1')
curl -b ./cookies.txt -X POST -H 'Content-Type: application/json' -H 'X-Context: '$ID'' -d '{"parameters":{}}' http://192.168.0.1/sysbus/Hosts:getDevices -o ./getHosts.txt
curl -i -b ./cookies.txt -X POST http://192.168.0.1/logout
rm cookies.txt
rm context

Peux-tu m'éclairer merci
Raspberry Pi2 VPN, Pi 3, Pi4 ,RFXCom, 6 volets BLYSS, sondes Temp_humid Attiny85, zigbee, Mysensors, RFLINK , Zwave capteurs portes Prises, Alarme avec 2 sirènes maison esp8266, Thermostat NETAMO vannes thermostatiques
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Détection de présence iPhone

Message par papoo »

mon retour d'expérience :
le script de détection de présence via icloud fonctionne très bien, seul gros problème pour moi, il sollicite énormément les batteries des iphones testés.
n'ayant pas de livebox mais une freebox V6 je viens de mettre en place ce script LUA (ne fonctionne pas pour une V5) qui pour l'instant me donne satisfaction. pour la procédure d'obtention de l'app token voir ce post
Dernière modification par papoo le 22 oct. 2016, 23:36, modifié 1 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Warp
Messages : 60
Inscription : 29 mars 2015, 12:35
Localisation : IDF

Re: Détection de présence iPhone

Message par Warp »

Avez vous essayé l'application sur android "GeoFence for Domoticz" ???
Elle est chargé d'envoyer une commande JSON a domoticz lors de l'arrivé du téléphone sur une zone !!

Plus simple que la détection du Wifi d'un téléphone, qui est de plus éteint sur certain téléphone lorsque celui-ci passe en mode veille.

Sinon moi j'utilise sur android/ios "life360" pour pister mes enfants (avec leurs accord bien sur), celui-ci est couplé a "https://ifttt.com" (scénario life360/Maker) qui m'envoie une commande JSON a domoticz lorsque mes enfants arrive a la maison, au lycee etc....
Raspberry 2B:USB Z-Stick (GEN5):Edimax EW-7811UN:Huawei E220 3G
4xQubino ZMNHCD1
Everspring SE812 & ST812
Mcohome MH-S411, MH-S412 & MH7H
2xAEON LABS ZW-100
2xFibaro FGSD-002:Fibaro FGFS-101:Fibaro FGS-221 & KLF-050
Chris54220
Messages : 124
Inscription : 20 mars 2016, 20:54
Localisation : Nancy

Re: Détection de présence iPhone

Message par Chris54220 »

Merci Sopalin

je trouve ton script super sympas

par contre tu sais si il serai possible de le faire sous un Android STP

j'avoues que j'ai un peux de mal a comprend ton script pour il arriver seul
Répondre