Здравствуйте, дорогие читатели! Очередная история о том, как менеджер самого среднего звена, сдувая пыль с залежавшихся железок на полке, творит такое, от чего у профессионалов всех мастей боль в глазах. ¡Но, это работает, amigo!
Признаюсь, в этот раз я все хотел сделать правильно. Взял Raspbery Pi с полки. Пирожок тот самый, что я уже использовал в своем роботе-газонокосилке: ссылка на пост и ссылка на другой пост . Взял mosquitto, все должно было работать на mqtt, но от себя никуда не убежишь. Под катом море граблей, велосипедов, плохой пайки, сплошной ад для перфекциониста.
Все началось с желания дополнить мой проект Noorik , который я поставил себе на ворота. Если коротко - это DIY решение для GSM блока открытия ворот.
Для открытия ворот достаточно замкнуть определенные контакты на плате.
Заменил arduino на esp8266 и сделал веб-интерфейс с кнопкой открытия. Это оказалось интересно, но дальше я захотел единый интерфейс для открытия откатных ворот, гаражных секционных ворот и калитки.
Когда я стал расписывать все свои хотелки, оказалось, что мне нужно так же:
Не беда, благо своей участи ждал другой пациент. Orange pi zero в студию. Сколько я не мучился с этим чудом китайской мысли - вдохнуть жизнь в такой маленький пирожок оказалось делом выше моих сил. Я скачивал прошивки на официальном и левых сайтах, я покупал прошивки с рук и обменивал на криптовалюту. Думаю, мне просто попался бракованный образец.
Я понял, что сама судьба толкает меня в объятья велосипедостроительства, и что уж скрывать радость, я окунулся в это занятие с головой.
Первым делом я решил использовать как головное устройство (брокер, сервер) видавший виды смартфон. Знаете эти старые вещи просто так не уходят. Им пользовался я, жена, дочь, потом я управлял с этого смартфона своим роботом-снегоуборщиком , я пытался утопить его в реке (до Москвы-реки я так и не добрался, но в родной Пахре эта труба навела шороху). И вот она - новая жизнь для Samsung Galaxy S3.
Установил на смартфон Palapa Web Server и Ftp-сервер. Идея простая в базе данных MySQL всего три таблицы: values, logs, rules.
Не кидайте в меня камни, я признаюсь сам. Я использовал Bootstrap. Да, грешен.
Первоначальной мыслью было обернуть все это через Phonegap и получить полноценное приложение. Скажу больше я так и сделал, но в итоге более работоспособной оказалась online-версия. Себе и жене на телефоне просто сделал ярлык на рабочем столе для открытия нужной странице по внутреннему ip.
Каждый элемент реагирует на событие нажатие + проверяется состояние ajax запросами на сервер и изменяется в случае необходимости. Очень удобно, так как видишь все изменения, которые вступили в силу по правилу или сделаны другим пользователем.
Собственно, код по запросу без проблем.
Я пробовал разные модули и чистый ESP-8266. В итоге самым удобным вариантом оказался модуль LOLIN V3.
Питание с помощью импульсных блоков питания.
Модули для ворота требовали реле и у меня были опасения, что контактные реле будут срабатывать. В итоге работют и твердотельные и контактные. Проблема с тем, что большое количество модулей даже без маркировки об этом являются low-triggered.
При включении модуля происходит кратковременное открытие, которые приводит к непроизвольному открытию при включении питания. Решается подтяжкой к нулю и объявлением состояния до объявления типа выхода.
DigitalWrite(rele, 1);
digitalWrite(rele2, 1);
pinMode(rele, OUTPUT);
pinMode(rele2, OUTPUT);
В итоге модуль для гаража в сборе выглядит так. PIR-датчик для определения движения аккуратно вгрызан в родную обшивку.
В котельной у меня котел очень простой и ни о какой сложной автоматике и речи не идет.
При этом каждый контур обслуживает отдельный насос.
Последовательно с автоматами были включены реле для управления насосами и котлом.
Аккуратно впихивает все хозяйство в щиток.
Код 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());
}
Система охраны работает еще проще. В таблице есть правило о том, что при включенной системе охраны, если обнаружено движение у одного из PIR-датчиков происходит отправка SMS через API одного из сервисов.
Не так давно был представлен 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
3. Создание дизайна приложения и логики его работы
Чтобы попасть в панель управления умным домом перейдите по адресу http://IP_OF_YOUR_RASPBERRY:8083 . Интерфейс программы очень простой, разобраться в нем не составит труда, есть документация . Максимальную совместимость с интерфейсом имеют браузеры: Chrome, Safari, Firefox, другие браузеры: IE, Opera могут работать некорректно.
В нижнем меню выберите Режим эксперта
. С помощью верхнего меню перейдите на вкладку Сеть → Управление сетью
и нажмите Включить (заново) устройство
, это запустит процесс ожидания включения устройства в сеть, теперь на устройстве три раза нажмите сервисную кнопку, чтобы контроллер его увидел и добавил.
Если интервью не пройдено (есть точки и знаки Ø), то можно его повторить, для этого в нижней части экрана нажмите Дополнительные действия → Принудительно повторить интервью
(Режим эксперта должен быть включен, чтобы увидеть это меню).
После успешно пройденного интервью, на этой же вкладке Настройка устройств
можно настроить некоторые параметры устройства (не забудьте применить настройки кнопкой Применить настройки к данному устройству
внизу экрана, а также разбудить устройство, если оно работает на батарейках):
Для управления устройством перейдите на вкладку Управление устройствами → Выключатели
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 можно почитать в недавней .
Параметр 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 на английском языке
Замечу лишь, что OpenRemote написан на Java и нам нужна версия виртуальной машины с аппаратной поддержкой плавающей запятой:
JAVA для ARM процессоров в поддержкой плавающей запятой
Установите мобильное приложение для вашего телефона:
Мобильное приложение OpenRemote
Перед тем как приступить к разработке приложения, для лучшего понимая посмотрите как оно будет работать:
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.
2. Ассоциируйте изображение с сенсором, чтобы при изменении состояния устройства изменялась и картинка в приложении. Выберите изображение и в его свойствах установите сенсор.
3. В свойствах изображения выберите какая картинка будет показана если сенсор прислал on
и какая, если сенсор прислал off
.
Управление Умным Домом с помощью смартфонов на платформе 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 доступно как для Android, так и для iOS. Можно, например, настроить ваш умный дом на андроид и разрешить управлять домом вашим домочадцам на iOS, если у них айфон или айпэд.
До октябрьского обновления приложение Google Home использовалось только для связывания устройств умного дома с Гугл Ассистентом. Даже просто включить и выключить устройство в приложении было нельзя – только голосом через Ассистента, причём пока только на английском языке. Но теперь мы можем управлять всеми подключёнными к Ассистенту умными устройствами прямо в приложении Google Home – так же, как это сделано у Apple в HomeKit в приложении «Дом» на iOS.
В первую очередь приложение Гугл Хоум управляет собственными устройствами от компании Google:
Новый главный экран приложения
Помимо управления собственными устройствами от гугл, приложение Google Home позволяет добавить и управлять тысячами различных устройств для умного дома от сотен сторонних производителей: Xiaomi Mi Home, Sonoff eWeLink, Broadlink, и многих других.
Полный список поддерживаемых в Гугл Хоум устройств можно посмотреть в самом приложенииНа данный момент поддерживаются следующие виды умных устройств:
Сразу после добавления в приложение Home вы получаете возможность управлять вашим умным устройством не только из гугловского мобильного приложения, но и голосом через или через умную колонку . Правда, на данный момент команды для управления умным домом придётся давать на английском языке.
О разработке своей собственной шины «CLUNET» для соединения устройств в «умном доме». Многие просят рассказать о том, что же у меня получилось в итоге, что я сейчас и попытаюсь сделать.
Попытался начертить схему моей комнаты со всеми устройствами объединёнными в сеть, картинка кликабельна:
Вся идея держится на трёх китах:
Единственным главным устройством, пожалуй, можно назвать только блок питания. В данный момент он у меня один почти на все самодельные устройства, и отлично с этим справляется. Многие скорее всего скажут: «Да у тебя же наверное всюду провода!», - отчасти это правда, но у меня нет никакой фобии по отношению к проводам. К тому же маленький шлейф с питанием и линией данных почти незаметен на фоне остальных кабелей.
Не буду сильно повторяться, про это я рассказывал в статье о CLUNET протоколе . Идея проста - роутер на основе Linux, и на нём работает демон, который принимает входящие подключения из локальной сети или Интернета и предоставляет доступ к сети устройств умного дома.
Помимо этого роутер используется как простенький веб-сервер, чтобы можно было управлять устройствами через веб-интерфейс на случай… ну так, на всякий случай:
Весьма удобно использовать и cron на роутере для самых разных задач - от открытия окна или обогрева комнаты по расписанию до банального будильника. Для последнего у меня сделан простенький веб-интерфейс и скрипты:
Нет будильника приятнее, чем просыпаться от радио, которое очень медленно в течении нескольких минут увеличивает громкость. Главное при этом - выключить его до того, как оно сможет разбудить и соседей.
В ответ на пакеты приходящие от устройств тоже выполняются различные скрипты. Так ведутся логи по самым различным событиям типа звонков в домофон, рисуются графики температуры (http://clusterrr.com/sensors/t/) и других данных, отправляется push-уведомление мне на телефон, если вдруг в комнате открыта дверь, а меня дома нет, и прочее.
В нём можно наблюдать за тем, как умный дом живёт полноценной жизнью, но на практике это нужно только для отладки. Всё можно делать по клику на иконке в зоне уведомлений:
Помимо этого на многие действия есть специальные сочетания клавиш. Да, лень - двигатель прогресса, и мне чертовски удобно открывать окно или включать свет горячими клавишами, не вставая с кресла.
Но нельзя же останавливаться на управлении светом, надо управлять и бытовой техникой! Для этого у меня используется ДУ-передачик, который имитирует нажатия кнопок на пультах. По нажатию горячей клавиши на экране появляются экранные пульты ДУ:
Из них можно управлять ресивером, телевизором, обогревателем и лазером. Сложно описать, на сколько это облегчило жизнь. Пульты вечно приходится искать, они валяются где угодно, только не рядом. Теперь же они совсем покрылись пылью.
Помимо этого этот софт выполняет и обратную роль - получает коды кнопок от ДУ-приёмника и имитирует WinLIRC-сервер - популярную программу для работы с ДУ-пультами. Работу с ней поддерживает, например, MPC-HC, есть плагин для foobar2000. Таким образом можно делать и наоборот - управлять приложениями на компьютере при помощи любого пульта.
Но скоро меня осенило, что времена уже не те. Гораздо проще купить дешёвый китайский планшет на Android и повесить его на стену. Да, подобные планшеты обычно тормознутые и весьма низкого качества, но для моих целей этого вполне достаточно. Сказано - сделано.
Пришлось накодить различные виджеты рабочего стола:
Но это всё равно было недостаточно удобно, особенно когда хотелось сделать что-то на ощупь. Через некоторое время я вспомнил, что в Android есть отличный API по распознаванию голоса. Потребовалось всего полчаса, чтобы планшет начал выполнять свои первые голосовые команды. Вскоре набор возможных команд сильно вырос.
Знакомьтесь, вот моя электронная жена:
Стоит ли говорить, на сколько удобно открывать ночью окно, не размыкая при этом глаз? Жаль, что этот привод очень шумный - когда окно закрывается по таймеру, не проснуться невозможно.
Аналогичная служба была в итоге установлена и на телефон. Работает она только при подключенной зарядке. Наверное было бы здорово использовать для этого Google Glass.
Кнопки сенсорные - одна прибавляет количество ламп, другая убавляет. Есть возможность установить таймер выключения, но его необходимость отпала с появлением настенного планшета. Дружит с ДУ-приёмником и датчиками движения.
Суть в том, что у меня в комнате жили мыши, а в остальной части квартиры - коты. Весь смысл устройства был в том, чтобы дико пищать, если забыли закрыть дверь, ведь коты ни в коем случае не должны проникнуть в комнату к мышам. Теперь же устройство посылает в сеть пакеты при открытии и закрытии двери. Роутер же пишет логи её открытия и посылает мне push-уведомление, если вдруг она открыта, когда меня нет дома. Моё местоположение определяется по мобильному телефону. Помимо всего этого пищалка теперь используется для самых разных звуковых уведомлений - домофон, открытие замка, нажатие кнопок на кодовой панели.
Способствуют выключения света, когда движения долго нет, а ещё смене моего статуса на «away» в мессенджерах. Помимо них движение определяют ещё и четыре видеокамеры.
Теперь у меня всё как у серьёзных взрослых дядь!
Сам привод питается от 220В. Слева в коробке схема с двумя реле, которые подают питание. Я снял с окна одну петлю, что позволило открывать его в два раза шире, поэтому открывать можно полностью и наполовину.
А ещё там бегает Pac-Man, для которого было нарисовано несколько кастомных символов.
Они отправляют на удалённый сервер короткое видео, когда открывается дверь. Или длинное, если меня при этом нет дома. При наличии движения они периодически делают фотографии. Помимо всего этого камеры работают как дополнительные датчики движения. Если что-то начало двигаться, они запрашивают ссылку на роутере, а тот в свою очередь посылает широковещательный пакет в сеть.
Многие люди наверняка будут спрашивать меня: «Зачем тебе столько видеокамер?», «Зачем тебе кодовая панель?», «Зачем тебе датчики движения?», «Зачем тебе всё это?»
На все подобные вопросы я отвечу одной картинкой:
Теги: