developer77 wrote:

Не проще ли используя threading держать сессию в рамках приложения.... И подставлять sid в запросы...

к примеру, для приложения на базе PyQt5 правильно будет объявить QThread и внутри него вызывать класс WIalon из wialon-python, на каком-то асинхронном фреймворке типа aiogram - лучше воспользоваться моим форком py-aiowialon

developer77 wrote:

Не проще ли используя threading держать сессию в рамках приложения.... И подставлять sid в запросы...


Проще с помощью event_handler реагировать на ивенты, если нужно отслеживать изменения в рамках одной сессии, по аналогии с тем как это делает wialon.js.

Если у вас нет необходимости следить за ивентами, то можете поддерживать сессию открытой любым удобным вам способом, вызывать avl_evts ручками, когда вам будет нужно.

Опять же зависит от того какой подход написания кода вы предпочли, мне удобнее работать с async методами объекта, чем держать запущенным еще один поток

developer77 wrote:

А в классе Виалон, желательно ещё метод получения токена, путем предоставления логина/пароля/урл_апи.

этот метод не доступен уже очень давно, токен можно получить только через токен менеджер, через веб-форму авторизации или из уже открытой сессии, в веб-форму не возможно подставить пароль заведомо, только ввести ручками.

Сделал асинхронный форк библиотеки на aiohttp
py-aiowialon

Добавил Wialon.start_poling() метод и декоратор Wialon.event_handler() для отслеживания avl_evts,
token теперь можно указать прямо при создании объекта класса Wialon

+ Установка
pip install aiohttp
pip install py-aiowialon
+ Пример использования
import asyncio
from aiowialon import Wialon, WialonEvents, WialonEvent, flags


is_init = True


def run():

    wialon_session = Wialon(host='TEST HOST', token='TEST TOKEN')

    async def add_evts_to_session():
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 100}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        ids = [u['id'] for u in units['items']]

        spec = [
            {
                "type": "col",
                "data": ids,
                "flags": flags.ITEM_DATAFLAG_BASE + flags.ITEM_UNIT_DATAFLAG_POS,
                "mode": 0
            }
        ]
        await wialon_session.core_update_data_flags(spec=spec)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        global is_init
        if is_init:
            await add_evts_to_session()
            is_init = False

        if 116106 in events.data:
            item_event: WialonEvent = events.data[116106]
            print(item_event.item, item_event.e_type, item_event.desc)

    @wialon_session.event_handler
    async def event_handler(events: WialonEvents):
        spec = {
            'itemsType': 'avl_unit',
            'propName': 'sys_name',
            'propValueMask': '*',
            'sortType': 'sys_name'
        }
        interval = {"from": 0, "to": 0}
        units = await wialon_session.core_search_items(spec=spec, force=1, flags=5, **interval)
        print(events.__dict__, units['totalItemsCount'])

    wialon_session.start_poling()


if __name__ == '__main__':
    run()

Код приведенный ниже вернет ошибку Invalid service
Хотя вызов sess.updateDataFlags(
     [{ type: "type", data: "avl_resource", flags: flags, mode: 0 }],
     (code, data) => console.log(code, data)
) напрямую, выполняется без ошибок.

function waitCallBack (func, args) {
    return new Promise(
        function(resolve, reject) {
            func(args, (code, data) => {
                resolve(wialon.core.Errors.getErrorText(code), data)
            })
        }
    )
}

async function setDataFlags() {
    sess = wialon.core.Session.getInstance()
    sess.loadLibrary("resourceAccounts")
    let flags = wialon.item.Item.dataFlag.base | wialon.item.Item.dataFlag.billingProps;
    ret = await waitCallBack(
        sess.updateDataFlags,
        [{ type: "type", data: "avl_resource", flags: flags, mode: 0 }],
    )
    return ret
}

setDataFlags()

Как вызвать такой алерт?

Для ошибок используется

WebCMS.log_msg(WebCMS.get_error_text(error_code), 2)

Как вызвать такой же алерт но для info, warning и т. д.?
Как я понимаю, можно использовать

 WialonHosting.alerts

, но как правильно? при вызове   

 WialonHosting.alerts.info(e, t)

, появляется пустой алерт

Столбцы таблицы отчёта, которые добавляют через калькулятор, не суммируются в строке "Итого"

