Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Домашняя автоматизация с использованием Raspberry Pi 2 (Windows 10 IoT Core)

Компоненты и расходные материалы

Raspberry Pi 2, модель B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Релейная плата с 5 реле, 3 GPIO и соединением I2C, поддерживает установку на распределителях питания, на основе PCF8574 .
× 1
HSRel8 (+8) - 8fach-Relaisplatine
Релейная плата с 8 реле, 8 GPIO и соединением I2C, поддерживает установку на распределителях питания, на основе MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Плата расширения портов с 16 GPIO и подключением I2C, поддерживает установку на распределителях питания на основе MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
Блок питания 12 В для всех устройств
× 1
Hutschienen Netzteil 15W 5V 3A; MeanWell, DR-30-5
Источник питания 5 В для всех устройств
× 1
Prototyping Shield для Raspberry Pi
Используется для добавления светодиода для индикации состояния и защищенного входа прерывания для входных плат. Также имеется 3-полюсный винтовой зажим для надежного подключения.
× 1
I2C-Buffer HS
Сдвигатель уровня I2C, включая требуемые подтягивающие резисторы и т. д., поддерживает установку на распределителях питания на основе P82B96 .
× 1
Arduino Nano R3
Используется как мост между датчиками DHT22 и шиной I2C.
× 1
Отправитель и получатель 433 МГц
Для поддержки беспроводных реле.
× 1

Приложения и онлайн-сервисы

Microsoft Visual Studio 2015
Программное обеспечение Arduino (IDE)

Об этом проекте

Обновление 2: Проект все еще растет, и уже реализовано множество новых функций (например, Twitter-клиент и интеграция Telegram-ботов). Пожалуйста, проверьте репозиторий GitHub и примечания к выпуску, чтобы узнать больше о новых функциях (или подпишитесь на меня в Twitter). Я надеюсь, что смогу обновить эту страницу проекта как можно скорее.

Обновление 1: Сначала я хочу сказать «спасибо» всем, кто прочитал эту страницу проекта и оставил мне отзыв (личный или в комментариях). Было очень весело представить этот проект на Maker Faire Rome 2015 и Microsoft Technical Summit 2015, и будущие мероприятия все еще ждут. Я добавил несколько фотографий с событий.

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

Особенности

В настоящее время поддерживаются следующие функции.

Входы

  • Нажимная кнопка (BUSCH-JAEGER 2020US)
  • Детектор движения (Abus 360 ° BW8085)
  • Комнатная температура (мое собственное устройство на основе DHT22)
  • Влажность в помещении (мое собственное устройство на основе DHT22)
  • Состояние окна (открыто или закрыто с помощью язычкового контакта Honeywell Slimline)
  • Восход, закат, температура и влажность (взято из OpenWeatherMap)

Выходы

  • Лампа (потолочная) (управляется реле, без затемнения)
  • Розетка (управляется реле, без затемнения)
  • Рольставни (окно) (приводится в действие двумя реле для подъема и опускания)
  • Вентилятор (потолочный) (с приводом от 3 реле на каждую передачу)
  • Вентилятор для ванной (с приводом от 2 реле на каждую передачу)

Другие особенности

  • Решение содержит веб-приложение для iOS, Android, Windows, Mac OSX, которое можно использовать для управления виртуальными приводами. Конфигурация веб-приложения загружается с контроллера (экземпляр Windows IoT).
  • Все события, генерируемые входами и выходами, можно публиковать в концентраторе событий Microsoft Azure и / или регистрировать в файле CSV.
  • Контроллер (экземпляр Windows IoT) обеспечивает трассировку на основе UDP, которую можно показать с помощью консольного приложения. Трассировка очень подробна и может использоваться для поиска ошибок или неправильно подключенных приводов и т. Д.
  • Пользовательские приводы могут быть добавлены для поддержки большего количества оборудования.
  • Физические выходы можно объединить в логические.
  • Анимация (можно анимировать физические выходы логического вывода).
  • Вся система спроектирована так, чтобы быть максимально устойчивой к ошибкам / отказам оборудования. Даже если несколько основных компонентов отключены / сломаны, оставшаяся система по-прежнему работает должным образом (например, некоторые платы в гостиной недоступны из-за аппаратного сбоя, но ванная по-прежнему функционирует, как задумано)
  • Поддержка удаленных реле 433 МГц.


Концепция

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

