NEWS
Ослеживание смартфонов с помощью приложения GPS Logger
-
Отслеживание местоположение андроид смартфонов
var http = require('http'); var server = http.createServer().listen(8089); server.on('request', function (req, res) { res.writeHead(200); if (req.method == 'POST') { var body = ''; } req.on('data', function (data) { body += data; console.log(body); }); req.on('end', function () { temp = body.split('&'); var obj = {}; res.write('hi'); res.end(); for (var key in temp) { temp2 = temp[key].split('='); var objkey = temp2[0]; var objval = temp2[1]; obj[objkey] = objval; } // console.log(getState('javascript.0.GPSLogger.' + obj.deviceid + '.deviceid').val); //console.log(Number(getState('javascript.0.GPSLogger.' + obj.deviceid + '.deviceid').val == true); if (getState('javascript.0.GPSLogger.' + obj.deviceid + '.deviceid').val) { //console.log('Смена параметров'); for (var param in obj) { setState('javascript.0.GPSLogger.' + obj.deviceid + '.' + param, obj[param], true); //console.log('set state - ' + param); } } else { for (param in obj) { //console.log('Установка параметров'); createState('GPSLogger.' + obj.deviceid + '.' + param, obj[param]); } } }); });
Настройки приложения на скриншотах во вложении.
Все параметры можно добавлять, удалять, менять название переменной, но deviceid должна быть именно в этом виде, а значение можете ей любое удобное поставить, оно используется для создания папки с данными в объектах. Задаются параметры в HTML-Body.
URL должен быть вида http://вашIP:порт (в скрипте 8089)
6786_photo_2018-10-04_17-17-07.jpg
6786_photo_2018-10-04_17-17-06.jpg
6786_photo_2018-10-04_17-17-05.jpg
6786_photo_2018-10-04_17-17-03.jpg
6786_photo_2018-10-04_17-17-02.jpg
6786_photo_2018-10-04_17-16-59.jpg -
Сделано на основании информации отсюда viewtopic.php?t=17435 и уважаемого автора Александра @cahek2202
Скрипт, который получает координаты с мобилы и на основании координат считает расстояния до заданных точек. И потом реагирует как нужно.
Расстояние с гугл/яндекс карт не совпадает с расчётным. хз как на картах считается расстояние. Имейте ввиду.
//данный блок лучше убрать в global секцию --- начало блока //Координаты дома и важных мест var long_дом =xx.xxxxxxxxxxxxxx; var alt_дом =xx.xxxxxxxxxxxxxx; var long_офис =xx.xxxxxxxxxxxxxx; var alt_офис =xx.xxxxxxxxxxxxxx; var long_школа =xx.xxxxxxxxxxxxxx; var alt_школа = xx.xxxxxxxxxxxxxx; //Мобила один - расстояния до объектов – ID 43a43eff узнаётся после получения первой посылки с мобилы createState('javascript.0.GPSLogger.43a43eff.доДома'); createState('javascript.0.GPSLogger.43a43eff.доОфиса'); createState('javascript.0.GPSLogger.43a43eff.доШколы'); //Мобила два - расстояния до объектов – ID 47fff2aa узнаётся после получения первой посылки с мобилы createState('javascript.0.GPSLogger.47fff2aa.доДома'); createState('javascript.0.GPSLogger.47fff2aa.доОфиса'); createState('javascript.0.GPSLogger.47fff2aa.доШколы'); //Переменные в MQTT для работы скриптов автовключения света при приближении к дому createState('javascript.0.MyHome.ЛюдиДома'); //флаг присутствия людей дома createState('javascript.0.MyHome.ProjON'); //флаг включения прожекторов //данный блок лучше убрать в global секцию --- конец блока //Сам скрипт //Скрипт получения координат с мобильнх телефонов //слушаем порт 8090 и получаем с него по POST запросу данные var http = require('http'); var server = http.createServer().listen(8090); var userA; server.on('request', function (req, res) { res.writeHead(200); if (req.method == 'POST') { var body = ''; } req.on('data', function (data) { body += data; console.log(body); }); req.on('end', function () { temp = body.split('&'); var obj = {}; res.write('hi'); res.end(); for (var key in temp) { temp2 = temp[key].split('='); var objkey = temp2[0]; var objval = temp2[1]; obj[objkey] = objval; } if (getState('javascript.0.GPSLogger.' + obj.deviceid + '.deviceid').val) { for (var param in obj) { setState('javascript.0.GPSLogger.' + obj.deviceid + '.' + param, obj[param], true); } } else { for (param in obj) { createState('GPSLogger.' + obj.deviceid + '.' + param, obj[param]); } } }); }); //Реагируем на изменение координат всех мобил, которые шлют данные on({id: /^javascript\.0\.GPSLogger.*\.latitude$/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; var numberA = obj.id.substring(31, 23); //Блок необходимый для places. Если places не используется, блок можно удалить. //получаем ID мобилы //соотносим имя из plces.0 и ID мобилы из скрипта if (numberA == '43a43eff') { userA = 'ИмяЧеловека1'; } else if (numberA == '47fff2aa') { userA = 'ИмяЧеловека2'; } //Записываем данные в объекты places sendTo("places.0", { user: userA, latitude: value, longitude: getState('javascript.0.GPSLogger.' + numberA + '.longitude').val, timestamp: getDateObject(getState('javascript.0.GPSLogger.' + numberA + '.latitude').ts).getTime() }); //Конец блока для places //Берём записанные в mqtt свежие координаты var long_target = getState('javascript.0.GPSLogger.' + numberA + '.latitude').val; var alt_target = getState('javascript.0.GPSLogger.' + numberA + '.longitude').val; //Cчитаем расстояние в метрах от мобилы до каждого объекта. Записываем в mqtt setState('javascript.0.GPSLogger.' + numberA + '.доДома', (6371*1000*Math.acos(Math.sin(Math.PI*alt_дом/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_дом/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_дом-long_target)/180))).toFixed()); setState('javascript.0.GPSLogger.' + numberA + '.доОфиса', (6371*1000*Math.acos(Math.sin(Math.PI*alt_офис/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_офис/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_офис-long_target)/180))).toFixed()); setState('javascript.0.GPSLogger.' + numberA + '.доШколы', (6371*1000*Math.acos(Math.sin(Math.PI*alt_школа/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_школа/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_школа-long_target)/180))).toFixed()); //Отправить в телеграмм расстояния до объектов в метрах. Нужно для отладки. //SendToTelegram(userA +' до дома '+ (6371*1000*Math.acos(Math.sin(Math.PI*alt_дом/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_дом/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_дом-long_target)/180))).toFixed(), getState('telegram.0.communicate.requestChatId').val); //SendToTelegram(userA +' до офиса '+ (6371*1000*Math.acos(Math.sin(Math.PI*alt_офис/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_офис/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_офис-long_target)/180))).toFixed(), getState('telegram.0.communicate.requestChatId').val); //SendToTelegram(userA +' до школы ' + (6371*1000*Math.acos(Math.sin(Math.PI*alt_школа/180)*Math.sin(Math.PI*alt_target/180)+Math.cos(Math.PI*alt_школа/180)*Math.cos(Math.PI*alt_target/180)*Math.cos(Math.PI*(long_школа-long_target)/180))).toFixed(), getState('telegram.0.communicate.requestChatId').val); //Блок проверки //Выключить весь свет, когда расстояния до мобил больше 400 метров и дома кто то был if ((getState('javascript.0.MyHome.ЛюдиДома').val) && (getState('javascript.0.GPSLogger.43a70ef7.доДома').val > 400) && (getState('javascript.0.GPSLogger.477182ff.доДома').val > 400)) { setState('javascript.0.MyHome.ЛюдиДома', false); setState('javascript.0.MyHome.ProjON', false); Управление_Светом('мы уехали'); } //Включить весь свет, когда расстояния до мобил меньше 400 метров и дома никого нет if (!(getState('javascript.0.MyHome.ProjON').val) && ((getState('javascript.0.GPSLogger.43a70ef7.доДома').val < 400) || (getState('javascript.0.GPSLogger.477182ff.доДома').val < 400))) { setState('javascript.0.MyHome.ЛюдиДома', true); setState('javascript.0.MyHome.ProjON', true); Управление_Светом('мы приехали'); } //Включить прожекторы при приближении к дому ближе 1000 метров if (!(getState('javascript.0.MyHome.ProjON').val) && ((getState('javascript.0.GPSLogger.43a70ef7.доДома').val < 1000) || (getState('javascript.0.GPSLogger.477182ff.доДома').val < 1000))) { setState('javascript.0.MyHome.ProjON', true); Управление_Светом('включи все прожекторы'); } });
#скрипт #телеграмм #расстояние #координаты #gps #гео #геолокация #определение #координаты