Raspberry pi умный дом. Система управления умным домом на основе Raspberry Pi. Периферийные устройства «умного дома»

Скачать Viber 07.03.2019
Скачать Viber

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

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

Каков принцип работы умного дома? Какие характеристики и возможности актуальны? Что учесть при настройке и подготовке к работе? Как собрать систему умный дом на базе Raspberry Pi 3? Эти и другие вопросы рассмотрим ниже.

Принцип работы

Умный дом на базе Raspberry Pi 3 популярен, благодаря легкости сборки, в том числе для людей без специального опыта. Основой всей системы является небольшая материнская плата, в которую производитель заложил огромный потенциал.

Первоначально компания продавала две комплектации прибора - модели А и В. Первая отличалась объем памяти размером в 256 МБ, а вторая в два раза большим ее размером.

Модель А какое-то время была в продаже, благодаря наличию доступа к глобальной сети, но после обновления до версии «В» в первом варианте отпала необходимость. Новая версия отличалась компактностью и наличием четырех портов USB.

Построение умного дома на основе Raspberry Pi 3 зависит от предпочтений владельца. Вне зависимости от этого, принцип работы остается неизменным:


При желании система умный дом может быть собрана на платформе «открытого» типа, к примеру, Fhem, openHAB, SHC. Не менее востребованный вариант - применение платформы wiBulter.

Где применяется Raspberry Pi 3 Model B

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


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

Особенности и характеристики Raspberry Pi 3 Model B

Устройство представляет собой компактный компьютер, имеющий размеры пластиковой карты банка. На чипе установлено необходимое оборудование для работы - CPU, «оперативка», HDMI-разъем, USB и композитный выход. Также имеется Ethernet-разъем, беспроводная связь и блютуз.

В блоке Raspberry Pi 3 Model B предусмотрено четыре десятка вводных и выводных контактов базового назначения. Они предназначены для подключения периферийных устройств, нуждающихся во взаимодействии с остальными элементами внешнего мира. Речь идет о коммутации с сенсорами и исполнительными изделиями, работающими от сети.

Базовая ОС для умного дома на Raspberry Pi 3 - Linux. Операционная система инсталлируется на карту памяти типа microSD, которая устанавливаемся в специальном разъеме платы.

Многие ранее работали только с Windows и бояться Linux. В этой ОС нет ничего необычного. Она проста в пользовании и отличается высоким уровнем безопасности. Если при установке допущены ошибки в настройке, их легко исправить путем восстановления образа.

Версия Raspberry Pi 3 Model - более продвинутый вариант второй модели. Новая плата отличается полной совместимостью с прошлой версией, но отличается большей производительностью и дополнительными средствами для подключения:

  1. Появилась беспроводная связь Wi-Fi серии 802.11n и блютуз 4.1.
  2. Предусмотрен процессор с четырьмя ядрами (тип - ARM Cortex-A53). Частота работы составляет 1,2 гигагерца. В основе лежит однокристальный чип типа Broadcom BCM

В CPU предусмотрена архитектура ARM v53. Это позволяет использовать любую операционную систему, к примеру, Ubuntu или Windows 10.

Применение 4-ядервного чипа гарантирует рост мощности изделия на 50-60 процентов (если сравнивать со второй модель) и на 1000 процентов в сравнении с первым Raspberry Pi.

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

Новая модель Raspberry Pi 3 наделена «оперативкой» на 1 ГБ. Часть этой памяти применяется графической подсистемой. Что касается графической части, здесь установлен 2-ядерный CPU VideoCore IV.

Система поддерживает разные стандарты типа OpenGL ES 2.0, VC-1, OpenVG, MPEG-2. Дополнительные возможности - способность кодировать, раскодировать и выводить полноэкранное видео формата HD на экран. Параметры видео - 1080p, 60 FPS, H.264.

Периферия

Неизменный плюс системы заключается в возможности подключения ТВ или дисплея с помощью HDMI-выхода. Разрешение можно менять в диапазоне от 640*350 до 1920*1200. Выход композитного типа имеет два режима работы - NTSC и PAL. Для коммутации колонок и наушников предусмотрено 3,5-миллиметровое гнездо.

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

