[Apple] Использование Apple (find my device) в GPS-трэкере

Модераторы: immortal, newz20

tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

[Apple] Использование Apple (find my device) в GPS-трэкере

Сообщение tammat » Пт мар 14, 2014 3:52 am

Добрый день, всем!
Нашел интересную библиотеку
https://github.com/sinky/php-location-tracking-icloud по извлечению местоположений из iCloud(Aplle)
Принцип работы
В поле deviceID таблицы gpsdevices заносятся данные типа
[icloud_username]:[icloud_password]:[Id прибора в списке icloud, начиная с 0]
Из этой таблицы выбираются данные о приборах Apple(я в поле Title внес Apple
далее несколько модифицировал код gps.php
1.Выборка по всем приборам apple
2. Запрос к iCloud осуществляется со стороны MJ
3. Добавил в cron.

В gps.php есть следующий код

Код: Выделить всё

   if ($device[$iD]['USER_ID']) {
    $user=SQLSelectOne("SELECT * FROM users WHERE ID='".$device[$iD]['USER_ID']."'");
    if ($user['LINKED_OBJECT']) {
     setGlobal($user['LINKED_OBJECT'].'.Coordinates', $rec['LAT'].','.$rec['LON']);
     setGlobal($user['LINKED_OBJECT'].'.CoordinatesUpdated', date('H:i'));
     setGlobal($user['LINKED_OBJECT'].'.CoordinatesUpdatedTimestamp', time());
     setGlobal($user['LINKED_OBJECT'].'.BattLevel', $rec['BATTLEVEL']);
     setGlobal($user['LINKED_OBJECT'].'.Charging', $rec['CHARGING']);
     $prev_log=SQLSelectOne("SELECT * FROM gpslog WHERE ID!='".$rec['ID']."' AND DEVICE_ID='".$device[$iD]['ID']."' ORDER BY ID DESC LIMIT 1");
     if ($prev_log['ID']) {
      $distance=calculateTheDistance ($rec['LAT'], $rec['LON'], $prev_log['LAT'], $prev_log['LON']);
      if ($distance>100) {
       //we're moving
       //DebMes("Distance: ".$distance. " (point A: ".$rec['LAT'].":".$rec['LON']." point B: ".$prev_log['LAT'].":".$prev_log['LON'].")");
       setGlobal($user['LINKED_OBJECT'].'.isMoving', 1);
       clearTimeOut($user['LINKED_OBJECT'].'_moving');
       setTimeOut($user['LINKED_OBJECT'].'_moving', "setGlobal('".$user['LINKED_OBJECT'].".isMoving', 0);", 15*60); // stopped after 15 minutes of inactivity
      }
     }
    }
   }
 
1.Как использовать данный функционал, что бы хранить логины и пароли в deviceID.
2. Хотелось бы добавить список типов приборов (Apple,Andoroid, WinMobile) при внесении информации о приборах
3. Как бы бы этот скрипт запускать через cycle.php c определенной периодичностью.
Спасибо
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение LutsenkoDenis » Пт мар 14, 2014 9:48 am

Могу предложить зарефакторить таблицы gpsdevices, gpsactions, gpslocations и gps_log.
Добавить еще одну или возможно несколько табличек типа device_type и связать все вместе, удалив дублирующиеся поля.
:)

Хранить пароли в поле device_id считаю неправильным решением, хотя и имеющим право на существование от безысходности :)
Лучше сделать отдельную таблицу или поля в существующей таблице и дописать функционал.

С определенной периодичностью либо в крон, что железобетонно будет выполняться, либо что-то типа onNewMinute. использовать.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение LutsenkoDenis » Пт мар 14, 2014 1:42 pm

Эх, не удержался...
Черновой вариант, так сказать. Ссылка на модель, так как svg не показывает.