Вы можете использовать запрос core/search_item или core/search_items

https://sdk.s-watcher.com/wiki/ru/kit/remo … arch_items

Так же ознакомьтесь с разделом "форматы данных"

Проблема с отчетами - это 100% баг
Проблема с импортом - речь не о формате, а о типе данных

Да, клиенты используют Wialon Local, так-же о части проблем сообщают интеграторы.
Все проблемы были предварительно проанализированы и сымитированы нашими специалистами и подтверждены
В большинстве случаев клиенты отказались от использования Logistics из-за вышеуказанных проблем.

Ввиду разморозки разработки модуля, составили данный список неисправностей, который скорее всего еще будет дополняться

11

(176 replies, posted in Wialon)

Необходима доработка!

1. Добавить возможность автоназначения шаблонов маршрутов по заранее установленному расписанию
например ПН,ВТ,СР,СБ, каждый день/каждую неделю и т. д.
Клиенты часто имеют постоянные маршруты и не хотят каждый день заново их распределять вручную

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

То-есть:
Авто 1 - Геозона 1 (Заявки 1,2,3..) + Геозона 2 (Заявки 1,2,3...)
Авто 2 - Геозона 3 (Заявки 1,2,3..) + Геозона 4 (Заявки 1,2..) + Геозона 5 (Заявки 1,2,3..)
При этом заявки из Геозон 1 и 2 не могут быть распределены на Авто 2, а заявки из геозон 3,4,5 соответственно не попадут на Авто 1

Сейчас при планировании на несколько геозон нескольких объектов получаем пересечения маршрутов между десятками геозон и маршрут получается не оптимальный. Вручную же фильтровать каждый раз заявки по геозонам и планировать на каждую машину отдельно, клиенты не хотят

3. Реализовать возможность подсчета запросов к API google maps/yandex maps для биллинга Wialon Local
Сейчас запросы никоим образом не логируются и ограничить или подсчитать их количество на одного клиента не возможно
необходимо реализовать данную опцию, для упрощения биллинга (добавить или в свойства у/з во вкладку "услуги", или непосредственно в Logistics)
Второй вариант решения данной проблемы - белые домены для сервиса Logistics и привязка ключей токенов gmaps/ymaps API к этим доменам, так как это уже реализовано в Wialon Local для слоев карт, геокодирования, маршрутизации.


Доработки мобильного приложения:

1. Фиктивное местоположение

Необходимо, что бы мобильное приложение Loigistics/Logistics Local, по аналогии с WiaTag присылало параметр mc?

0x1 — если в настройках устройства активирована опция, разрешающая отправлять фиктивное
местоположение;
0x2 — если на устройстве есть хоть одно приложение, запрашивающее права для отправки
фиктивного местоположения;
0x4 —  если в местоположении объекта проставлен параметр "mock" (с 18 версии API).
Значения параметра могут суммироваться. Например, если в параметре приходит "3", значит,
соблюдены условия 1 и 2

Помимо этого, можно ли сделать невозможной авторизацию в приложении,
если используется фиктивное местоположение или на устройстве есть
приложения у которых есть доступ на подмену местоположения?

3. Разрешить фото только в реальном времени
Добавить возможность отключать опцию отправки изображений из памяти телефона
а оставить только с камеры, так как многим клиентам нужны актуальные снимки, а не фото за предыдущие периоды
Нужно так-же позволить диспетчеру отличить фото сделанные с камеры и выгруженные из памяти,
хотя бы указывать в  имени файла изображения.

4. Уникальный функционал
В интерфейсе есть пустое пространство при просмотре информации по заявкам,
можно ли реализовать в этом пространстве webview для подключения кастомных интерфейсов через iframe,
например, где будет реализован дополнительный функционал для клиента?


Так-же хотелось бы, что бы нововведения в модуль logistics появлялись в актуальных версиях Local (хотя бы 2004),
так как в 2004 все еще версия 3.4, в то время как на форуме уже есть информация об обновлении до 3.10

Просьба обратить внимание на проблемы работы с Logistics с которыми мы и наши клиенты сталкиваются регулярно и исправить

