Стартовая страница › Форумы › Взаимодействие с устройствами › Вывод параметров Json из MQTT
- В этой теме 10 ответов, 4 участника, последнее обновление 11 месяцев, 3 недели назад сделано
Mikhail.
-
АвторЗаписи
-
29.06.2023 в 16:43 #29042
DaniilOpushnev
УчастникВсем добрый день!
Немного вводной информации: использую брокер Mosquitto, версия драйвера KpMQTT.dll 5.3.3.
Суть в чем. С брокера приходят пакеты в формате Json. Соответственно, прописал конфигурационный файл для драйвера с подпиской на необходимый мне топик, прописал JSHandlerPath. Переписал файл для парсинга пакета. Настроил все необходимое в коммуникаторе.
При публикации сообщения в формате json, в лог файле комммуникатора отображается пришедший пакет, пишет, что скрипт для парсинга отработал успешно (т.к. в самом скрипте прописана строка для этого). Однако в таблице текущих данных КП никаких абсолютно данных нет.
Вероятно, в скрипте нужно прописывать команды на передачу тега в канал, но при попытке команд SetCnldata или WriteCnldata не работает, по лог файлу пишет, что не опознанная команда. Значит ее нет в библиотеке Jint.dll, которая идет в архиве с драйвером.
Подскажите, что я упустил? Может есть какие то другие команды для этого?
P.S. Мой первый опыт, я не программист, сильно не ругайтесь 🙂
29.06.2023 в 16:44 #29043DaniilOpushnev
УчастникP.S.S. При отправке данных не в формате json, показание отображается в таблице текущих данных КП.
29.06.2023 в 17:46 #29044
MikhailМодераторДобрый день! Сравните синтаксис JS с примером, учитывая регистр символов. Возможно, удобнее сразу перейти на 6-ю версию, т. к. драйвер MQTT был переработан.
30.06.2023 в 09:20 #29060DaniilOpushnev
УчастникВ примере был следующий код:
var data = JSON.parse(InMsg); jsvals[0].TagName = "My tag"; jsvals[0].Stat = data.Stat; jsvals[0].Val = data.Val;Мой код выглядит так:
var data = JSON.parse(InMsg); jsvals[0].time = data.time; jsvals[0].type = data.type; jsvals[0].temp = data.temp; jsvals[0].hum = data.hum; jsvals[0].press = data.press; jsvals[0].status = data.status; jsvals[0].signal = data.signal;Вроде как отличий по синтаксису нет.
У нас уже есть функционирующий проект на версии 5, поэтому на 6 версию достаточно проблематично перейти, хотелось бы все реализовать на 5.
Может как то влиять настройка входных каналов во вкладке «Система» на отображение значений в таблице текущих данных?
30.06.2023 в 09:22 #29061DaniilOpushnev
УчастникКстати, с кодом из примера, передача данных работала частично, то есть, посылал пакет { «Val»: 12.3, «Stat»: 1 } и отображалось в таблице как MyTag = 12.300, значение Stat никак не отражалось.
30.06.2023 в 10:11 #29064
manjey73УчастникЗначение stat в явном виде и не отражается. 1 = значит достоверное
0 — не достоверное и будут---или можете вместо 1 задать 2, и так далее и увидеть как изменится цвет текста…30.06.2023 в 10:55 #29066
a80808УчастникК началу темы — так можно же подписаться на конкретный топик и получать сразу в канал значение этого топика. В 5 версии там несколько замысловато описано а в 6 так просто сказка )))
30.06.2023 в 11:28 #29074DaniilOpushnev
УчастникПакет json мне приходит в таком виде:
{ "time": 1688035347, "type": 5, "temp": 251, "hum": 461, "press": 0, "status": 192, "signal": 80 }, приходят они в топик temp/000000000000, где 000000000000 — серийный номер датчика. Если я вас правильно понял, вы предлагаете подписаться на топик temp/000000000000/hum, например, но так работать не будет. А так я и подписан на конкретный топик temp/000000000000.30.06.2023 в 14:13 #29077DaniilOpushnev
УчастникВсем спасибо, разобрался с кодом скрипта, все заработало!
24.07.2025 в 09:09 #39743DaniilOpushnev
УчастникВсем добрый день!
Есть устройство, которое передает данные формата json (например{"time": 1625097600, "type": 5, "temp": 250, "hum": 500, "status": 1, "signal": 2}), а так же простые строчные сообщения типа get, end. При простом скрипте парсинга json, при появлении сообщения на входе не формата json, значения в тегах сбрасываются, т.к. была ошибка выполнения скрипта. В скрипте реализовал игнорирование данные не json формата, но в таком случае все равно значения в тегах сбрасывались, доработал код, хотел, чтобы при получении обычной строки в теги передавались последние значения json пакета, но максимум добился того, что данные в тегах не сбрасываются, а устанавливаются на 0. Полагаю, так происходит из-за того, что при вызове и завершении скрипта, сохраненные данные в коде стираются.
Может кто то сталкивался с похожей проблемой? Как сделать так, чтобы данные в тегах не сбрасывались/обнулялись?
Использую 5ю версию scada.-
Ответ изменён 11 месяцев, 3 недели назад пользователем
DaniilOpushnev. Причина: пояснение
24.07.2025 в 12:48 #39757
MikhailМодераторчтобы при получении обычной строки в теги передавались последние значения json пакета, но максимум добился того, что данные в тегах не сбрасываются, а устанавливаются на 0.
Добрый день!
Предыдущие данные негде взять на уровне драйвера. Эту функцию можно реализовать с помощью формул каналов. Переходите на Rapid SCADA 6 (безотносительно Вашего вопроса). -
Ответ изменён 11 месяцев, 3 недели назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.