TI40

**Технології індустрії 4.0. Лабораторний практикум. ** Автор і лектор: Олександр Пупена

<- до лаборних робіт на основну сторінку курсу
   

Лабораторна робота №5. Створення Телеграм-бота.

У цій частині лабораторної роботи необхідно реалізувати Телеграм-бота, який буде в онлайн режимі забезпечувати зв’язок користувача з RPI.

1. Створення облікового запису Telegram

2. Реєстрація нового телеграм-бота.

img

рис.3.16. Доступні команди створення телеграм-бота

img

рис.3.17. Команда створення телеграм-бота

img

рис.3.18. Надання імені телеграм-боту

RPI_IvanenkoIvana_Bot За допомогою цього нікнейма можна знайти й додати вашого бота до своїх контактів.

img

рис.3.19. Надання імені користувача телеграм-боту

3. Встановлення бібліотеки в Node-RED

4. Створення першого варіанту бота

рис.3.20. Перший варіант бота в Node-RED

5. Перший запуск бота

Зроблений потік робить ехо-відповіді на будь яке повідомлення в приватному чаті.

рис.3.21. Перший запуск бота - перевірка

6. Аналіз отриманого повідомлення

рис.3.22. Аналіз отриманого повідомлення

7. Формування стартового повідомлення допомоги

У подальшому бот буде використовуватися в діалозі тільки з використанням команд. Перша команда - це /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;

8. Відправка тестового повідомлення

зверніть увагу, що в inject повинен бути формат корисного навантаження {}JSON

рис.3.24. Відправка тестового повідомлення

9. Генерування тривог

У цьому пункті необхідно зробити формування повідомлення в Телеграм, коли значення змінних rad та val що імітувалися в попередній частині лабораторної роботи будуть вище заданих значень.

flow.set ("trend", trend);//записати в контекст потоку
//-------------------
let rtdb = { //глобальна змінна
    trend: trend,
    rad: rad,
    val: val
}
global.set ("rtdb", rtdb);
//---------------------
return msg;

цей фрагмент записує буфер, та значення змінних в глобальний контекст

рис.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. Таким чином, щоб згенерувати тривогу про високе значення, необхідно його вказати в цих межах.

У результаті з певним періодом повинні генеруватися в чаті тривоги про перевищення значення.

10. Виставлення уставок

У цьому пункті необхідно зробити зміну уставок з чатую Для цього використовується команда /sp яка формує клавіатуру з 3-ма кнопками:

Далі при виборі змінної формується відповідна команда, яка обробляється окремим обробником, що просить ввести значення цих змінних уставок.

рис.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];

рис.3.27. Виставлення уставок - перевірка

11. Отримання плинних значень

12. Тестування чат бота в приватному чаті товариша

13. Тестування чат бота в загальному чаті (не обов’язкове для виконання)

Виконання даного пункту буде враховуватися як додаткові 5 балів на іспиті

Питання до захисту

  1. Розкажіть про основні кроки реєстрації Telegram Bot.
  2. Розкажіть про налаштування вузлів Node-RED для роботи з Telegram Bot.
  3. Які функції виконував Telegram Bot в даній лабораторній роботі?
  4. Прокоментуйте роботу фрагмента програми що генерує тривоги.
  5. Прокоментуйте роботу фрагмента програми що змінює уставки для тривог з Telegram Bot.