Raspberry pi 3 умный дом своими руками. Как установить умный дом Home Assistant. Обязательно надо вставить в малину интернет-шнур

Перечень достижений человека постоянно пополняется новыми разработками. Выдающейся можно назвать разработанную человеком популярную сегодня опцию «Умный дом» на мини-компьютере Raspberry Pi.

Упоминаемая система после своего выхода на рынок практически сразу влюбила в себя многих владельцев домов. Именно поэтому спрос на систему «умный дом» на Raspberry pi стал активно возрастать с каждым годом. Хотите выяснить, чем так уникален Raspberry pi 3 умный дом и почему именно эту систему сегодня во многих домах устанавливают? Изучите нижеизложенный материал.

Что представляют собой проекты Raspberry pi 3 для дома и зачем они нужны?

Система «умный дом», которую изобрела компания Raspberry Pi, позволяет контролировать абсолютно все в доме: начиная от включения света и отопительной системы и заканчивая активацией систем, которые имитируют присутствие в доме человека.

Слаженная работа всех звеньев системы базируется на датчиках и спецконтроллерах, которые реагируют на движения, шум, а также энергию.

Система умный дом от известной многим компании «Raspberry Pi» столь востребована сегодня благодаря тому, что она может легко собираться, как простой конструктор. Функционировать он может при этом на разных ядрах. Одной из наиболее покупаемых сегодня является система, функционирующая на базе мини-компьютера Raspberry.

Изначально компания предложила две комплектации мини-компьютеров - модель А и модель В. Модель А располагала объемом памяти в 256 Мб, а модель В могла сохранять в два раза больше информации. Но модель с небольшим объемом памяти не сняли с производства потому, что она позволяла пользователю выходить в Интернет. Позже была обновлена модель В. Новый её вариант отличался более компактным дизайном и располагал 4 USB-портами.

Как система функционирует?

Структура системы может быть разной. Но обычно построение её происходит по такому принципу: главным является центральное вычислительное устройство (его еще называют сервером). В качестве центрального системного сервера выступает Raspberry Pi , на который устанавливается WEB-интерфейс. Последний может легко связываться с ноутбуком, планшетом либо же смартфоном.

Сервер связывается с периферийными спецмодулями посредством RS485 - интерфейса. Чтобы система слаженно работала, в каждом ключевом помещении домовладения всегда устанавливают спецконтроллер, задача которого - интерпретировать поступающие сигналы и отправлять их на устройства бытовой техники, которые в этой связи являются устройствами-исполнителями.

Обычно модуль Raspberry Pi связывается с контроллерами через порт UART. К последнему следует подключать такое согласующее устройство, как спецпереходник на интерфейс RS485 (следует подчеркнуть, что последние модели устройства уже располагают этим интерфейсом, так как его подразумевает базовая комплектация).

«Операционкой» является Raspberry, спутником которой может быть расширение, например, Pimatic. Совсем несложно собрать спецсистему «умный дом» на «открытой платформе», к примеру, openHAB, Fhem, SHC. Также популярной продолжает оставаться платформа wiButler.

Модули, которые можно выбрать для выстраиваемой своими руками системы «умный дом»

Чтобы выстроить спецсистему и сделать ее максимально функциональной, потребуются особые модули. Для тех, кто любит мастерить и хочет создать Raspberry pi 3 умный дом своими руками, предлагаются сегодня такие модули, как:

  • Модуль камеры. Подключив его, систему можно рассматривать, как удобный инструмент для видеонаблюдения. Данная камера совместима с «операционкой» мини-компьютера Raspberry. Она позволит записывать видеофрагменты в разрешении Full HD и делать отличные 5-мегапиксельные фото.
  • Датчик, измеряющий влажность, а также температуру воздуха. При установке этого модуля, система будет обрабатывать метеоданные.

  • Датчики дыма, а также датчики, сигнализирующие о протечке воды. Данный установленный и подключенный модуль поможет своевременно реагировать на появление дыма в доме и выявлять протечку воды. Многие владельцы больших коттеджей выбирают эту опцию для того, чтобы максимально обезопасить свой дом от неприятных сюрпризов.
  • Датчик движения, совместимый с Raspberry Pi. Данный модуль возможно использовать для того, чтоб лампы домашние включались при малейших замеченных движениях в любой зоне домовладения.

Преимущества Raspberry Pi 3 по сравнению с ранее выпущенными версиями

Преимуществ у последней прогрессивной версии Raspberry Pi 3 много:

  • Устройство имеет много интерфейсов. Последняя версия располагает Bluetooth 4.1, Wi-Fi 802.11n, Lan, 4 USB, а также HDMI. Также имеется возможность подключить GSM-модем для выхода на связь с официальным мобильным оператором, который занимается предоставлением услуг интернет-доступа.
  • Raspberry Pi 3 имеет мощный четырехъядерный 1,2 ГГц процессор.
  • Последняя версия совместима с предыдущими.

Плюсы и минусы системы «умный дом» от фирмы Raspberry Pi

