2016-12-30 8 views
0

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

Я использую Mochad для связи с моим приемником X10, и я хочу взять вывод из Mochad, проанализировать несколько фрагментов из него, а затем отправить его как сообщение MQTT, чтобы я мог использовать его с моим центром домашней автоматизации. Помощник. Вот как выглядит выход Мочада:

[email protected]pberrypi:~ $ nc localhost 1099 
12/30 17:37:18 Rx RF HouseUnit: B3 Func: On 
12/30 17:37:19 Rx RF HouseUnit: B4 Func: Off 
12/30 17:37:21 Rx RF HouseUnit: B6 Func: On 
12/30 17:37:23 Rx RF HouseUnit: B6 Func: On 
12/30 17:37:24 Rx RF HouseUnit: B7 Func: Off 
12/30 17:37:25 Rx RF HouseUnit: B8 Func: On 
12/30 17:37:27 Rx RF HouseUnit: B2 Func: On 

Отметьте, что я использую net cat для просмотра этих данных. Новая строка добавляется только при обнаружении сигнала X10. Я хотел бы захватить значения HouseUnit (ex B3) и значения Func (ex On). Я могу сделать это легко с awk, но я не могу понять, как это сделать из вывода netcat.

После этих двух значений или разобран, я хотел бы опубликовать их MQTT сообщений как это:

mosquitto_pub -t /X10/B3 -m On 

После этого процедура будет ждать другого сообщение и просто продолжать делать эту процедуру для каждого нового полученного сообщения от Мочада.

Есть ли простой способ сделать это с помощью сценария командной строки? Я написал для циклов, которые могут делать такие вещи, но я изо всех сил пытаюсь получить вывод чистой кошки в цикл for.

Я делаю все это на RaspberryPi3 с HASSBian дистрибутивом (Raspbian изменен для домашнего помощника). Любая помощь приветствуется.

EDIT Кому-нибудь еще может помочь? Большое спасибо!

ответ

1

Следующий должны делать то, что вы хотите:

nc localhost 1099 | awk ' { system("mosquitto_pub -t /X10/"$6" -m "$8) } ' 

Это происходит выход nc и труб в awk, который затем вызывает mosquitto_pub для каждой строки.

EDIT: Протестировано со следующим:

н.д. -l локальный 1099 < НЦ-тест

Где НЦ-тест текстовый файл с примером данных, приведенных в этом вопросе.

p.s. как правило, темы MQTT не должны начинаться с ведущего /, поскольку он добавляет дополнительный нулевой уровень в дерево тем.

+0

Спасибо за это, но я не получаю никаких сообщений или сообщений, отправленных с этим. – dinki

+0

отлично работает, если я использую nc для записи файла с таким же выходом в версию nc, которая прослушивает порт в качестве входа, поскольку у меня нет одного и того же источника данных. например 'nc -l localhost 1099 | awk .... 'и' nc localhost 1099 hardillb

+0

Я попытался добавить параметр -l, и я все еще ничего не получаю. Есть ли простой способ устранить эту проблему? – dinki