ДОВІДНИК З NODE-RED українською мовою
Автор: Олександр Пупена
Написати фрагмент програми на Node-RED, який має з заданою періодичністю записувати звук з мікрофона в файл. Додаткові вимоги:
Це рішення передбачає використання безкоштовної утиліти SoX яка доступна для різних платформ, як Windows так і Linux.
Для Windows пропонується використовувати версію 14.4.1 так як 14.4.2 на момент перевірки видавала помилку Sorry, there is no default audio device configured.
Утиліта працює в режимі командного рядку. Наприклад, наступний виклик запише звук тривалістю 15 секунд в системі Winodws c:/tmp/hello.wav з аудіовходу за замовченням:
"C:\Program Files (x86)\sox-14-4-1\sox.exe" -d c:\tmp\REC0123456789.wav trim 00:00:00 00:00:15
На linux в директорію /home/pi/Documents матиме вигляд:
sox -d /home/pi/Documents/REC0123456789.wav trim 00:00:00 00:00:15
Отже Node-RED через командний рядок в потрібні моменти часу може викликати подібну команду. Для роботи з командним рядком використовується вбудований вузол exec. На вхід з заданою періодичністю буде подаватися msg.payload зі сформованим рядком команди. Рядок команди формуватиметься як конкатинація з:
-d, береться з Inject (наприклад, "C:\Program Files (x86)\sox-14-4-1\sox.exe" -d )Inject (наприклад, c:\tmp\REC)".wav" який вказує формат файлуInject (наприклад, ` trim 00:00:00 00:00:15`)
У вузлі Inject спочатку формуються усі частини для формування msg.payload :
sox: статичний рядок "C:\Program Files (x86)\sox-14-4-1\sox.exe" -d filenumber: JSONata вираз$round($millis()/1000), який округлює плинне значення часу в мілісекундах поділене на 1000tofolder: статичний рядок c:\tmp\RECpara: статичний рядок ` trim 00:00:00 00:00:15`Нижче значення payload розраховується як конкатинація у JSONata усіх частин.
Експорт фрагменту
[{"id":"65b2caee06fbe98e","type":"debug","z":"7447aa5a9ab85dd5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":410,"y":340,"wires":[]},{"id":"c0ce8fbb50c3eb0e","type":"inject","z":"7447aa5a9ab85dd5","name":"","props":[{"p":"sox","v":"\"C:\\Program Files (x86)\\sox-14-4-1\\sox.exe\" -d ","vt":"str"},{"p":"filenumber","v":"$round($millis()/1000)","vt":"jsonata"},{"p":"tofolder","v":"c:\\tmp\\REC","vt":"str"},{"p":"para","v":" trim 00:00:00 00:00:15","vt":"str"},{"p":"payload"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"sox & tofolder & filenumber & \".wav\" & para","payloadType":"jsonata","x":170,"y":340,"wires":[["b0e91a61a6a6ca1f"]]},{"id":"b0e91a61a6a6ca1f","type":"exec","z":"7447aa5a9ab85dd5","command":"","addpay":"payload","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":295,"y":340,"wires":[["65b2caee06fbe98e"],[],[]],"l":false}]