На устройстве предусмотрена возможность экономии ресурсов ЦП. Для этого на Raspberry Pi 3 модели имеются 15-пнинковые разъемы. Среди них - CSI-2, используемый для подключения камеры, и DSI для коммутации экрана.

Имеется ряд интерфейсов низкого уровня, а именно питающие пины (3 и 5 Вольт, а также «земля), 40 портов для общего ввода и вывода, SPI с возможностью выбора, серийный UART и I 2 C/TWI.

Для подключения к умному дому на базе Raspberry Pi 3 модели B предусмотрен блютуз 4.1, Wi-Fi 802.1 n и Ethernet (10/100 Мбит). В последнем случае выход обустроен на обычном разъеме типа RJ-45.

Питающая часть и размеры

На изделие подается напряжение 5 В, поступающее от специального адаптера через питающие пины или microUSB-разъем. Для надежности лучше применять источник, имеющий I от 2-х ампер и более. В этом случае появляется возможность для подключения к портам USB более мощных изделий.

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

Размеры платы всего 8,5*5,4 см. В ней помещаются необходимые порты, часть из которых слегка выступает за общие габариты (на несколько миллиметров).

ПО

В умном доме на базе Raspberry Pi 3 Model B отсутствует привычный жесткий диск, поэтому «операционка» устанавливается на выносном носителе (карте памяти). Ее необходимо заранее подготовить и поставить.

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

Базовые параметры:

  • CPU: 64 бита 4 ядра. Тип - ARM Cortex-A53. Частота - 1,2 ГГц. Чип однокристаллический BCM2837;
  • Оперативка - один гигабайт LPDDR2 SDRAM;
  • цифровой HDMI-выход на видео;
  • аудио-выход на 3,5 мм (4 pin);
  • порты USB типа 2.0×4;
  • сетевое обеспечение - Wi-Fi11n, 10/100 мегабайт RJ45 Ethernet;
  • для подключения дисплея - Display Serial Interface (DSI);
  • блютуз - Bluetooth 4.1, Low Energy;
  • для подключения видеокамеры - MIPI Camera Serial Interface (CSI-2);
  • слот для MicroUSD;
  • 40 портов ввода-вывода;
  • размеры - 8,6*5,6*1,7 см.

Преимущества Raspberry Pi 3 Model B

Умный дом на базе Raspberry Pi 3 Model B имеет ряд неоспоримых плюсов:

  1. Наличие большого выбора интерфейсов, позволяющих максимально расширить возможности системы. Здесь предусмотрен блютуз, имеется Wi-Fi, порты HDMI и USB.
  2. Возможность подключения модема GSM для выхода на связь с оператором, предоставляющим услуги глобальной сети.
  3. Наличие мощного процессора с четырьмя ядрами на 1,2 ГГц, способного решать серьезные задачи.
  4. Полная совместимость новой и предыдущей версии.
  5. Компактность. Устройство имеет небольшие размеры, а весит всего 45 грамм.
  6. Доступность разгона. При желании доступно увеличение производительности системы.
  7. Легкость применения. Программирование Raspberry Pi 3 Model B можно осуществлять на разных языках.

Также стоит выделить ряд преимуществ умного дома, построенного на базе Raspberry Pi 3 Model B:

  1. Возможность обезопасить здание путем защиты от потопа, установки видеонаблюдения, создания противопожарной и охранной систем.
  2. Установка систем, повышающих комфорт. Речь идет об электрических приборах, а также специальных устройствах, управляющих шторками.
  3. Возможность инсталляции системы, обеспечивающей дополнительную экономию. Применяются сенсорные смесители, датчики движения, а также датчики, фиксирующие перемещение человека или животных.
  4. Доступность инсталляции развлекательных специальных систем. К примеру, к умному дому на Raspberry Pi 3 Model B можно подключить мультирум или домашний кинотеатр.

Для полноты картины стоит учитывать и ряд минусов, характерных для умного дома на Raspberry Pi 3 Model B:

  1. Монтаж таких устройств подойдет для крупных особняков, расположенных вне черты города и имеющих большую площадь.
  2. Для установки нужно знать особенности и правила применения каждого из элементов. В крайнем случае, под рукой желательно иметь квалифицированного специалиста, готового в любой момент помочь в интересующем вопросе.
  3. Со временем умный дом, построенный на Raspberry Pi 3 Model B, устареет. По этой причине возможны трудности с поиском необходимых компонентов (в случае поломки).

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