1. Исправить работу web GUI
маршруты строятся через раз (ошибка "местоположение не найдено")
планирование обрывается, если выполнять еще какие-то действия в процессе (случайно нажать на любой элемент интерфейса)
изменение настроек модуля не применяется до перезагрузки страницы,
не обновляется список складов, Геозон и т. д. в фильтре в динамическом режиме - нужна перезагрузка страницы,
список заявок не обновляется в динамически при создании их из другой авторизационной сессии - нужна перезагрузка страницы,
модуль не имеет машины состояний и не сохраняет действия пользователя во вкладке "планирование" в cookie - после перезагрузки страницы нужно все действия начинать с начала.

2. Импорт заявок из xlsx работает через раз
Logistics часто ругается на формат файла.
Дело в том, что Excel хранит данные о координатах и дате часто в разных типах данных(none, text, date, number)
Логистика же часто не может эти данные разобрать и привести к соответствующим json типам данных: string, number, в основном данная проблема происходит при разборе даты-времени или координат.

3. Модуль позволяет построить маршруты, даже если физически успеть на все точки невозможно
можно например запланировать 485 точек по всему городу на 1 объект в течении 1 дня и
система даже не проверит и не уведомит, что это невозможно

4. Спланированные маршруты при большом количестве точек, как показала практика, абсолютно не оптимальные
Клиенты тестирующие модуль смогли в ручном режиме спланировать более оптимально,
с меньшими пробегами и затратами по времени.

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

1. Можно ли сделать так, что бы мобильное приложение Loigistics/Logistics Local, по аналогии с WiaTag присылало параметр mc?

0x1 — если в настройках устройства активирована опция, разрешающая отправлять фиктивное
местоположение;
0x2 — если на устройстве есть хоть одно приложение, запрашивающее права для отправки
фиктивного местоположения;
0x4 —  если в местоположении объекта проставлен параметр "mock" (с 18 версии API).
Значения параметра могут суммироваться. Например, если в параметре приходит "3", значит,
соблюдены условия 1 и 2


2. Можно ли сделать невозможной авторизацию в приложении, если используется фиктивное местоположение или на устройстве есть приложения у которых есть доступ на подмену местоположения?

В чем преимущество использования данной либы в сравнении с обычным requests?

15

(31 replies, posted in Wialon)

lexer wrote:

Приоритет это конечно выход, но хотелось бы больше функционала.
Например, у нас уже есть 3 разных клиента с абсолютно одинаковым требованием - они хотят видеть в отчете информацию по разным датчикам расхода одновременно для анализа.
Да, эта информация есть в обычных отчетах Виалон, но согласитесь, прыгать между вкладками не самое удобное решение для аграриев, особенно агрономов, которые работают в полях с планшетов..

В особенности если используются датчики разных типов, ДАРТ, ДУТ, ДМРТ и есть необходимость в сравнении показаний.

16

(65 replies, posted in Wialon)

Ringo wrote:

Доброго времени суток. Скажите, в планах был переход от flash-плеера на HTML5 для real-time потоков. Когда можно ожидать?  А то у нас от клиента есть соответствующая хотелка, но сейчас в том же Chrome разрешать flash - это боль.

tata wrote:

Вместо RTMP IP напишете URL-ы через запятую


ОТП Gurtam дали мне на альтернативный запрос дали ответ вида:
"Введите в строке поиска chrome://flags/
В открывшемся окне найдите Enable Ephemeral Flash Permissions и выберите Disabled. Сохраните настройки и перезагрузите браузер."

Полностью согласен с Ringo. Это очень не удобно, если каждому клиенту с Видеомониторингом в каждом браузере, на каждом ПК придется объяснять как включить Flash на постоянной основе.
Будем откровенны, у некоторых клиентов даже фразы "Откройте браузер" и "Очистите кэш" вызывают панику.
Более того в 2020 году Adobe завершает поддержку данного плагина.
Думаю, что реализация поддержки HLS потока, на равне с RTMP будет очень кстати.
Особенно, учитывая что m3u8 нативно поддерживается HTML5

Данный вопрос очень актуален. Создание накопительных счетчиков и графиков по ним применимо к целому перечню датчиков, одним из которых является ДМРТ. Это позволило бы видеть не просто средний расход, а интенсивность расхода топлива на объектах, где нет возможности установить ДУТ.

19

(8 replies, posted in Wialon)

+

Давно пора добавить данную функцию в Local  -_(^_^)_-

+