gps и доступ извне

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

VladPTZ
Сообщения: 395
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 95 раз
Поблагодарили: 57 раз

Re: Модуль GPS-трекер

Сообщение VladPTZ » Ср сен 21, 2016 2:28 pm

Как сделать так:
Я говорю "Где находится Вася"
MD смотрит текущие координаты присланные с трекера.
Узнает адрес этих координат, например улица дом, популярный магазин.
И отвечает в терминал голосом "Вася сейчас на улице Пушкина 11 у магазина Магнит"
???
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Модуль GPS-трекер

Сообщение Dark_Veter » Ср сен 21, 2016 3:04 pm

Где-то тут на форуме было написано как это сделать, у гугла/яндекса есть такой сервис. Так же можете у меня в коннекте посмотреть.
За это сообщение автора Dark_Veter поблагодарил:
VladPTZ (Чт сен 22, 2016 11:15 am)
Рейтинг: 1.16%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
VladPTZ
Сообщения: 395
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 95 раз
Поблагодарили: 57 раз

Re: Модуль GPS-трекер

Сообщение VladPTZ » Чт сен 22, 2016 11:15 am

VladPTZ писал(а):Как сделать так:
Я говорю "Где находится Вася"
MD смотрит текущие координаты присланные с трекера.
Узнает адрес этих координат, например улица дом, популярный магазин.
И отвечает в терминал голосом "Вася сейчас на улице Пушкина 11 у магазина Магнит"
???
http://majordomo.smartliving.ru/forum/v ... 917#p37917
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
max37online
Сообщения: 39
Зарегистрирован: Ср сен 21, 2016 9:03 am
Благодарил (а): 4 раза
Поблагодарили: 5 раз

Re: Модуль GPS-трекер

Сообщение max37online » Чт сен 22, 2016 2:14 pm

Добрый день всем!

Вернусь к вопросу Big Brother GPS для ANdroid:

Как ему указать логин/пароль для заливки данных через CONNECT?

Наружу высовываться не очень хочу (белый IP есть....)...
Через VPN все работает, да не могу android заставить поднимать VPN автоматически... А вручную - неудобно...
К TASKERам и прочим другим механизмам прибегать не хочется...

Запасной вариант держу такой: открыться наружу ТОЛЬКО подсетям моего мобильного оператора, да и то пока не понимаю, как ограничить ВСЕ кроме gps.php....
eygen
Сообщения: 392
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а): 25 раз
Поблагодарили: 52 раза

Re: Модуль GPS-трекер

Сообщение eygen » Чт сен 22, 2016 2:41 pm

max37online писал(а):Добрый день всем!

Вернусь к вопросу Big Brother GPS для ANdroid:

Как ему указать логин/пароль для заливки данных через CONNECT?

Наружу высовываться не очень хочу (белый IP есть....)...
Через VPN все работает, да не могу android заставить поднимать VPN автоматически... А вручную - неудобно...
К TASKERам и прочим другим механизмам прибегать не хочется...

Запасной вариант держу такой: открыться наружу ТОЛЬКО подсетям моего мобильного оператора, да и то пока не понимаю, как ограничить ВСЕ кроме gps.php....
В поле URL http://connect.smartliving.ru/gps.php
В поле secret пишешь в таком формате login:password
Не забываешь в mdm настроить connect
max37online
Сообщения: 39
Зарегистрирован: Ср сен 21, 2016 9:03 am
Благодарил (а): 4 раза
Поблагодарили: 5 раз

Re: Модуль GPS-трекер

Сообщение max37online » Чт сен 22, 2016 4:10 pm

eygen писал(а):
В поле URL http://connect.smartliving.ru/gps.php
В поле secret пишешь в таком формате login:password
Не забываешь в mdm настроить connect
Мне казалось что я так пробовал....
Ладно, спасибо, буду пытаться!

А что в mdm настраивать?

В разделе CONNECT логин/пароль есть, Cloud Sync включено. Это все?

Update: Попробовал, с телефона вроде выгружается. Но в MDM не приходит....

Uddate2: Спасибо! Все вопросы снимаю! Нашел описание модуля, понял что не перезапускал циклы после включения connect! Все работает!!
VladPTZ
Сообщения: 395
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 95 раз
Поблагодарили: 57 раз

Re: Модуль GPS-трекер

Сообщение VladPTZ » Чт сен 22, 2016 6:15 pm

Есть у меня трекер TK-102
В итоге удалось кому подружить аппаратные GPS трекеры типа TK-102, TK-103
viewtopic.php?f=5&t=2433&start=10#p24504
Изображение
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Модуль GPS-трекер