Модули, которые можно использовать

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

  1. ВИДЕОКАМЕРА . Подключение этого модуля позволяет дополнить умный дом системой видеонаблюдения. Камера совмещается с операционной системой небольшого ПК Raspberry Pi 3 Model B. После установки устройства можно фиксировать видео в разрешении Full HD и делать фотографии с разрешением в 5 МП.
  2. ДАТЧИКИ ДЫМА И ВОДЫ . Установка этих модулей позволяет защитить имущество от пожара и протечки соответственно. Для владельцев больших домов это полезная опция, позволяющая избежать неприятностей. В случае задымления или потопа система оперативно информирует владельца о наличии проблем.
  3. ИЗМЕРИТЕЛЬ ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ ВОЗДУХА . С помощью таких модулей можно превратить умный дом на базе Raspberry Pi 3 Model B в метеостанцию с подробными сведениями о ситуации за окном и внутри помещения.
  4. ДАТЧИК ДВИЖЕНИЯ . Подключение устройства позволяет автоматически включать и отключать свет в помещениях. Датчик движения полезен на улице, в гараже, в коридоре и других нежилых помещениях.
  5. МОДУЛЬ БЕСПРОВОДНОЙ СВЯЗИ . Для объединения внешних устройств и контроллера можно использовать приемник и передатчик, работающие на частоте 433 Гц. При наличии средств можно купить более прогрессивный вариант устройства - Z-Wave Fibaro Home Center

Применение указанных датчиков расширяет возможности умного дома и повышает уровень его защиты.

Первые настройки и подготовка к работе

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

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

Дополнительно покупается два радиатора, предназначенные для охлаждения контроллера Ethernet и основного чипа.

Есть и другие решения.

Для первого пуска потребуется карта памяти, с установленной на нее операционной системой. Минимальный размер флешки должен быть от 4 Гб и более. Образ ОС доступен в Интернете (ссылка на скачивание ниже). Также потребуется программа Win32 Disc Imager.

После скачивания образа на ноутбук его необходимо распаковать из архива, после чего вставить карту памяти в кардридер. Далее запускается уже установленная программа Win32 Disc Imager.

Как только работа завершена, с помощью программы выбирается образ и записывается на флеш-накопитель.

Сборка системы умный дом

Во избежание проблем приведем подробную инструкцию по сборке системы и подготовки ее к работе. Алгоритм действий имеет следующий вид:

  1. Вход на официальный сайт устройства Raspberry Pi 3 Model B и скачивание требуемой версии ОС.
  2. Покупка и форматирование карты памяти Micro SD. Загрузка на ее образа ОС.
  3. Установка карты в разъем материнской платы для установки ОС.

На этом настройка Raspberry Pi 3 Model B завершена.

  1. Инсталляция Node JS. Прохождение этого этапа потребуется для полноценной работы NodeMCU ESP-12E.
  2. Установка Homebridge и настройка автоматического пуска с Root-правами (устройство должно запускаться после включения Raspberry Pi 3 Model B).
  3. Подключение внешних модулей по специальной схеме.

После завершения указанных работ необходимо зайти в мобильный телефон и открыть приложение Home. После этого стоит добавить платформу Raspberry Pi.

Владелец управляет освещением, знает точную информацию о влажности и температуре, получает сведения о наличии протечки или задымлении (при появлении таких проблем).

Это лишь часть возможностей умного дома на Raspberry Pi 3 Model B, которые получает владелец.

Перейдя посылке можно ознакомиться с полной .

Что может получиться смотрите на видео.

Итоги

Умный дом на базе Raspberry Pi 3 Model B - удобная альтернатива уже существующих и более дорогостоящих устройств. Особенность платформы заключается в компактности, возможности расширения функционала и небольшой цене. К ней можно подключить разные внешние модули, не переживая о проблемах с совместимостью.

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

Контроллеры заготовлены, датчики развешаны, провода затянуты. Дело за малым - выбрать «мозг» умного дома. Устройство, которое сможет решать ряд задач по управлению всеми умными функциями. Конечно, есть Arduino Tian или . Но есть и монстры микрокомпьютерного мира вроде чрезвычайно популярного Raspberry Pi, который способен на все, что требуется от современного интеллектуального жилища.

