Можно ли слушать tcp-порт

Подскажите, пожалуйста, можно ли в правиле обрабатывать телеграммы, присылаемые по tcp-порту или по udp-порту?
Просто нужно от стороннего приложения получать команды и превращать их команды дл исполнительных устройств wiren-board. Как это лучше реализовать?

Каков вопрос, таков ответ.
Можно.

Хорошо. На данный момент вижу только следующую реализацию:

  • в settings - config - Serial Device Driver Configuration создать serial tcp-port и слушать его.

Но:

  1. создать правило можно только на устройство, которое прописано в mqtt-devices, соответственно нужно создать устройство, то есть добавить devices, а devices можно выбрать из списка, в котором только modbus-устройства.
  2. Если добавить просто custom Modbus device и добавить ему channel, то можно в rules отслеживать состояние только этого канала, а его состояние отслеживается уже определенными получаемыми ответами на определенные команды запроса, которые он начинает слать автоматически.

Отсюда вопрос: Как сделать отслеживание не изменения состояния несуществующего modbus-устройства, а просто отслеживание приходящих строк и внутри правила сделать разбор строки, что пришла, при любом изменении на этом tcp-порту?

У вас чуть неверный подход. Если нужно просто слушать сокет - напишите сервис-слушатель, который будет (возможно предварительно разбирая) публиковать принятое в MQTT.
Реализовать “портом” в serial - вряд ли возможно.

1 лайк

А можете показать пример такого слушателя, пожалуйста? на JS, к сожалению, нет пока большого опыта.

На JS такое не написать. По крайней мере на используемой реализации.
А чем nc не устраивает?

while true; do nc -lu -p 8044; done

Ну и отправить с другого хоста:

echo -n "Kva-kva" |  nc -u 10.0.0.75 8044

например. Добавьте парсинг вывода nc ну или просто публиуацию в MQTT через mosquitto_pub.
Даже программировать не надо, просто скриптинг.

Но по-хорошему то же самое пишется на C. Ну или на питоне.

Понял, через netcat можно попробовать. Но я правильно понимаю, что этот код надо вставлять в правило на wirenboard, чтобы код выполнялся?

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

Да, думаю, что напишу разбор в скрипте на bash. (с этим конечно еще не сталкивался, но скрипты, обычно, это не страшно).
Как сделать тогда вызов скрипта из правила wirenboard?
И я правильно понимаю, что анализ приходящих телеграмм надо делать в скрипте и в зависимости от результатов парсинга строки просто дергать нужные мне MQTT устройства wirenboard-а?

Да, особо сложного нет.

Если хотите именно из wb-rules - то runShellCommand
Похожая тема:

Собственно говоря - неважно, как удобнее. Можно публиковать принятое в топик, можно разбирать и менять другие топики.

А можно тогда пример команды на смену топика из bash-скрипта?

https://wirenboard.com/wiki/MQTT#Управление_устройствами_из_командной_строки

подскажите пожалуйста, командой:
~# mosquitto_pub -t " /devices/wb-gpio/controls/EXT1_R3A4/on" -m “1”
не включается канал реле. Не ругается, что command not found, просто после выполнения ничего не происходит.
проверил /devices/wb-gpio/controls/EXT1_R3A4 - это устройство из списка MQTT-devices в контроллере. В чем может быть дело?

Проверьте топик… Для этого подпиштесь на

mosquitto_sub -v -t " /devices/wb-gpio/controls/#

и переключите из интерфейса.
Кака раз будет видно что пишется.

ничего не пишет.
Так и висит:

/devices/wb-gpio/controls/EXT1_R3A4 0
/devices/wb-gpio/controls/EXT1_R3A4 1
Вот, что пишет

В пропущенном подчерке?

попробовал все варианты:
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3A4/1” -m “1”
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3_A4/1” -m “1”
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3/A4/1” -m “1”
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3 A4/1” -m “1”

Все равно не реагирует на команды.
При подписке, при изменении состояния, присылает исправно:
/devices/wb-gpio/controls/EXT1_R3A4 0
/devices/wb-gpio/controls/EXT1_R3A4 1

нашел:
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3A4/on” -m “1” - включает
mosquitto_pub -t “/devices/wb-gpio/controls/EXT1_R3A4/on” -m “0” - выключает

А может ли быть так, что на linux на wirenboard нет netcat?
А то на все команды nc, например nc -u localhost 7777 ответ один - command not found