Для человека, который желает сделать свою жизнь комфортнее и безопаснее, система «умный дом» Raspberry Pi 3 является разумным решением. Подводя итог всему вышесказанному, можно выделить четыре важных преимуществ «умного дома».

  • Возможность максимально обезопасить свой дом за счет контроля протечек, установленного видеонаблюдения, охранной, а также противопожарной системы.
  • Возможность установки системы, помогающей экономить (речь идет о датчиках движения, смесителях сенсорного типа, датчиках, фиксирующих движение).
  • Возможность установки систем, повышающих уровень комфорта (спецсистемы управления шторами, электроприборами).
  • Возможность установки интеллектуальных развлекательных спецсистем (речь идет о системе мультирум, спецсистеме «домашний кинотеатр»).

Наряду с плюсами, есть у системы «умный дом» и несколько незначительных минусов:

  1. Систему целесообразно покупать только для большого загородного дома.
  2. Важно разбираться в каждом элементе системы (или иметь всегда под боком разбирающегося в этом вопросе человека), так как из-за своей сложности система в любой момент может выйти из строя.
  3. Так как прогресс галопирующими темпами продвигается вперед, через пять-семь лет и эта прогрессивная система устареет, поэтому есть риск того, что с продажи могут исчезнуть важные ее компоненты.

Как видим, плюсы уверенно перекрывают минусы. Поэтому если есть желание купить систему «умный дом» для загородного коттеджа, не стоит отказываться от этой идеи.

Это статья написана для напоминания, что умный дом стал намного ближе, чем мы думали.

Home Assistant-это open-source платформа для автоматизации, работающая на Python 3. Позволяет отслеживать и контролировать все устройства в доме и автоматизировать действия. Идеально может работать на одноплатном компьютере Raspberry PI.

Давайте по порядку:

1. Центральное ядро

Умный дом нуждается в центральном контроллере (хаб, сервер и т.д.). Это связующее звено между всеми элементами умного дома и пользователем. Бывают распределенные системы без центрального контроллера, но все равно нужен один сборщик информации, который покажет пользователю все актуальные новости каждого устройства

ПК -отличный вариант, если требуется большая нагрузка на сервер, т.к. производительности даже старых ноутбуков хватит вполне (только если вы не будете крутить 4К видео или использовать 10 камер с HEVC кодированием). Из минусов- в 95% случаев активное охлаждение и чтобы подключить обычное реле всегда приходится использовать дополнительные костыли.

Специализированные контроллеры - отличный вариант, если вам нужна надежность и отказоустойчивость. Вероятность отказа промышленного контроллера (при правильных руках) приближается к вероятности появления зомби апокалипсиса. Но есть и минус- программировать и настраивать могут либо те, кто уже автоматизировал несколько конвейеров, либо человек в мозгу которого не нейроны а релейные схемы. И чаще всего интерфейс у них, мягко говоря, аскетичный. К сожалению, я не такой умный, поэтому это вариант точно не для меня.

И тут мы приходим к самому современному варианту - это дешевые одноплатные компьютеры на базе ARM архитектуры. Сейчас их выбор просто огромен, но самый популярный родоначальник Raspberri pi . Из плюсов маленькое энергопотребление, есть пользовательские выводы и удовлетворительная производительность для запуска несложных программ.

Есть еще много экзотических вариантов автоматизации своего очага, например, кровать-будильник на Всемирной выставке 1851 года (изобретатель Теофиль Картер). Или любимое извращенство- ардуино с шилдами (прощу прощение за несерьезный мем)

2. Внешние датчики, контроллеры, элементы управления.

Эта тема настолько обширная, что описать все многодикообразие в данной статье не представляется возможным, поэтому оставим это для будущих статей. Вкратце, есть:

DIY решения и ардуиноподбные решения
- Китайские решения (пример Sonoff)
- Дорогие красивые решения (пример nest)

3. Софт

Тоже вынесем сие обсуждение в отдельную тему. Сегодня мы будем рассматривать только одну из множества открытых платформ. Обзоры еще будут. Сразу отвечу на вопросы, почему именно она:

А) Огромное количество поддерживаемых сервисов,
б) Легко и бесплатно установить,
в) Приятный интерфейс.

4. Сторонние сервисы

Помогают подключить разные существующие решения и автоматизировать действия на смартфонах и ПК. Типичный пример IFTTT .

Что делать если я не умею программировать или у меня есть деньги?
Отдельно стоят решения современных экосистем от Samsung , Xiaomi , Amazon , Apple , Google и т.д. Соглашусь, что порой их решения выглядят намного красИвее, но средняя заработная плата русского человека примерно 500$, что не позволяет ощутить всю гамму вкусов.

1. Raspberry Pi 3 (вероятно подойдут и более старые) 35$
2. MicroSD на 16ГБ не ниже 10 класса(чем быстрее, тем лучше) с адаптером к компьютеру 7$
3. Зарядник MicroUSB на 5В и больше чем 2А 0$ (подошел от старого телефона)
4. Ваше драгоценное время. Бесценно.
5. Опционально монитор с HDMI

Давайте устанавливать:

1. Скачать удобную программу для записи на флешку. Я рекомендую портативную версию
2. Зайти на сайт и скачать последнюю версию Hassbian
3. Разархивировать основной образ в любую папку.
4. Открыть Etcher
5. Выбрать наш основной образ
6. Выбрать нашу флешку для записи
7. Нажать кнопку старт
8. ???
9. Profit