Примечание :Поскольку я живу в Германии, каждый компонент рассчитан на работу от источника питания 230 В. Другие типы источников питания могут нуждаться в доработке. Монтаж кабелей 230 В (NYM), новых распределителей питания и т. Д. Выполняется моим предпочтением электрик, а не один.


Аппаратное обеспечение

Новый распределитель энергии

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

Шина I2C

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

  • Управляйте автобусом при 5В. RaspberryPi управляет шиной при напряжении 3,3 В, поэтому требуется переключатель уровня I2C (P82B96). Это первое (и единственное) устройство, добавленное к RaspberryPi 2 (в моем решении оно называется Контроллер). Кабель для этого подключения должен быть как можно короче. Спецификация допускает работу шины с напряжением до 15 В, но ведомые устройства, такие как PCF8574, поддерживают только максимум 5 В.
  • Используйте кабель витой пары, например CAT7. Важно использовать одну пару для SDA и GND, а другую - для SCL и GND. Не используйте одиночный кабель витой пары для SDA и SCL. Также убедитесь, что экран кабеля подключен к PE (в Германии).
  • Предпочитайте многожильный кабель. Это усложняет подключение всего, но увеличивает длину кабеля.
  • Добавьте подтягивающие резисторы номиналом 10 кОм к концу шины для SDA и SCL.
  • Ограничьте скорость шины до 100 кбит (стандартный режим), даже если ведомые устройства поддерживают более высокие скорости.
  • Включите буфер I2C (P82B96). ИС можно использовать в качестве переключателя уровня или для разделения шины на физические сегменты. Я использовал один из этих буферов в распределителе питания. Буфер следует разместить в середине автобуса.

Эта оптимизированная шина I2C используется для подключения каждой платы в распределителе питания.


Релейные платы (выходы)

CCTools из Германии продает платы с реле, которые можно подключать к шине I2C. Также можно купить платы как отдельные части или только печатную плату. Это позволяет заменить расширитель портов на альтернативы, совместимые с контактами. Первое необходимо, потому что доступные адреса устройств ограничены. Я добавил держатели для реле и микросхем, чтобы мне было легче их заменить, если один из них сломан. Другой момент - я могу использовать PCA9555D вместо MAX7311 потому что PCA9555D дешевле и проще заказать (в Германии).

HSRel5 плата реле имеет 5 реле и 3 GPIO . Все необходимые порты взяты из внутреннего PCF8574 8-битный расширитель портов с 8 GPIO . Первые 5 используются для реле, а последние 3 могут использоваться для других выходов. Для работы реле требуется 12 В, чего не может обеспечить расширитель портов (который может управлять только светодиодом). Итак, нужен драйвер реле. Реле связаны с драйвером реле, а драйвер реле, в свою очередь, подключен к инвертору. Этот инвертор необходим, потому что состояние всех портов на расширителе портов ВЫСОКОЕ . после того, как IC получает питание. Это приведет к закрытию всех реле, что является непреднамеренным поведением.

Заключение: Если первое реле должно быть закрыто, необходимо отправить 00011110 (MSB) к расширителю портов по шине I2C. Это установит для первого порта значение LOW . (остальные порты тоже обновлены). Первый порт расширителя портов подключен к первому входу инвертора. И первый выход инвертора подключен к первому входу драйвера реле (ULN2803). В качестве последней части цепи реле подключено к первому выходу драйвера реле.

Еще одна плата реле от CCTools это HSRel8 (+8) в котором используется MAX7311 в качестве расширителя портов и содержит 8 реле и 8 GPIO . Эта плата не требует аппаратного инвертора. Это означает, что ВЫСОКИЙ состояние реле на HSRel5 означает ВЫКЛ и ВЫСОКИЙ состояние на HSRel8 (+8) означает ВКЛ. Это другое поведение обрабатывается драйвером для этих устройств и является частью программного обеспечения.

Каждая лампа, розетка и т. Д. Подключена к одному из этих реле. У себя дома я сейчас использую 8 HSRel5 и 4 HSRel8 . Я также использую платы с твердотельными реле и другими типами реле, но для краткости я не буду здесь вдаваться в подробности. HSRel5 самая простая плата реле. Но PCF8574 позволяет только 8 различных адресов. PCF8574 А это тот же расширитель портов, но имеет 8 разных адресов. Это означает, что 16 HSRel5 может быть подключен к I2C автобус.


Расширители портов (входы)

