не могу определить протокол.

svins9 years ago

Здравствуйте, извините что пишу сюда.
у меня поднят сервер OpenGTS, с английским у меня беда, поэтому там вопросы задавать, проблемно
бес попутал купить вот эту китайскую хрень, в количестве 3 шт.
http://www.aliexpress.com/item/Factory-Price-Vehicle-Car-GPS-SMS-GPRS-Tracker-Real-Time-Tracking-Device-Syatem-Remote-TK103B-51026/32512667554.html
у меня такое подозрение - это кастрат, (работает только через СМС)
что делал:

  1. begin123456
  2. apn123456 internet (для мегафона достаточно)
  3. gprs123456
  4. adminip123456 (ip port)
  5. fix015s***n123456
    пакеты на сервер идут
    но не один НЕХ редактор не декодирует

помогите советом...

Anton Tananaev9 years ago

Это протокол GT06. Порт - 5023.

Anton Tananaev9 years ago

Порт в предыдущем комментарии - это для Traccar. Для OpenGTS не знаю. Но в крайнем случае всегда можно интегрировать Traccar с OpenGTS.

svins9 years ago

Вчера целый день пытался сдружить traccar c opengts никак не могу подключится к SQL
перепробовал все драйвера с сайта Microsoft

tracker-server.log

2016-01-11 15:43:22  WARN: Недопустимое имя объекта "server". - SQLServerException (... < QueryBuilder:376 < *:275 < DataManager:327 < PermissionsManager:55 < ...)
2016-01-11 15:43:22  WARN: Недопустимое имя объекта "positions". - SQLServerException (... < QueryBuilder:376 < DataManager:322 < ConnectionManager:55 < ...)
2016-01-11 15:43:22  INFO: Starting server...
2016-01-11 15:43:24  INFO: [9A946014] connected
2016-01-11 15:43:24 DEBUG: [9A946014: 5023 < 192.168.1.253] HEX: 2a48512c3335353438383032303131333437342c56312c3132343332332c412c353731372e39323435392c4e2c30343735312e33383537332c452c302e30312c302c3131303131362c46464646464646462c66612c31342c313065662c65626134230d0a
2016-01-11 15:43:38  INFO: [2D9D9C90] connected
2016-01-11 15:43:38 DEBUG: [2D9D9C90: 5023 < 192.168.1.253] HEX: 78780d01035288707188432800063c1c0d0a
2016-01-11 15:43:38  WARN: Недопустимое имя объекта "devices". - SQLServerException (... < QueryBuilder:376 < DataManager:230 < *:118 < *:138 < BaseProtocolDecoder:47 < ...)

Антон, помогите мне в этой проблеме пожалуйста.

Anton Tananaev9 years ago

У вас OpenGTS на MS SQL работает?

svins9 years ago

config

<!-- DATABASE CONFIG -->
.
.
.
<entry key='database.createSchema'>
        CREATE TABLE [user] (
        id INT PRIMARY KEY IDENTITY(1,1),
        name VARCHAR(1024) NOT NULL,
        email VARCHAR(256) NOT NULL UNIQUE,
        hashedPassword VARCHAR(1024) NOT NULL,
        salt VARCHAR(1024) DEFAULT '' NOT NULL,
        readonly BIT DEFAULT 0 NOT NULL,
        admin BIT DEFAULT 0 NOT NULL,
        map VARCHAR(1024) DEFAULT 'osm' NOT NULL,
        language VARCHAR(1024) DEFAULT 'en' NOT NULL,
        distanceUnit VARCHAR(1024) DEFAULT 'km' NOT NULL,
        speedUnit VARCHAR(1024) DEFAULT 'kmh' NOT NULL,
        latitude FLOAT DEFAULT 0 NOT NULL,
        longitude FLOAT DEFAULT 0 NOT NULL,
        zoom INT DEFAULT 0 NOT NULL);

        CREATE TABLE [device] (
        id INT PRIMARY KEY IDENTITY(1,1),
        name VARCHAR(1024) NOT NULL,
        uniqueId VARCHAR(256) NOT NULL UNIQUE,
        status VARCHAR(1024),
        lastUpdate DATETIME,
        positionId INT,
        dataId INT);

        CREATE TABLE user_device (
        userId INT NOT NULL,
        deviceId INT NOT NULL,
        [read] BIT DEFAULT 1 NOT NULL,
        write BIT DEF

nId) REFERENCES position(id);

        ALTER TABLE device ADD
        FOREIGN KEY (dataId) REFERENCES data(id);

        CREATE TABLE server (
        id INT PRIMARY KEY IDENTITY(1,1),
        registration BIT NOT NULL,
        latitude FLOAT NOT NULL,
        longitude FLOAT NOT NULL,
        zoom INT NOT NULL);

        CREATE TABLE traccar (
        id INT PRIMARY KEY IDENTITY(1,1));

    </entry>

    <entry key='database.selectServers'>
        SELECT * FROM server;
    </entry>

    <entry key='database.insertServer'>
        INSERT INTO server (registration, latitude, longitude, zoom)
        VALUES (:registration, :latitude, :longitude, :zoom);
    </entry>

    <entry key='database.updateServer'>
        UPDATE server SET registration = :registration WHERE id = :id;
    </entry>

    <entry key='database.loginUser'>
