Тема: Получение истории перемещений
Скажите, как можно получить последние сто событий от каждого из блоков?
Ну, или не последние сто, а за период.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Скажите, как можно получить последние сто событий от каждого из блоков?
Ну, или не последние сто, а за период.
Вы можете получить сообщения типа событие. выполнив запрос 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 пишет:Чем лучше ограничивать, кстати? 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
},
...
]
}