Кнопки, датчики движения и герконы (для окон) подключены к плате под названием I2C-Port16 HS из CCTools . Эта плата содержит расширитель портов ( MAX7311 ), подтягивающие резисторы (5 В, 10 кОм) для каждого порта и керамические конденсаторы ( 100NF ). Плата может работать от источника питания 12 В или 5 В. Керамические конденсаторы используются для фильтрации шума (фильтр сбоев).

Каждое устройство ввода (кнопка, датчик движения, геркон) имеет собственный кабель, ведущий к распределителю питания. CAT7 Кабель используется для каждого входного устройства, так как он должен иметь экран, подключенный к PE (защитное заземление). Места, у которых есть более одной кнопки, например кнопки для рольставен, могут быть соединены с помощью только одного CAT7 кабель.

В распределителе питания каждое устройство ввода подключено к одному порту расширителя портов и GND . Из-за подтягивающих резисторов состояние портов ВЫСОКОЕ . по умолчанию. Нажатие кнопки подключит порт к GND что приводит к НИЗКУЮ состояние порта. Датчики движения и герконы тоже работают.

Общее прерывание кабель подключен ко всем платам ввода. По умолчанию этот кабель натянут. В случае изменения состояния на любом из расширителей портов соответствующий расширитель портов установит состояние прерывания на НИЗКИЙ. Такое поведение предотвращает непрерывный опрос всех расширителей портов, использующих шину I2C. Программное обеспечение Pi2 только опрашивает соответствующий GPIO. Если состояние GPIO прерывания было изменено, текущее состояние каждой платы ввода опрашивается соответствующим образом, и при необходимости запускаются события.


Малина Pi 2

Raspberry Pi 2 работает под управлением Windows 10 IoT и крепится к распределителю питания в специальном корпусе. Он также имеет экран для прототипирования со светодиодным индикатором состояния, прерывание порт с подтягивающим резистором ( 10К ), резистор защиты ( ) И керамический конденсатор ( 100NF ) для фильтрации глюков. Все кабели можно подключать с помощью винтовых зажимов.

Датчик температуры и влажности

Текущая температура и влажность в каждой комнате / месте (в настоящее время 10) измеряются с помощью DHT22 (AOSONG). Этот датчик обеспечивает текущую температуру и влажность с использованием собственного протокола, который не поддерживает адресацию. Для этого необходимо, чтобы каждый датчик был подключен к микроконтроллеру. Для своего решения я решил добавить Arduino Nano V3.0 в качестве подчиненного устройства I2C автобус. Arduino Nano считывает значения со всех подключенных датчиков каждые 2,5 секунды и кэширует их локально. Эти значения можно прочитать из Arduino Nano после отправки идентификатора порта (0-10). То же самое происходит при чтении данных из регистров по шине I2C.

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

Значок справа от влажности ( "Luftfeuchtigkeit" ) указывает, есть ли повышенный риск роста плесени на стенах. Значение менее 60% - зеленый . , менее 70% - желтый и выше 70% - красный .

Веб-приложение также предоставляет обзор всех датчиков.


Настройка оборудования

На следующем рисунке показана установка оборудования в распределителе питания с использованием плат ввода и вывода. Блок питания 12 В / 5 В и соединения N / PE не показаны.

Удаленное реле 433 МГц

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

Эта функция делает релейные платы необязательными. Arduino Nano который отвечает за DHT22 Датчики (температуры и влажности) также отправляют сигналы 433 МГц. Отправитель ( FS1000A ) монтируется вместе с датчиком температуры и влажности в шкафу в центральной комнате дома. Чтобы еще больше увеличить дальность действия отправителя, он дополнительно питается от 12 В (также работает с 3,3, но с малым радиусом действия).


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

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

Коды пульта дистанционного управления 433 МГц в настоящее время могут быть настроены вручную только через схему, построенную на макетной плате. Затем эти коды копируются в конфигурацию. фриттинг эскиз требуемой печатной платы указан ниже, а Arduino скетч находится в репозитории в папке CK.HomeAutomation.SensorsBridge \ RemoteCodeFinder .


Цифровой ящик для кошачьего туалета

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

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

Анализируя сгенерированные журналы и фильтруя соответствующие изменения исполнительного механизма (база данных SQL Azure или файл CSV), мы можем отслеживать использование кошачьего туалета с течением времени и, следовательно, улучшать требуемые интервалы очистки.


