Марія БровінськаТакая жизнь
5 января 2023, 16:27
2023-01-05
Украинцы создали еще один бот, чтобы узнавать, есть ли дома свет. Вот как он работает
Software engineer (Android) в Yalantis Дмитрий Морозов и Python Full-Stack Developer Богдан Григорьевич создали Telegram-bot Ukraine_svitlo_bot, что помогает понимать, есть ли свет дома.
Software engineer (Android) в Yalantis Дмитрий Морозов и Python Full-Stack Developer Богдан Григорьевич создали Telegram-bot Ukraine_svitlo_bot, что помогает понимать, есть ли свет дома.
Когда начались массированные обстрелы украинской энергетики, украинцы начали сразу адаптироваться к новой реальности. Какое-то время проблема с электроэнергией была наиболее ощутима в Киеве. Но после 15 ноября веерные отключения начались по всей территории Украины. Я сразу начал искать как точно знать есть ли свет дома, или нет. Также было мнение визуализировать историю отключений, чтобы наглядно видеть динамику. Поискав уже существующие решения, нашел только виджет для IOS, но хотелось иметь очень простое решение, без лишних движений. Главной идеей была возможность масштабирования и переиспользования. Ну и немного подзадолбали однотипные сообщения в домовом чате от соседей (Свет есть или нет, Свет есть или нет, Свет есть или нет…)», — рассказывает разработчик.
Тогда у мужчины появилась мысль, что самым удобным был бы бот, который будет каждую минуту пинговать статическую айпишку и если статус (есть свет/нет света) изменился — отправлять сообщения.
Сложности разработки
«Киллер фичей бота является то, что на весь дом достаточно иметь одного „подопытного“ IP и добавить бота с пингованием этого IP в домовой чат. Так 100-1000 человек не спрашивают друг друга по 100 раз есть свет или нет. Также для себя профит я видел в том, что, находясь вне дома, у меня всегда текущее состояние света в доме и знаю, нужно ли спешить домой, лучше ли не торопиться», — отмечает Дмитрий.
За неимением опыта с бэкендом и инфраструктурой на должном уровне, парень быстро нашел друга, который готов был помочь с реализацией.
Вместе разработчики бот реализовали, используя либу python-telegram-bot и Django.
«Хотя на первый взгляд решение удивительное для реализации Telegram-бота, у Django есть очень удобные встроенные инструменты — ORM для работы с БД и админ панель, если нужно что-то проверить в БД на продакшне. Пингов IP адресов запускается как Django management команда из кроны. Учитывая это, и то, что бота нужно было сделать как можно скорее, я выбрал именно такой стек. Python-telegram-bot из версии 20.0 использует asyncio, являющийся большим плюсом, так как позволяет пинговать ip и рассылать сообщения в Telegram пачками. Django пока не полностью работает с асинхронностью, но несколько декораторов @sync_to_async и они работают вместе!», отмечает Дмитрий.
Захватили друзья все на AWS EC2 и RDS.
В планах — добавить очередь сообщений, скорее всего AWS SQS, для рассылки сообщений в телеграмме, так как когда пользователей станет больше, телеграмм может тротлить количество сообщений через flood control.
Что может бот
Сейчас у бота есть возможность подписаться на пингование статической айпишки, отписаться, показать статус, разово пингнуть, добавить бота в групповой чат или канал. Из основных недостатков — если у провайдера есть сеть с перебоями, то будут ложные срабатывания.
«Варианты из эмбедед устройств мы отбросили уже на начальных этапах, потому что понимаем, что далеко не каждый захочет заморачиваться еще отдельными устройствами. Но если ты эмбедед разработчик и знаешь, как склепать интересное решение, которое втыкается в розетку и посылает, например, смс на IFTT — это была бы еще лучшая и надежная система», — приглашает к сотрудничеству коллег Дмитрий.