Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Ослеживание смартфонов с помощью приложения GPS Logger

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
2 Beiträge 2 Kommentatoren 2.3k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    cahek2202
    schrieb am zuletzt editiert von
    #1

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

    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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      sscorpio
      schrieb am zuletzt editiert von
      #2

      Сделано на основании информации отсюда 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 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      713

      Online

      32.4k

      Benutzer

      81.5k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2025
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Tags
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe