Détection de présence iPhone
Détection de présence iPhone
Bonjour à tous,
Nouveau dans domoticz je suis en train de me pencher sur la detection des téléphones de la maison. Pour info je tourne sous windows mais je me débrouille assez pour adapter les scripts si besoin.
J'ai essayer plusieurs solution :
1) PING, pas assez fiable car IOS coupe le wifi régulière lorsque le téléphone est en veille
2) NMAP, soit disant ça détecte le téléphone même wifi éteint, perso après un grand nombre d'essai le résultat reste aléatoire
Du coup je me demande comment vous gérer la détection de présence de votre coté ?
Merci d'avance
Nouveau dans domoticz je suis en train de me pencher sur la detection des téléphones de la maison. Pour info je tourne sous windows mais je me débrouille assez pour adapter les scripts si besoin.
J'ai essayer plusieurs solution :
1) PING, pas assez fiable car IOS coupe le wifi régulière lorsque le téléphone est en veille
2) NMAP, soit disant ça détecte le téléphone même wifi éteint, perso après un grand nombre d'essai le résultat reste aléatoire
Du coup je me demande comment vous gérer la détection de présence de votre coté ?
Merci d'avance
Re: Détection de présence iPhone
J'y avait pensé mais mon dongle intel est déjà connecté en bluethoot sur une enceinte. De plus la portée est vraiment moyenne :/
Je suis en train de tester une solution à base de ping et de la table arp. Faut que je regarde si l'adresse MAC monte dans la table ARP même si l'iphone ne répond pas au ping.
Tout est prêt, reste à voir si ça marche en rentrant chez moi.
Je suis en train de tester une solution à base de ping et de la table arp. Faut que je regarde si l'adresse MAC monte dans la table ARP même si l'iphone ne répond pas au ping.
Tout est prêt, reste à voir si ça marche en rentrant chez moi.
Re: Détection de présence iPhone
Et par du détecteur de mouvement ? En plus ils peuvent te servir pour diverse scenario
Envoyé de mon Smart'TAB 7801 en utilisant Tapatalk
Envoyé de mon Smart'TAB 7801 en utilisant Tapatalk
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
http://www.domo-attitude.fr
-
Chris54220
- Messages : 124
- Inscription : 20 mars 2016, 20:54
- Localisation : Nancy
Re: Détection de présence iPhone
si sa marche sa m'intéresse
-
georges.attali
- Messages : 58
- Inscription : 19 févr. 2016, 21:35
Re: Détection de présence iPhone
Bonjour,
ce script est pas trop mal : il détecte bien mon iphone, mais en général avec un délai de 10 ou 20 minutes ... C'est le mieux que j'ai pu avoir avec ce teléphone.
Je l'ai (bien sur
) pompé en grande partie sur internet (je ne sais plus ou et c'est bien dommage) et adapté à ma sauce.
Ca fonctionne par la localisation de l'iPhone, et comparaison de la distance de votre maison (changer la variable "coordonneesGoogleDeLaMaison").
Il faut mettre votre login et mot de passe icloud.
Dans devices, le nom de chaque iphone que vous pouvez voir, et le nom d'un device virtuel qui s'allume si l'iPhone est présent.
Pour améliorer la détection, j'ai mis une adresse fixe à mon iphone (paramétrage NAT de la box), il faut le renseigner dans la variable ips, mais ce n'est pas obligatoire. Ca permet de le détecter par "ping" si jamais le wifi du tel est allumé.
Vous pouvez aussi changer la ligne (pas obligatoire ...)
.. "-H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' "
(présente 2 fois) avec votre propre UUID. Vous pouvez normalement trouver votre UUID par http://whatsmyudid.com/
C'est aussi assez sympa d'enregistrer la distance dans un autre device virtuel de type distance, mais c'est pas dans ce script là. Je vous laisse mettre à jour.
Il s'agit d'un script de type "time".
Vous aurez aussi besoin de copier JSON.lua (google ! si vous trouvez pas, tell me) dans le répertoire /home/pi/domoticz/scripts/lua/JSON.lua
Bonne soirée.
GD
PS : si vous avez une meilleure réactivité, je suis preneur ! avec plaisir.
Autre solution intéressante, que je n'ai pas explorée (mais je devrais), est l'utilisation de l'app gratuite "Locative" a télécharger sur l'App Store qui peut activer une URL lorsque vous arrivez dans une zone géographique.
ce script est pas trop mal : il détecte bien mon iphone, mais en général avec un délai de 10 ou 20 minutes ... C'est le mieux que j'ai pu avoir avec ce teléphone.
Je l'ai (bien sur
Ca fonctionne par la localisation de l'iPhone, et comparaison de la distance de votre maison (changer la variable "coordonneesGoogleDeLaMaison").
Il faut mettre votre login et mot de passe icloud.
Dans devices, le nom de chaque iphone que vous pouvez voir, et le nom d'un device virtuel qui s'allume si l'iPhone est présent.
Pour améliorer la détection, j'ai mis une adresse fixe à mon iphone (paramétrage NAT de la box), il faut le renseigner dans la variable ips, mais ce n'est pas obligatoire. Ca permet de le détecter par "ping" si jamais le wifi du tel est allumé.
Vous pouvez aussi changer la ligne (pas obligatoire ...)
.. "-H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' "
(présente 2 fois) avec votre propre UUID. Vous pouvez normalement trouver votre UUID par http://whatsmyudid.com/
C'est aussi assez sympa d'enregistrer la distance dans un autre device virtuel de type distance, mais c'est pas dans ce script là. Je vous laisse mettre à jour.
Il s'agit d'un script de type "time".
Vous aurez aussi besoin de copier JSON.lua (google ! si vous trouvez pas, tell me) dans le répertoire /home/pi/domoticz/scripts/lua/JSON.lua
Bonne soirée.
GD
Code : Tout sélectionner
-- ==============================
-- Cherche la position iphone sur icloud
-- ==============================
-- Variables
-- 1) User et mot de passe icloud
username = "votre.login@icloud.com"
password = "votre mot de passe icloud"
-- 2) Pour chaque iPhone déclaré : associer le nom du device de présence
devices = {
["iPhone de Georges-David"] = "Presence GD"
-- , ["iPhone de Jean-Michel"] = "Présence JM"
-- , ["iPhone de Pierre-André"] = "Présence PA"
}
-- 3) Pour chaque iPhone déclaré : associer adresse IP et le nom du device de présence
ips= {
["192.168.1.52"] = "Presence GD"
-- , ["xxx.xxx.xxx"] = "Présence JM"
-- , ["xxx.xxx.xxx"] = "Présence PA"
}
-- 4) Position de la maison, "lat, long" as given by google map
coordonneesGoogleDeLaMaison="43.693858, 5.504608"
--(43.693982097361, 0.00010012119960745)
-- 5) Périmètre de considération de la maison
-- NB : 0.001 = 0.111 kilometres soit 111 metres
skew = 0.001
-- ==============================
commandArray = {}
print('Script v01 script_time_localisation.lua')
function debug(m)
print("........ localisation "..m)
end
function Allumer(item)
if otherdevices[item] ~= 'On' then commandArray[item] = 'On' end
end
function Eteindre(item)
if otherdevices[item] ~= 'Off' then commandArray[item] = 'Off' end
end
-- Time to run?
time = os.date("*t")
-- toutes les minutes, on allume si l'adresse IP répond au ping
-- ce mécanisme n'est pas utilisé pour éteindre : contrairement
-- à Android, l'IPhone éteint le wifi quand il est en veille.
for ip, devicePresence in pairs(ips) do
-- local status = os.execute("ping -W 1 -q -c 1 "..ip) !! pas bon, comme as dit papoo
local status = os.execute("ping -W 1 -q -c 4 "..ip)
if status == true then
Allumer(devicePresence)
end
end
-- On vérifie toute les 10 minutes
if time.min % 10 == 2 then
--- Faire un premier appel pour recherche la position
urlCloud1 = ("curl -s -X POST -D - -o /dev/null -L -u '" .. username .. ":" .. password .. "' "
.. "-H 'Content-Type: application/json; charset=utf-8' "
.. "-H 'X-Apple-Find-Api-Ver: 2.0' "
.. "-H 'X-Apple-Authscheme: UserIdGuest' "
.. "-H 'X-Apple-Realm-Support: 1.0' "
.. "-H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' "
.. "-H 'X-Client-Name: iPad' "
.. "-H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' "
.. "-H 'Accept-Language: en-us' "
.. "-H 'Connection: keep-alive' https://fmipmobile.icloud.com/fmipservice/device/"
.. username .."/initClient")
-- debug("urlCloud1="..urlCloud1)
local handle = io.popen(urlCloud1)
local result = handle:read("*all")
handle:close()
-- Récupération de la position dans le resultat de la premiere URL
stageServer = string.match(result, "X%-Apple%-MMe%-Host%:%s(.*%.icloud%.com)")
-- Faire la deuxième url en cherchant le nom du tel / ipad ou autre avec jq
urlCloud2 = ("curl -s -X POST -L -u '" .. username .. ":" .. password .. "' "
.. "-H 'Content-Type: application/json; charset=utf-8' "
.. "-H 'X-Apple-Find-Api-Ver: 2.0' "
.. "-H 'X-Apple-Authscheme: UserIdGuest' "
.. "-H 'X-Apple-Realm-Support: 1.0' "
.. "-H 'User-agent: Find iPhone/1.3 MeKit (iPad: iPhone OS/4.2.1)' "
.. "-H 'X-Client-Name: iPad' -H 'X-Client-UUID: 0cf3dc501ff812adb0b202baed4f37274b210853' "
.. "-H 'Accept-Language: en-us' "
.. "-H 'Connection: keep-alive' "
.. "https://" .. stageServer .. "/fmipservice/device/" .. username .."/initClient ")
-- debug("urlCloud2="..urlCloud2)
local handle = io.popen(urlCloud2)
local result = handle:read("*all")
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local jsonPosition = json:decode(result)
handle:close()
latMaison, lonMaison = string.match(coordonneesGoogleDeLaMaison, "(%d+.%d+), (%d+.%d+)")
for i, iPhone in ipairs(jsonPosition.content) do
devicePresence=devices[iPhone.name]
debug("iPhone.name="..iPhone.name.."; devicePresence="..devicePresence
.."; iPh pos=("..iPhone.location.latitude..", "..iPhone.location.longitude..")")
if devicePresence ~= nil then
-- iPhone connu, on teste la position
distance=math.sqrt((111*(latMaison-iPhone.location.latitude))^2
+ (111*(lonMaison-iPhone.location.longitude))^2)
debug("Distance="..distance
..", TimeStamp="..iPhone.location.timeStamp
..", deltaT="..math.floor(os.time()-iPhone.location.timeStamp/1000).."s")
ici = ((math.abs(latMaison-iPhone.location.latitude) <= skew)
and (math.abs(lonMaison-iPhone.location.longitude) <= skew))
if ici then
Allumer(devicePresence)
debug(iPhone.name.." est ici!")
else
Eteindre(devicePresence)
debug(iPhone.name.." est absent!")
end
end
end
end
--Fin du script
return commandArray
Autre solution intéressante, que je n'ai pas explorée (mais je devrais), est l'utilisation de l'app gratuite "Locative" a télécharger sur l'App Store qui peut activer une URL lorsque vous arrivez dans une zone géographique.
Dernière modification par georges.attali le 23 juil. 2016, 16:35, modifié 3 fois.
Re: Détection de présence iPhone
Merci pour ce script georges.attali
chez moi le ping n'allume jamais mon device, status n'étant jamais à 0
j'ai modifié ton code
par
pour que cela fonctionne
j'ai aussi une erreur avec la ligne
du a la présence sur mon compte apple de plusieurs devices dont je ne veux pas localiser la position et qui génèrent une erreur
pour ceux qui auraient le même soucis, commenter cette ligne n'a aucune incidence sur le fonctionnement du script
chez moi le ping n'allume jamais mon device, status n'étant jamais à 0
j'ai modifié ton code
Code : Tout sélectionner
for ip, devicePresence in pairs(ips) do
local status = os.execute("ping -W 1 -q -c 1 "..ip)
if status == 0 then
Allumer(devicePresence)
end
endCode : Tout sélectionner
for ip, devicePresence in pairs(ips) do
local status = os.execute("ping -W 1 -q -c 1 "..ip)
if status == true then
Allumer(devicePresence)
end
endj'ai aussi une erreur avec la ligne
Code : Tout sélectionner
debug("iPhone.name="..iPhone.name.."; devicePresence="..devicePresence
.."; iPh pos=("..iPhone.location.latitude..", "..iPhone.location.longitude..")")du a la présence sur mon compte apple de plusieurs devices dont je ne veux pas localiser la position et qui génèrent une erreur
pour ceux qui auraient le même soucis, commenter cette ligne n'a aucune incidence sur le fonctionnement du script
Re: Détection de présence iPhone
Merci pour vos retour,
Je me penche sur le solution avec Locative, je viens de l'installer.
Je vous ferais un retour si ça fonctionne.
Pour info mes tentatives avec Nmap sont un échec lol
Je me penche sur le solution avec Locative, je viens de l'installer.
Je vous ferais un retour si ça fonctionne.
Pour info mes tentatives avec Nmap sont un échec lol
Re: Détection de présence iPhone
Il y a aussi la possibilité d'interroger la box via api pour récupérer les devices connectés.
J'ai tester sur ma livebox mais impossible de récupérer la liste de mon coté, peut être que d'autre auront plus de succès avec d'autre box.
J'ai tester sur ma livebox mais impossible de récupérer la liste de mon coté, peut être que d'autre auront plus de succès avec d'autre box.
-
georges.attali
- Messages : 58
- Inscription : 19 févr. 2016, 21:35
Re: Détection de présence iPhone
Bonjour,
suite au message de papoo, j'ai fait quelques tests, je crois que papoo a raison sur un point (le ping ne réponds pas ou répond mal), par contre, je maintiens que fait que os.execute renvoie 0 si le ping a marché (FAUX)
j'ai corrigé dans le code.
Merci !
suite au message de papoo, j'ai fait quelques tests, je crois que papoo a raison sur un point (le ping ne réponds pas ou répond mal), par contre, je maintiens que fait que os.execute renvoie 0 si le ping a marché (FAUX)
j'ai corrigé dans le code.
Merci !
Dernière modification par georges.attali le 23 juil. 2016, 16:36, modifié 1 fois.