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

Anton Tananaev9 years ago

Обновил инструкцию. Нужно удалить все начиная с "database.changelog" и заканчивая "database.updateLatestPosition".

svins9 years ago

Теперь что-то получается. Traccar записал свои таблицы в БД gts сервера MSSQL OpenGTS. В логах Traccar вижу следующие ошибки:
tracker-server.log

2016-01-13 13:30:42  INFO: [B35057F0] connected
2016-01-13 13:30:42 DEBUG: [B35057F0: 5023 < 192.168.1.253] HEX: 78780d01035288707188432800072d950d0a
2016-01-13 13:30:44  WARN: Рядом с "REGEXP" в контексте, где ожидается условие, указано выражение типа, отличного от логического. - SQLServerException (... < QueryBuilder:376 < DataManager:232 < *:122 < *:142 < BaseProtocolDecoder:47 < ...)

в wrapper.log (правда не знаю, ошибка это, или просто предупреждение)

INFO   | jvm 1    [C3P0PooledConnectionPoolManager[identityToken->1bqym0z9eg8pj3j1c75knv|3eb9367a]-HelperThread-#0] WARN com.mchange.v2.c3p0.DriverManagerDataSource - Could not load driverClass com.microsoft.sqlserver.jdbc.SQLServerDriver

INFO   | jvm 1    java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
Anton Tananaev9 years ago

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

Что касается второй ошибки, то нужно подредактировать запрос. Надо заменить imeiNumber REGEXP '^[0-9]+$' на ISNUMERIC(imeiNumber) == 1.

svins9 years ago
Если создаются, значит конфигурация неправильная.
Вот так, согласно инструкции, настроено подключение к БД

<entry key='database.driverFile'>c:\Program Files\Traccar\lib\sqljdbc41.jar</entry>
<entry key='database.driver'>com.microsoft.sqlserver.jdbc.SQLServerDriver</entry>
<entry key='database.url'>jdbc:sqlserver://localhost;user=sa;password=***;</entry>
<entry key='database.user'>sa</entry>
<entry key='database.password'>***</entry>
Что касается второй ошибки, то нужно подредактировать запрос
Заменил imeiNumber REGEXP '^[0-9]+$' на ISNUMERIC(imeiNumber) == 1 в tracker-server.log новая ошибка
WARN: Неправильный синтаксис около конструкции "=". - SQLServerException (... < QueryBuilder:376 < 
DataManager:232 < *:122 < *:142 < BaseProtocolDecoder:47 < ...)
svins9 years ago

И еще, Антон, подскажи, пожалуйста. Я правильно понимаю логику интеграции Traccar И OpenGTS, что Traccar будет писать свои данные в таблицы, с которыми уже работает OpenGTS в БД gts? И как это работает, сразу же, как Traccar получает данные, или через какое-то время?

Anton Tananaev9 years ago

Traccar будет писать данные напрямую в OpenGTS сразу при получении данных. Попробуй ISNUMERIC(imeiNumber) = 1.

svins9 years ago

Теперь вот такие ошибки. Все запросы из инструкции скопированы, поменяно только ISNUMERIC(imeiNumber) = 1

2016-01-14 13:10:51  INFO: Version: 3.2-SNAPSHOT
2016-01-14 13:10:51  INFO: Query not provided: database.selectLatestPositions
2016-01-14 13:10:52  INFO: Starting server...
2016-01-14 13:10:54  INFO: [03D6822B] connected
2016-01-14 13:10:54 DEBUG: [03D6822B: 5023 < 192.168.1.253] HEX: 78780d01035288707188432800137b300d0a
2016-01-14 13:10:55 DEBUG: [03D6822B: 5023 > 192.168.1.253] HEX: 787805010013ea4f0d0a
2016-01-14 13:10:55  INFO: Query not provided: database.updateDeviceStatus
2016-01-14 13:11:38 DEBUG: [03D6822B: 5023 < 192.168.1.253] HEX: 78780a1340066400010013afe60d0a
2016-01-14 13:11:38 DEBUG: [03D6822B: 5023 > 192.168.1.253] HEX: 787805130013da620d0a
2016-01-14 13:11:38  INFO: Query not provided: database.updateDeviceStatus
2016-01-14 13:11:38  WARN: Неправильный синтаксис около ключевого слова "TRANSACTION". - SQLServerException (... < QueryBuilder:431 < DataManager:307 < DefaultDataHandler:27 < ...)
2016-01-14 13:11:38  INFO: [03D6822B] id: 352887071884328, time: 1970-01-01 03:00:00, lat: 0.00000, lon: 0.00000, speed: 0.0, course: 0.0
Anton Tananaev9 years ago

Попробуй вот эти запросы поставить в конфигурацию:

    <entry key='database.selectDevicesAll'>
        SELECT imeiNumber AS id, imeiNumber AS uniqueId FROM Device WHERE ISNUMERIC(imeiNumber) = 1;
    </entry>

    <entry key='database.insertPosition'>
        BEGIN TRAN;
            DECLARE @accountID varchar(32);
            DECLARE @deviceID varchar(32);

            UPDATE Device SET lastValidLatitude = :latitude, lastValidLongitude = :longitude, lastGPSTimestamp = :time, lastUpdateTime = GETDATE() WHERE imeiNumber = :deviceId;
            SELECT @accountID = accountID, @deviceID = deviceID FROM Device WHERE imeiNumber = :deviceId;
            INSERT INTO EventData (accountID, deviceID, timestamp, statusCode, latitude, longitude, speedKPH, heading, altitude, rawData, creationTime, address)
            VALUES (@accountID, @deviceID, :time, 0, :latitude, :longitude, :speed * 1.852, :course, :altitude, '', GETDATE(), :address);
        COMMIT TRAN;
    </entry>
svins9 years ago

Теперь такая ошибка


2016-01-14 15:33:13  INFO: Version: 3.2-SNAPSHOT
2016-01-14 15:33:14  INFO: Query not provided: database.selectLatestPositions
2016-01-14 15:33:14  INFO: Starting server...
2016-01-14 15:34:10  INFO: [A07F590D] connected
2016-01-14 15:37:02 DEBUG: [A07F590D: 5023 < 192.168.1.253] HEX: 78780a134006640001000e64820d0a
2016-01-14 15:37:02 DEBUG: [A07F590D: 5023 > 192.168.1.253] HEX: 78780513000e11060d0a
2016-01-14 15:37:02  INFO: Query not provided: database.updateDeviceStatus
2016-01-14 15:37:02  WARN: Конфликт типов операндов: datetime2 несовместим с bigint - SQLServerException (... < QueryBuilder:431 < DataManager:307 < DefaultDataHandler:27 < ...)
2016-01-14 15:37:02  INFO: [A07F590D] id: 352887071884328, time: 1970-01-01 03:00:00, lat: 0.00000, lon: 0.00000, speed: 0.0, course: 0.0
Anton Tananaev9 years ago

Вот еще одна попытка. Надеюсь теперь заработает:

    <entry key='database.selectDevicesAll'>
        SELECT imeiNumber AS id, imeiNumber AS uniqueId FROM Device WHERE ISNUMERIC(imeiNumber) = 1;
    </entry>

    <entry key='database.insertPosition'>
        BEGIN TRAN;
            DECLARE @accountID VARCHAR(32);
            DECLARE @deviceID VARCHAR(32);
            DECLARE @deviceTime BIGINT = DATEDIFF(S, '1970-01-01 00:00:00', DATEADD(HH, DATEDIFF(HH, GETDATE(), GETUTCDATE()), :time));
            DECLARE @databaseTime BIGINT = DATEDIFF(S, '1970-01-01 00:00:00', GETUTCDATE());

            UPDATE Device SET lastValidLatitude = :latitude, lastValidLongitude = :longitude, lastGPSTimestamp = @deviceTime, lastUpdateTime = @databaseTime WHERE imeiNumber = :deviceId;
            SELECT @accountID = accountID, @deviceID = deviceID FROM Device WHERE imeiNumber = :deviceId;
            INSERT INTO EventData (accountID, deviceID, timestamp, statusCode, latitude, longitude, speedKPH, heading, altitude, rawData, creationTime, address)
            VALUES (@accountID, @deviceID, @deviceTime, 0, :latitude, :longitude, :speed * 1.852, :course, :altitude, '', @databaseTime, :address);
        COMMIT TRAN;
    </entry>
svins9 years ago

Теперь такая ошибка


2016-01-15 08:36:45  INFO: Version: 3.2-SNAPSHOT

2016-01-15 08:36:45  INFO: Query not provided: database.selectLatestPositions

2016-01-15 08:36:46  INFO: Starting server...

2016-01-15 08:40:50  INFO: Query not provided: database.updateDeviceStatus

2016-01-15 08:40:50  WARN: The statement must be executed before any results can be obtained. - SQLServerException (... < QueryBuilder:433 < DataManager:307 < DefaultDataHandler:27 < ...)

2016-01-15 08:40:50  INFO: [FA7A469B] id: 352887071884328, time: 1970-01-01 03:00:00, lat: 0.00000, lon: 0.00000, speed: 0.0, course: 0.0

2016-01-15 08:43:46  WARN: Нарушение "PK__EventD__DBCDD2A929572725" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.EventData". - SQLServerException (... < QueryBuilder:433 < DataManager:307 < DefaultDataHandler:27 < ...)
Anton Tananaev9 years ago

Теперь похоже что все работает как надо. Проблема в том что устройство присылает некорректный данные. Возможная причина - отсутствие сигнала GPS.

svins9 years ago

Антон, не могу понять, данные от точки разные парсинг одинаковый, что не так, не пишет в базу.


2016-01-15 17:51:58  INFO: Query not provided: database.updateDeviceStatus
2016-01-15 17:51:58  WARN: Нарушение "PK__MSEventD__DBCDD2A929572725" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.MSEventData". - SQLServerException (... < QueryBuilder:433 < DataManager:307 < DefaultDataHandler:27 < ...)
2016-01-15 17:51:58  INFO: [41ABAD08] id: 352887071884328, time: 2016-01-15 17:49:18, lat: 57.30462, lon: 47.88286, speed: 21.1, course: 95.0
2016-01-15 17:54:53 DEBUG: [41ABAD08: 5023 < 192.168.1.253] HEX: 78780a131005640001009cadab0d0a
2016-01-15 17:54:53 DEBUG: [41ABAD08: 5023 > 192.168.1.253] HEX: 78780513009ca69d0d0a
2016-01-15 17:54:53  INFO: Query not provided: database.updateDeviceStatus
2016-01-15 17:54:53  WARN: Нарушение "PK__MSEventD__DBCDD2A929572725" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.MSEventData". - SQLServerException (... < QueryBuilder:433 < DataManager:307 < DefaultDataHandler:27 < ...)
2016-01-15 17:54:53  INFO: [41ABAD08] id: 352887071884328, time: 2016-01-15 17:49:18, lat: 57.30462, lon: 47.88286, speed: 21.1, course: 95.0
2016-01-15 17:57:50 DEBUG: [41ABAD08: 5023 < 192.168.1.253] HEX: 78780a131004640001009db8090d0a
2016-01-15 17:57:50 DEBUG: [41ABAD08: 5023 > 192.168.1.253] HEX: 78780513009db7140d0a
2016-01-15 17:57:50  INFO: Query not provided: database.updateDeviceStatus
2016-01-15 17:57:50  WARN: Нарушение "PK__MSEventD__DBCDD2A929572725" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo.MSEventData". - SQLServerException (... < QueryBuilder:433 < DataManager:307 < DefaultDataHandler:27 < ...)
2016-01-15 17:57:50  INFO: [41ABAD08] id: 352887071884328, time: 2016-01-15 17:49:18, lat: 57.30462, lon: 47.88286, speed: 21.1, course: 95.0

svins9 years ago

Понял в чем проблема. Трекер закреплен на окне, для тестов, при переносе в другое место данные изменились в базу записались. Какое то китайское чудо, время должно меняться с каждым пакетом.

Антон, посмотрите еще на одну ошибку, я начал переносить traccar с тестового сервера на рабочий, все точно такое же только MSSQL2012


2016-01-16 17:31:24 DEBUG: [2059C3F6: 5023 < 192.168.1.253] HEX: 78780a1340066400010007f9430d0a
2016-01-16 17:31:33 DEBUG: [2059C3F6: 5023 < 192.168.1.253] HEX: 78780d0103528870719119980008b3bc0d0a
2016-01-16 17:32:03  WARN: Connections could not be acquired from the underlying database! - SQLException (... < QueryBuilder:55 < *:131 < DataManager:231 < *:122 < *:142 < BaseProtocolDecoder:47 < ...)
Anton Tananaev9 years ago

Думаю что какая-то проблема с параметрами поключения к базе. Точно URL и пользователь правильные? Возможно у пользователя нету прав каких-нибудь?