История эта началась полтора года назад, когда ко мне в руки попали блоки управления освещением «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.

Здесь меня ожидал маленький подвох
Дело в том что я привык работать с raspberry удалённо, но из-за того, что в последних версиях Raspbian по умолчанию закрыт доступ по SSH, мне пришлось с ней сблизиться использовать такой USB-UART переходник



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)


  1. dem0n3d
    21.06.2018 19:57

    Про Mozilla iot gateway слышали?


    1. DZimasik Автор
      21.06.2018 21:43

      Интересное решение. Правда не совсем понял, есть ли в нем поддержка сценариев?


      1. dem0n3d
        21.06.2018 22:38

        Есть некая вкладка "Rules", но пока не понятно насколько сложные конструкции там можно создавать: https://www.youtube.com/watch?v=ZXEZkqnT-6o


  1. Amihailov
    21.06.2018 21:11
    +1

    Дело в том что я привык работать с raspberry удалённо, но из-за того, что в последних версиях Raspbian по умолчанию закрыт доступ по SSH, мне пришлось с ней сблизиться использовать такой USB-UART переходник

    Для меня сработало положить на флэшку пустой файл с именем «ssh»


    1. DZimasik Автор
      22.06.2018 00:07

      Проверил — работает) Благодарю за подсказку!


  1. Mantikor_WRX_STi
    21.06.2018 23:13

    Использую home-assistant на orange pi, в него можно интегрировать что угодно и даже больше ) в большинстве своем без костылей. Из коробки определение присутствия разными способами и т.д. Для устройств без обратной связи можно делать прослойку, скрипт на том же питоне, который опрашивает и постит в mqtt брокер


  1. berber
    22.06.2018 06:36

    интересен аптайм. держите в курсе.


  1. Mike-M
    22.06.2018 11:24

    Что делать, если лет через 5 какой-нибудь РосКомНадзор решит таки заблокировать Telegram? Или Telegram изменит API? Возвращаться к модификации давно забытой прошивки?
    В этом отношении, чем меньше внешних зависимостей от сторонних сервисов, тем лучше.


    1. telobezumnoe
      22.06.2018 11:58

      в идеале и при исчезновении интернета чтоб по локальной сети могло быть управление


  1. igrushkin
    22.06.2018 14:02

    SSH можно открыть сразу. И даже wifi настроить прямо в образе


  1. kolayuk
    22.06.2018 16:31

    На мой взгляд было бы правильнее развернуть на RPi систему управления умным домом более общего вида (например Home Assistant), а уже к ней запилить (и законтрибьютить) модуль по работе с nooLite. У самого давно руки чешутся этим заняться, но никак не дойду до магазина чтобы nooLite контроллер купить…