Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Ослеживание смартфонов с помощью приложения GPS Logger

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Ослеживание смартфонов с помощью приложения GPS Logger

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      cahek2202 last edited by

      Отслеживание местоположение андроид смартфонов

      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

      1 Reply Last reply Reply Quote 0
      • S
        sscorpio last edited by

        Сделано на основании информации отсюда 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 #гео #геолокация #определение #координаты

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        911
        Online

        31.6k
        Users

        79.6k
        Topics

        1.3m
        Posts

        2
        2
        2180
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo