История эта началась полтора года назад, когда ко мне в руки попали блоки управления освещением «noolite» (ну как попали, сам купил, есть у меня слабость к разного рода интересному железу). Тогда в моём распоряжении оказались два блока серии SB и адаптер MTRF-64. Блоки этой серии привлекли меня тем, что их можно внедрить в домашнюю проводку без её существенного переделывания: достал выключатель и вместо него всунул блок, а сам выключатель повесил на специально выведенные из блока провода. В такой конфигурации светом можно управлять как с радиоканала так и по классике — выключателем. Есть конечно и один минус: блоки этой серии не поддерживают обратную связь, а хотелось бы, ведь в MTRF-64 она есть, ну да ладно. А вот от покупки шлюза я тогда отказался в пользу адаптера, потенциально возможности его шире чем у шлюза.
Вдоволь наморгавшись люстрой, появилось желание привести это всё к какому-то общему знаменателю, но, видимо, другие интересные железяки это желание затмили, потому что блоки были отправлены в дальний ящик. Так бы они там и лежали если бы до недавнего времени я не обратил на них внимание
Силовой блок SB-1-150 и MTRF-64
Тут же в моей голове всплыла картинка, в которой я выключаю свет перед сном не вставая с кровати, или одним нажатием кнопки использую сценарий «я ухожу», выключающий всё, что должно быть выключено в моё отсутствие.
Наконец, было решено действовать. Почему я стал клепать свой велосипед а не купил готовую систему сразу? Просто потому, что хотел сделать что-то своими руками. Вы ведь знаете это чувство, когда ты что-то собрал, а оно — работает. Плюс ко всему, я наконец на примере реального проекта начинаю изучение какого-нибудь объектно-ориентированного языка (выбрал python 3).
Идея
Всё просто — управление светом и бытовыми приборами из любой точки дома. В качестве главного управляющего устройства выбрана Raspberry Pi модели B+ в связке с MTRF-64. В виду отсутствия опыта в разработке подобного рода приложений было решено начать с чего-то простого. Так я пришёл к реализации Telegram бота.
Raspberry Pi B+ и MTRF-64
Для себя я решил, что на первое время мне будет достаточно следующих функций бота:
- Управление светом и бытовыми приборами;
- Поддержка диммируемых устройств (свет, вытяжка и т.д.);
- Распределение устройств по комнатам;
- Поддержка сценариев, позволяющих быстро управлять группой устройств;
- Добавление пользователей и распределение их по группам: хозяева (могут управлять устройствами в доме, имеют доступ к настройкам дома), гости (могут управлять устройствами в доме, не имеют доступа к настройкам дома), подписчики (ждут, пока хозяин пригласит их в дом).
Установка
Для начала скачаем операционную систему для нашего малинового пирога. Я предпочитаю официальный для этой платки Raspbian. Заливать образ на CD удобно при помощи утилиты Win32DiskImager.
1. Подключаем всё это дело и логинимся:
login: pi
password: raspberry
2. Приступая к работе, желательно убедиться, что используются свежие версии программ. Вы можете подумать: мы же только что скачали дистрибутив, куда уж свежее? А нет…
sudo apt-get update
sudo apt-get -y dist-upgrade
3. Ставим менеджер пакетов pip3 и git:
sudo apt-get install -y python3-pip git
4.Скачиваем нужные для работы бота библиотеки. Я использую библиотеку pyTelegramBotAPI, которая берет на себя все нюансы отправки и получения HTTP запросов, позволяя сконцентрироваться непосредственно на логике:
sudo pip3 install pytelegrambotapi pyserial
5. Скачиваем бота:
sudo git clone https://github.com/DZimasik/nooBot.git
Прежде чем запускать бота, необходимо его зарегистрировать, т.е. получить его уникальный id (токен). Поможет нам это сделать другой специальный бот — @BotFather. Просто отправляем ему /newbot и он просит придумать имя нашему новому боту, это имя будет высвечиваться в списке контактов Telegram. Далее BotFather предлагает придумать уникальный username бота. Единственное ограничение — username должен оканчиваться на «bot». Username так же используется для поиска бота среди множества других.
В принципе для старта этого достаточно. Некоторые перфекционисты здесь же могут задать боту аватар или написать приветственное сообщение. После того как всё введено, BotFather вернёт токен:
6. Добавим токен в файл config.py
sudo nano /home/pi/nooBot/config.py
token = 'Ваш_токен' # Insert your token from BotFather
7. Наконец можно запустить бота:
sudo python3 /home/pi/nooBot/noobot.py
Отправляем нашему боту /start. Если токен введён правильно появится клавиатура и мы увидим сообщение:
План на будущее
На данном этапе я управляю светом в спальне и зале, но в дальнейшем планирую докупить ещё силовых блоков (на этот раз с обратной связью) и перевести всё своё освещение на дистанционное управление. Так же в планах добавить боту поддержку обратной связи для того, что-бы можно было узнавать состояния устройств и параметры датчиков в доме, находясь вне него.
На этом пока все. Буду рад услышать ваше мнение. Всем добра!
Полезные ссылки:
Комментарии (11)
Amihailov
21.06.2018 21:11+1Дело в том что я привык работать с raspberry удалённо, но из-за того, что в последних версиях Raspbian по умолчанию закрыт доступ по SSH, мне пришлось с ней сблизиться использовать такой USB-UART переходник
Для меня сработало положить на флэшку пустой файл с именем «ssh»
Mantikor_WRX_STi
21.06.2018 23:13Использую home-assistant на orange pi, в него можно интегрировать что угодно и даже больше ) в большинстве своем без костылей. Из коробки определение присутствия разными способами и т.д. Для устройств без обратной связи можно делать прослойку, скрипт на том же питоне, который опрашивает и постит в mqtt брокер
Mike-M
22.06.2018 11:24Что делать, если лет через 5 какой-нибудь РосКомНадзор решит таки заблокировать Telegram? Или Telegram изменит API? Возвращаться к модификации давно забытой прошивки?
В этом отношении, чем меньше внешних зависимостей от сторонних сервисов, тем лучше.telobezumnoe
22.06.2018 11:58в идеале и при исчезновении интернета чтоб по локальной сети могло быть управление
kolayuk
22.06.2018 16:31На мой взгляд было бы правильнее развернуть на RPi систему управления умным домом более общего вида (например Home Assistant), а уже к ней запилить (и законтрибьютить) модуль по работе с nooLite. У самого давно руки чешутся этим заняться, но никак не дойду до магазина чтобы nooLite контроллер купить…
dem0n3d
Про Mozilla iot gateway слышали?
DZimasik Автор
Интересное решение. Правда не совсем понял, есть ли в нем поддержка сценариев?
dem0n3d
Есть некая вкладка "Rules", но пока не понятно насколько сложные конструкции там можно создавать: https://www.youtube.com/watch?v=ZXEZkqnT-6o