В чем отличия Raspberry Pi от Arduino

Прежде всего, стоит оговориться, что Arduino - это не компьютер, а Raspberry Pi - не микроконтроллер. С этими двумя терминами постоянно возникает путаница.

Это плата с электрической «обвязкой» и контроллером ATmega. Она позволяет работать с цифровыми и аналоговыми входами/выходами на очень низком уровне, не имеет операционной системы как таковой и выполняет загруженный в нее код непрерывно. Arduino потребляет смешное количество электроэнергии и может месяцами работать от блока пальчиковых батареек при условии отсутствия значительной нагрузки. Но реальной вычислительной мощности у Arduino крайне мало, а реализовывать многие функции и протоколы приходится с нуля.

Raspberry Pi - это уже целый компьютер на одной плате, имеющий на борту вместо микроконтроллера SoC (Систему на кристалле) на базе архитектуры ARM, прямо как в современных мобильных устройствах. «Малина» может работать под управлением различных дистрибутивов ОС Linux или Windows 10 IoT. Она имеет множество распаянных пинов GPIO (ввода/вывода), обращаться к которым можно при помощи готовых библиотек. И, в отличие от Arduino, программы здесь запускаются внутри ОС и работают с пинами уже через программную прослойку. В большинстве случаев это абсолютно не мешает создавать простые схемы, но иногда может оказаться критичным. Важно отметить, что у Raspberry Pi нет аналоговых пинов, зато цифровых - хоть отбавляй.

Новая облачная «Малина»
Старая «Малина»

Что умеет Raspberry Pi

Существует несколько версий компьютера: первого, второго и третьего поколения, а также мини-версия Zero. К нам на обзор попала старшая модель Raspberry Pi 3 Model B в составе набора «Малина» от наших друзей из «Амперки».

Технические характеристики модели третьего поколения:

  • 4-ядерный 64-битный процессор Broadcom BCM2837 1,2 ГГц;
  • 1ГБ ОЗУ;
  • Wi-Fi и BT LE модуль BCM43438;
  • 4 USB порта стандарта 2.0.

Это позволяет не только установить на одноплатный компьютер полноценную ОС с графическим интерфейсом, но и подключить его к FullHD монитору и использовать в качестве рабочего ПК, а также запускать на нем, например, Quake III.

Набор «Малина» от «Амперки»

Для успешной работы Raspberry Pi потребуются несколько комплектующих:

  • сама плата;
  • блок питания 5В micro-USB;
  • HDMI-кабель для подключения монитора;
  • microSD карта памяти, на которую будет установлена ОС.

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

В комплекте имеется красочное 88-страничное руководство, дающее базовое представление о самом компьютере, штатной ОС Raspbian, основах работы с командной строкой и файловой системой Linux, а также написании кода на Python. Python - относительно простой объектно-ориентированный язык программирования, который снискал немалую популярность на платформе Raspberry Pi. Руководство из набора научит основам синтаксиса и работе в IDE Thonny.

Плата с расширением для экспериментов

« » - это прокачанная версия набора « ». Если в «Матрешке» с Arduino было много очень простых экспериментов с базовыми электрическими элементами вроде конденсаторов и светодиодов, то в «Малине» главенство отдано интеграции с интернет-сервисами. Предлагаемые «Амперкой» эксперименты помогут поднять свой веб-сервер и написать небольшой сайт для управления пинами платы. Комплектная текстолитовая плата в форме облачка с кнопками и светодиодами в этом обязательно поможет.

А дальше начинается самое интересное. Вторая половина книжки подскажет, как создать бота в «ВКонтакте» и подключить его к Raspberry Pi, чтобы плате можно было отдавать команды прямо из соц. сети. А затем предлагается настроить на Raspberry торрент-качалку и написать к ней веб-интерфейс для управления, например, с телефона, подключенного к домашнему Wi-Fi.

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

Raspberry Pi для умного дома

Умельцы уже приспособили Raspberry Pi для множества задач помимо использования в качестве рабочей машины. Из него можно сделать Wi-Fi роутер или даже собственную цифровую АТС. Правда, и в том, и в другом он будет уступать специализированным аналогам, но сильная сторона «Малины» - в возможности создавать что-то свое. И нам интересно прежде всего, как его можно использовать для создания умного дома.

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

