**Технології індустрії 4.0. Лабораторний практикум. ** Автор і лектор: Олександр Пупена
| <- до лаборних робіт | на основну сторінку курсу |
|---|---|
У цій частині лабораторної роботи необхідно реалізувати Телеграм-бота, який буде в онлайн режимі забезпечувати зв’язок користувача з RPI.

Знайдіть в телеграмі і додайте до своїх контактів @BotFather - це бот, який створює ботів
і введіть команду /start з’явиться вікно з доступними командами

рис.3.16. Доступні команди створення телеграм-бота
/newbot для створення нового бота
рис.3.17. Команда створення телеграм-бота
RPI Ivanenko Ivana
рис.3.18. Надання імені телеграм-боту
RPI_IvanenkoIvana_Bot За допомогою цього нікнейма можна знайти й додати вашого бота до своїх контактів.

рис.3.19. Надання імені користувача телеграм-боту
Збережіть токен, який видав бот, бо він нам знадобиться згодом для керування.
Добавте бота до своїх контактів t.me/<username>.
за допомогою RPI_IvanenkoIvana_Bot ви зможете завжди відредагувати своїх ботів
node-red-contrib-telegrambotОзнайомтеся з описом бібліотеки node-red-contrib-telegrambot
створіть в Node-RED новий потік з іменем bot
створіть потік, як показано на рис.3.20; з правилами заповнення конфігураційного вузла ознайомтеся в описі

рис.3.20. Перший варіант бота в Node-RED
Зроблений потік робить ехо-відповіді на будь яке повідомлення в приватному чаті.
зробіть розгортання потоку
зайдіть в Telegram добавте контакт свого бота, якщо ще не добавили
зайдіть в чат і натисніть кнопку Розпочати або команду /start
якщо бот працює, Вам повинна повернутися та сама команда

рис.3.21. Перший запуск бота - перевірка
chatId він вам знадобиться для відправки повідомлення до вказаного чату.
рис.3.22. Аналіз отриманого повідомлення
У подальшому бот буде використовуватися в діалозі тільки з використанням команд. Перша команда - це /start має виводити список доступних команд.

рис.3.23. Формування стартового повідомлення допомоги
Функція “показати команди має наступний вигляд”
let txtmsg = "/start - показати базові команди\r\n";
txtmsg += "/sp - виставлення уставок\r\n";
txtmsg += "/pv - отримання плинних значень\r\n";
txtmsg += "/alm - список активних тривог\r\n";
txtmsg += "/rprt - сформувати звіт\r\n";
msg.payload.content = txtmsg;
return msg;
зробіть розгортання потоку, у чаті наберіть команду /start, повинной вийти повідомлення з командами
натисніть на команду /start - дія повинна повторитися, що показує, що команди в списку можна натискати
chatId необхідно було визначити в пункті 2.5.зверніть увагу, що в
injectповинен бути формат корисного навантаження{}JSON

рис.3.24. Відправка тестового повідомлення
У цьому пункті необхідно зробити формування повідомлення в Телеграм, коли значення змінних rad та val що імітувалися в попередній частині лабораторної роботи будуть вище заданих значень.
наповнення буферу з попередньої частини лабораторної роботи, вставивши фрагмент між flow.set ("trend", trend); та returnflow.set ("trend", trend);//записати в контекст потоку
//-------------------
let rtdb = { //глобальна змінна
trend: trend,
rad: rad,
val: val
}
global.set ("rtdb", rtdb);
//---------------------
return msg;
цей фрагмент записує буфер, та значення змінних в глобальний контекст
bot наступний фрагмент:
рис.3.25. Генерування тривог - програма
Функція Alarm має наступний зміст
let rtdb = global.get ("rtdb") || {};
let alm = global.get ("alm") || { //система тривог
state:{radHI:false, valHI:false}, //стан тривог
sp: {radHI:10.0, valHI:2.0} //уставки тривог
};
let almmsg = "";
//умова тривоги активна?
let alm_radHI = rtdb.rad > alm.sp.radHI;
let alm_valHI = rtdb.val > alm.sp.valHI;
//якщо тривога тільки активувалася
if (alm_radHI && !alm.state.radHI) {
almmsg += "Радіани дорвінюють " + rtdb.rad + " , що вище зданого значення " + alm.sp.radHI + "\r\n";
}
if (alm_valHI && !alm.state.valHI) {
almmsg += "Синус дорвінює " + rtdb.val + " , що вище зданого значення " + alm.sp.valHI + "\r\n"
}
//запис у стан тривоги
alm.state.radHI = alm_radHI;
alm.state.valHI = alm_valHI;
//збереження станів тривоги в глобальному контексті
global.set ("alm", alm);
//якщо хоча виникла хоча б одна тривога - відправка повідомлень
if (almmsg.length > 1) {
msg.payload = {chatId : #######, //тут має бути ваш ідентифікатор
type : 'message',
content : almmsg}
return msg;
}
Вузол change потрібен для того щоб змінювати уставку для однієї з змінних, наприклад для rad. Ця уставка аварійно високого значення зберігається в глобальному контексті як alm.sp.radHI. Значення rad змінюється від 0 до 6.28 а val від -1 до 1. Таким чином, щоб згенерувати тривогу про високе значення, необхідно його вказати в цих межах.
timestamp та change сформуйте значення alm.sp.radHI рівним 3.У результаті з певним періодом повинні генеруватися в чаті тривоги про перевищення значення.
alm.sp.radHI в значення вище 6.28 , щоб тривоги не генерувалисяУ цьому пункті необхідно зробити зміну уставок з чатую Для цього використовується команда /sp яка формує клавіатуру з 3-ма кнопками:
/rad - вибору уставки верхнього рівня для змінної rad , відправиться відповідна команда/val - вибору уставки верхнього рівня для змінної val, відправиться відповідна командавідміна - відмова від виборуДалі при виборі змінної формується відповідна команда, яка обробляється окремим обробником, що просить ввести значення цих змінних уставок.
bot наступний фрагмент:
рис.3.26. Виставлення уставок - програма
генерування клавіатури , який наведений нижчеcontext.global.keyboard = {pending : true};
let opts = {
reply_to_message_id: msg.payload.messageId,
reply_markup: JSON.stringify({
keyboard: [
['/rad'],
['/val'],
['відміна']],
'resize_keyboard' : true,
'one_time_keyboard' : true
})
};
msg.payload.content = 'Виберіть змінну';
msg.payload.options = opts;
return [msg];
зробіть розгортання потоку
введіть команду /sp

рис.3.27. Виставлення уставок - перевірка
натисніть кнопку /rad
введіть значення 3
проконтролюйте, що тривоги будуть спрацьовувати, поверніть задане значення до 10
аналогічним чином змініть значення уставки для змінної /val (наприклад 0.5)
реалізуйте самостійно команди:
видачі списку активних тривог у форматі “назва тривоги” у новому рядку, якщо активних тривог немає - видати повідомлення “Немає активних тривог”
попросіть свого товариша протестувати Вашого чат-бота
відправте ім’я чат-бота для перевірки викладачем
Виконання даного пункту буде враховуватися як додаткові 5 балів на іспиті
попросіть у викладача запрошення на бот-чат групу
відлагодіть ваш бот, щоб він правильно працював у групі