Опрос по HTTP и разбор JSON

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Автор
    Сообщения
  • #20775
    manjey73
    Участник

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

    Пните на путь истинный что использовать? Так понимаю пример KpHTTP и использование какой-то библиотеки для непосредственно разбора JSON ?

    #20776
    Romiros
    Участник

    Типа того. JSON можно стандартными средствами c# разобрать, не вижу смысла что-то ещё использовать.

    #20777
    manjey73
    Участник

    @romiros парсить строки ответа? просто может есть готовое решение, какая-то dll, которая разложит все по полочкам?
    Типа имя — значение. Или это прямо в C# заложено и можно использовать?

    #20778
    manjey73
    Участник

    JsonDocument.Parse Метод ???

    Но при этом везде пишется, что «представляющего отдельное байтовое значение JSON»
    байтовое или символьное или просто значение, но отдельное..

    { 
        "id": "ХХХХХХ", 
        "temperature": "24.51", 
        "humidity": "41.42", 
        "light_lvl": "69", 
        "co2": "5000", 
        "voc": "1.168", 
        "magnetic_radiation": "97.057", 
        "noise_lvl": "41", 
    

    И так далее, переменных может быть много, смотрю все строковое…

    #20779
    Romiros
    Участник

    Или это прямо в C# заложено и можно использовать?

    Можно использовать. Поищите примеры. Возможно в открытых кодах RapidScada даже есть, не помню уже. Вы создаете класс в c#, а потом сериализуете его в JSON, ну или в Вашем случае в обратную сторону. Можете взять библиотеку от NewtonSoft, но я от неё ушел, потому что в Linux она как-то криво работала.

    #20780
    manjey73
    Участник

    Ага, на счет NewtonSoft учту, как раз надо, чтобы работало в Linux.

    Проблема десериализации заключается в том, что набор переменных может быть разным, как и количество в наборе.

    #20781
    Romiros
    Участник

    Проблема десериализации заключается в том, что набор переменных может быть разным, как и количество в наборе.

    Так сложно сказать. Нужно видеть конкретную задачу. Что значит разным? Вы выше привели пример JSON, он может меняться в зависимости от прибора? Например, если количество параметров неизвестно, можно получить JSON при настройки драйвера, пройтись по нему каким-нибудь foreach и создать карту сигналов КП. Без конкретики сложно что-то подсказать, может вообще нужен другой подход.

    #20782
    manjey73
    Участник

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

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

    А что, если при десериализации не будет параметра? он же должен принять значение по умолчанию как это с xml происходит? Просто с json еще не пробовал работать.

    #20783
    Mikhail
    Модератор

    Отправка и приём HTTP запросов есть в драйвере KpHttpNotif. Здесь

    Если формат ответа JSON заранее известен и фиксирован, то его удобнее разбирать средствами .NET: JavaScriptSerializer.Deserialize

    Если нужен гибко настраиваемый драйвер, то интересный подход по разбору JSON реализован в драйвере Mqtt. Там используется библиотека, которая выполняет JavaScript на лету и может результат разбора записать в переменные C#. Ссылка

    • Этот ответ был изменен 2 года, 6 месяцев назад от Mikhail.
    #20785
    manjey73
    Участник

    ок, попробую поковырять…

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

    • Этот ответ был изменен 2 года, 6 месяцев назад от manjey73.
    #20787
    Mikhail
    Модератор

    не писать то же самое из KpHttpNotif например, а просто использовать библиотеку?

    На мой взгляд, нет смысла ссылаться на KpHttpNotif в своём драйвере, т.к. там многовато лишнего. Хотя технически это возможно.

    #21077
    manjey73
    Участник

    Не хочет собираться KpHttpNotif

    Серьезность Код Описание Проект Файл Строка Состояние подавления
    Ошибка не удалось скопировать файл «E:\Work_Work\Programm\scada\ScadaComm\OpenKPs\AddressBook\Lang\AddressBook.en-GB.xml» — файл не найден. KpHttpNotif

    Хотя файл там есть, и он копируется в папку Debug самого KpHttpNotif

    хм, папка то scada-master

    #21088
    Mikhail
    Модератор

    Я поправлю ссылку на файл.
    А пока можно просто удалить ссылку на файл AddressBook.en-GB.xml из проекта KpHttpNotif. Он там не критичен.

    #21093
    manjey73
    Участник

    Я папку scada-master просто переименовал в папку scada и собрал.
    Видимо там путь не весь относительный.

    #21111
    Mikhail
    Модератор

    Да, этот драйвер переносился из другого репозитория и путь к файлу оказался не совсем корректным.

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Вы должны авторизироваться для ответа в этой теме.