Сообщение Dark_Veter » Чт сен 22, 2016 6:43 pm

Подключал через traccar. Настраиваете на работу с mysql, скрипт загрузки координат можете посмотреть у меня в коннекте.
За это сообщение автора Dark_Veter поблагодарили (всего 2):
VladPTZ (Чт сен 22, 2016 7:13 pm) • arivano (Ср ноя 09, 2016 4:00 pm)
Рейтинг: 2.33%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
SergNB
Сообщения: 15
Зарегистрирован: Вс ноя 29, 2015 11:13 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Модуль GPS-трекер

Сообщение SergNB » Пт сен 23, 2016 12:02 am

VladPTZ писал(а):Есть у меня трекер TK-102
В итоге удалось кому подружить аппаратные GPS трекеры типа TK-102, TK-103
viewtopic.php?f=5&t=2433&start=10#p24504
Подключал напрямую на RaspberryPi с использованием NodeJS
В таком трекере есть минимум 2 версии того, как он отдает координаты.
Одна версия расписана на GitHub и можно качать оттуда и сразу будет работать, для второго способа пришлось допиливать исходники.
кодПоказать
Состоит из 2х файлов, я совсем не программист, поэтому правил чужой код методом научного тыка и возможно он совсем не оптимальный.
Файл 1

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

//var querystring = require('querystring');
var server = require ('./tk102.js');
var http = require('http');

var host = '127.0.0.1';
var port = 80;
var path = '/gps.php';

function sendGPSData (rHost, rPath, rPort, GPSData) {
    rPath = rPath + '?latitude=' + GPSData.geo.latitude + '&longitude=' + GPSData.geo.longitude + '&deviceid=Tracker';

    var options = {
        host: rHost,
        port: rPort,
        path: rPath};

    var req = http.request(options, function(res) {
        var responseString = '';

        res.on('data', function(data) {
            responseString += data;
        });

        res.on('end', function() {
            console.log('\nHTTP response code:' + res.statusCode);
            console.log('\nResponse:' + responseString);
        });
    });

      req.end();

    req.on('error', function(e) {
        console.log('\nERROR: ' + e.message);
    });
}

function output (name, data) {
  console.log ('\nEvent: ' + name);
  console.dir (data, {
    colors: String (process.env.TERM) .match (/color$/)
  });
}

server.createServer ({
  port: 1336,
  timeout: 30
});

//debug log for all events
server.on ('log', output);

// incoming data received
server.on ('track', function (gpsData) {
  sendGPSData (host, path, port, gpsData);
});

Файл 2

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

/*
Name:         tk102
Description:  TK102 GPS server for Node.js
Author:       Franklin van de Meent (https://frankl.in)
Source:       https://github.com/fvdm/nodejs-tk102
Feedback:     https://github.com/fvdm/nodejs-tk102/issues
License:      Unlicense / Public Domain (see UNLICENSE file)
              (https://github.com/fvdm/nodejs-tk102/raw/master/UNLICENSE)
*/

var net = require ('net');
var http = require('http');
var EventEmitter = require ('events') .EventEmitter;
var tk102 = new EventEmitter ();

// HTTP GET settings
var options = {
  host: 'www.google.com',
  path: '/index.html'
};

// device data
var specs = [
  function (raw) {
    // 1203292316,0031698765432,GPRMC,211657.000,A,5213.0247,N,00516.7757,E,0.00,273.30,290312,,,A*62,F,imei:123456789012345,123
    var result = null;
    var lat1 = '';
    var lat2 = '';
    var lon1 = '';
    var lon2 = '';
    var gpsMsgType;

    try {
      result = {gpsMsgType: 'OTHER'};
      //raw = raw.trim ().replace(/[)][(]/g,'):(').split(/[:]/);
      var cmds = raw.trim ().replace(/[)][(]/g,'):(').split(/[:]/);
console.log('raw:'+raw+'raw.length:'+raw.length);
      for (var msg = 0; msg < raw.length; ++msg) {
          var command = cmds[msg].substr(13,4);
console.log('command:'+command);
          if (command =='BR00') {
        gpsMsgType = 'BR00';
        lat1 = cmds[msg].substr(24,9);
        lat2 = cmds[msg].substr(33,1);
        lon1 = cmds[msg].substr(35,9);
        lon2 = cmds[msg].substr(44,1);
        result = {
          raw: cmds[msg],
          gpsMsgType: gpsMsgType,
          lat1 : lat1,
          lat2 : lat2,
          lon1 : lon1,
          lon2 : lon2,
          geo: {
            latitude: tk102.fixGeo (lat1, lat2),
            longitude: tk102.fixGeo (lon1, lon2),
            },
          };
                 break;
        }
          }

    } catch (e) {
      result = null;
    }

    return result;
  }
];