После записи, извлекаем флешку и вставляем в распберри пи.

ОБЯЗАТЕЛЬНО НАДО ВСТАВИТЬ В МАЛИНУ ИНТЕРНЕТ-ШНУР!!!

При подаче питания должна загореться красная лампочка и зеленая начать хаотично мигать. Ждем с кружкой чая 10 минут.

После этого нам надо найти уже веб интерфейс нашей системы умного дома. Для этого есть несколько способов:

1) Посмотреть через hdmi нашу командную строку и найти там IP вида 192.168.1.х (или любого другого)
2) посмотреть в настройках роутера какой DHCP сервер присвоил адрес новому устройству
3) Воспользоваться сканером сети (например,

1.4 / 5 ( 10 votes )

Сейчас невозможно игнорировать нововведения и современные технологии, прочно укоренившиеся в нашей жизни: мобильную связь, интернет, компьютерные приборы и дома, в которых каждый бытовой процесс контролируется с планшета или телефона. Такие дома называют «Умными домами». Это жилища, в котором вы сможете контролировать всё: от включения света или отопления щелчком пальцев до активации систем имитации присутствия, которые будут помогать держать ваш дом в безопасности, пока в нём никого нет.

Такие жилища основываются на датчиках и контроллерах, которые реагируют на тепловую энергию, шум и движения. Простейшие из таких датчиков мы можете увидеть в крупных торговых центрах, в которых двери открываются автоматически, как только вы к ним подходите. Не можете поверить, что такая система может быть неотъемлемой частью вашей жизни? Придется.

Если вы хотите минимизировать прилагаемые усилия при выполнении бытовых занятий, таких как стирка, готовка или уборка, проект «Умный дом» просто создан для вас.

Проект «Умный дом»

Концепция работы «Умного дома»

Конечно, для каждого автоматизированного и автоматического оборудования должна быть программа. Именно от неё будет зависеть успешность вашего «Умного дома». Такие программы адаптации оборудования требуют некоторых знаний и опыта в сферах программирования и электроники. Однако если вы новичок в этом, малознакомы с программированием и не обладаете необходимым опытом работы с электроникой, мы рекомендуем вам использовать программы, максимально адаптированные для начинающих пользователей.

Создание «Умного дома» без собственных усилий подразумевает собой крупные вложения средств, которые на данный момент может позволить себе далеко не каждый. Но если понять концепцию работы устройств, можно с лёгкостью собрать такой своими руками.

Raspberry Pi или автоматизация «Умного дома»

Raspberry Pi - компания, создавшая миникомпьютер Raspberry. Это устройство максимально упрощает автоматизацию «Умного дома» и обладает крайне привлекательной ценой по сравнению с конкурентами, имеющими менее качественное оборудование.

Изначально было придумано 2 комплектации мини-компьютера Raspberry Pi:

  • модель А;
  • модель В.

Внешний вид Raspberry Pi model B (с установленной flash-картой)

Обе версии работают на основе процессора ARM11 с тактовой частотой 700 МГц, но имеют различную память. Как правило, модель B обладает количеством оперативной памяти, в 2 раза превышающей модель А. Следовательно, А - 256 Мб, а В - 512 Мб. Поэтому модель А не была снята с международного производства, так как обладала ещё одним весомым преимуществом. В ней присутствовала поддержка порта Ethernet, позволяющая выход в интернет. Также компания Raspberry Pi не остановилась на достигнутом и позже выпустила обновлённую версию модели В. Улучшенный вариант обладал более компактным дизайном, а также включал в себя 4 USB-порта, что в 2 раза превышает их количество в предшествующей модели.

Данный девайс прекрасно найдёт себя в вашей разработке проекта «Умный дом». За относительно невысокую стоимость этот компьютер Raspberry Pi может выполнять самые разнообразные задачи, связанные с автоматизацией проекта «Умный дом».

Мини-компьютер Raspberry может управлять , которое облегчит автоматизацию вашего дома или квартиры. С помощью платы RaZberry от фирмы Z-Wave ваш мини-компьютер воистину станет мозгом для всей вашей системы. Z-Wave являет собой стандарт беспроводной автоматизации. Он не требует проведения дополнительных проводов или ремонтных работ, что в лучшую сторону сказывается на экономике вашего проекта. Также Wave невероятно прост в установке. Это позволяет самостоятельно справиться с задачей даже новичку в сфере электроники. Появилась нехватка производительности? Не беспокойтесь, производительность Z-Wave можно наращивать благодаря установке дополнительных устройств, как и в обычном компьютере. Смена комплектующих или их апгрейд послужит улучшению работы устройства. Также Wave регулярно проводит доступные тренинги и обучения для опытных монтажников по темам установки и адаптации под определённые системы Z-Wave.

Контроллер Z-Wave Fibaro Home Center 2

Если вы не уверены в своих возможностях, или же вам не хватает опыта, компания Z-Wave готова предоставить полный спектр услуг по установке, либо же настройке оборудования Z-Wave по всей территории России. Также вы всегда можете воспользоваться их доступной базой знаний или задать интересующие вас вопросы на сайте технической поддержки.

Также с помощью системы Raspberry Pi вы можете соорудить из обычной веб-камеры и одноплатного компьютера собственную настоящую систему видеонаблюдения и наблюдать за любым объектом через интернет, где бы ни находилась ваша камера.

При этом вам не обязательно просматривать или проверять видеонаблюдение ежеминутно. По окончании рабочего дня вы можете спокойно просмотреть основные события, произошедшие за день и увиденные вашей камерой.

С помощью системы Raspberry Pi и веб-камеры можно вести видеонаблюдение

«Умный дом» является сложной системой, которая, помимо выполнения указаний, заданных вами в программе, может выполнять действия, полностью опираясь на оригинальность той или иной ситуации. В ином понимании это «умная» система, способная самостоятельно найти выход из ситуаций, основываясь на происходящем.

Создать такой домик не составит труда при выделении должного количества времени. Вы получите несоизмеримую пользу от своих нововведений. До конца разобравшись в строении и автоматике вашего творения, вы сможете экономить огромное количество времени и средств с помощью контроля даже самых минимальных лишних выбросов электроэнергии или тепла.

Введение

Данный проект берет свое начало в 2014 году, когда передо мной встала задача обеспечить удаленное управления обогревательными приборами в своем загородном доме. Дело в том, что практически каждые выходные мы с семьей проводим на даче. И если летом мы, задержавшись по тем или иным причинам в городе, приехав в дом могли сразу лечь спать, то зимой, когда температура опускается до -30 градусов, мне приходилось тратить по 3-4 часа на протопку дома. Я видел следующие пути решения данной проблемы:

    "Неумное решение" - можно оставлять включенными обогреватели со встроенными термостатами на минимальной температуре поддержания тепла. Собственно ничего "умного" в этом решении нет, но 24/7 работающие обогревательные приборы в деревянном загородном доме не внушают доверия. Хотелось хотя бы минимального контроля над их состоянием, автоматизации и какой-нибудь обратной связи;

    GSM-розетки - данным решением пользуются мои соседи по дачному участку. Если кто-то не знаком с ними, то это просто управляемый посредством SMS команд переходник, который включается в розетку, а сам обогреватель включается в него. Не самое бюджетное решение, если нужно обеспечить обогрев целого дома - ссылка на маркет . Я вижу его как самое простое и менее трудозатратное в реализации, но имеющее минусы в процессе эксплуатации, такие как: целый ворох сим карт и работы по поддержанию их положительного баланса, так как для каждой комнаты нужен минимум один обогреватель, ограниченность и неудобства их контроля по средствам SMS;

  1. "Умный дом" - собственно решения, построенные на реализации "умного дома".

Как наиболее перспективное решение мною был выбран третий вариант и следующим вопросом на повестке дня стал - "Какую платформу для реализации выбрать?".


Уже не помню сколько я потратил время на поиски подходящих вариантов, но в итоге из бюджетных и доступных в магазинах решений я нашел системы: NooLite и CoCo (сейчас уже переименовали в Trust). При их сравнении решающую роль для меня сыграло то, что у NooLite есть открытое и задокументированное API для управления любыми его блоками. На тот момент необходимости в нем не было, но я сразу отметил, какую гибкость в дальнейшем это может дать. Да и цена у NooLite была существенно ниже. В итоге я остановил свой выбор именно на NooLite.

Реализация 1 - автоматизация NooLite

Система NooLite состоит из силовых модулей (под разные типы нагрузок), датчиков (температура, влажность, движение) и управляющего ими оборудования: радио пульты, настенные выключателей, USB-адаптеров для компьютера или Ethernet-шлюза PR1132. Все это можно использовать в различных комбинациях, соединять их между собой напрямую или управлять через usb-адаптеры или шлюз, подробнее об этом можете почитать на официальном сайте производителя.


Для моей задачи центральным элементом умного дома я выбрал Ethernet-шлюза PR1132, который будет управлять силовыми блоками и получать информацию с датчиков. Для работы Ethernet-шлюза необходимо подключить его к сети кабелем, поддержки Wi-Fi в нем нет. На тот момент у меня в доме уже была организована сеть, состоящая из WiFi-маршрутизатора Asus rt-n16 и USB--модема для доступа к интернету. Поэтому весь монтаж NooLite для меня заключался лишь в том, чтобы подключить шлюз кабелем к маршрутизатору, расположить в доме радиодатчики температуры и смонтировать силовые блоки в центральном электрощитке.


У NooLite есть ряд силовых блоков для разной подключаемой нагрузки. Самый "мощный" блок может управлять нагрузкой до 5000 Вт. Если требуется управление большей нагрузкой, как в моем случае, то можно сделать подключение нагрузки через управляемое реле, которым, в свою очередь, будет управлять силовой блок NooLite.




Схема подключения



Ethernet-шлюза PR1132 и маршрутизатор Asus rt-n16



Беспроводной датчик температуры и влажности PT111



Электрощиток и силовой блок для наружного монтажа SR211 - в дальнейшем вместо этого блока я использовал блок для внутреннего монтажа и поместил его прямо в электрощитке


Ethernet-шлюз PR1132 имеет web-интерфейс через которой осуществляется привязка/отвязка силовых блоков, датчиков и управление ими. Сам интерфейс выполнен в довольно "топорном" минималистическом стиле, но этого вполне достаточно для доступа ко всему необходимому функционалу системы:




Настройки




Управление




Страница одной группы выключателей


Подробно о привязке и настройке всего этого - опять же на официальном сайте.


На тот момент я мог:

  • управлять обогревателями, находясь в локальной сети загородного дома, что было не очень-то и полезно, исходя из первоначальной задачи;
  • создавать таймеры включения/отключения по времени и дню недели.

Как раз таймеры автоматизации на какое-то время решили мою первоначальную задачу. В пятницу утром-днем обогреватели включались, и уже к вечеру мы приезжали в теплый дом. На случай, если наши планы изменятся, был поставлен второй таймер, который ближе к ночи отключал батареи.

Реализация 2 - удаленный доступ к умному дому

Первая реализация позволила частично решить мою задачу, но все-таки хотелось онлайн управления домом и наличие обратной связи. Я начал искать варианты организации доступа к дачной сети из вне.


Как я упомянул в предыдущем разделе - дачная сеть имеет доступ к интернету через usb модем одного из мобильных операторов. По умолчанию мобильные модемы имеют серый ip адрес и без дополнительных ежемесячных трат белого фиксированного ip не получить. При таком сером IP не помогут и различные no-ip сервисы.


Единственный вариант, который мне удалось на тот момент придумать - VPN. На городском маршрутизаторе у меня был настроен VPN-сервер, которым я время от времени пользовался. Мне было необходимо настроить на дачном роутере VPN-клиент и прописать статические маршруты до дачной сети.




Схема подключения


В результате дачный роутер постоянно держал VPN соединение с городским роутером и для доступа к шлюзу NooLite мне нужно было с клиентского устройства (ноутбук, телефон) подключится по VPN к городскому маршрутизатору.


На этом этапе я мог:

  • получить доступ к умному дому из любого места;

В целом это практически на 100% покрывало первоначальную задачу. Однако я понимал, что данная реализация далека от оптимальной и удобной в использовании, так как каждый раз я должен был выполнять ряд дополнительных действий по подключению к VPN. Для меня это не было особой проблемой, однако для остальных членов семьи это было не очень удобно. Так же в этой реализации было очень много посредников, что сказывалось на отказоустойчивости всей системы в целом. Однако на некоторое время я остановился именно на этом варианте.

Реализация 3 - Telegram bot

С появлением ботов в Telegram я взял на заметку, что это смогло бы стать довольно удобным интерфейсом для управления умным домом и, как только у меня появилось достаточно свободного времени, я приступил к разработке на Python 3.


Бот должен был где-то находится и, как самое энергоэффективное решение, я выбрал Raspberry Pi. Хоть это и был мой первый опыт работы с ним, особых сложностей в его настройке не возникло. Образ на карту памяти, ethernet кабель в порт и по ssh - полноценный Linux.


Как я уже говорил - у NooLite есть задокументированное API, которое и пригодилось мне на данном этапе. Для начала я написал простенькую обертку для более удобного взаимодействия с API:


noolite_api.py

""" NooLite API wrapper """ import requests from requests.auth import HTTPBasicAuth from requests.exceptions import ConnectTimeout, ConnectionError import xml.etree.ElementTree as ET class NooLiteSens: """Класс хранения и обработки информации, полученной с датчиков Пока как таковой обработки нет """ def __init__(self, temperature, humidity, state): self.temperature = float(temperature.replace(",", ".")) if temperature != "-" else None self.humidity = int(humidity) if humidity != "-" else None self.state = state class NooLiteApi: """Базовый враппер для общения с NooLite""" def __init__(self, login, password, base_api_url, request_timeout=10): self.login = login self.password = password self.base_api_url = base_api_url self.request_timeout = request_timeout def get_sens_data(self): """Получение и прасинг xml данных с датчиков:return: список NooLiteSens объектов для каждого датчика:rtype: list """ response = self._send_request("{}/sens.xml".format(self.base_api_url)) sens_states = { 0: "Датчик привязан, ожидается обновление информации", 1: "Датчик не привязан", 2: "Нет сигнала с датчика", 3: "Необходимо заменить элемент питания в датчике" } response_xml_root = ET.fromstring(response.text) sens_list = for sens_number in range(4): sens_list.append(NooLiteSens(response_xml_root.find("snst{}".format(sens_number)).text, response_xml_root.find("snsh{}".format(sens_number)).text, sens_states.get(int(response_xml_root.find("snt{}".format(sens_number)).text)))) return sens_list def send_command_to_channel(self, data): """Отправка запроса к NooLite Отправляем запрос к NooLite с url параметрами из data:param data: url параметры:type data: dict:return: response """ return self._send_request("{}/api.htm".format(self.base_api_url), params=data) def _send_request(self, url, **kwargs): """Отправка запроса к NooLite и обработка возвращаемого ответа Отправка запроса к url с параметрами из kwargs:param url: url для запроса:type url: str:return: response от NooLite или исключение """ try: response = requests.get(url, auth=HTTPBasicAuth(self.login, self.password), timeout=self.request_timeout, **kwargs) except ConnectTimeout as e: print(e) raise NooLiteConnectionTimeout("Connection timeout: {}".format(self.request_timeout)) except ConnectionError as e: print(e) raise NooLiteConnectionError("Connection timeout: {}".format(self.request_timeout)) if response.status_code != 200: raise NooLiteBadResponse("Bad response: {}".format(response)) else: return response # Кастомные исключения NooLiteConnectionTimeout = type("NooLiteConnectionTimeout", (Exception,), {}) NooLiteConnectionError = type("NooLiteConnectionError", (Exception,), {}) NooLiteBadResponse = type("NooLiteBadResponse", (Exception,), {}) NooLiteBadRequestMethod = type("NooLiteBadRequestMethod", (Exception,), {})



telegram_bot.py

import os import logging import functools import yaml import requests import telnetlib from requests.exceptions import ConnectionError from telegram import ReplyKeyboardMarkup, ParseMode from telegram.ext import Updater, CommandHandler, Filters, MessageHandler, Job from noolite_api import NooLiteApi, NooLiteConnectionTimeout,\ NooLiteConnectionError, NooLiteBadResponse # Получаем конфигурационные данные из файла config = yaml.load(open("conf.yaml")) # Базовые настройка логирования logger = logging.getLogger() logger.setLevel(logging.INFO) formatter = logging.Formatter("%(asctime)s - %(filename)s:%(lineno)s - %(levelname)s - %(message)s") stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) # Подключаемся к боту и NooLite updater = Updater(config["telegtam"]["token"]) noolite_api = NooLiteApi(config["noolite"]["login"], config["noolite"]["password"], config["noolite"]["api_url"]) job_queue = updater.job_queue def auth_required(func): """Декоратор аутентификации""" @functools.wraps(func) def wrapped(bot, update): if update.message.chat_id not in config["telegtam"]["authenticated_users"]: bot.sendMessage(chat_id=update.message.chat_id, text="Вы неавторизованы.\nДля авторизации отправьте /auth password.") else: return func(bot, update) return wrapped def log(func): """Декоратор логирования""" @functools.wraps(func) def wrapped(bot, update): logger.info("Received message: {}".format(update.message.text if update.message else update.callback_query.data)) func(bot, update) logger.info("Response was sent") return wrapped def start(bot, update): """Команда начала взаимодействия с ботом""" bot.sendMessage(chat_id=update.message.chat_id, text="Для начала работы нужно авторизоваться.\n" "Для авторизации отправьте /auth password.") def auth(bot, update): """Аутентификация Если пароль указан верно, то в ответ приходит клавиатура управления умным домом """ if config["telegtam"]["password"] in update.message.text: if update.message.chat_id not in config["telegtam"]["authenticated_users"]: config["telegtam"]["authenticated_users"].append(update.message.chat_id) custom_keyboard = [ ["/Включить_обогреватели", "/Выключить_обогреватели"], ["/Включить_прожектор", "/Выключить_прожектор"], ["/Температура"] ] reply_markup = ReplyKeyboardMarkup(custom_keyboard) bot.sendMessage(chat_id=update.message.chat_id, text="Вы авторизованы.", reply_markup=reply_markup) else: bot.sendMessage(chat_id=update.message.chat_id, text="Неправильный пароль.") def send_command_to_noolite(command): """Обработка запросов в NooLite. Отправляем запрос. Если возращается ошибка, то посылаем пользователю ответ об этом. """ try: logger.info("Send command to noolite: {}".format(command)) response = noolite_api.send_command_to_channel(command) except NooLiteConnectionTimeout as e: logger.info(e) return None, "*Дача недоступна!*\n`{}`".format(e) except NooLiteConnectionError as e: logger.info(e) return None, "*Ошибка!*\n`{}`".format(e) except NooLiteBadResponse as e: logger.info(e) return None, "*Не удалось сделать запрос!*\n`{}`".format(e) return response.text, None # ========================== Commands ================================ @log @auth_required def outdoor_light_on(bot, update): """Включения уличного прожектора""" response, error = send_command_to_noolite({"ch": 2, "cmd": 2}) logger.info("Send message: {}".format(response or error)) bot.sendMessage(chat_id=update.message.chat_id, text="{}".format(response or error)) @log @auth_required def outdoor_light_off(bot, update): """Выключения уличного прожектора""" response, error = send_command_to_noolite({"ch": 2, "cmd": 0}) logger.info("Send message: {}".format(response or error)) bot.sendMessage(chat_id=update.message.chat_id, text="{}".format(response or error)) @log @auth_required def heaters_on(bot, update): """Включения обогревателей""" response, error = send_command_to_noolite({"ch": 0, "cmd": 2}) logger.info("Send message: {}".format(response or error)) bot.sendMessage(chat_id=update.message.chat_id, text="{}".format(response or error)) @log @auth_required def heaters_off(bot, update): """Выключения обогревателей""" response, error = send_command_to_noolite({"ch": 0, "cmd": 0}) logger.info("Send message: {}".format(response or error)) bot.sendMessage(chat_id=update.message.chat_id, text="{}".format(response or error)) @log @auth_required def send_temperature(bot, update): """Получаем информацию с датчиков""" try: sens_list = noolite_api.get_sens_data() except NooLiteConnectionTimeout as e: logger.info(e) bot.sendMessage(chat_id=update.message.chat_id, text="*Дача недоступна!*\n`{}`".format(e), parse_mode=ParseMode.MARKDOWN) return except NooLiteBadResponse as e: logger.info(e) bot.sendMessage(chat_id=update.message.chat_id, text="*Не удалось получить данные!*\n`{}`".format(e), parse_mode=ParseMode.MARKDOWN) return except NooLiteConnectionError as e: logger.info(e) bot.sendMessage(chat_id=update.message.chat_id, text="*Ошибка подключения к noolite!*\n`{}`".format(e), parse_mode=ParseMode.MARKDOWN) return if sens_list.temperature and sens_list.humidity: message = "Температура: *{}C*\nВлажность: *{}%*".format(sens_list.temperature, sens_list.humidity) else: message = "Не удалось получить данные: {}".format(sens_list.state) logger.info("Send message: {}".format(message)) bot.sendMessage(chat_id=update.message.chat_id, text=message, parse_mode=ParseMode.MARKDOWN) @log @auth_required def send_log(bot, update): """Получение лога для отладки""" bot.sendDocument(chat_id=update.message.chat_id, document=open("/var/log/telegram_bot/err.log", "rb")) @log def unknown(bot, update): """Неизвестная команда""" bot.sendMessage(chat_id=update.message.chat_id, text="Я не знаю такой команды") def power_restore(bot, job): """Выполняется один раз при запуске бота""" for user_chat in config["telegtam"]["authenticated_users"]: bot.sendMessage(user_chat, "Включение после перезагрузки") def check_temperature(bot, job): """Периодическая проверка температуры с датчиков Eсли температура ниже, чем установленный минимум - посылаем уведомление зарегистрированным пользователям """ try: sens_list = noolite_api.get_sens_data() except NooLiteConnectionTimeout as e: print(e) return except NooLiteConnectionError as e: print(e) return except NooLiteBadResponse as e: print(e) return if sens_list.temperature and \ sens_list.temperature < config["noolite"]["temperature_alert"]: for user_chat in config["telegtam"]["authenticated_users"]: bot.sendMessage(chat_id=user_chat, parse_mode=ParseMode.MARKDOWN, text="*Температура ниже {} градусов: {}!*".format(config["noolite"]["temperature_alert"], sens_list.temperature)) def check_internet_connection(bot, job): """Периодическая проверка доступа в интернет Если доступа в интрнет нет и попытки его проверки исчерпаны - то посылаем по telnet команду роутеру для его перезапуска. Если доступ в интернет после этого не появился - перезагружаем Raspberry Pi """ try: requests.get("http://ya.ru") config["noolite"]["internet_connection_counter"] = 0 except ConnectionError: if config["noolite"]["internet_connection_counter"] == 2: tn = telnetlib.Telnet(config["router"]["ip"]) tn.read_until(b"login: ") tn.write(config["router"]["login"].encode("ascii") + b"\n") tn.read_until(b"Password: ") tn.write(config["router"]["password"].encode("ascii") + b"\n") tn.write(b"reboot\n") elif config["noolite"]["internet_connection_counter"] == 4: os.system("sudo reboot") else: config["noolite"]["internet_connection_counter"] += 1 dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(CommandHandler("auth", auth)) dispatcher.add_handler(CommandHandler("Температура", send_temperature)) dispatcher.add_handler(CommandHandler("Включить_обогреватели", heaters_on)) dispatcher.add_handler(CommandHandler("Выключить_обогреватели", heaters_off)) dispatcher.add_handler(CommandHandler("Включить_прожектор", outdoor_light_on)) dispatcher.add_handler(CommandHandler("Выключить_прожектор", outdoor_light_off)) dispatcher.add_handler(CommandHandler("log", send_log)) dispatcher.add_handler(MessageHandler(, unknown)) job_queue.put(Job(check_internet_connection, 60*5), next_t=60*5) job_queue.put(Job(check_temperature, 60*30), next_t=60*6) job_queue.put(Job(power_restore, 60, repeat=False)) updater.start_polling(bootstrap_retries=-1)


Данный бот запускается на Raspberry Pi под Supervisor, который контролирует его состояние и запускает его при перезагрузке.




Схема работы бота


При запуске бот:

  • посылает зарегистрированным пользователям сообщение о том, что он включился и готов к работе;
  • мониторит подключение к интернету. В условии работы через мобильный интернет были случаи, когда он пропадал. Поэтому была добавлена периодическая проверка доступности подключения. Если заданное количество проверок заканчивается неудачей, то сначала скрипт перезагружает через telnet маршрутизатор, а потом, если это не помогло, и сам Raspberry Pi;
  • мониторит температуру внутри помещения и отправляет пользователю уведомление, если она опустилась ниже заданного порога;
  • выполняет команды от зарегистрированных пользователей.

Команды жестко прописаны в коде и включают в себя:

  • включение/выключение обогревателей;
  • включение/выключение уличного прожектора;
  • получение температуры с датчиков;
  • получение файла логов для дебага.

Пример общения с ботом:



В итоге я и все члены семьи получили довольно удобный интерфейс управления умным домом через Telegram. Все, что нужно сделать - установить телеграмм клиент на свое устройство и знать пароль для начала общения с ботом.


В итоге я могу:

  • управлять умным домом из любого места с любого устройства со своей учетной записью Telegram;
  • получать информацию с датчиков, расположенных в доме.

Данная реализация на все 100% решила первоначальную задачу, была удобной и интуитивно понятной в использовании.

Заключение

Бюджет (по текущим ценам):

  • NooLite Ethernet-шлюз - 6.000 рублей
  • NooLite силовой датчик для управления нагрузкой - 1.500 рублей
  • NooLite датчик температуры и влажности - 3.000 рублей (без влажности дешевле)
  • Raspberry Pi - 4.000 рублей

На выходе у меня получилось довольно гибкая бюджетная система, которую можно легко расширять по мере необходимости (NooLite шлюз поддерживает до 32 каналов). Я и члены семьи могут с легкостью пользоваться ей без необходимости выполнять какие-то дополнительные действия: зашел в телеграмм - проверил температуру - включил обогреватели.


На самом деле данная реализация не последняя. Буквально неделю назад я подключил всю эту систему к Apple HomeKit, что позволило добавить управление через приложение для iOS "Дом" и соответствующую интеграцию с Siri для голосового управления. Но процесс реализации тянет на отдельную статью. Если сообществу будет интересна данная тема, то готов в ближайшее время подготовить еще одну статью.



Благодаря широкому ассортименту дополнительных модулей миниатюрный компьютер Raspberry Pi наилучшим образом подходит для любителей сборки недорогих систем умного дома (Smart Home) своими руками.

В качестве операционной системы можно использовать Raspbian, основанную на ядре Linux, вместе с такими расширениями, как Pimatic. Еще проще собрать «умный дом» можно с помощью комплексных программно-аппаратных решений на «открытой платформе», например openHAB, Fhem, SHC (SmartHome Control) или wiButler.

Модули Smart Home для Raspberry Pi

Построение системы «умный дом» на Raspberry Pi имеет смысл только тогда, когда с ее помощью можно управлять различными устройствами, а для этого необходимы соответствующие модули.

Так как Raspberry Pi - это популярный продукт для любителей мастерить, в продаже имеется огромный выбор модулей для Smart Home. Мы покажем вам некоторые из самых интересных.

433 МГц - приемник и передатчик для Raspberry Pi

Частота 433 МГц часто используется в компонентах доступных систем Smart Home, например, переключателях и термостатах радиаторов отопления, которые можно найти в строительных магазинах.

Такие передатчики и приемники идеально подходят для установки в систему «умный дом», построенную на Raspberry Pi. Бандл из этих двух модулей можно легко приобрести примерно за 600 рублей.

Модуль камеры для Raspberry Pi


С подключенным модулем камеры Raspberry Pi можно использовать в качестве системы видеонаблюдения.

Камера совместима с операционной системой Raspbian, она способна записывать видео в разрешении Full HD и делать 5-мегапиксельные фотографии.

Этот модуль доступен как с инфракрасным фильтром, так и без него по цене от 2000 рублей.

Датчик движения для Raspberry Pi

Если вы хотите, чтобы лампы освещения и другие электронные устройства (например, камера) включалось при появлении движения в какой-то области вашего дома, понадобится датчик движения, подключенный к системе умного дома.

Особенно привлекательным по цене является упаковка из пяти «пироэлектрических инфракрасных PIR датчиков движения».

Этот пакет вы можете приобрести всего за 480 рублей.

Датчик влажности и температуры воздуха для Raspberry Pi

Функционал метеостанции относится к базовому для Smart Home. Получать и обрабатывать метеоданные с помощью Raspberry Pi очень легко. Вам понадобится всего лишь один дешевый датчик, который вы подключите к мини-компьютеру: идеально подойдет DHT11, который стоит менее чем 600 рублей.

Модуль Enocean для Rapsberry Pi

Enocean - это беспроводная технология, которая обходится без источника питания. Суть вот в чем: энергия, необходимая для совершения того или иного действия, возникает из-за изменения состояния (нажатие на кнопку, разница температур, появление солнечного света, дуновение ветра и т. д.).

Соответственно, часто сопутствующими модулями являются переключатели или датчики температуры.

Чтобы управлять устройствами с помощью технологии Enocean через Rapsberry Pi, вам понадобится подходящий модуль, приобрести который можно всего за 3600 рублей.

Пожарная сигнализация для Raspberry Pi

Часто система умного дома используется для повышения уровня домашнего комфорта, но одной из важных функций может стать и защита жилища. Помимо охранной сигнализации и камер видеонаблюдения можно установить датчики дыма и протечки воды.

С помощью датчика дыма, который стоит всего 500 рублей, вы построите собственную пожарную сигнализацию. Однако при конструировании такой важной охранной части «умного дома» вы должны дважды проверять надежность работы системы.

Модуль Homematic для Rapsberry Pi

Homematic является одной из самых популярных систем Smart Home в Европе. Для взаимодействия всех ее компонент, как правило, необходим центральный модуль управления CCU2 (MATIC Home Gateway).

Теперь вы можете соединить соответствующий модуль беспроводной связи с Raspberry. Один из таких, от компании ELV, стоит около 1700 рублей.

С представленными в этой статье модулями вы сможете построить весьма многофункциональную систему Smart Home. Однако, для Rapsberry Pi существуют еще множество других модулей, например, для работы с беспроводными стандартами Z-Wave и Zigbee.

Фото: компании-производители, CHIP.de