SELECT * FROM [user]
        WHERE email = :email;
    </entry>

    <entry key='database.selectUsersAll'>
          SELECT * FROM "user";
    </entry>

  <entry key='database.insertUser'>
        INSERT INTO [user] (name, email, hashedPassword, salt, admin)
        VALUES (:name, :email, :hashedPassword, :salt, :admin);

AULT 1 NOT NULL,
        FOREIGN KEY (userId) REFERENCES [user](id) ON DELETE CASCADE,
        FOREIGN KEY (deviceId) REFERENCES device(id) ON DELETE CASCADE);

        CREATE INDEX user_device_user_id ON user_device(userId);

        CREATE TABLE position (
        id INT PRIMARY KEY IDENTITY(1,1),
        protocol VARCHAR(1024),
        deviceId INT NOT NULL,
        serverTime DATETIME NOT NULL,
        deviceTime DATETIME NOT NULL,
        fixTime DATETIME NOT NULL,
        valid BIT NOT NULL,
        latitude FLOAT NOT NULL,
        longitude FLOAT NOT NULL,
        altitude FLOAT NOT NULL,
        speed FLOAT NOT NULL,
        course FLOAT NOT NULL,
        address VARCHAR(1024),
        other VARCHAR(MA NOT NULL,
        FOREIGN KEY (deviceId) REFERENCES device(id) ON DELETE CASCADE);

        CREATE TABLE data (
        id INT PRIMARY KEY IDENTITY(1,1),
        protocol VARCHAR(1024),
        deviceId INT NOT NULL,
        serverTime DATETIME NOT NULL,
        deviceTime DATETIME NOT NULL,
        other VARCHAR(MA NOT NULL,
        FOREIGN KEY (deviceId) REFERENCES device(id));

        ALTER TABLE device ADD
        FOREIGN KEY (positio

'database.linkDevice'>
        INSERT INTO user_device (userId, deviceId) VALUES (:userId, eviceId);
    </entry>

    <entry key='database.selectPositions'>
        SELECT * FROM position WHERE deviceId = eviceId AND fixTime BETWEEN :from AND :to;    
    </entry>

    <entry key='database.insertPosition'>
        INSERT INTO position (deviceId, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, other)
        VALUES (eviceId, GETDATE(), :time, :time, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :other);
    </entry>

    <entry key='database.selectLatestPositions'>
        SELECT * FROM position WHERE id IN (SELECT positionId FROM device);
    </entry>

    <entry key='database.updateLatestPosition'>
        UPDATE device SET positionId = :id WHERE id = eviceId;
    </entry>

    </entry>

    <entry key='database.updateUser'>
        UPDATE [user] SET name = :name, email = :email, admin = :admin
        WHERE id = :id;
    </entry>

    <entry key='database.updateUserPassword'>
        UPDATE [user] SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id;
    </entry>
    
    <entry key='database.deleteUser'>
        DELETE FROM [user] WHERE id = :id;
    </entry>

    <entry key='database.getPermissionsAll'>
        SELECT userId, deviceId FROM user_device;
    </entry>
    
    <entry key='database.selectDevicesAll'>
        SELECT * FROM device;
    </entry>
    
    <entry key='database.selectDevices'>
        SELECT * FROM device d INNER JOIN user_device ud ON d.id = ud.deviceId WHERE ud.userId = :userId;
    </entry>
    
    <entry key='database.insertDevice'>
        INSERT INTO device (name, uniqueId) VALUES (:name, :uniqueId);
    </entry>
    
    <entry key='database.updateDevice'>
        UPDATE device SET name = :name, uniqueId = :uniqueId WHERE id = :id;
    </entry>
    
    <entry key='database.deleteDevice'>
        DELETE FROM device WHERE id = :id;
    </entry>
    
    <entry key=
svins9 years ago

sql 2008 r2
traccar 3.3

Anton Tananaev9 years ago

Не понял что это за конфигурация и откуда она взялась в версии 3.3.

svins9 years ago

испробовал кучу вариантов, в том числе официальный, не получалось. этот вариант нашел на каком-то форуме. как правильно прописать все

Anton Tananaev9 years ago

Я советую переустановить все и использовать официальный вариант. Если что-то не работает, давайте разберемся. То что вы взяли с форума либо некорректно либо уже не актуально.

svins9 years ago

в официальном варианте mySQL а у меня mssql, вы советуете перейти на mySQL?

Anton Tananaev9 years ago

Значит нужно сделать следующее:

  1. Сначала выполнить инструции по играции с OpenGTS (https://www.traccar.org/opengts/)

  2. Потом выполнить инструции для MS SQL кроме изменения SQL запросов (https://www.traccar.org/ms-sql/)

svins9 years ago

Первая инструкция предполагает, что OpenGTS Работает на MySQL, верно? Но у меня OpenGTS работает на MSSQL. Соответственно по этой инструкции я могу в настройках добавить только запросы?
Мои шаги слудующие:

  1. Есть работающий сервер OpenGTS на MSSQL

  2. В настройках Traccar я добавляю подключение к серверу MSSQL

        <entry key='database.driverFile'>C:\Program Files (x86)\Traccar\lib\sqljdbc41.jar</entry>
     <entry key='database.driver'>com.microsoft.sqlserver.jdbc.SQLServerDriver</entry>
     <entry key='database.url'>jdbc:sqlserver://localhost;database=gts;user=***;password=***;</entry>
     <entry key='database.user'>***</entry>
     <entry key='database.password'>***</entry>
  3. Дальше? Делать как в первой инструкции?
    Remove all SQL queries from the config (from database.createSchema to database.updateLatestPosition)
    Add OpenGTS-specific SQL queries

Anton Tananaev9 years ago

Да, из первой инструкции берите все за исключением всего что касается подключения к базе данных. Из второй берите настройки для соединения с базой.

svins9 years ago

Антон, подскажите по поводу инструкции по интеграции с OpenGTS
По инструкции, необходимо удалить из конфигурационного файла все SQL запросы, начиная database.createSchema и заканчивая database.updateLatestPosition
Вот мой конфиг, он идет по умолчанию, не измененный. В нем нет database.createSchema. Что именно в нем удалить?

   <entry key='database.changelog'>C:\Program Files (x86)\Traccar\data\db.changelog-master.xml</entry>

    <entry key='database.selectServers'>
        SELECT * FROM server;
    </entry>

    <entry key='database.updateServer'>
        UPDATE server SET
        registration = :registration,
        readonly = :readonly,
        map = :map,
        bingKey = :bingKey,
        mapUrl = :mapUrl,
        language = :language,
        distanceUnit = :distanceUnit,
        speedUnit = :speedUnit,
        latitude = :latitude,
        longitude = :longitude,
        zoom = :zoom
        WHERE id = :id;
    </entry>

    <entry key='database.loginUser'>
        SELECT * FROM users
        WHERE email = :email;
    </entry>

    <entry key='database.selectUser'>
        SELECT * FROM users
        WHERE id = :id;
    </entry>

    <entry key='database.selectUsersAll'>
        SELECT * FROM users;
    </entry>

    <entry key='database.insertUser'>
        INSERT INTO users (name, email, hashedPassword, salt, admin)
        VALUES (:name, :email, :hashedPassword, :salt, :admin);
    </entry>

    <entry key='database.updateUser'>
        UPDATE users SET
        name = :name,
        email = :email,
        admin = :admin,
        map = :map,
        language = :language,
        distanceUnit = :distanceUnit,
        speedUnit = :speedUnit,
        latitude = :latitude,
        longitude = :longitude,
        zoom = :zoom
        WHERE id = :id;
    </entry>

    <entry key='database.updateUserPassword'>
        UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id;
    </entry>

    <entry key='database.deleteUser'>
        DELETE FROM users WHERE id = :id;
    </entry>

    <entry key='database.getPermissionsAll'>
        SELECT userId, deviceId FROM user_device;
    </entry>

    <entry key='database.selectDevicesAll'>
        SELECT * FROM devices;
    </entry>

    <entry key='database.selectDevices'>
        SELECT * FROM devices d INNER JOIN user_device ud ON d.id = ud.deviceId WHERE ud.userId = :userId;
    </entry>

    <entry key='database.insertDevice'>
        INSERT INTO devices (name, uniqueId) VALUES (:name, :uniqueId);
    </entry>

    <entry key='database.updateDevice'>
        UPDATE devices SET name = :name, uniqueId = :uniqueId WHERE id = :id;
    </entry>

    <entry key='database.updateDeviceStatus'>
        UPDATE devices SET status = :status, lastUpdate = :lastUpdate WHERE id = :id;
    </entry>

    <entry key='database.deleteDevice'>
        DELETE FROM devices WHERE id = :id;
    </entry>

    <entry key='database.linkDevice'>
        INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId);
    </entry>

    <entry key='database.unlinkDevice'>
        DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId;
    </entry>

    <entry key='database.selectPositions'>
        SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime;
    </entry>

    <entry key='database.insertPosition'>
        INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes)
        VALUES (:deviceId, :protocol, :now, :time, :time, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes);
    </entry>

    <entry key='database.selectLatestPositions'>
        SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices);
    </entry>

    <entry key='database.updateLatestPosition'>
        UPDATE devices SET positionId = :id WHERE id = :deviceId;
    </entry>