Коментарии к модели:
Таблицы:
  • 01. USERS (Пользователи) - список пользователей MDM
    02. DEVICE_TYPE(Виды устройств) - Виды доступных в MDM устройств(Apod, Android, Nokia и т.д.)
    03. DEVICE (Устройства) - Описание устройства, id и за кем из пользователей оно закреплено
    04. EXT_APP (Внешние приложения) - Внешние приложения от которых приходят данные
    05. EXT_APP_ICOUD (Внешнее приложение iCloud) - Набор данных относящийся к iCloud'у (логин, пароль и т.д)
    06. EXT_DEVICE (Устройства внешних приложений) - Таблица для привидения соответствий ID устройства внешнего приложения и ID устройства в MDM
    07. DEVICE_LOCATION (Местоположение устройства) - Текущие координаты устройства
    08. DEVICE_LOCATION_H (История местоположений устройства) - История перемещений устройства
    09. POS (Точка интереса) - Координаты магазина или еще какого объекта
    10. VPOS_USER - Расстояние от пользователя до точки интереса.
    11. VUSER_ACTION - Действие которое будет срабатывать при нахождении пользователя на указанном расстоянии до точки интереса.
Есть какие-либо замечания, пожелания или комментарии?
Последний раз редактировалось LutsenkoDenis Чт дек 11, 2014 11:59 am, всего редактировалось 2 раза.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение zelevova » Ср дек 10, 2014 5:24 pm

UPD: не актуально. Идем в маркет дополнений (iDevices). Там все проще. или в тему viewtopic.php?f=5&t=4930

Наконец дошли руки и я написал функцию для сабжа.
Для ее использования нужно извлечь прикрепленный архив в ROOT/lib (то есть добавить саму подключаемую функцию), а дальше использовать в коде:

Код: Выделить всё

findMyiPhone($AppleID, $ApplePass, $id, $timeout); //Ищет устройство и заполняет данные для приложения GPS-трэкер, а так же обновляет объект User привязанный в приложении
soundToMyiPhone($AppleID, $ApplePass, $subject, $id); // воспроизводит звуковое оповещение на устройстве
messageToMyiPhone($AppleID, $ApplePass, $message, $subject, $sound, $id); // Выводит сообщение на устройстве, звуковое сопровождение опционально        
Где:
  • AppleID - понятно.
    ApplePass - пароль к AppleID
    id - номер устройства, по умолчанию 0, если устройство к AppleID привязано одно, можно не указывать.
    timeout - таймаут поиска, по умолчанию 240.
    subject - текст заголовка, по умолчанию пустой
    message - текст сообщения.
    sound - воспроизводить звук, по умолчанию true.
Параметры которые заданны по умолчанию, можно не указывать.

Теперь умный дом может вывести список покупок прямо на экран устройства Apple когда ты приехал в магазин.

Обнаружилось что при заходе с нового устройства, компания apple первые 100 раз шлет письмо с предупреждением, а потом устает. Как это побороть пока не знаю.

PS: Засыл писем вроде нашел где отключается. Кто бы проверил на свежей связке... :)

UPD: не актуально. Идем в маркет дополнений. Там все проще.
Последний раз редактировалось zelevova Пн дек 25, 2017 2:58 am, всего редактировалось 10 раз.
За это сообщение автора zelevova поблагодарили (всего 5):
tammat (Пт дек 12, 2014 12:06 pm) • Amarok (Вт мар 31, 2015 12:23 pm) • Palkin (Пт апр 03, 2015 10:49 pm) • ak666 (Чт дек 17, 2015 6:16 pm) • Xseon (Вт янв 26, 2016 12:01 am)
Рейтинг: 5.81%
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение sergejey » Ср дек 10, 2014 6:49 pm

Очень интересно... А как часто можно опрашивать этот сервис? Может какие лимиты есть?

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение Vovix » Ср дек 10, 2014 9:11 pm

zelevova писал(а):Наконец дошли руки и я написал функцию для сабжа.
Для ее использования нужно извлечь прикрепленный архив в ROOT/lib (то есть добавить саму подключаемую функцию), а дальше использовать в коде:

Код: Выделить всё

findMyiPhone($AppleID, $ApplePass, $id); 
Где:
AppleID - понятно.
ApplePass - пароль к AppleID
id - номер устройства.

Функция заполняет все возможные поля для приложения GPS-трэкер (код заполнения взят из gps.php)

Осталось только придумать как хранить пароли не в коде.

Прошу тестировать.

Очень нужная вещь!
А то сейчас Btraced, если включен, садит батарею за ЕДИНИЦЫ часов!!!

