Topic: Получение истории перемещений
Скажите, как можно получить последние сто событий от каждого из блоков?
Ну, или не последние сто, а за период.
New account creation is currently unavailable. Existing members can continue reading and joining discussions.
Скажите, как можно получить последние сто событий от каждого из блоков?
Ну, или не последние сто, а за период.
Вы можете получить сообщения типа событие. выполнив запрос messages/load_interval с флагом 0x600.
Ругается...
svc=messages/load_interval¶ms={
   "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-запросов, что менее предпочтительнее?
Чем лучше ограничивать, кстати? ival1или loadCount?
Эти ограничения могут работать как по отдельности так и вместе. При отсутствии ограничения по loadCount запросятся столько сообщений сколько вы попросите в ival1. А если ограничивать по loadCount, то запросятся все сообщения за интервал, а вам вернутся только сколько вы просили. Но зависит, естественно, от цели, которую вы хотите достичь, если вам нужно получить последние 100 сообщений, а выводить по 10, то можно использовать оба ограничения.
В запросе у вас неверно указан параметр ival2, там должно быть UNIX time.
qx wrote:Чем лучше ограничивать, кстати? ival1или loadCount?
Эти ограничения могут работать как по отдельности так и вместе.
То есть, разницы в плане нагрузки не будет. Меня беспокоило, что может там что-то вроде 
select * from (select ... where [condition list] limit 10000000000000) limit 10 
и это сильно наклонит систему, когда я вздумаю пакетно запросить под 1000 объектов.
В запросе у вас неверно указан параметр ival2, там должно быть UNIX time.
Вроде, всё верно. 0xffffffff - вполне валидное время:
date -d @4294967295
Sun Feb  7 10:28:15 MSK 2106Максимум, что может быть не так - uint как int хранится, но половинку я пробовал всовывать, результат тот же - error:1001
Я так уже сто раз делал:
svc=core/search_items¶ms={
        "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
      }
   ]
}То есть, разницы в плане нагрузки не будет. Меня беспокоило, что может там что-то вроде
Разница есть, чем меньше Вы укажите в  ival1, тем быстрее выполнится запрос.
locadCount указывает лишь на то, сколько сообщений Вам визуализировать.
В общем-то никак, это ошибка означает что нет сообщений удовлетворяющих вашему запросу. Попробуйте маску 0xFF00. Проверьте есть ли сообщения вообще у данного юнита.
Разобрался. Надо маску флага выставить в 0.
3:
ival1 - количество сообщений, которые будут извлечены до конца или времени, указанного в параметре ival2
При type:3, отдается ival2 сообщений от указанной секунды вперед (поправьте, если не прав, можно даже отредактировав моё сообщение).
Если это возможно, добавьте type:4 или type:0 cо следующим функционалом:
ival1 -- количество сообщений, которые будут извлечены с конца или времени, указанного в параметре ival2
А во флагах сделать сортировку в одну или другую сторону.
Итого, сейчас работает такая конструкция:
svc=messages/load_interval¶ms={
   "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
      },
      ...
   ]
}