1

Получение истории перемещений

Topic: Получение истории перемещений

Скажите, как можно получить последние сто событий от каждого из блоков?
Ну, или не последние сто, а за период.

2

Получение истории перемещений

Re: Получение истории перемещений

Вы можете получить сообщения типа событие. выполнив запрос messages/load_interval с флагом 0x600.

Development Department
Gurtam
3

Получение истории перемещений

(edited by qx 21/05/2014 13:56:50)

Re: Получение истории перемещений

Ругается...

svc=messages/load_interval&params={
   "itemId":"704", // блок, который сейчас реально на связи
   "type":"3", // 3: ival1 - количество сообщений, которые будут извлечены до конца или времени, указанного в параметре ival2
   "ival1":"100", // согласно type - хочу 100 сообщений
   "ival2":"0xffffffff", // с конца периода
   "flags":"0x600", // как и научили
   "flagsMask":"0x0f", // наугад
   "loadLocations":"1", // очень хочу координаты
   "loadCount":"0xffffffff" // без ограничения по количеству
}

{
   "error" : 1001
}

Чем лучше ограничивать, кстати? ival1или loadCount?
Если с точки зрения SQL-запросов, что менее предпочтительнее?

4

Получение истории перемещений

Re: Получение истории перемещений

qx wrote:

Чем лучше ограничивать, кстати? ival1или loadCount?

Эти ограничения могут работать как по отдельности так и вместе.  При отсутствии ограничения по loadCount запросятся столько сообщений сколько вы попросите в ival1. А если ограничивать по loadCount, то запросятся все сообщения за интервал, а вам вернутся только сколько вы просили. Но зависит, естественно, от цели, которую вы хотите достичь, если вам нужно получить последние 100 сообщений, а выводить по 10, то можно использовать оба ограничения.

В запросе у вас неверно указан параметр ival2, там должно быть UNIX time.

Development Department
Gurtam
5

Получение истории перемещений

Re: Получение истории перемещений

zuve wrote:
qx wrote:

Чем лучше ограничивать, кстати? ival1или loadCount?

Эти ограничения могут работать как по отдельности так и вместе.

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

select * from (select ... where [condition list] limit 10000000000000) limit 10


и это сильно наклонит систему, когда я вздумаю пакетно запросить под 1000 объектов.

zuve wrote:

В запросе у вас неверно указан параметр ival2, там должно быть UNIX time.

Вроде, всё верно. 0xffffffff - вполне валидное время:

date -d @4294967295
Sun Feb  7 10:28:15 MSK 2106

Максимум, что может быть не так - uint как int хранится, но половинку я пробовал всовывать, результат тот же - error:1001

Я так уже сто раз делал:

svc=core/search_items&params={
        "spec":{
                "itemsType":"avl_unit",
                "propName":"sys_unique_id",
                "propValueMask":"356307045829999",
                "sortType":"guid"
        },
        "force":0,"from":0,
        "to":0xffffffff,
        "flags":0x8001
}
{
   "indexFrom" : 0,
   "totalItemsCount" : 1,
   "dataFlags" : 32769,
   "searchSpec" : {
      "sortType" : "guid",
      "itemsType" : "avl_unit",
      "propName" : "sys_unique_id",
      "propValueMask" : "356307045829999"
   },
   "indexTo" : 0,
   "items" : [
      {
         "cls" : 3,
         "nm" : "К777АК777",
         "id" : 777
      }
   ]
}
6

Получение истории перемещений

Re: Получение истории перемещений

qx wrote:

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

Разница есть, чем меньше Вы укажите в  ival1, тем быстрее выполнится запрос.
locadCount указывает лишь на то, сколько сообщений Вам визуализировать.

At the dark side of telematics...
7

Получение истории перемещений

(edited by qx 22/05/2014 15:00:31)

Re: Получение истории перемещений

Спасибо за ответ. Буду в курсе.
А как бороться с {"error":"1001"}?

8

Получение истории перемещений

Re: Получение истории перемещений

В общем-то никак, это ошибка означает что нет сообщений удовлетворяющих вашему запросу. Попробуйте маску 0xFF00. Проверьте есть ли сообщения вообще у данного юнита.

Development Department
Gurtam
9

Получение истории перемещений

Re: Получение истории перемещений

Разобрался. Надо маску флага выставить в 0.

3:
ival1 - количество сообщений, которые будут извлечены до конца или времени, указанного в параметре ival2

При type:3, отдается ival2 сообщений от указанной секунды вперед (поправьте, если не прав, можно даже отредактировав моё сообщение).

Если это возможно, добавьте type:4 или type:0 cо следующим функционалом:

ival1 -- количество сообщений, которые будут извлечены с конца или времени, указанного в параметре ival2

А во флагах сделать сортировку в одну или другую сторону.

Итого, сейчас работает такая конструкция:

svc=messages/load_interval&params={
   "itemId":"704", // блок, который сейчас реально на связи
   "type":"3", // 3: ival1 - количество сообщений, которые будут извлечены до конца или времени, указанного в параметре ival2
   "ival1":"100", // согласно type - хочу 100 сообщений
   "ival2":"0", // с конца периода
   "flags":"0x600", // как и научили
   "flagsMask":"0", // работает именно так
   "loadLocations":"0", // почтовые адреса не нужны
   "loadCount":"100" // повторяю значение ival1, для уменьшения нагрузки на СУБД
}
{
   "count" : 100,
   "messages" : [
      {
         "x2" : 37.870926591,
         "sc" : 0,
         "tp" : "udp",
         "x" : 37.8709546,
         "s" : 0,
         "l" : "",
         "y" : 55.7833505,
         "p" : {
            "param254" : 119,
            "battery_charge" : 0,
            "param253" : 1
         },
         "c" : 0,
         "f" : 3,
         "z" : 0,
         "i" : 5,
         "y2" : 55.7834711857,
         "t" : 1400828487
      },
      ...
   ]
}