Программное обеспечение

До выпуска Windows 10 IoT программное обеспечение работало на G120 от GHI electronics с помощью .NET Micro Framework в версии 4.3. Но в основном из-за недостаточной производительности (120 МГц, 16 МБ ОЗУ и интерпретатор) не все запланированные функции работали так, как планировалось.

Пару недель назад я начал переносить базу кода для работы в качестве фоновой задачи Windows 10 IoT, а также добавил такие функции, как интеграция с Microsoft Azure.

Репозиторий, на который имеется ссылка ниже, содержит решение Visual Studio 2015 и все зависимые проекты. Это все, что требуется для использования Raspberry Pi 2 в качестве контроллера домашней автоматизации, при этом он открыт для расширения путем написания пользовательских драйверов для других релейных плат или датчиков.


Проекты

Проекты программного решения сгруппированы в:

  • Приложение (содержит веб-приложение)
  • Контроллеры (содержит проект запуска для Pi и домашнюю конфигурацию)
  • SDK (содержит все общие проекты)

CK.HomeAutomation.TraceViewer

Этот проект содержит консольное приложение, которое отображает сообщения трассировки, отправленные контроллером (экземпляр Pi2). В настоящее время все уведомления непрерывно отправляются на широковещательный адрес с использованием сокета UDP. Поэтому необходимо открыть порт (например, 19227) на брандмауэре. Я использую TraceViewer в основном для поиска ошибок и / или неправильных настроек.

Все классы, необходимые для отправки уведомлений, находятся в проекте CK.HomeAutomation.Notifications .


CK.HomeAutomation.Networking

Этот проект содержит реализацию базового HTTP-сервера. HTTP-сервер необходим для веб-приложения, он предоставляет информацию о статусе в формате JSON и принимает запросы с изменениями статуса.

HTTP-сервер также может размещать веб-приложение. Из-за разных имен пакетов содержимое веб-приложения необходимо вручную выгружать в папку назначения с помощью административного общего ресурса SMB.

Целевая папка: \\ [IP] \ c $ \ Users \ DefaultAccount \ AppData \ Local \ Packages \ CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g \ LocalState \ app


CK.HomeAutomation.Controller. *

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

Дополнительно я предоставляю проект CK.HomeAutomation.Controller.Empty как отправную точку для экспериментов с решением. ПРИМЕЧАНИЕ :Контроллер с именем Cellar который отвечает за освещение сада и парковки, не рассматривается в этой документации.