// defaults
tk102.settings = {
  ip: '0.0.0.0',
  port: 0,
  connections: 10,
  timeout: 10
};


// Emit event
tk102.event = function (name, value) {
  tk102.emit (name, value);
  tk102.emit ('log', name, value);
};

// Catch uncaught exceptions (server kill)
process.on ('uncaughtException', function (err) {
  var error = new Error ('uncaught exception');

  error.error = err;
  console.log (error);
  tk102.event ('error', error);
});

// Create server
tk102.createServer = function (vars) {
  var key;

  // override settings
  if (typeof vars === 'object' && Object.keys (vars) .length >= 1) {
    for (key in vars) {
      tk102.settings [key] = vars [key];
    }
  }

  // start server
  tk102.server = net.createServer ();

  // maximum number of slots
  tk102.server.maxConnections = tk102.settings.connections;

  // server started
  tk102.server.on ('listening', function () {
    tk102.event ('listening', tk102.server.address ());
  });

  // inbound connection
  tk102.server.on ('connection', function (socket) {
    var connection = tk102.server.address ();

    connection.remoteAddress = socket.remoteAddress;
    connection.remotePort = socket.remotePort;

    tk102.event ('connection', connection);
    socket.setEncoding ('utf8');

    if (tk102.settings.timeout > 0) {
      socket.setTimeout (parseInt (tk102.settings.timeout * 1000, 10));
    }

    socket.on ('timeout', function () {
      tk102.event ('timeout', connection);
      socket.destroy ();
    });

    socket.on ('data', function (data) {
      var gps = {};
      var err = null;

      data = data.trim ();
      tk102.event ('data', data);
      
        if (data !== '') {
        gps = tk102.parse (data);

        if ((gps)&&(gps.gpsMsgType == 'BR00')) {
          tk102.event ('track', gps);
          //Send HTTP GET
          
        } else {
          err = new Error ('Cannot parse GPS data from the device');
          err.reason = err.message;
          err.input = data;
          err.connection = connection;

          tk102.event ('fail', err);
        }
      }
    });

    socket.on ('close', function (hadError) {
      connection.hadError = hadError;
      tk102.event ('disconnect', connection);
    });

    // error
    socket.on ('error', function (error) {
      var err = new Error ('Socket error');

      err.reason = error.message;
      err.socket = socket;
      err.settings = tk102.settings;

      tk102.event ('error', err);
    });
  });

  tk102.server.on ('error', function (error) {
    var err = new Error ('Server error');

    if (error === 'EADDRNOTAVAIL') {
      err = new Error ('IP or port not available');
    }

    err.reason = error.message;
    err.input = tk102.settings;

    tk102.event ('error', err);
  });

  // Start listening
  tk102.server.listen (tk102.settings.port, tk102.settings.ip);

  return tk102;
};

// Parse GPRMC string
tk102.parse = function (raw) {
  var data = null;
  var i = 0;

  while (data === null && i < specs.length) {
    data = specs [i] (raw);
    i++;
  }

  return data;
};

// Clean geo positions, with 6 decimals
tk102.fixGeo = function (one, two) {
  var minutes = one.substr (-7, 7);
  var degrees = parseInt (one.replace (minutes, ''), 10);

  one = degrees + (minutes / 60);
  one = parseFloat ((two === 'S' || two === 'W' ? '-' : '') + one);

  return Math.round (one * 1000000) / 1000000;
};

// Check checksum in raw string
tk102.checksum = function (raw) {
  var str = raw.trim () .split (/[,*#]/);
  var strsum = parseInt (str [15], 10);
  var strchk = str.slice (2, 15) .join (',');
  var check = 0;
  var i;

  for (i = 0; i < strchk.length; i++) {
    check ^= strchk.charCodeAt (i);
  }

  check = parseInt (check.toString (16), 10);
  return (check === strsum);
};

// ready
module.exports = tk102;

За это сообщение автора SergNB поблагодарил:
VladPTZ (Пт сен 23, 2016 7:47 am)
Рейтинг: 1.16%
VladPTZ
Сообщения: 395
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 95 раз
Поблагодарили: 57 раз

Re: Модуль GPS-трекер

Сообщение VladPTZ » Пт сен 23, 2016 7:51 am

SergNB писал(а):Одна версия расписана на GitHub и можно качать оттуда и сразу будет работать
А можно ссылку пожалуйста?
При использования способа 2 эти 2 скрипта куда в MD прикручиваются?
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Ответить