Как обычно, руководства у «Амперки» на высоте

В первом случае вся работа ложится на собственные пины Raspberry Pi. Отсутствие аналоговых пинов компенсируется наличием недорогих цифровых датчиков вроде ds18b20 или использованием специальных ADC плат расширения. Среди стандартных пинов (см. схему ниже) можно найти контакты с ШИМ, I²C, SPI и UART. Таким образом, к плате можно подключить большинство современных датчиков, а также управлять цепями через силовые ключи или блоки реле. Создавать решения для умного дома на Raspberry Pi довольно просто, тем более что в плату уже встроено множество полезных инструментов, например WiFi модуль.

Работать с сетью Интернет на Arduino куда сложнее, а вычислительные возможности микроконтроллера и вовсе скудны. Но вот парадокс: в большинстве простых задач, вроде управления светом или обогревом, применение Raspberry Pi зачастую сродни забиванию гвоздей если не микроскопом, то уж вольтметром точно. Плата Arduino потребляет меньше электроэнергии, код в ней выполняется постоянно на самом низком уровне с прямым доступом к пинам, да и стоит она в несколько раз дешевле. А сообщество энтузиастов и разработчиков ничуть не меньше.

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

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

Заключение

Не стоит забывать, что Raspberry Pi - устройство для энтузиастов. И именно в этом его сильная сторона. Задавшись целью разобраться, с помощью этого микрокомпьютера можно собрать множество интересных решений, и не только для умного дома. А встроенные сетевой интерфейс и WiFi модуль позволяют легко подключить плату к локальной сети или Интернету. Удобно, что наборы вроде « » от «Амперки» уже включают все необходимое, в том числе грамотное руководство, позволяющее легко познакомиться с основами работы с Raspberry Pi.

В сложных схемах на помощь могут прийти платы-аналоги Arduino, например семейства ESP: 8266 или 32. Компактные, быстрые, со встроенным WiFi. О них мы обязательно расскажем в одном из следующих материалов.

А вы уже начали делать свой умный дом? Или только собираетесь? Поделитесь своими проектами в комментариях.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

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

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

Что представляет собой это изобретение, и каково применение Raspberry Pi в современном мире, об этом мы и расскажем ниже.

Особенности компьютера Raspberry Pi

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

Как полагают разработчики, устройство Raspberry Pi должно выполнять такие образовательные цели:

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

В родной стране устройства Raspberry Pi – Великобритании, его полный комплект можно приобрести всего за 75 фунтов. Сам комплект при этом состоит из таких составляющих:

  • самого мини-компьютера Raspberry Pi модели В;
  • микро- CD (8 гигабайт);
  • клавиатуры;
  • оптической мыши;
  • микро-адаптера CD Card ;
  • источника питания;
  • кабелей HDMI и микро USB .

Первая партия Raspberry Pi производилась в Поднебесной, но с конца 2012 года производство целиком перенесено в Великобританию, на завод в Пенкойде (Уэльс). В среднем, завод производит порядка 40 тысяч мини-компьютеров Raspberry Pi в неделю.

Технические характеристики Raspberry Pi

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

Применение компьютера Raspberry Pi для дома

Наиболее применяемая модель мини-компьютера Raspberry Pi – это модель В на 215 Мб оперативной памяти с поддержкой Ethernet . Также есть еще одна модификация прибора, в которой компоненты размещены более компактно, также она имеет четыре порта USB , количество портов ввода и вывода GPIO в ней существенно больше, кроме того, отсутствует композитный видеовыход.

Сферы применения компьютера Raspberry Pi достаточно широки. Несмотря на то что этот прибор не слишком мощный, но при этом это вполне полноценный компьютер. Если вам нужна машина для решения простейших задач, которые не требуют применения мощных ресурсов в плане вычисления, то вы смело можете подключать к устройству Raspberry Pi стандартные элементы машины:

  • монитор;
  • мышь;
  • клавиатуру;
  • подключение любого дистрибутива ОС Linux .