Пароли AppleID в коде это ОПАСНО!!!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение zelevova » Чт дек 11, 2014 9:49 am

sergejey писал(а):Очень интересно... А как часто можно опрашивать этот сервис? Может какие лимиты есть?
Оставил тестировать на ночь, опрос каждые 15 минут. Пока не забанили :))
Мы вроде как представляемся iPhone'ом, а сервис непосредственно Apple и делаем вид что просто пользователь все время обновляет. Я бывает сам с устройства Apple мониторю когда Жена ко мне едет и обновляю очень часто, так что думаю лимитов нет.
Vovix писал(а):А то сейчас Btraced, если включен, садит батарею за ЕДИНИЦЫ часов!!!

Пароли AppleID в коде это ОПАСНО!!!
Я думаю так батарея будет садиться чуть помедленнее, но не сильно. Ибо gps регулярно опрашивается. Тут важен период опроса, чем реже опрашиваем, тем меньше садиться батарея.
Пароли как вариант хранить в свойствах пользователя. Так они не будут видны в connect :) Пока не могу придумать куда их еще запрятать. Может у кого то есть мысли по этому поводу?

Вопрос как фильтровать дублирующие записи. Например за ночь накапливается кучка записей о том что мы дома. Btraced отправляет данные только при перемещении или так же через заданные интервалы?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение Vovix » Чт дек 11, 2014 10:11 am

zelevova писал(а): ...Btraced отправляет данные только при перемещении или так же через заданные интервалы?...
Пользую Btraced регулярно.
Там настраивается и расстояние перемещения, после которого происходит фиксация и отправка
и время, через которое отправлять и фиксировать координаты!
но батарею просто "убивает" буквально за 2-3 часа!
( у меня установлено 200 метров и 2 минуты, больше не интересно, меньше иногда ставлю 100 метров)

А вот приложение "Мои друзья" (родное) у меня всегда работает (и работало) и хватало батареи на 1 день (иногда сутки) стабильно!
Может, конечно, за мной часто ни кто не следил...
Наверно надо пробовать...

И еще такие "прелести" как узнать заряд батареи iPhone, или "в зарядке" или нет, на iPhone средствами Btraced не передаются, а вот интересно через "Найти iPhone" что-то идет кроме координат?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение zelevova » Чт дек 11, 2014 11:23 am

Конечно идет. Обновил функцию. Теперь она в пользователя фиксирует не только координаты, но и заряд в процентах и статус заряжается сейчас или нет.
Еще можно узнать "класс устройства" (iPad, iPhone, iPod, MacBook), "статус устройства" и "модель устройства".

Пока бывает не все данные успевает подтянуть. Видимо нужно таймаут опроса увеличить и проверку на точное позиционирование сделать. Сейчас максимальное время опроса 120 сек.

UPD: за 2 часа мониторинга с интервалом в 2 минуты батарея на полностью заряженном iPade села на 0%. Т.е. не изменила свой заряд совсем. Устройство почти все это время находилось в режиме ожидания для чистоты эксперимента. При таком интервале опроса данные о заряде получаются корректные, при увеличении интервала до 15 минут данные о заряде не всегда успевают обновляться с первого раза.

Добавил поля в объекте пользователь и теперь вызываю в onNewMinute так:

Код: Выделить всё

// Каждые 2 минут
if (!($m%2)) {
    findMyiPhone(gg('username.AppleID'), gg('username.ApplePass'));
   // можно попробовать переделать что бы передавать просто "username"
}
Сергей насколько безопасно хранить в полях объектов пароли с точки зрения архитектуры системы?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Использование Apple (find my device) в GPS-трэкере

Сообщение Vovix » Чт дек 11, 2014 9:31 pm

у меня почему-то не работает!!!???

при чем на почту навалилось куча писем от Apple:
Ваш Apple ID использовался для входа в приложение «Найти iPhone»

тестовый запуск вываливается вот с этим:

Код: Выделить всё

Fatal error: Maximum execution time of 60 seconds exceeded in C:\_majordomo\htdocs\lib\findMyiPhone\FindMyiPhone.php on line 174
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Ответить