Сырые данные
Метод load_data - Запрос сырых данных
POST https://plus.auto-scan.ru/api/load_data
Используется для того, чтобы получить все сырые данные за указанный период.
Запрашивайте промежуток времени не более недели.
Если промежуток увеличить, то это приведёт к большой нагрузке на сервер и выходной json будет порядка сотни МБ.
Параметры
Имя | Тип | Описание |
---|---|---|
requests* | array | Массив с запросами вида {Request}, см. пример. |
* - обозначены обязательные параметры.
Тип Request
Для каждого устройства можно составить словарь такого вида:
Имя | Тип | Описание |
---|---|---|
device_id | int | ID-устройства в системе |
data_types | array | [“gps”, “events”, “autoscan”, “autoscan_foreign”, “autoscan_misc”] - запросим все типы сырых данных |
mintime | unixtime | Время в секундах от начала эпохи Unix, значение начала периода |
maxtime | unixtime | Время в секундах от начала эпохи Unix, значение конца периода |
Результат
В случае успеха возвращает JSON вида:
{
"ok": True,
"responses":[{
"ok": True,
"device_id": int,
"gps": [
[time, x, y, speed, provider, single, accuracy, satellites, hdop, altitude, avg_va],
...
],
"events": [
[event_name-time, time, event_name, x, y, duration, data, important],
...
],
"autoscan": {
acc: [[Unixtime, value], ...],
brake: [[Unixtime, value], ...],
run: [[Unixtime, value], ...],
ignition: [[Unixtime, value], ...],
spent: [[Unixtime, value], ...],
turn: [[Unixtime, value], ...],
angle: [[Unixtime, value], ...],
fuel: [[[Unixtime, value]], ...],
term: [[[Unixtime, value]], ...],
counter: [[[Unixtime, value]], ...],
},
"autoscan_misc": [
[[time, [type, param, data]], ...],
...
],
"autoscan_foreign": [
[[time, [type, p1, p2, data]], ...],
...
],
},]
}
Тип GPS array
Имя | Тип | Описание |
---|---|---|
time | unixtime | Время записи этой координатной точки |
x | float | Значение градусов по долготе (longtitude) |
y | float | Значение градусов по широте (latitude) |
speed | float | null | Скорость в км/ч |
provider | int | Если GPS, то 0; Если GSM (LBS), то 1 |
single | bool | Если точка не одиночная, то False. |
accuracy | int | null | Точность в метрах |
satellites | int | null | Количество спутников |
hdop | int | null | Горизонтальная точность (HDOP) |
altitude | int | null | Высота над уровнем моря (м) |
avg_va | float | null | Усреднённое вертикальное ускорение |
Тип Event
Имя | Тип | Описание |
---|---|---|
event_name-time | string | Строка с названием события и временем |
time | Unixtime | Время события |
event_name | string | Название события (“connected”, “disconnected”, “reconnected”, “GPSLost”, “GPSFound”, “GSMLost”, “GSMFound”, “Unknown” и т.д.) |
x | float | Значение градусов по долготе (longtitude) |
y | float | Значение градусов по широте (latitude) |
duration | int | null | Продолжительность события в секундах (Парковка 3600 секунд) |
data | dict | null | Дополнительная дата, вида: {reason: string} | {label: string} | {s: string}… |
important | boolean | Важное событие? |
Тип Autoscan
Это словарь с данными от устройства.
Имя | Тип | Тип элемента | Описание |
---|---|---|---|
acc | Array | Delta-time-Array<number | null> | Ускорение, 1g = 100 |
brake | Array | Delta-time-Array<number | null> | Торможение, 1g = 100 |
run | Array | Delta-time-Array<number | null> | Пробег, м |
ignition | Array | Delta-time-Array<boolean | null> | Зажигание |
spent | Array | Delta-time-Array<number | null> | Расход |
turn | Array | Delta-time-Array<number | null> | Поворот |
angle | Array | Delta-time-Array<number | null> | Угол поворота, в градусах |
fuel | Array | [Delta-time-Array<number | null>, Delta-time-Array<number | null>, …] | Топливо в вольтах /100, таких массивов может быть до 8 |
term | Array | [Delta-time-Array<number | null>, Delta-time-Array<number | null>, …] | Температура в вольтах /100, таких массивов может быть до 5 |
counter | Array | [Delta-time-Array<number | null>, Delta-time-Array<number | null>, …] | Счётчики, таких массивов может быть до 8 |
Формат Delta-time-Array
При передаче сохранённых данных как правило нужно закодировать набор значений, каждое из которых привязано к моменту времени. Например это могут быть GPS-координаты, значения температуры, события. Если при передаче таких данных в формате JSON каждую метку времени передавать в виде полного значения времени, то эти временные метки будут занимать значительный объём данных, иногда превышающий объём самих значений. Для экономии трафика мы используем простой способ дельта-кодирования временных меток, который в дальнейшем называем Delta-time Array.
Delta-time Array — это массив массивов следующей структуры:
[ [time1, ...], [time2, ...], ... [timeN, ...] ]
Первым элементом каждого массива является метка времени. Остальные элементы зависят от характера кодируемых данных.
Метки времени являются целыми числами подчинаются следующему правилу:
- Если метка времени — положительное число, то она обозначает время в формате unix time, то есть в целых секундах с 1970-01-01 00:00:00 (UTC). Например,
1495098587
обозначает 18.05.2017 12:09:47 (UTC+03) (московское время). - Если метка времени — отрицательное число, то её абсолютное значение означает разницу в секундах от предыдущей метки. Например,
-60
означает предыдущую метку времени плюс одна минута. Отрицательные значения меток могут идти друг за другом, и тогда каждая кодирует время, прошедшее от предыдущей.
Первая метка времени в массиве — всегда положительная. Последующие могут быть как положительными, так и отрицательными.
Тип Autoscan Misc
Разные данные, включая CAN
Имя | Тип | Описание |
---|---|---|
type | int | Строка с названием события и временем |
param | int | Параметры |
data | string | Битовая строка с данным |
Тип Autoscan Foreign
Иностранные
Имя | Тип | Описание |
---|---|---|
type | int | Тип разных данных |
p1 | int | Параметры 1 |
p2 | int | Параметры 2 |
data | string | Битовая строка с данным |
Пример
import requests
result = requests.post(
'https://plus.auto-scan.ru/api/load_data',
auth=('demo', 'demo'),
headers={'X-ZONT-Client': 'your@email', },
json={
"requests":[
{
"device_id": 10779,
"data_types": ["gps", "events", "autoscan", "autoscan_foreign", "autoscan_misc"],
"mintime": 1616068800,
"maxtime": 1616069159
},
]
}
).json()
print(result["responses"][0])
{
"device_id":10779,
"ok": true,
"events":[],
"gps":[
[1616068803,128.089917,51.3878,28,0,false,null,null,null,null,null],
[1616068809,128.0898,51.388233,30,0,false,null,null,null,null,null],
[1616068820,128.0896,51.389067,31,0,false,null,null,null,null,null],
[1616068825,128.089533,51.38945,32,0,false,null,null,null,null,null],
[1616068835,128.089417,51.390283,34,0,false,null,null,null,null,null], ...
],
"autoscan":{
"spent":[
[1616068800,0],[-300,0]
],
"turn":[
[1616068800,0],[-300,0]
],
"run":[
[1616068800,3161],
[-60,4888],
[-60,6009],
[-60,5215],
[-60,5998],
[-60,5800]
],
"acc":[
[1616068800,3],
[-60,2],
[-120,4],
[-120,3]
],
"brake":[
[1616068800,1],
[-120,3],
[-60,2],
[-60,3],
[-60,2]
],
"ignition":[
[1616068800,true],
[-300,true]
],
"angle":[
[1616068800,51],
[-60,59],
[-60,60],
[-60,65],
[-60,51],
[-60,57]
],
"term":[
[],
[],
[],
[],
[]
],
"fuel":[
[
[1616068800,119.49],
[-60,119.33],
[-60,119.2],
[-60,119.08],
[-60,119.02],
[-60,118.91]
],
[],[],[],[],[],[],[]
],
"counter":[
[],[],[],[],[],[],[],[]
]
},
"autoscan_misc":[
[
1616068803,
[4,0,"BwAR0AA="]
],
[-6,[4,0,"BwAR0QA="]],
[-11,[4,0,"BwAS0gA="]],
[-5,[4,0,"BwAR0gA="]],
[-10,[4,0,"BwAR0AA="]],
],
"autoscan_foreign":[]
}