В домашних условиях устройство Raspberry Pi вы можете использовать в таких целях:

  • создание домашнего медиа-сервера;
  • как сервер хранения данных;
  • в качестве «мозгового центра» для автоматизированных станков или роботов;
  • как сервер домашней автоматизации (или системы «умный дом»).

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

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

Многие сегодня применяют понятие «умный дом» ко всему, например:

  • сигнализации GSM ;
  • датчику протекания воды;
  • световому управлению датчикам движения и т.д.

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

Система домашней автоматизации («умный дом») включает в себя такие компоненты:

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

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

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

К последовательному порту устройства UART посредством согласовывающего прибора через интерфейс RS485 подключают контроллера, которые оснащены разным набором выводов или вводов. Также к этому же интерфейсу можно подключать GPS -модель и с его помощью иметь доступ в систему посредством мобильной или стационарной телефонной связи, если пользователь находится в зоне, где нет доступа в Интернет. Доступ разрешается также через пароль, как и в предыдущем случае. Еще одно устройство в сети – это радиомодуль , с помощью которого можно привязать к общей системе все радиодатчики и пульты дистанционного управления.

Итак, существующая на сегодняшний день версия системы домашней автоматизации на базе компьютера Raspberry Pi состоит из центрального сервера и контроллеров с интерфейсом RS485, которые нужны для связи с сервером. Их описание выглядит так:

А сейчас давайте узнаем, каким образом устройство Raspberry Pi было применено изобретателями для создания инновационных изделий . Рассмотрим некоторые из них.

Конструктор Kano

Конструктор Kano для детей – это не просто обычный конструктор, это модульный компьютер, собрать такую головоломку сможет даже ребенок. Набор конструктора включает в себя следующее:

Таким образом, даже ребенок может сам собрать компьютер, который затем подключается к монитору или телевизору посредством HDMI -порта .

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

  • записывать музыку;
  • смотреть видео в формате HD ;
  • писать программы;
  • создавать свои игры.

Летающее устройство SkyJack

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

Poppy: робот-инопланетянин

Робот Poppy был создан посредством трехмерной печати французской компанией INRIA Flowers . Робот управляется посредством мини-компьютера Raspberry Pi. Конструкция робота повторяет биологическое строение человека, он имеет суставы, позвоночник и сухожилия, его походка похожа на человеческую, он ходит, переступая с пятки на нос и равномерно руководить центом своей тяжести.

Что такое No More Woof?

No More Woof – это прибор, который пока находится на стадии разработки, и создается на базе Raspberry Pi. С его помощью хозяин будет понимать, что хочет его пес. Так, прибор будет прикрепляться к голове животного и работать по принципу электроэнцефалографа, то есть считывать информацию с головы собаки и передавать ее хозяину посредством 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 и Arduino. В данной статье мы расскажем, как создать блок управления, который позволит нам управлять освещением в разных комнатах, измерять температуру и влажность, управлять игровой приставкой PlayStation 4, домофоном, принимать сигналы с датчиков движения. Все это можно автоматизировать посредством Apple HomeKit.

Что необходимо иметь?

  • Провода

Можно выбрать любую другую версию Raspberry Pi. Наш выбор - Raspberry Pi 3 из-за наличия встроенного WiFi и Bluetooth. Вместо NodeMCU можете взять обычный Arduino Nano и отдельный модуль ESP8266 для WiFi. Далее все это спаять, перепрошить и настроить. Однако, для задач, которые мы будем выполнять, не нужны лишние затраты времени. В связи с чем, как по цене так и по трудозатратам, разумнее взять NodeMCU или что-то другое, уже готовое. Относительно силового реле - выберите необходимое вам количество. В нашем случае будут задействованы 3 устройства, в связи с чем мы будем использовать два реле с двумя отдельно-управляемыми отсеками. Ну и само собой, датчик движения вы тоже можете не использовать, если у вас нет в нем необходимости. Статья расскажет об установке, настройке всех этих компонентов, а каким именно образом использовать - решать вам.

  1. Переходим на официальный сайт Raspberry Pi, и скачиваем последнюю версию операционной системы Raspbian Jessie Lite . Вы можете использовать обычную версию с desktop-ом, если вдруг она вам будет необходима для каких-то других целей
  2. Форматируем SD карту FAT32 или FAT.
  3. Следуем инструкции по установке скачанного образа на Windows , Linux или macOS . Мы воспользовались ApplePi Baker для быстрого монтирования образа из-под Mac OS X в графическом интерфейсе.
  4. Вставляем карту памяти в Raspberry Pi, подключаем USB клавиатуру и HDMI монитор (можно обычный телевизор). Ждем загрузки и корректируем некоторые настройки по своему усмотрению
  5. Изменяем пароль по умолчанию в пункте 2 - Change User Password
  6. Экран загрузки оставляем Scratch , так как графический интерфейс нам не пригодится
  7. Изменяем имя хоста в Advanced Options > Hostname (по желанию)
  8. Включаем SSH в Advanced Options > SSH , для удобного управления с другого компьютера
  9. Все! Нажимаем Finish и ждем перезагрузки

