Skip navigation.
Home

Node-red

Народ, меня прет, как хомячка от сгоревшего амбара травы. То самое состояние, когда работа в кайф и уходить не хочется. Но. По порядку, степ бай степ.

У моего текущего клиента задача:

железка <-----TCP socket----> приложение которое я пишу <----- хренова туча MQ топиков <-----> MQ broker < -----> нечто

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

В принципе, задача не особо сложная (есть тонкости: часть сообщений надо посылать, когда приходят другие сообщения, часть сообщений надо посылать по таймерам и т.д.) но самое паскудное в такого рода задачах - это отладка последовательности сообщений: железка некоторые сообщения шлет только в очень специальных случаях, некоторые шлет вообще раз в високосный год и т.д.

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

Кроме того, надо бы написать и симулятор "нечто", т.к. самого "нечто" еще в природе нет, его только собирается писать другая команда (согласованы Sequence diagrams и формат сообщений, но не более того).

На помошь приходит node-red. Эта хрень способна имитировать все ходовые форматы сообщений (JSON, HTML, JAML, CSV и черта в ступе). Способна имитировать поведение TCP сокета на прием и передачу данных. Парсить полученные сообщения. Сливать их вместе. Слать хочешь по TCP, хочешь по UDP. Умеет имитировать http response из коробки. Умеет прикидываться MQ-клиентом и принимать-передавать чего пошлешь. Умеет слать е-мэйлы. Умеет прикидываться Raspberry GPIO, слать аудиопотоки. Может прикинуться Твиттером, если надо. Имеет кучу допольнительных модулей, причем интенсивно разрабатываемых: я не нашел пока чего-то полезного, чем это НЕ умеет прикидываться.

Самый цимес в том, что программировать ничего не надо. Надо соединить между собой триггер, который запускает событие (например, отправку сообщения), сообщение и сокет. Линиями соединить. После этого нажимаешь кнопку, и у тебя улетает по указанному адресу и порту заданное тобой сообщение/файл/неведомая хрень, ловится ответ и все это выводится в консоль. Надо - сделай цепочку сообщений. Надо - неограниченное количество разных цепочек на все случаи жизни.

Для нормальной работы требует установленной NodeJS, npm и собственно node-red.

Я сегодня написал работающий симулятор железки, о которой шла речь выше, за 25 минут, из которых 20 разбирался, что с кем соединять. Среда разработки и исполнения - сам браузер.

Горячо рекомендую любому разработчику, который отлаживает такие вещи, как обработка входящих сообщений, отправка сообщений и пр. Экономит даже не часы - недели: я бы такой симулятор классическим способом писал бы неделю, не разгибаясь.

А потом этот

А потом этот твой симулятор будет высочайше назначен эталонной имплементацией и так и уйдёт в продакшн небритым и не подмытым :)

В продакшене

В продакшене уже железка. Симулятор симулирует железку.

Не понял - зачем

Не понял - зачем тогда симулятор?

Я написал же.

Я написал же. Симулятор выдает то, что надо и когда надо. А железка некоторые сообщения выдает раз в високосный год.

Железка не

Железка не имеет тестового режима?!
Вот ты напишешь симулятор, и что-то упустишь, не дай Бог. А потом тебя будут немножко вешать за использование некомплиантной имплементации протокола. Я бы на твоём месте семь раз с менеджером это дело обсосал.

Железка не

Железка не имеет тестового режима.
Уже оговорено, симулятор "нечто" написал он сам, я написал симулятор железки.

А-а. Ну тогда

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

У нас все это

У нас все это фиксируется на бумаге. Протокол. Имплементация. У меня для каждого случая нарисованы диаграммы обмена сообщениями и начальство уведомлено в письменной форме по этому поводу. Более того:я храню всю переписку даже с уже давно закончившихся проектов, ибо я параноик.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.