Тема: Вопрос по Remote API SDK
Здравствуйте. Для реализации наметилось следущее ТЗ.
Нужно сделать скрипт который раз в несклько секунд будет записывать все координаты всех обьектов в системе Wialon в стороннюю БД. Реализация на php и MS Sql.
Прошу проследить ход моих соображений и поправить или дать совет где чтото сделать не так.
1) Авторизируемся с помощью команды core/login;
2) Нужно получить собственно список обьектов и их координаты/время
Тут можно использовать или команду core/update_data_flags или core/search_item. Хотя в данном случае думаю что core/update_data_flags будет предпочтительней с той стороны, что потом в этой же сессии можно использовать команду avl_evts и в результате будут приходить все координаты, которые еще не приходили ранее. Тогда, когда core/search_item будет присылать только последние координаты.
Но существует одно НО. Если использовать одно постоянное подключение (1 сессию), то как можно узнать о создании нового обьекта в системе?
В случае удаления приходит сообтветствующее событие, а вот в случае добавления обьекта такого события не замаетил. Или это событие регистрируется если добавить в сессию пользователя (с помощью той же команды core/update_data_flags)?
3)Отдельный вопрос - за что отвечает флаг 0x00000020 - сообщения у обьектов? В его описании сказано :"Установка данного флага позволяет принимать сообщения от объекта." Мне это не совсем понятно.
Прошу строго не судить, т.к. в самом Wialon разбираюсь мало. Прошу Высказать свои предположения по этому поводу или свою реализацию если кто-то с таким сталкивался.
________________________________________________________________
Вот, собственно, сделал что-то рабочее:
- скрипт использует php cli и mysql
- скрипт подключается к Виалон SDK через php_curl и к своей БД
- При первом запуске заносит в сессию и в БД все объекты и загружает сообщения от этих объектов за некий период (по умолчанию неделя). При последующих запусках скрипт загружает сообщения с того времени, когда была последняя запись в БД для этого объекта.
- После того как были занесены все старые сообщения (это может быть длительно), скрипт ищет (и добавляет) объекты что появились за это время.
- Дальше получает события от объектов и заносит их в БД.
- Ждет несколько секунд, потом опять ищет новые объекты, потом опять запрашивает события, опять ждет и т.д.
БД содержит 3 таблицы
1) поля id и number (имя объекта )
2) id, object_id, latitude, logitude, time (в формате datetime) - таблица с последними координатами объекта
3) id, object_id, latitude, logitude, time, speed - таблица треков объектов
Дополнительно:
- В случае если лег mysql - скрипт держит соединение с SDK (пока это возможно) и пытается переподключится. - протестировано;
- Если обрывается связь с СДК - скрипт тоже должен пытаться переподключится... (не тестировано)
- Скрипт работает бесконечным циклом;
- Все ошибки выводятся в консоль (логов пока нету);
- нету транзакций при записи данных в БД. Не смотрел надо ли их вообще делать т.к. все данные отправляются 1 запросом. Запись 1 запросом - это тонкое место в скрипте т.к. при загрузке старых сообщений при 1-м запуске, скажем за 1 месяц, у mysql может не хватить памяти... При тестировании во время загрузки сообщений за 2 месяца - приходило до 600 000 сообщений от объекта...
- Скрипт не очень комментирован, но это немного компенсируется текстом в echo и чтением доков к СДК
- Скрипт тестировался на протяжении пока только на протяжении 12 часов...
_____________________________________________________________
Немного исправил ошибки когда скрипт не понимал что разорвано соединение с Виалон. Добавил ведения лога ошибок.
Ну вот как то так...
Если кому нужно - то вот рабочий пример.
Все замечания и предложения приветствуются.