Настройка Wifi на Raspberry Pi

  1. После загрузки Raspberry открываем файл интерфейсов сети, для этого пишем:
    sudo nano /etc/network/interfaces
    Находим iface wlan0 inet manual и меняем на iface wlan0 inet static , под ним добавляем статичный локальный адрес. В нашем случае получилось так:
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet static

    Address 192.168.1.150
    netmask 255.255.255.0
    gateway 192.168.1.1
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


    address, netmask, gateway - разумеется пишем под настройки вашего роутера.
    После введения изменений нажимаем CTRL+X, потом Y, потом ENTER
  2. Открываем файл супликанта, вводя в командную строку следующее:
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
    В открывшемся файле пишем настройки вашего WiFi, как указано ниже. В нашем случае получилось так:
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
    ssid="PerfectoWeb"
    psk="AcC3S4R@SBP1"
    }

    Естественно, вместо PerfectoWeb - ваш SSID, а вместо AcC3S4R@SBP1 - ваш пароль.
    После введения изменений нажимаем CTRL+X, потом Y, потом ENTER.
  3. Вводим в командную строку: sudo ifdown wlan0
    После завершения процесса вводим: sudo ifup wlan0
    Перезагружаемся командой: sudo reboot
    Wifi настроен и будет автоматически подключаться при старте Raspberry Pi.

Обновление системы

  1. До начала настройки рекомендуем обновиться и проапгрейдится. Для этого вводим в командную строку: sudo apt-get update
    sudo apt-get upgrade
  2. Если вдруг, вы используете не Raspbian Jessie, то стоит установить необходимый компилятор. Проверить версию можно по команде:
    g++-4.9 -v Если в ответе вы получили gcc version 4.9.2 (Raspbian 4.9.2-10) , то все в порядке. Если же у вас старая версия или вовсе не установлен компилятор, то необходимо установить следующей командой:
    sudo apt-get install g++

Установка Node.js


Нам необходимо установить Node.js начиная с версии 4.0. Именно с этой версии Node.js начал поддерживать ARM платформы по умолчанию. Мы установим версию 6.х, так как на данный момент многие плагины Homebridge не адаптированы под версию 8.х. Для установки последней актуальной версии из линейки 6.х выполняем следующие команду:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

Проверяем корректность установленной версии:
nodejs -v
В нашем случае установилась версия v6.11.2


  1. Изначально необходимо установить Avahi и прочие зависимости, которые необходимы для пакета MDNS из библиотеки HAP-NodeJS.
    Выполняем команду: sudo apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
  2. Устанавливаем Homebridge и все зависимости последовательностью следующих команд:
    sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
    cd /usr/lib/node_modules/homebridge/
    sudo npm install --unsafe-perm bignum
    cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
    sudo node-gyp BUILDTYPE=Release rebuild

    Проверяем тестовым запуском:
    homebridge
    В ответ должны получить:
    ---
    config.json (/home/pi/.homebridge/config.json) not found.
    Scan this code with your HomeKit App on your iOS device to pair with Homebridge:

    ┌────────────┐
    │ 031-45-154 │
    └────────────┘

    Homebridge is running on port 44278


    Это означает, что все успешно установлено и работает. Вы можете заметить, что Homebridge не смог найти файл конфигурации config.json. Именно его необходимо создать на следующем шаге.
  3. Создаем файл конфигурации следующими командами:
    sudo -i
    mkdir /root/.homebridge
    touch /root/.homebridge/config.json

    Пример с минимальной конфигурацией:
    {
    "bridge": {
    "name": "RaspberryPi",
    "username": "08:61:6E:E3:2D:7A",
    "port": 51826,
    "pin": "031-45-170"
    } }
    Но мы рекомендуем скачать нашу версию , с уже прописанными плагинами, чтобы в конечном итоге у вас получилась такая-же система, как и у нас.
  4. Далее делаем homebridge демоном и добавляем его в автозагрузку. Для этого вам необходимо создать файл:
    sudo nano /etc/init.d/homebridge
    Скачиваем скрипт для автозагрузки и копируем его содержимое в /etc/init.d/homebridge .
    После сохранения, выполняем следующие команды
    chmod 755 /etc/init.d/homebridge
    update-rc.d homebridge defaults

    Теперь при запуске Raspberry Pi у нас homebridge будет запускаться автоматически от имени пользователя root.

