єСвітло — телеграм-бот
youtu.be/zWgETrpNmIA
Я прокидаюсь кожний ранок
А в хаті нема світла
Знову зникло
Весь день я проведу
В кафе на районі
Поки є гроші
Не знаю чи повернусь сьогодні додому
Додому
В сусіда в чаті знову питаю
Світло є чи нема
Світло є чи нема
Світло є чи нема
Світло є чи нема©Dobryva
Коли почались масовані обстріли української енергетики, українці почали одразу адаптуватися до нової реальності. Якийсь час проблема з електроенергією була найбільш відчутною в Києві. Але після 15го листопада віялові відключення почались по всій території України.
Я одразу почав шукати яким чином точно знати чи є світло вдома, чи ні. Також була думка візуалізувати історію відключень, щоб наочно бачити динаміку. Пошукавши вже існуючі рішення знайшов тільки віджет для IOS, але хотілося мати дуже просте рішення, без зайвих рухів. Головною ідеєю було можливвість масштабування і перевикористання. Ну і трошки підзадовбали однотипні повідомлення в будинковому чаті від сусідів (Світло є чи нема, Світло є чи нема, Світло є чи нема...)
В мене з’явилась думка, що найзручнішим був би бот, який буде кожну хвилину пінгувати статичну айпішку і якщо статус (є світло/нема світла) змінився — надсилати повідомлення. Кіллер фічею бота є те, що на весь будинок достатньо мати одного «піддослідного» IP і додати бота з пінгуванням цього IP в будинковий чат. Так
На жаль я не маю досвіду з бекендом і інфраструктурою на належному рівні, тому швидко знайшов друга, який готовий був допомогти з реалізацією. Ми накидали канбан борду, щоб формалізувати ідеї і Богдан почав реалізовувати.
Implementation
Автор: Богдан
Бот реалізували, використовуючи лібу python-telegram-bot і Django. Хоча на перший погляд рішення дивне для реалізації телеграм боту, Django має дуже зручні встроєні інструменти — ORM для роботи з БД і адмін панель, якщо треба щось перевірити в БД на продакшині. Пінгування іп адрес запускається як Django management команда з крони. Враховуючи це, і те, що бота треба було зробити якомога швидше, я вибрав саме такий стек. Python-telegram-bot з версії 20.0 використовує asyncio, що є великим плюсом, так як дозволяє пінгувати ip і розсилати повідомлення в Телеграм пачками. Django поки не повністю працює з асинхронністю, але трохи декораторів @sync_to_async, і вони працюють разом!
Захостили все на AWS EC2 i RDS. Поки нам цілком вистачає того, що пропонує AWS free tier, але, якщо буде потреба, заскейлимо на більші сервери.
В планах добавити чергу повідомлень, найімовірніше AWS SQS, для розсилання повідомлень в телеграмі, тому що коли юзерів стане більше, телеграм може тротлити кількість повідомлень через flood control.
ВисновкиНа даний момент у бота є можливість підписатися на пінгування статичної айпішки, відписатися, показати статус, разово пінганути, додати бота в груповий чат або канал. Із основних недоліків — якщо провайдер має мережу з перебоями, то будуть хибні спрацювання. Тут по дизайну ми повність покладаємось на якість зв’язку. Варіанти з ембедед пристроями ми відкинули вже на початкових етапах, бо розуміємо, що далеко не кожен захоче заморочуватись ще окремими пристроями. Але якщо ти ембедед розробник і знаєш як склепати цікаве рішення, яке втикається в розетку і надсилає, наприклад, смс на IFTT — це була б ще краща і надійна система.
В нас ще є деякий список ідей, які ми хочемо реалізувати, тож якщо вам цікаво, Stay tuned!
Посилання на бота — @Ukraine_svitlo_bot
Дякую Богдану за кооперацію!
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів