Умный дом программа для андроид. Умный дом. Конкретная реализация. Важность привязки системы к облаку

Здравствуйте, дорогие читатели! Очередная история о том, как менеджер самого среднего звена, сдувая пыль с залежавшихся железок на полке, творит такое, от чего у профессионалов всех мастей боль в глазах. ¡Но, это работает, amigo!

Признаюсь, в этот раз я все хотел сделать правильно. Взял Raspbery Pi с полки. Пирожок тот самый, что я уже использовал в своем роботе-газонокосилке: ссылка на пост и ссылка на другой пост . Взял mosquitto, все должно было работать на mqtt, но от себя никуда не убежишь. Под катом море граблей, велосипедов, плохой пайки, сплошной ад для перфекциониста.


Все началось с желания дополнить мой проект Noorik , который я поставил себе на ворота. Если коротко - это DIY решение для GSM блока открытия ворот.
Для открытия ворот достаточно замкнуть определенные контакты на плате.

Заменил arduino на esp8266 и сделал веб-интерфейс с кнопкой открытия. Это оказалось интересно, но дальше я захотел единый интерфейс для открытия откатных ворот, гаражных секционных ворот и калитки.

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

  1. система управления котельной
  2. охранная система
  3. мобильный интерфейс к камерам видеонаблюдения
  4. данные о температуре в доме и на улице

Бэкенд

Малинка работала нормально, но при очередном включении просто перестала включаться. Светодиод питания сначала загорается, затем плавно за 3-5 секунд гаснет, сильно греется элемент (polyfuse T075) около гнезда питания. А тут уже руки чесались применить mqtt, блэкджер, пригласить куртизанок и прочие прелести.

Не беда, благо своей участи ждал другой пациент. Orange pi zero в студию. Сколько я не мучился с этим чудом китайской мысли - вдохнуть жизнь в такой маленький пирожок оказалось делом выше моих сил. Я скачивал прошивки на официальном и левых сайтах, я покупал прошивки с рук и обменивал на криптовалюту. Думаю, мне просто попался бракованный образец.

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

Первым делом я решил использовать как головное устройство (брокер, сервер) видавший виды смартфон. Знаете эти старые вещи просто так не уходят. Им пользовался я, жена, дочь, потом я управлял с этого смартфона своим роботом-снегоуборщиком , я пытался утопить его в реке (до Москвы-реки я так и не добрался, но в родной Пахре эта труба навела шороху). И вот она - новая жизнь для Samsung Galaxy S3.

Установил на смартфон Palapa Web Server и Ftp-сервер. Идея простая в базе данных MySQL всего три таблицы: values, logs, rules.

  • В таблице values пары ключ/значение.
  • В таблице logs история изменений значений.
  • В таблице rules правила изменения одних ячеек в зависимости от значения в других.
Все это хозяйство обслуживает один скрипт php, который по http запросу записывает или выдает данные из базы, а так же обслуживает правила по расписанию.
Я даже не понимаю какой должен быть уровень программирования, чтобы человек захотел это увидеть, но я готов показать Вам код - пишите в ЛС.

Фронтенд

Не кидайте в меня камни, я признаюсь сам. Я использовал Bootstrap. Да, грешен.
Первоначальной мыслью было обернуть все это через Phonegap и получить полноценное приложение. Скажу больше я так и сделал, но в итоге более работоспособной оказалась online-версия. Себе и жене на телефоне просто сделал ярлык на рабочем столе для открытия нужной странице по внутреннему ip.

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

ESP-8266


Я пробовал разные модули и чистый ESP-8266. В итоге самым удобным вариантом оказался модуль LOLIN V3.

Питание с помощью импульсных блоков питания.

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

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

DigitalWrite(rele, 1); digitalWrite(rele2, 1); pinMode(rele, OUTPUT); pinMode(rele2, OUTPUT);
В итоге модуль для гаража в сборе выглядит так. PIR-датчик для определения движения аккуратно вгрызан в родную обшивку.

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

При этом каждый контур обслуживает отдельный насос.

Последовательно с автоматами были включены реле для управления насосами и котлом.

Аккуратно впихивает все хозяйство в щиток.

Прошивка

Решил использовать для прошивки Arduino IDE, чтобы не связываться с nodemcu и lua. В интернете и на GT в частности огромное количество информации для начинающих.
Из интересного, мне кажется, функция соединения с wifi. Дело в том, что у меня в доме 4 сети wifi и может добавиться. Чтобы жестко не задавать название сети предварительно проводим сканирование доступных сетей.

Код setupWiFi()

void setupWiFi() { WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); while(WiFi.status() != WL_CONNECTED) { int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) Serial.println("no networks found"); else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { Serial.println(""); Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); j=0; ssid=WiFi.SSID(i); Serial.print("Connecting"); ssid.toCharArray(charBuf, 50); WiFi.begin(charBuf,WIFI_PASS); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); j++; if(j>20){ break; } } if((WiFi.status() == WL_CONNECTED)){ break; } } } } Serial.println("Connected"); Serial.println(WiFi.localIP()); }


При включенном автоматическом режиме котельной по расписанию проверяется температура на улице и температура теплоносителя.
  • При температуре ниже 14*С включается теплый пол первого этажа.
  • При температуре ниже 4*С включаются все контуры.
Температура теплоносителя выбирается по таблице в зависимости от сечения труб и уличной температуры. При достижении необходимой комнатной температуры котел выключается. Ко всему применен некий гестерезис для сглаживания переходных значений.

Система охраны работает еще проще. В таблице есть правило о том, что при включенной системе охраны, если обнаружено движение у одного из PIR-датчиков происходит отправка SMS через API одного из сервисов.

Планы

  • создание online-версии на удаленном сервере и синхронизация изменений для возможности удаленного управления.
  • Отображения данных с GSM/GPS маячков в машине;
  • Открытие ворот при появлении наших машин в определенной зоне;
  • Подключение к системе пультовой охраны;
Голосование по фото. Какой проект делать следующим?

Не так давно был представлен Z-Wave модуль для Raspberry Pi - RaZBerry, который превращает мини-компьютер в полноценный контроллер умного дома. Управление Z-Wave сетью осуществляется с помощью web-интерфейса, использующего HTTP/JavaScript API. Используя JavaScript можно создать набор функций для автоматизации (включение/выключение света, проверка температуры, опрос датчика движения и др.), которые затем можно выполнить, послав HTTP запрос.

Продукт компании OpenRemote с одноименным названием позволяет создавать мобильные приложения для умного дома без программирования, при этом в одном приложении могут использоваться разные технологии: Z-Wave, KNX, X10, ZigBee, управление компьютером по ssh и др.

OpenRemote это сервер выполняющий любые команды и конструктор интерфейсов в котором вы создаете кнопки, переключатели, надписи и др. и этим элементам уже назначаете команды, в нашем случае это HTTP запросы на выполнение JavaScript функций на сервере Z-Wave.

Далее я по пунктам расскажу как создать пульт управления умным домом для iPhone и Android! А вот так будет выглядеть наше приложения, когда мы закончим:

Под катом много картинок.

1. Создание сети Z-Wave c помощью контроллера Raspberry Pi + RaZberry

  • Установка ПО RaZberry на Raspberry Pi
  • Добавление Z-Wave устройств
  • Проверка работы устройства
2. Установка OpenRemote контроллера и мобильного приложения

3. Создание дизайна приложения и логики его работы

  • Разработка дизайна
  • Ассоциация кнопок с командами
4. Резюме

Создание сети Z-Wave c помощью контроллера Raspberry+RaZberry

RaZberry - это плата подключаемая к Raspberry Pi через GPIO, позволяющая создавать и управлять Z-Wave сетью. Для лучшего понимая прочтите Faq . В комплекте с платой идет софт, который нужно установить.

Установка ПО RaZberry на Raspberry

Установщик поддерживает только Debian-based дистрибутивы (Raspbian, Xbian и др.) Однако ручками можно поставить ПО и на OpenElec и другие ОС.
Выполните команду для установки ПО Z-Way:
wget -q -O - http://razberry.z-wave.me/install | sudo bash
После установки, нужно обязательно перезагрузить Raspberry Pi, чтобы применить изменения для Serial порта.

Чтобы попасть в панель управления умным домом перейдите по адресу http://IP_OF_YOUR_RASPBERRY:8083 . Интерфейс программы очень простой, разобраться в нем не составит труда, есть документация . Максимальную совместимость с интерфейсом имеют браузеры: Chrome, Safari, Firefox, другие браузеры: IE, Opera могут работать некорректно.

Добавление Z-Wave устройств

Определимся со списком используемого оборудования:
- Реле Fibaro Single Switch 3kW 2 шт.
- Датчик открытия двери/окна и температуры Fibaro Door/Window Sensor 1шт.

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

Проверка работы устройства

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

Если интервью не пройдено (есть точки и знаки Ø), то можно его повторить, для этого в нижней части экрана нажмите Дополнительные действия → Принудительно повторить интервью (Режим эксперта должен быть включен, чтобы увидеть это меню).
После успешно пройденного интервью, на этой же вкладке Настройка устройств можно настроить некоторые параметры устройства (не забудьте применить настройки кнопкой Применить настройки к данному устройству внизу экрана, а также разбудить устройство, если оно работает на батарейках):

Для управления устройством перейдите на вкладку Управление устройствами → Выключатели

О предоставленном API автоматизации

Удостоверившись, что все устройства работают правильно, попробуем теперь управлять ими удаленно. Есть несколько способов:

1. С помощью HTTP/JSON API
2. C помощью JavaScript API

HTTP/JSON API использует простой синтаксис для управления устройствами.
Включить свет можно из браузера:
http://192.168.1.113:8083/ZWaveAPI/Run/devices.instances.SwitchBinary.Set(255)
Или запросить температуру:
http://192.168.1.113:8083/ZWaveAPI/Run/devices.instances.commandClasses.data.val.value
JavaScript API позволяет писать различные скрипты автоматизации, например: включить/выключить свет, опросить датчик, получить температуру, выключить свет через 2 минуты после включения. Эти скрипты могут работать как самостоятельно (например: ночью свет включается только на 15%, чтобы не слепить глаза), так и могут быть вызваны удаленно с помощью HTTP/JSON API .

Скрипт включения света:
SwitchOn = function(N,I) { zway.devices[N].instances[I].SwitchBinary.Set(255); }
Вызов скрипта включения света:
К сожалению прямое обращение к устройствам с помощью HTTP/JSON API из OpenRemote проблематично по нескольким причинам:

1. Символы должны быть перекодированы в UTF-8 в Констукторе OpenRemote
2. При опросе датчиков OpenRemote ожидает «on» или «off», а Z-Wave датчики могут прислать 255 или 0.
3. Для каждого устройства придётся писать свой запрос, а с помощью JS можно использовать только одну функцию для включения различных устройств, изменяя в запросе только параметр функции - номер устройства.

При использовать JavaScript API все эти проблемы исчезают - несколько функций «хэлперов» помогут преобразовать термины Z-Wave в удобные для OpenRemote понятия.
Более подробно о синтаксисе HTTP/JSON API и JavaScript API можно почитать в недавней .

Создание JS скриптов для удаленного управления

JS скрипты находятся в /opt/z-way-server/automation/ , создадим файл в котором будут храниться наши функции автоматизации openremote.js , чтобы он автоматически загружался при включении Z-Way, в конец главного файла автоматизации main.js добавьте:
// ====================================================== executeFile(automationRoot + "/" + "tags.js"); executeFile(automationRoot + "/" + "openremote.js"); startAutomation();
/opt/z-way-server/automation/openremote.js
// Включение устройства SwitchOn = function(N,I) { zway.devices[N].instances[I].SwitchBinary.Set(255); } // Выключение устройства SwitchOff = function(N,I) { zway.devices[N].instances[I].SwitchBinary.Set(0); } // Запрос на статус датчика (сработал/не сработал) SensorStatus = function(N,I) { return zway.devices[N].instances[I].SensorBinary.data.level.value; } // Запрос на состояние устройство (включено/выключено) SwitchStatus = function(N,I) { return zway.devices[N].instances[I].SwitchBinary.data.level.value; } // Запрос температуры с округлением до целого Temperature = function(N,I) { return Math.round(zway.devices[N].instances[I].commandClasses.data.val.value); }

Параметр N - номер устройства в сети.
Параметр I - внутри одного устройства может быть физически несколько устройств (каналов), например 2 реле или датчик температуры, датчик движения, датчик освещенности. Параметр I это номер канала внутри устройств. Если устройство содержит только одно физическое устройство, то это параметр равен 0.

После создания файла нужно либо перезапустить Z-Way командой:
/etc/init.d/Z-Way restart
либо подгрузить скрипт вручную, послав запрос из браузера:
http://192.168.1.113:8083/JS/Run/executeFile("automation/openremote.js")
Проверить работоспособность функций можно из браузера.
Включить свет:
http://192.168.1.113:8083/JS/Run/SwitchOn(6,0)
Запросить температуру:
http://192.168.1.113:8083/JS/Run/Temperature(8,2)
В отладке очень хорошо помогает лог Z-Way сервера:
tail -f /var/log/z-way-server.log
Если все работает, переходим к следующему пункту!

Установка OpenRemote контроллера

Контроллер OpenRemote представляет из себя сервер, который получает команды от мобильного или веб приложения и дальше транслирует их другому контроллеру или серверу. В нашем случае это Z-Way сервер.

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

Замечу лишь, что OpenRemote написан на Java и нам нужна версия виртуальной машины с аппаратной поддержкой плавающей запятой:
JAVA для ARM процессоров в поддержкой плавающей запятой

Установите мобильное приложение для вашего телефона:
Мобильное приложение OpenRemote

Перед тем как приступить к разработке приложения, для лучшего понимая посмотрите как оно будет работать:

Создание дизайна приложения и логики его работы

Все предыдущие шаги были лишь подготовкой к главному - созданию мобильного приложения!
Откройте облачный Конструктор http://designer.openremote.org . Разобраться в нем не составит труда!

Разработка дизайна

Сразу перейдем к разработке дизайна.

1. Перейдите на вкладку UI Designer и создайте новую панель, назвав ее например, iPhone4.

2. Перетяните из правой панели кнопки и изображения на экран iPhone.

3. В свойствах изображения (правая панель) загрузите ваши картинки и с помощью полей Left, Right, Width, Height расположите их на экране как вам нужно. Я загрузил изображения квадрата и лампочки, также добавил надпись.

Создание команд управления и сенсоров

Теперь нужно на кнопки назначить команды, а картинка лампочки должна изменяться в зависимости от состояния света (включен/выключен).

1. Перейдите на вкладку и создайте новый девайс, назвав его например, Raspberry.

2. Выберите только что созданный девайс Raspberry и создайте новую команду для него New → New command . Выбираем протокол HTTP , вводим URL JS-команды и метод устанавливаем POST .
Эта команда включает устройство №6. Аналогично создаем команды включения других устройств и команды выключения.
http://192.168.1.113:8083/JS/Run/SwitchOn(6,0)

3. Теперь нужно создать команду для опроса состояния света. Это команда будет вызываться каждые 2 секунды, поэтому если вы вручную выключите свет, то в нашем приложении это сразу станет заметно. Как обычно New → New command , но дополнительно нужно указать с какой периодичность проводить опрос Polling , устанавливаем 2s , буква s обязательна.

4. Создадим Sensor, который будет обрабатывать полученные значения от этой команды и передавать их изображению или надписи. New → New Sensor , выбираем команду, которую будет выполнять сенсор, устанавливаем тип custom , добавляем два состояния on и off , ассоциируем их с возвращаемыми значениями Z-Wave.

Ассоциация кнопок с командами

1. Последний этап разработки приложения, ассоциация кнопок с командами. Вернитесь к дизайнеру приложения UI Designer , выберите вашу кнопку и в её свойствах установить команду, которую она должна выполнять.

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

3. В свойствах изображения выберите какая картинка будет показана если сенсор прислал on и какая, если сенсор прислал off .

Синхронизация с мобильным приложением

1. Наше приложение готово, осталось его только залить в телефон. Перейдите по адресу контроллера OpenRemote

Управление Умным Домом с помощью смартфонов на платформе Android

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

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

В настоящее время осуществляется выпуск специальных приборов, позволяющих осуществлять интеграцию различных «умных» элементов дома. Сам процесс управления происходит через доступный к пониманию интерфейс при помощи смартфона или планшета. Для этой цели можно использовать не только смартфон, но и консоль операционной системы Android. В интеллектуальной сети могут быть объединены совершенно разные группы приборов: системы вентиляции, отопления, водоснабжения, а также система управления шторами, дверями, электроосвещением и прочее. Приложение, установленное на телефоне, может отражать - сколько потрачено в доме электроэнергии, состояние охранной системы, климатическая обстановка в доме. Оно может распознавать конкретные аварийные ситуации в доме (утечку газа или воды, возникновение пожара, проникновение посторонних лиц в дом) и вовремя направить сигнал - в службу спасения, милицию или на электронную почту. Соблюдая меры , связь может вестись с использованием шифрованного соединения (такого же, как для транзакций при финансовых операциях). Это делается с единственной целью - во избежание подсоединения посторонних лиц к управлению домом.

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

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

Концепция построения системы «умный дом» на базе платформы Android призвана облегчить управление системой посредством использования любого мобильного устройства на идентичной операционной системе. Говоря про аналоги, Z-Wave или ZigBee, хочется заметить, что они пригодны для управления системой охраны или климат-контроля, но при децентрализованном управлении развлекательными системами операционной системе Android пока нет достойных конкурентов.

Обновлённое мобильное приложение Google Home позволяет управлять в одном месте всеми устройствами для умного дома с поддержкой Google Ассистента, даже от разных производителей . Большое обновление, вышедшее в октябре 2018-го года, добавляет в приложение Гугл Хоум новый главный экран и полный перевод на русский язык. Теперь платформу для умного дома от Google можно считать полноправным аналогом HomeKit от Apple.

Где скачать Google Home

Мобильное приложение Google Home доступно как для Android, так и для iOS. Можно, например, настроить ваш умный дом на андроид и разрешить управлять домом вашим домочадцам на iOS, если у них айфон или айпэд.

Возможности приложения

До октябрьского обновления приложение Google Home использовалось только для связывания устройств умного дома с Гугл Ассистентом. Даже просто включить и выключить устройство в приложении было нельзя – только голосом через Ассистента, причём пока только на английском языке. Но теперь мы можем управлять всеми подключёнными к Ассистенту умными устройствами прямо в приложении Google Home – так же, как это сделано у Apple в HomeKit в приложении «Дом» на iOS.

В первую очередь приложение Гугл Хоум управляет собственными устройствами от компании Google:

  • Умные колонки и
  • ТВ-приставка и телевизоры со встроенным Хромкастом
  • Google Home Hub и другие

Новый главный экран приложения

Помимо управления собственными устройствами от гугл, приложение Google Home позволяет добавить и управлять тысячами различных устройств для умного дома от сотен сторонних производителей: Xiaomi Mi Home, Sonoff eWeLink, Broadlink, и многих других.

Полный список поддерживаемых в Гугл Хоум устройств можно посмотреть в самом приложении

На данный момент поддерживаются следующие виды умных устройств:

  • Лампочки и светильники
  • Розетки
  • Замки
  • Термостаты
  • Камеры наблюдения

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

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

Попытался начертить схему моей комнаты со всеми устройствами объединёнными в сеть, картинка кликабельна:

Вся идея держится на трёх китах:

  • Децентрализация - вся система функционирует без какого-либо главного модуля;
  • Простота - минимум компонентов и лёгкость подключения;
  • Дешевизна - себестоимость устройства легко уложить в 100 рублей.
При таком подходе можно легко создавать и добавлять в CLUNET-сеть устройства, каждое из которых отвечает за какую-то простую функцию. У всех устройств есть свой адрес, при этом они могут обмениваться между собой пакетами напрямую, без участия какого-либо главного модуля, и это очень активно используется:
  • Пакеты от ДУ-приёмника получают выключатель и открыватель окна, что позволяет управлять светом и открывать окно с любого пульта или Nintendo Wii U;
  • Датчики движения информируют выключатель о том, что в комнате никого нет, и можно выключить свет;
  • Дисплей в коридоре выводит всегда актуальную температуру на улице, получаемую от датчиков температуры;
  • По команде от кодовой панели открывается дверной замок;
  • Устройство с пищалкой издаёт звуки, когда узнаёт об открытии замка, нажатии кнопки или звонке в домофон.
Этот список легко меняется и дополняется с учётом того, что прошивку каждого устройства можно обновлять прямо по сети. И нет, у меня не возникает проблем с непониманием своих исходников. Код всех прошивок получается предельно простым.

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

Роутер с CLUNET-адаптером

Мой роутер помимо маршрутизации трафика выполняет ещё одну роль - маршрутизация трафика он является «окном» для устройств CLUNET сети в Интернет. Или скорее наоборот - позволяет из Интернета и локальной сети командовать всеми устройствами. Для этого в его USB порт включено специальное устройство.

Не буду сильно повторяться, про это я рассказывал в статье о CLUNET протоколе . Идея проста - роутер на основе Linux, и на нём работает демон, который принимает входящие подключения из локальной сети или Интернета и предоставляет доступ к сети устройств умного дома.

Помимо этого роутер используется как простенький веб-сервер, чтобы можно было управлять устройствами через веб-интерфейс на случай… ну так, на всякий случай:

Весьма удобно использовать и cron на роутере для самых разных задач - от открытия окна или обогрева комнаты по расписанию до банального будильника. Для последнего у меня сделан простенький веб-интерфейс и скрипты:

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

В ответ на пакеты приходящие от устройств тоже выполняются различные скрипты. Так ведутся логи по самым различным событиям типа звонков в домофон, рисуются графики температуры (http://clusterrr.com/sensors/t/) и других данных, отправляется push-уведомление мне на телефон, если вдруг в комнате открыта дверь, а меня дома нет, и прочее.

Софт для Windows

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

В нём можно наблюдать за тем, как умный дом живёт полноценной жизнью, но на практике это нужно только для отладки. Всё можно делать по клику на иконке в зоне уведомлений:

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

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

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

Помимо этого этот софт выполняет и обратную роль - получает коды кнопок от ДУ-приёмника и имитирует WinLIRC-сервер - популярную программу для работы с ДУ-пультами. Работу с ней поддерживает, например, MPC-HC, есть плагин для foobar2000. Таким образом можно делать и наоборот - управлять приложениями на компьютере при помощи любого пульта.

Софт для телефона

Ну как же без управления всем этим с телефона из любой точки мира? Приложение для Android обладает примерно такой же функциональностью. В основном активити можно переключаться между различными режимами путём горизонтального свайпа.

Планшет

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

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

Пришлось накодить различные виджеты рабочего стола:

Но это всё равно было недостаточно удобно, особенно когда хотелось сделать что-то на ощупь. Через некоторое время я вспомнил, что в Android есть отличный API по распознаванию голоса. Потребовалось всего полчаса, чтобы планшет начал выполнять свои первые голосовые команды. Вскоре набор возможных команд сильно вырос.

Знакомьтесь, вот моя электронная жена:

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

Аналогичная служба была в итоге установлена и на телефон. Работает она только при подключенной зарядке. Наверное было бы здорово использовать для этого Google Glass.

Подробнее об устройствах

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

Кнопки сенсорные - одна прибавляет количество ламп, другая убавляет. Есть возможность установить таймер выключения, но его необходимость отпала с появлением настенного планшета. Дружит с ДУ-приёмником и датчиками движения.

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

Суть в том, что у меня в комнате жили мыши, а в остальной части квартиры - коты. Весь смысл устройства был в том, чтобы дико пищать, если забыли закрыть дверь, ведь коты ни в коем случае не должны проникнуть в комнату к мышам. Теперь же устройство посылает в сеть пакеты при открытии и закрытии двери. Роутер же пишет логи её открытия и посылает мне push-уведомление, если вдруг она открыта, когда меня нет дома. Моё местоположение определяется по мобильному телефону. Помимо всего этого пищалка теперь используется для самых разных звуковых уведомлений - домофон, открытие замка, нажатие кнопок на кодовой панели.

ДУ-приёмник и ДУ-передатчик
Про них я вроде ещё уже рассказал выше. Приёмник стоит у компьютера, передатчик спрятан на шкафу.

Датчики движения
В комнате висят два вот таких вот датчика движения.

Способствуют выключения света, когда движения долго нет, а ещё смене моего статуса на «away» в мессенджерах. Помимо них движение определяют ещё и четыре видеокамеры.

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

Теперь у меня всё как у серьёзных взрослых дядь!

Датчики температуры и освещения
Тут особо нечего рассказывать. Устройство висит под подоконником и опрашивает по 1-wire датчики температуры, помимо этого экспериментально сделан ещё датчик освещения. Сам не знаю зачем.
Открыватель окна
Его вы уже могли немного видеть на видео выше. Сам механизм покупной и представляет из себя цепь с двигателем. Приятно было узнать, что есть компании, которые делают подобные штуки.

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

Дисплей в коридоре
Однажды при выходе из дома мне захотелось видеть текущую температуру на улице и время. Вот и всё.

А ещё там бегает Pac-Man, для которого было нарисовано несколько кастомных символов.

Мышиные клетки
Мышиные клетки передают в виде ИК-сигналов информацию о том, сколько каждый мыш пробежал в колесе. Про это тоже была отдельная статья: http://habrahabr.ru/post/165269/
Увы, сейчас остался только один мышонок, и бегает он уже мало.
Видеокамеры
В комнате стоят четыре IP-камеры с механизмами поворота.

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

Заключение

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

Многие люди наверняка будут спрашивать меня: «Зачем тебе столько видеокамер?», «Зачем тебе кодовая панель?», «Зачем тебе датчики движения?», «Зачем тебе всё это?»
На все подобные вопросы я отвечу одной картинкой:

Теги:

  • умный дом
  • avr
Добавить метки