Установка плагинов Homebridge

Homebridge, посредством плагинов от сотни разработчиков, может управлять GPIO Raspberry Pi на разном уровне, а также IR, Wifi, Bluetooth устройствами. Для нашей сборки необходимо установить следующие плагины:

  1. Устанавливаем cmdswitch2 для вкл/выкл устройств скриптом
    sudo npm install -g homebridge-cmdswitch2
  2. Устанавливаем homebridge-cmd_light_control для вкл/выкл и диммирования света
    sudo npm install -g homebridge-cmd_light_control
  3. Устанавливаем HttpTemphum для получения данных температуры и влажности через HTTP в формате JSON
    sudo npm install -g homebridge-httptemperaturehumidity
  4. Устанавливаем homebridge-hc-sr501 для считывания данных с датчика движения HC-SR501
    sudo npm install -g homebridge-hc-sr501
  5. Устанавливаем ps4-waker для вкл/выкл PlayStation 4
    sudo npm install -g ps4-waker

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

Подключение устройств

Далее вам необходимо подключить все необходимые устройства в пины Raspberry Pi, как это указано на фотографии.
БУДЬТЕ ОСТОРОЖНЫ при работе с реле и высоким напряжением! Если вы чего-то не знаете точно, лучше не трогать!


После подключения, скатайте архив со скриптами , разархивируйте и загрузите в директорию /home/pi/ .
Обратите внимание: все файлы должны иметь права 0777.
Для этого вы можете выполнять команду для всех файлов по отдельности следующим образом:
chmod 0777 /home/pi/light_bathroom_off.py
...
Выполните данную команду для всех файлов, которые вы скачали и загрузили в директорию /home/pi/

Подключение к PlayStation 4


  1. Включаем PlayStation 4. Переходим в настройки Settings > >
  2. В терминале RaspberryPi пишем
    ps4-waker
  3. Система попросит вас открыть приложение PS4 на мобильном телефоне и подключиться к ps4-waker .
  4. Далее вас попросит указать пин-код с экрана монитора, куда подключен PS4. После ввода создастся связь и в RaspberryPi будут сохранены ключи и сертификаты для дальнейшего подключения.

Обратите ванилинам: PlayStation 4 и RaspberryPi должны находиться в одной WiFi сети.

Настройка термометра на Arduino


Запускаемся!

  1. Очищаем кеш аксессуаров и persist на Raspberry Pi следующими командами:
    sudo -i
    rm -r /root/.homebridge/accessories
    rm -r /root/.homebridge/persist
    Перезагружаемся:
    reboot
  2. Включаем Arduino к USB 5V/1A и ставим в нужное место в комнате.
  3. Открываем iPad, iPhone и заходим в приложение Home (Дом). Нажимаем добавить аксессуар и ваш планшет или смартфон должен увидеть устройство с названием RaspberryPi. Добавляем его и радуемся!

Вуаля! Теперь мы можем управлять светом на кухне, в ванной, управлять PlayStation 4, получать данные от датчика движения, узнавать температуру и влажность. Мы также можем автоматизировать некоторые действия в Apple Home. Например, чтобы все устройства автоматически выключались, когда вы уходите из дома. Или, чтобы при достижении определенной температуры, реле включало не свет, а вентилятор. Надеемся, данная статья была полезной для вас и на основе нее вы сможете автоматизировать и другие, необходимые вам устройства.



Рекомендуем почитать

Наверх