Перед тестированием решения вам следует ознакомиться со следующими задачами:

  • Настройка Raspberry Pi2 с Windows 10 IoT с нуля (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Подключитесь к Raspberry Pi2 с помощью удаленного сеанса Microsoft PowerShell (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Развертывание универсального приложения для Windows на Raspberry Pi2.

Каталог решения также включает небольшой PowerShell сценарий под названием SetupRaspberryPi.ps1 для выполнения общей цепочки команд для настройки Raspberry Pi2. Рекомендуется, но не обязательно, запускать сценарий ( убедитесь, что все настройки IP настроены в соответствии с вашей собственной инфраструктурой ).

CK.HomeAutomation.Actuators

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

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

MotionDetector - Актуатор

Этот привод используется для обнаружения людей и движения в помещениях. Я использую датчик движения BW8085 360 ° от Abus который крепится к потолку в каждой комнате.

Реализация актуатора детектора движения предусматривает два события. Первым из двух является MotionDetected . событие, которое запускается при обнаружении движения. Детектор физического движения сохраняет выходной сигнал на ВЫСОКОМ уровне. уровень до тех пор, пока движение не перестанет быть обнаружено, после чего второе событие DetectionCompleted уволен.

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

Кнопка - привод

Этот привод представляет собой физическую кнопку. У кнопки есть два события, которые указывают на то, что она была нажата. Событие PressedShort запускается, если кнопка была нажата на короткое время (<1,5 секунды), в то время как событие PressedLong срабатывает, только если кнопка была нажата более длительное время (> 1,5 секунды). Второе событие также автоматически запускается, если продолжительность (1,5 секунды) превышена, а кнопка не отпускается. Эти два события позволяют кнопкам с несколькими функциями.

Пример:

Решение также содержит VirtualButton . Эта кнопка реализует тот же интерфейс ( IButton ) и может быть "нажата" только с помощью веб-приложения.


Гнездо, лампа, выход двоичного состояния - привод

Базовый класс BinaryStateOutput используется для каждого привода, который поддерживает двоичное состояние ( ON и ВЫКЛ ) Только. Примеры таких приводов: Socket и Лампа . Базовая реализация предоставляет методы для обновления ( ON и ВЫКЛ ) или переключение состояния. Кнопки может взаимодействовать с объектами, реализующими IBinaryStateOutputActuator , это позволяет добавлять несколько настраиваемых исполнительных механизмов.

На следующем изображении показан шаблон для каждого выходного двоичного состояния. Значок в левой части отличается для розеток и ламп. Пользовательские значки, такие как бутылка с ядом в " Mückenstecker "запись может быть определена с помощью файла конфигурации ( Configuration.js ) для веб-приложения.

CombinedBinaryStateActuators

Каждый физический привод типа BinaryStateOutput может использоваться для создания логического двоичного состояния исполнительного механизма. Один привод должен быть установлен в положение «ведущий», что необходимо для определения нового состояния, если состояние должно быть переключено. Привод имеет собственный идентификатор и может использоваться как любой другой привод с двоичным выходом (необходимый интерфейс реализован).

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

Пример:

StateMachine - Привод

More complex states than ON and OFF are possible to configure using the StateMachine . This actuator allows multiple states for ports (relays) or other binary output actuators.

Example with a fan:

The state machine provides methods to turn it off or moving to the next state. The state is reset to OFF if the last state of the state machine has been reached and the initial state should be applied next.

Another use case for the state machine is creating templates or "moods" for a couple of other actuators.

Example mood:

The method WithTurnOffIfStateIsAppliedTwice ensures that the state of the state machine will change to OFF if a particular trigger has been activated a second time as the configured state is still active (Example :Pressing the push button for "DeskOnly " will activate the "DeskOnly " mood. If the push button is pressed again while the "DeskOnly " mood is still active, the actuator applies the OFF государство. A dedicated push button for the OFF state is not needed.).

The following image shows the template for state machines. The caption and image of each state can be changed using the configuration file of the web app.

TemperatureSensor / HumiditySensor

The values for temperature and humidity are read using the I2C sensors bridge. Both values are read from a single physical device but separated into an actuator for temperature and an actuator for humidity. The values are automatically polled every 10 seconds.


Home Automation !=Home Control

As mentioned before the importing thing is automation. Without automations, the whole solution is only one big remote for the home. This solution provides several automations:


AutomaticTurnOnAndOffAutomation

This automation sets the connected binary state outputs to ON. A push button or motion detector can be used as the trigger. It is required to specify the desired duration of the ON государство. The state is set to OFF if that range exceeds. The state is automatically set to OFF if the specified range is exceeded. An optional time range can be provided in which the automation rule is enabled. Predefined ranges for "day only " or "night only " are available (requires a weather station object).

Example:

AutomaticRollerShutterAutomation

This automation is used to move several roller shutters automatically according to several conditions. One of these conditions is sunrise and sunset which means that the roller shutters are automatically moving up at sunrise and moving down at sunset (requires a weather station object). It is also possible to add a diff to sunrise and sunset. According to the sunrise and sunset feature, it is possible to specify a time for "do not open before" which will ensure that the roller shutter is never opened before that point in time has been reached. Another condition is the outside temperature (also requires a weather station object), which enables the roller shutters to be closed automatically if the outside temperature exceeds a certain value like for example 28°C. This feature is intended for roof windows.

The position of the roller shutter is also tracked via time measuring. The required duration between up and fully closed must be configured.

Example:

The following screenshot shows an entry for roller shutters at the web app. The progress bar over the buttons is showing the current position.

AutomaticConditionalOnAutomation

This automation is used to set the state of several binary state outputs to ON while conditions are matching. This automation is used for lamps in the garden which are only ON at night. It is possible to specify one time range for the ON state and multiple time ranges for the OFF государство. It is also possible to use sunrise and sunset for the ON state (requires a weather station object).

Example:

General automation and complex conditions

The latest feature of the new implementation is a generic automation and condition framework. The generic automations are designed to execute custom actions if the configured conditions are met. This is checked every time a trigger is invoked via a push button, motion detector, interval or any other code.

Weather station

Many of the automations and conditions are depend on environment conditions like the current weather, sunrise and sunset times, outside temperature or humidity. All of these information is currently provided every 60 seconds by a virtual weather station backed by WebApi of OpenWeatherMap. The virtual weather station is implemented using the interface IWeatherStation , this makes it easy to seamlessly integrate physical stations located in garden.


CK.HomeAutomation.Hardware

This project contains the drivers for all currently supported input and output devices. Specifically the relay boards, input boards from CCTools and 433Mhz remote switches. The driver and source code of the Arduino Nano (sensor bridge and 433Mhz sender) is included too. All higher level objects like actuators and automations are implemented against interfaces to add an abstraction layer to the concrete bare to the metal hardware classes. This makes it easy to later add further drivers for other boards and sensors.


CK.HomeAutomation.Telemetry

This project contains two components. The first one is a CSV writer which writes every changed state to the "LocalState" directory of the package. This file can be downloaded from the Pi2 using the administrative SMB share: \\192.168.1.15\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\BinaryStateOutputActuatorChanges.csv .

Example content of the the CSV file:

The second component is the AzureEventHubPublisher . This component sends events for any state has change and the values of any sensor change to an Microsoft Azure EventHub . Events are also generated if push buttons are pressed or motion is detected. The solution contains the SQL scripts for creating the required SQL database tables and the required query for a StreamAnalytics job (in folder #Azure).

Every changed actuator state generates to entries at the Azure SQL база данных. The first entry contains the START event and the new state. The second entry contains the END event with the total duration of that state in seconds.

I already created some reports using a free Microsoft PowerBI account.

WebApp

The software solution contains the project CK.HomeAutomation.App . This project is a web app building on top of AngularJS , jQuery and Bootstrap . The room configuration is read from the controller (Pi2) and the UI is generated according to the existing rooms.

The web app can be opened directly from the file system using the index.html  file or uploaded to a web server. The file Configuration.js  is used to configure and translate the web app. The IP address of the Controller (Pi2 instance) must be set in the configuration file.

The web app can be added to the home screen of iOS only if it is hosted at a web server (I am personally using a BananaPi with nginx). Adding a web app to the home screen is described here: http://www.tech-recipes.com/rx/44908/ios-add-website-shortcut-to-home-screen/

Hosting the web app at the Raspberry Pi2 is already in progress but currently not supported completely.

Terminal

The web app also runs at the living room. An old iPad 3 is used as the terminal.

Будущее

The solution described above is still under development and will get more features in the future. Some of the planned are: 

  • Support for actuators based on infra red signals (like an RGB-LED-Strip).
  • Support for XML based configuration files in addition to code based configuration.
  • Implementation of a dedicated tablet web app with a different layout.
  • Support for reed switches for windows which are showing the state at the web app.
  • Libraries with drivers for devices from other manufacturers (like 433Mhz remote switches).
  • Controlling of the valves of the heating system (outputs and temperature reading already implemented).
  • Alarm system which sends notifications if motion is detected or windows are opened (requires implementation of point 4).
  • A hardware weather station.
  • Automatically closing roller shutters if the window is open and rain is detected (the currently used weather API already provides the required information).
  • More Unit Tests.
  • Detailed documentation at the GitHub wiki.
  • Animations (this feature was already implemented using NETMF but I was not able to migrate it completely within the time range of the IoT contest)

If you are interested to contribute to this project (hardware, software, documentation or anything else), feel free to contact me.

Код

CK.HomeAutomation
This repository contains the complete solution including the SDK, WebApp and my personal configuration.https://github.com/chkr1011/CK.HomeAutomation.git

Схема

This is the circuit which us required to read the 433Mhz codes from the remote control. The sketch contains the circuit board of the DHT22 sensor which is mounted at every room. The shield contains a status LED and screw terminals for the I2C bus and the interrupt. This is a regular temperature and humidity sensor which conains a 433Mhz sender. Only one is required for the entire home.

Производственный процесс

  1. Регистратор температуры Raspberry Pi
  2. Удаленный мониторинг погоды с помощью Raspberry Pi
  3. SensorTag для Blynk с использованием Node-RED
  4. Датчик движения с использованием Raspberry Pi
  5. Следите за температурой в доме с помощью Raspberry Pi
  6. Windows 10 IoT Core - считывание пульса
  7. МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
  8. Windows 10 IoT Core на Raspberry Pi 2 - данные датчика Adafruit
  9. Windows 10 IoT Core и SHT15
  10. Windows 10 IoT Core для Raspberry Pi 3, модель B +