Пользователь
0,0
рейтинг
4 декабря 2012 в 18:16

От домашней автоматизации и умных домов в общем к конкретному примеру из песочницы


В последнее время здесь много пишут о домашней автоматизации и умных домах. Хотел бы поделиться своим опытом, общими соображениями и конкретным проектом. Эта статься будет полезна тем кто просто хотел бы знать чем может быть в принцыпе полезен/удобен умный дом а также тем, кто хотел бы управлять(или просто наблюдать) с любого устройства с браузером(телефон, планшет, читалка, HTPC, ноутбук, настольный компьютер и тд) системой домашней автоматизации. Причём это можно делать из любой точки мира. Мой опыт и пример описанный во второй части этой статьи (Arduino, JQuery Mobile Web интерфейс и прочее) могут пригодиться тем у кто уже есть какая-то система домашней автоматизации (например X10) или тем кто начинает этот тернистый путь.

Основная причина того что системы домашней автоматизации всё ещё не стали так популярны это акцент на освещении, который обычно делают при их продвижении. Ведь мигать светом (как светодиодами на Ардуине) не вставая с дивана это баловство, которое не имеет никакого практического значения и отталкивает людей от серьёзных мыслях о внедрении и использовании систем домашней автоматизации у себя в домах и квартирах. Мигать светом (на что обычно заточено 90% функционала) никому не нужно а вот например управлять отоплением индивидуально в каждой комнате это удобно и экономит энергию=деньги. Заоблачные цены на сами (копеечные по себестоимости) компоненты готовых продающихся систем домашней автоматизации вместе с ценами на интеграцию их только подливают масла в огонь. Спешу заверить что самым дорогим компонентом у нас будет 20 долларовая Arduino Megа. Если рассматривать вопрос в целом то мне видится только следующий список задач которые имеет практический смысл централизованно автоматизировать:
> управление климатом температурой (отопление/кондиционирование) и влажностью (увлажнитель/осушитель),
> управление естественным освещением (жалюзи, ставни, навесы)
> и управление поливом газонов, цветников и лужаек вокруг дома (если таковые имеются и их таки надо поливать).
Из децентрализованных систем удобно иметь локальную (без центрального управления 1-2 датчика управляющие напрямую включением подсветки) срабатывающую от датчиков движения(присутствия) маломощную светодиодную подсветку лестниц (иногда пола) и частей столов на кухне которые затенены от обычного потолочного освещения навесными шкафами и полками. Эта же подсветка в комбинации с перечисленными выше незаменима ночью когда надо, не разбудив никого и в первую очередь себя, пробраться на кухню (и отрезать там что-то от чего-то и съесть ни с кем не делясь) или в другое заведение не спотыкнувшись об предусмотрительно разбросанные детские игрушки. Также имеет смысл включать датчиками движения основное освещение ТОЛЬКО в технических помещениях: шкафы, кладовки, гараж, прачечные и тп. Датчики движения и централизованные системы не практично использовать для основного освещения в жилых помещениях. Внешняя и декоративное праздничная подсветка дома удобнее всего включается от копеечных готовых блоков с датчиками освещения и/или таймерами. Настоящие охранные системы подключённые к службам реагирования (не просто разбросанные по дому датчики и веб камеры) обычно не имеет смысла смешивать с системами умного дома из многих соображений.

Таким образом начнём с самого актуального. Идеальным объектом является отопление которым можно управлять например: электрическое(батареи на колёсиках в розетку и настенные батареи) и централизованное или не очень отоплением частного дома. В моём примере мы рассмотрим работу с системой Термо Помпы (Heat Pump в северной Америке) с мазутным отоплением по средствам прямого подключения к имеющемуся Блоку Управления (термостату) и дополнительно устройствами. В первой версии системы я использовал устройтва и разетки протокола Х10. Но к сожалению они плохо зарекомендовали себя, изза медленного интерфейса и очень громких счелков при переключении, котрые будили всех домашних. В последствии я перевйл систему на радио разетки, что оказалось гораздо проще и тише чем x10. Эти разетки имеются в огромном асортименте радиочастот и напряжения. Всё это, применимо для огромного множества других систем. Всё началось с того что мой приятель вместе с соседом ненавязчиво капали мне на голову про огромную роль чуда чудного — Arduino в современном обществе и что я как человек умеющий и любящий держать паяльник просто обязан заразиться этой Ардуино манией как можно скорее. Я всячески отмахивался и говорил что область практического (не робото-игрушки) применения её дома очень сомнительна и делать на основе мощного микроконтроллера последовательно загорающиеся светодиодные линейки для подсветки ступенек лестницы (вместо одного сдвигового регистра и генератора) это просто из пушки по воробьям а остальное баловство. Но всё-таки зерно Arduino им удалось заложить в мою голову и как все зёрна с приходом весны и на подступах лета росток начал пробиваться. Я не люблю хобби проекты ради самих проектов. Какая-то практическая сторона должна присутствовать а тем более что ресурсо ($ и время) ёмкие проекты для семейного человека должны ещё иметь высокийWAF (Wife acceptance factor) или как говорит мой Папа его легко легализовать.

И как всегда лень явилась двигателем прогресса. Сидели мы чуть позже полудня на веранде, солнце приятно припекало а в тоже время в спальне на верхнем этаже спал сынишка и судя по китайскому термометру за 2 доллара (до которого надо было ещё дойти и посмотреть не разбудив сына) температура была за 26. Значит надо теперь идти в гостиную и включать центральный кондиционер, а потом надо его ещё и выключать чтобы он не включался каждый раз когда температура немного подымится. Особенно это неприятно делать летом ночью, замёрзнув под лёгким одеялом надо вскакивать и опять же не перебудив всех домочадцев бежать в гостиную к пульту и вырубать это достижение прошлого века. Тут то я и смекнул что пора прекратить такое безобразие и звонить другу со словами "Где там твоя хвалёная Ардунья, Давай её сюда щас мы посмотрим на что она способна!". Сразу скажу что совсем не выбирал именно её и не думал что она окажется такая никчёмная(например в работе со строками) и даже от злости и бессилия бороться с ней дальше чуть не переехал посреди проекта на STM32. В конечном итоге всё-таки остался с ней, но обо всём по порядку.

Чтобы проще было понять почему всё сделано так и как Вам намазать на хлеб мой опыт и наработки, начнём с описания того что есть/было у меня под рукой:
1) Частный дом в Канаде (хотелось бы сказать что он мой, но конечно же он принадлежит банку и как бы это абсурдно не звучало но иметь его полностью выплаченным при текущих ставках даже не выгодно) 1959 года постройки как тут их называют Split Level те дом двух этажный но половина его сдвинута вертикально относительно другой половины на пол этажа.
2) Arduino Uno (в последствии изза малого числа Вх/Вых для X10 и радио потребовалась Mega)
3) дорогой и родной Ethernet Shild. Что-то запустить и найти адекватную библиотеку для ENC28J60 мне так и не удалось
4) Желание, время и немного денег.
Как здесь принято, спальни находятся на верхнем этаже и для меня получается это на пол этажа выше гостиной где и находится прикрученный к стене зловещий пульт управления системой отопления охлаждения. Тут такие систем называются HVAC (heating, ventilation, and air conditioning)на самом же деле это обычный огромный (десятки тысяч BTU или они их тут в тоннах чего то меряют) сплит кондиционер внешний теплообменник и компрессор которого находятся на улице а внутри теплообменник встроен в систему центрального вентилирования, которая полтора кило ватным вентилятором забирает воздух с уровня пола гостиной прогоняет через два теплообменника (один до кондиционера другой от мазутной или газовой горелки) и по системе коробов гонит в каждую комнату. Удобство и собственно само название тепловой насос вызвано тем что этот аппарат может гонять фреон в обе стороны и соответственно не только охлаждать но и нагревать воздух в доме. Надо заметить что нагревать он его может более менее эффективно только если на улице достаточно тепло больше 0 или -5 (зависит от модели и конструкции). Если же холодно то тепловой насос работать не будет и для этого как раз то и нужен бак с мазутом или газ.

Я начал свой проект и амбиции с малого, так давайте и мы разберём как же сделан этот HVAC и как им управлять. На поверку оказывается не так страшен чёрт. Одним из удобств является жидкая стандартизация всего домашнего и не очень в Америке это позволяет скрещать ежей с ужами по открытому, простому (иногда слишком) и общеизвестному (как правило древнему, кондовому) протоколу/стандарту. В нашем случае саму систему (вентилятор горелки теплообменники можно купить одного производителя кондиционер второго, увлажнитель у третьего а Блок Управления всем этим у четвёртого. Честно говоря не знаю также ли называются/управляются подобные устройства в Европе, но думаю что всё либо слизано либо очень похоже. Насколько я понял такие системы уже есть в России и возят их откуда попало/дешевле, так что у вас есть большие шансы столкнуться именно с такой системой. Давайте посмотрим на схему типичного подключения системы до того как мы начнём врезаться в систему.
Как мы видим почти всё понятно с первого взгляда. Единственное что надо пояснить что БУ питается и сам тепло насос управляется переменными 24 вольтами. которые подаются с входного трансформатора R и С. Линия С это общая и всегда соединена. Соответственно при подаче R(замыкании) на Y, O, W или G включается соотв. блок. От этого и будем отталкиваться. Значит если они включают то чем хуже мы? Сделаем так что наша новая система будет дополнять уже имеющуюся. Те управление можно осуществлять со старого пульта и контроллера как и раньше, но только когда надо, Arduino может отключить старую систему от управления и взять борозды в свои руки и потом отдать их обратно.Ставим релюшки.

Причем ставим их так чтобы без питания и вообще отключенные они сохраняли прежнюю конструкцию. R-0 отключает стандартный модуль управления и передаёт управление нашему Ардуину. R-1-4 подают нужное напряжение на соответствующую линию. Это управляющее напряжение R подаётся на каждое реле зелёным проводом. Управлять конечно хорошо, но система серьёзная и если мы случайно или не очень что-то не так включим или в неправильной комбинации. Например теплообменник будет греться а вентилятор не будет гонять воздух и отводить тепло с него, он может перегреться и привести к возникновению пожара, а нам это совсем не зачем. Во избежание подобных ситуаций давайте сделаем тройную защиту. И так первым бастионом будут сенсоры напряжения на каждой линии S1-4 (те их должно быть 4ре).

Они представляют из себя диод два резистора(делитель) и маленький электролит. Это может быть навесная сборка как на фотографии. В результате мы можем в Ардуине знать есть ли на самом деле на каждой из линий управления напряжение или нет. Соответственное если текущее состояние линий управления (Y, O, W, G) не соответствует тому что должно быть мы выводим код ошибки и отключаем систему. Следующим бастионом является наш дополнительный датчик температуры в камере теплообменника (plenum sensor). Если там слишком горячо или холодно (близко к 0С) то мы опять же выводим код и отключаем систему. Очевидно что запитывать реле напрямую от выходов ардуины нельзя поэтому надо либо громоздить по транзистору на каждое реле или купить готовый модуль с несколькими реле и транзисторами на одной плате. 99% компонентов я покупаю на ибее. Например на ибее полно таких 8 канальных модулей (8 Channel Electronic Relay Module) примерно по 9$. или же можно купить 4+2 (так как на самом деле нам надо всего 5 и одно запасное)


В качестве датчиков температуры и влажности я использовал китайские цифровые DHT22 которые неплохо зарекомендовали себя. Им надо всего три провода +5, GNd и Data. Провода могут быть достаточно длинными без потери точности и сигнала. Один датчик выкидывается на улицу в тень и под навес от прямого попадания влаги. Один датчик в доме. В уже построенном много лет назад доме обычно самая большая проблема это провести новые провода, поэтому я старался по максимуму использовать текущую проводку. Для DHT22 есть несколько библиотек. У меня были проблемы со всеми кроме этой. Я поставил внутренний DHT22 рядом с настенным пультом управления. Если В вашем доме как и в моём когда-то стояла система управления HVAC то у вас должно быть аж 6 жильный кабель идущий от БУ к месту где висит сам пульт с индикатором и кнопками. Современные пульты (как мой) требуют всего 2х проводов. Таким образом у нас в распоряжении получается 4 уже проложенных провода. В них мы запускаем +5V, GND, Data для внутреннего DHT22 и на последний Serial(UART) Tx с Ардуины для вывода информации на дисплей.

В качестве дисплея я использовал маленький (2.5 см) OLED экранчик с серийным интерфейсом. ДА он немного дороговат, но есть несколько уникальных отличия от подобных доступных: Наличие Serial(UART) интерфейса, что позволяет использовать всего один провод для его подключения, наличие пяти цифровых выводов на контроллере экрана (куда мы подключим RGB светодиод для дополнительного отображения состояния системы) и наконец компактность в сочетании с контрастом и отличной читаемости как при ярком свете так и ночью и он не освещает весь коридор ночью как любой ЖК с постоянной включённой подсветкой.

Далее встала проблема как поместить в каждую комнату, без дополнительных проводов, питания и радио модулей датчики температуры. В качестве датчика я выбрал цифровой DS18B20, (имея хорошую точность +- 0.5C) которому надо всего два провода (земля и сигнал). Их можно на эти 2 провода вешать много параллельно (каждый имеет свой уникальный MAC адрес). Но даже протянуть два провода во всем комнатам это адский труд. У тут меня осенило. Ведь по всем комнатам проложен телефонный кабель и он 4х жильный и в лучшем случае используется 2 жилы для телефона (как правило красный и зелёный) а остальные (жёлтый и черный) проходят по всем нужным мне местам и остаются свободными. Таким образом не разрезая провода а лишь оголив нужные два я подпаял к ним в каждой комнате по DS18B20. Общая длинна проводов получилась достаточно большая и если сигнальный провод подпирать (на +5В) рекомендуемыми 4.7 кОм, то в моём случае датчики практически не читались и я сократил подпирающее сопротивление вдвое до 2.3 кОм и всё прекрасно заработало.

Потом я заморочился датчиком давление и остановился на недешёвом BMP085 зато он имеет I2C интерфейс, что опять же экономит ножки и количество проводов. Так как он ещё может читать температуру eго я поставил в подвале, куда было ближе и проще всего тянуть новые провода (аж 4). Я старался по максимуму использовать стандартные телефонные кабели и разъемы(RJ11) чтобы конструкция была разбираемой и ремонтно — замено пригодной. При подключении этого барометра на туже I2C шину что и RTC (модуль энергонезависимых часов) возникли не очень понятные проблемы. Они мешали друг другу и пока я не поставил небольшую задержку перед чтением барометра работало всё не стабильно. Так как коротко временное отключение электричества не такая уж редкость да и модуль RTC стоит копейки я добавил его для энергонезависимого времени. в основном нужного при использовании х10. Используя его возникло желание автоматически синхронизовать его с NTP через интернет (раз уж он у нас есть), но у меня что-то не получилось скрестить webduino сервер и NTP. В итоге NTP время (Unix epoch) посылается на Arduino (и обновляется RTC) каждый раз при изменении каких либо настроек или режимов в web интерфейсе. Что имеет свои недостатки так как оно берётся JavaScript из времени на текущем компьютере или мобильном устройстве и не всегда точное и в правильной временной зоне.

Команды моим радио розеткамс Ардуины в эфир я посылаю с помощью копеечного (2$) передатчика модуля. Их прудом пруди на ибее (поиск «RF transmitter 315 Mhz..») и в любом магазине. Единственное надо правильно выбрать радио частоту соответветствующую вашим разеткам. К сожалению мои разетки не корректно поддерживались стандартной библиотекой RCswitch. в описании библиотеки есть список поддерживаемых чипов, но не стоит расстраиваться если ваш не в списке, у меня заработало после анализа эфира в ручную и без библиотеки. Про подобнве разетки, работы с библиотекой много написано. В частности cдесь: http://habrahabr.ru/post/213425 http://habrahabr.ru/post/212215 Я использовал 110В розетки . Несмотря на то что управление радио требует нестандарного решения, оно является самым простым и бюджетным решением стоящей задачи. A именно включать и выключать электрические батареи или любой другой прибор (не обязательно резистивный) по времени или в ручную и иногда включать- выключать наружный свет. Insteon, Zwave и другие имеют много подчас не нужных дополнительных функций но на порядок дороже и имеют проблемы с открытостью интерфейса для того чтобы Ардуино могла посылать устройствам простые команды. Единственная проблема с розетками x10, Insteon и другими это то что они очень громко щёлкают во время переключения. Особенно это раздражает тихой ночью. Ещё один нюанс: x10 был заточен и популярен в северной америке и соответственно под 110 Вольт. Тут каждый выбирает для себя сам. Либо платить много за:
Z-Wave — розеток готовых нет, есть странной формы модули реле которые также но по тише щёлкают и их куда-то, как-то в стены надо прятать, потом замурованные, непонятно как их обслуживать – менять/чинить. Зато появились USB модули для посылки команд. Но для этого ещё нужен микрокомпьютер (возможно роутер подойдёт) с правильной OS драйверами и тд;
Insteon — розетки есть, но также противно щёлкают как x10 и насколько я понял открытого модуля для посылки команд нет и система опять-же заточена под 110В;
Вам решать заморачиваться с интеграцией и посылкой команд в эту сеть или платить меньше в 5-10 раз за каждое радио устройство и при необходимости подтачивать код под него. Как и любая другая вещь всё для 110В стоит дешевле. Конечно есть ещё экстремальные пути, как например описанная несколькими авторами тут, идея опутать всю квартиру (дом) парой (а на поверку пучком) молоточных проводов и собирая каждое управляющее и управляемое устройство с нуля в ручную использовать 1-Wire протокол. Некоторые пошли ещё дальше и разрабатывают свои протоколы…

Также я как кайтер прикрутил анемометр (датчик скорости ветра). Для её измерения я использовал имевшийся под руками чашечный датчик с герконом замыкающим 1 кОм между двумя контактами при вращении чашечек. В программе используется прерывание и замеряется количество раз +5В подаётся(переход из 0 в 1) на цифровой вход (подпряжённый 5 кОм ами на теже +5В). Данное значение умножается на подходящий для вашего датчика коэффициент и из количества замыканий за одну секунду получается скорость ветра в узлах. Также за каждый час меряется максимальное и минимальное значения скорости (порывы) и отображается максимальное за час. В веб отдаются текущее и максимальное. Каждый датчик надо калибровать индивидуально и подбирать правильный коэффициент. Для управления гаражной дверью я использовал запасной радио пульт от неё и с помощью дополнительного реле (шестого) эмулировал нажатие кнопки на пульте (вскрыв пульт и подпаявшить в контактам кнопки).

Протокол общения стандартного БУ термопомпы с её пультом (обычно 2 провода) как правило закрытый и наша ардуина не может знать какой режим и настройки выставлены в стандартном блоке управления, но с помощью наших сенсоров мы можем знать в каком режиме сейчас HVAC и хотя у них тоже есть датчик температуры в теплообменнике дополнительная защита с помощью Ардуины не помешает. Меня часто спрашивают: А не страшно ли мне доверять Ардуине управление такой ответственной системой с своём то доме? Мой код открытый и прозрачный. Я понимаю что происходит и всегда могу отловить и исправить неточность (если такие остались после полугода пользования системой). И самое главное я могу добавлять любые функции которые мне потребуются. В той-же коробочке скорее всего менее мощный контроллер и конечно нечего уже поменять и добавить нельзя. Без ардуины добавление опять же ограниченных функций как доступ из интернета к стандартному БУ стоит новой коробочки сотен долларов. Всё началось не с того что я хотел сэкономить а мне нужны были удобные для меня функции которые не за какие деньги не купить у производителей оборудования. Но конечно если взять в расчёт цену человеко часов затраченных мной, да и даже вами если вы просто решите сделать подобное на базе моих и других наработок, на этот проект то конечно дешевле купить готовое но попрощаться с гибкостью и нужными функциями. Это примерно как поставить FreeBSD и кропотливо долго и по каждому поводу копаться в барахолке знаний интернета и в ручную из командной строки подкручивать её под себя в сравнении Mac OS, красивой готовой но ограниченной на базе той же BSD. Основная из них это включение обогрева/охлаждения до нужной температуры не навечно или по расписанию а всего лишь на час-2-4. Звучит просто и удобно но никак не присутствует в стандартных БУ.

Если вы хотите управлять только термонасосом без RF, RTC, барометра и прочих заморочек памяти и ног хватит и у Uno(я так и сделал в первой фазе своего проекта). В полной же версии без Mega не обойтись. Давайте посмотрим на получаемые функции и интерфейс.

Сам интерфейс сделан в рамках всего одной html странички с использованием технологии Ajax для обмена данными с Arduino web server (webduino) и основана на библиотеках JQuery Mobile. Поэтому для работы нужны несколько файлов картинок и сами библиотеки, которые могут быть заменены ссылками.

В верхнем левом углу, мы видим луну, это значит что по настройкам дня и ночи (в первой строке синего блока) сейчас ночной режим. Если дневной режим там будет солнышко. Дальше мы видим наш домик. В домике куча температур в каждой комнате и в центре температура с десятыми, это температура в гостиной на основном уровне. Зелёным внизу домика мы видим относительную влажность внутри дома. Справа от неё снежинка, это индикатор того что сейчас работает кондиционер. На этом месте отображается разными иконками остальные режимы работы (отопление термопомпой или AUX или же х10). Если иконка приглушена (полупрозрачная) значит система в этом режиме но не активна. Т.е. например в режиме кондиционирования до температуры 21 градус, но так как сейчас 20 градусов кондиционер не активен. Если одновременно работают два режима, например отопление х10 и отопление термопомпой, то будут последовательно мигать две иконки. Слева и справа у домика мы видим лучики, при нажатии на которые они становятся яркими и при последующем нажатии опять приглушаются. Это включение внешнего освещения у дома. У меня есть внешний свет на заднем дворе и впереди дома. Управление передаётся по х10 и номера соответствующих устройств прописаны в html(JS) коде, Ардуина лишь посылает команды на переданные ей из HTML номера устройств. Справа домика мы видим автоматическую гаражную дверь. которая открывается и закрывается при нажатии на неё. Сверху справа от домика мы видим текущую (усреднённую за 1-2 минуты) или максимальную за час скорость ветра в узлах. Значение скорости ветра подсвечивается разными цветами от голубого до красного в зависимость от скорости и в соответствии с международно принятыми цветами шкалы Бофорта. Справа сверху мы видим температуру на улице и ниже текущее атмосферное давление. Розовым фоном для значения давления служит график его относительного изменения за последние 24 часа (x-время, у- относительное значение давления). Под давлением зелёным относительная влажность на улице.

Теперь рассмотрим группу белых селектов и кнопку SET. Левым селектом выбирается нужная температура/режим. Правым на какое время включать этот режим. Если режим активный то надписи немного поменяется, как в этом примере
Если активен режим отопления то дополнительно кнопка подкрасится красным а если охлаждения голубым. Чтобы выключить надо оставить температуру и выбранный режим слева и оставшиеся минуты справа и тогда кнопка SET поменяется на OFF и её нажатие выключит режим. Режим охлаждения или отопления выбирается автоматически в зависимости от температуры на улице. Если на улице меньше чем значение константы heat_temp описанной в html(JS) файле, то будет предлагаться только отопление иначе только охлаждение.

Теперь давайте рассмотрим синий х10 блок. Нажатие на первую строку открывает общие настройки: ON — Все Розетки Всегда Включены (например летом), OFF все розетки всегда выключены (например если вы в отпуске), Split — в силу вступают индивидуальные настройки групп и комнат. Далее вы можете выбрать с какого часа начинается день и с какого ночь. Для сохранения настроек не забывайте нажать кнопку Apply внизу. далее каждая строка отражает группу комнат которая может состоять из одной и более комнат. Я сделал группировку по этажам в своём доме. На некоторых этажах только одна комната а на некоторых больше. У каждой группы мы можем установить режим ON — все розетки этой группы всегда включены, OFF все розетки этой группы всегда выключены (например вам надо включить пылесос и если одновременно будет работать батарея то выбьет предохранитель), Split(доступно только для групп с более чем одной комнатой)- в силу вступают индивидуальные настройки комнат внутри группы, Day — поддерживать указанную температуру только днём (ночью всегда выключено), Day&Night — поддерживать указанную температуру для дня и другую температуру ночью. У каждой комнаты доступно всё вышеперечисленное за исключение Split. Для вступления изменений в силу не забывайте нажать Apply внизу.

Самой последней строчкой является установки режима Override. Этот режим был сделан для принудительного включения розеток в выбранной комнате или светильника на некоторое время. Например вам надо нагреть максимально комнату на некоторый период для того чтобы ребёнку делать там массаж и через час продолжить поддерживать обычную температуру в ней. Или включать свет на улице на пол часа. Слева вы выбираете комнату справа на сколько включать режим и нажимаете кнопку Overrride. Если вам надо досрочно отключить режим справа выбирайте OFF и жмите Override. Вся информация обновляется каждые upd_interval (константа из html файла) секунд. По умолчания = 60 секунд. Когда информация обновляется вся верхняя часть странички с домиком моргает.

Ещё хотелось бы рассказать о концепции объединения розеток (pool). Допустим у вас одна большая комната обогреть которую в в -5 за бортом одна батарея не в состоянии или нагреваться она будет ооочень долго. Вы можете поставить вторую RF розетку с тем же кодом/адресом и вторую батарею воткнуть в неё и они обе всегда будут включаться. Что при относительно теплой температуре приведёт к частому щёлканью и включению и выключению этих двух и более батарей. Есть и другой вариант вы объединяете эти батареи в pool в коде ардуины x10pools[17]={0,0,0,0,0,12,0,0,13,0,0,0,0,0,0,0,0}. Ноль значит отсутствия пула у данного адреса розетки число значит адрес дочерней розетки пула. Дочерняя включается если на улице холоднее чем poolt (константа из html файла) или разрыв между нужной температурой в комнате и текущей больше чем delta_temp * poolf (константы из html файла). Хотелось бы сказать больше о delta_temp (константа из html файла) это Делта температуры. Она нужна для того чтобы режимы часто не включались не выключались так как показания датчиков могут немного скакать +-. Обогрев включается если текущая температура меньше чем (нужная — delta_temp) и выключается если больше (нужная + delta_temp). По умолчанию это 0.5 Град С.

Теперь рассмотрим вопрос безопасности. Конечно нельзя оставлять доступным для всех управление вашим домом. Так как наша система состоит из клиента(JS Ajax html страничка) и сервера (Arduino) вы можете организовать различные уровни безопасности. Например вы можете положить HTML страничку на свой компьютер, телефон планшет и тд. (не выставляя её на публичный хостинг) и тогда только вы(с устройств обладающих этим файлом) сможете открывать эту панель управления своими домашними системами. Arduino web server весит на внутреннем IP и поэтому если вы его не зафорвардите на роутере во внешний мир, то к самой ардуине можно будет достучаться только из вашей внутренней сети. Доступ к самой HTML страничке можно запаролить на Web сервере где вы её захотели выложить. Также модно поднять HTTPS сервер в отношении её. Самым простым и по моему мнению достаточно надёжным является публичный хостинг странички, но сама страничка при запуске никуда не подсоединяется если ей параметром не передать адрес сервера Arduino (предварительно настроенным Dinamic DNS и Port Foewarding). Выглядит это так в браузере вводится такая ссылка http://myhosting.com/index.html?http://myhome.slyip.net:8081/hvac. Если злоумышленник и случайно наткнётся на вашу клиентскую страничку то ничего он с ней сделать не сможет не зная адреса Arduino сервера. Это самый простой и удобный компромиссный вариант, которым я сейчас пользуюсь. Да мне тоже вся эта конструкция с убогим (медленный не поддерживающий HTTPS и тд ) Arduino Web Shield сервером в дополнение к которому ещё надо где-то отдельно хостить клиентскую страничку с иконки НЕ нравится. И как только я получу из китая знаменитый TP-LINK TL-WR703N роутер который в мгновения ока превращается в wifi bridged web сервер с Serial(UART) интерфейсом к Arduine, я сразу же прикручу его к ардуине (или её к нему) и выкину это шилд и изернет провод. Таким образом получится даже больше того что я хотел так безуспешно добиться от STM32 контроллера а именно чтобы всё было в одном устройстве (не отдельно захощенная страничка клиента и отдельно исполнительный сервер) и нормальным веб сервером на котором можно реализовать достойную степень удобства скорости и безопасности.


B на последок пример интерфейса исходники для ардуины проверенный на 1.0.1, мой пакет библиотек и HTML GUI.
@chouck
карма
45,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (40)

  • +5
    Интересно, сколько постов не видел, у всех свои велосипеды. Видимо, это из-за стоимости готовых решений.
    • +2
      На самом деле не всегда из-за стоимости. Часто не устраивает функционал готовых изделий или соотношение цена/функционал.
      • +1
        Приятнее разобраться с тем, как сделать самому, чем изучать функционал и настройку чего-то готового. Ну и одно дело потратить сразу много, а другое докупил одни модули, докупил другие, понял, что нужны еще какие-то детали и так по немного и не обременительно вкладывать средства и хобби интересное существует.
    • +2
      часто (хотя, не уверен насчет этого, но в отношении меня это работает) просто интересно сделать что-то свое, интересное, построить систему с нуля и разобраться в чем-то, а не закупить кучу готовых блоков, которые фактически являются черными ящиками
      • +3
        Да, да, да! То самое чувство, когда создаешь из кусочков текстолита и кучи деталек что-то, что в один прекрасный момент начинает работать как задумано, а в душе рождается крик «It's alive!». В наше время только с дешевой электроникой из Китая все меньше и меньше смысла что-то свое делать. К счастью, системы умного дома пока исключение — куча стандартов как проводных, так и беспроводных, нет единого стандарта на API, плюс зачастую не всегда адекватное понимание производителями что же нужно потребителю.
    • 0
      Вообще говоря, автоматизация — это всегда велосипеды. Просто в промышленных решениях их не изобретают, а собирают из конструктора. И для малых масштабов изобретение оказывается дешевле и проще. Дешевле — потому что нет наценки за гарантию бесперебойности. А проще потому, что в промышленных решениях обычно используют весьма и весьма своеобразные решения и языки, заранее людям без опыта работы неизвестные. А свой велосипед можно написать на том, что ближе именно тебе.
  • +6
    Прошу прощения, но мне кажется, что стоило бы явно выделить абзацы (читайте — разные мысли), например, пустой строкой.
    Содержание краше, конечно, не станет, но читать интересный материал станет значительно удобнее.
  • +6
    Хоть это и жутко индивидуально, но я бы предложил перечислить список всего и вся, что можно автоматизировать. Чтобы люди, решившие затеять ремонт сразу проложили необходимы провода.
    • 0
      Это надо продумывать задолго до начала ремонта. А перечислить список всего и вся — не реально, каждому надо что-то свое.
      меня вот раздражает утренняя и вечерняя возня со шторами. Ладно, когда их две комнаты, а когда дом в пару этажей?
    • +4
      • 0
        Познавательно
    • 0
      Всего все равно не продумаешь заранее. Поэтому рулит просто прокинуть с запасом много всяких проводов.
      Например, из мини-серверной на балкон протянул во время с запасом несколько штук ШВВП, которые промаркированы и сейчас используются процентов на 40. Снаружи заранее смонтированы универсальные платформы для всякой фигни — покрашенные белой краской перфорированные металлические пластины, прикрученные к жесткому каркасу ограждения балкона болтами. Итого, чтобы например повесить наружу какой-то новый девайс, достаточно просто прикрутить его к свободной платформе и подсоединить провод.
  • +1
    Отличный проект! Для общей законченности я бы порекомендовал перенести все на одну печатную плату дабы избавиться от «ежа» проводов, культура производства и в домашних проектах должна быть на высоте.
  • +1
    и выкину это шилд и изернет провод

    Я сначала подумал, что по приезду роутера выкините Ардуину :) Мощности роутера за глаза хватит для ваших задач и без Ардуины.
    • 0
      так не интересно)
      • +1
        На самом деле центр самой системы это только половина дела (в лучшем случае). Надо еще точно определиться что именно хочешь, точно расписать какими подсистемами в доме надо будет управлять, спланировать проводку и управляющие линии. А чем рулить это уже не первостепенная вещь.
        У меня, например, на данный момент имеется возведенная коробка с крышей и плюс-минус планировка дома. К началу строительного сезона мне надо определиться с теми вопросами, что я перечислил. На данный момент я точно знаю, что в центре системы будет RPi, плюс TL-WR703N для обеспечения связи с внешним миром. Плюс метео-станция (уже имеется и настроена работа с RPi), управление и мониторинг будет через 1-wire, каждым источником света управлять не вижу смысла, мне вполне хватит одного реле, чтобы гасить сразу все освещение в доме. А вот с остальным пока думаю, плюс с видео-наблюдением еще не определился.
        Так что это интересно и на чем строить не так важно. Эмбеддеры строят на микроконтроллерах, админы на линуксовых девайсах :)
        • +2
          Гасить сразу все освещение — это 5! Я бы себе у входной двери забабахал.
          • 0
            Я около входной двери и планирую кнопку под это дело, плюс из веб-интерфейса. Один минус — при включении свет будет загораться только там, где он был включен локальными выключателями. Но с другой стороны мне и не требуется лежа на диване выключать свет в сортире или спальне :) Мне нужно, чтобы уходя из дома я мог обесточить лишнее одним выключателем или кнопкой в веб-интерфейсе.
            • 0
              Так можно читать состояния локальных выключателей, а светом управлять через контроллер, плюс можно будет сколько угодно выключателей поставить и пультик (хоть в статье и сказано, что светом управлять не нужно, но это до тех пор, пока дом маленький)
              • 0
                Ну мне для 6х9, два этажа, суммарная площадь около 100 квадратов, за глаза двух линий для управления освещением. Одна — дом, вторая — улица. То бишь по комнатам обычные выключатели, а в щитке одно реле, которое освещение во всем доме гасит. Было бы квадратов 200-300, тогда да, а так — что телефон/планшет найти, что до выключателя дотопать :) Мне по сути дела требуется только полное выключение, когда последний обитатель из дома выходит.
                Вот с отоплением да — на каждый обогреватель независимое управление.
                • +1
                  Согласен. У меня как раз случай с большим домом и очень напрягает, когда гасишь свет, чтобы спать и видишь по квадрату от окна на земле, что на первом этаже кто-то забыл выключить свет.

                  С отоплением кстати интеграцию я пока не продумал (электрику только начал делать), это нужно краны врезать, а полипропеленовые под пайку с электро приводом я не встречал. От обычных кранов мы полностью постарались отказаться после нескольких протечек, там большая проблема с разным расширением, что убивает соединения за пару лет. Как у Вас планируется решить этот вопрос?
                  • 0
                    У нас нет газа, и если планируется, то в далеком будущем, т.к. дом в дачном товариществе. Жить планируем с ранней весны до начала зимы. Так что у нас без вариантов — отопление электричеством, т.е. кондей (или два кондея) и конвекторы, плюс печь-камин.
                    Поэтому управлять мне проще — обогревать кондиционерами (они в этом плане очень выгодны), если слишком холодно для них или кондеи не справляются, то включаем нужное количество конвекторов. Если есть дрова, то топим печь, а автоматика включает электрическое отопление по необходимости.
                    По идее надо еще сам дом сразу в плане энергоэффективности планировать — материал выбирать, тощину стен, мостики холода исключать, устраивать систему подогрева внешнего воздуха за счет земли и т.п. У нас из арболита дом, по отзывам многим хватает вообще только теплых полов для обогрева.
    • 0
      Я бы с радостью, НО
      В ардуине убобно большое количество цифровых и аналоговых GPIO и готовые библиотеки для всех датчиков дисплеев и прочей периферии. Писать ВСЁ с нуля на каком нибудь Питоне это совсем ад…
      • 0
        Все можно сделать на 1-wire. По нему и датчики опрашиваем и релешки дергаем, а при желании и нужное количество экранов подключаем. При желании — вытаскиваем сколько нужно GPIO при помощи USB-GPIO модулей, хотя DS2413 позволяет те же задачи решить. С аналоговыми портами — не знаю, в своем проекте я пока не понял нужны они мне или нет, так что не изучал этот вопрос.
        А софтовая часть — хоть на шелле, плюс простая веб-морда. Или как вариант — Majordomo (или подобные готовые системы), но у TP-Link может не хватить ресурсов под него, там все-таки полноценный LAMP требуется. По крайней мере пока я свою систему продумывал — встречал в сети пару проектов и на маршрутизаторах. Тут скорее кто к чему привык :)
        • 0
          К сожалению для 1-wire это всёже 2 провода тянуть и на самом деле очень мало перефирии соввместимо с этим протоколом, вернее её всего две: датчик температуры и выключатель и всё
          Да видел Ваш пучёк проводов. Для многих это физически неприемлемо и морально несовременно при том когда Х10 му уже 30 лет (почти как мне)
          • 0
            Ээээ… Мой пучок? :) Я пока свой только проектирую. Когда имеется только коробка дома, собственно говоря без разницы тянуть только силовые провода или параллельно им кинуть слаботочку под 1-wire. Плюс, есть у меня мысль, что я на 1-wire навешаю только датчики, т.к. вешать модули с релешками в розетках смысла нет, проще к тем розеткам, которыми надо управлять, кинуть отдельные линии, а коммутировать все в щитке обычными или твердотельными реле.
            А у X10 есть свои ньюансы — у большинства устройств состояние нельзя узнать, плюс под наши 220В устройств кот наплакал, а те что есть — внутрь розетки не спрячешь.
            • –1
              Х10 не понацея, есть много вариантов готовых конечных устройств, без проводов и чтобы паять только БУ в центре и один раз.
              тут статья была с фотками про 1-wire вроде небольшая квартира, но зрелеще пучка страшное
              • 0
                Да, я как раз после той статьи подробнее почитал на тему 1-wire и решил, что нас как раз он и устроит. До этого думал на z-wave делать, но там WAC очень низкий из-за конского ценника.
            • 0
              Интернет кишит простыми рецептами как 12 долларовый любой x10 прибор на 110 вольт передеать просто на 220
  • 0
    Странно, что в автоматизации используют кучу разных стандартов, но не используют уже существующий snmp. Его бы вполне хватило получить данные от датчика и отправить команду на включение — отключение.
    • 0
      snmp протокол слишком высокого уровня, тут мы экономим провода и количиство железа, упрощая по максимуму конструкцию, но к сожление приходим к закрытым протоколам как Z-wave и Instion
  • –4
    подскажите статьи по сборке схем, с программирование у меня нормально, но вот в электро техники отстаю, не мог на днях сделать даже подключить 2 света диода, ни хватало мощности в 5 вольт))
    • –8
      да идите вы, у вас ток совета спрашивать. ток и можете + —
      • +2
        Пардоньте. =) Это за грамматику.
    • 0
      Подключение одного светодиода:
      arduino.ru/tutorials/blink

      Второй подключается аналогично.
      • –1
        я понимаю тут все с сарказмом, со света диодами, моторчиками… я разобрался, мне мы бот как более сложные схемки собирать, клавиатуру подключать, света куб… ну так чтоб поподробней… если есть
  • 0
    В свое время купил несколько DHT22 перепутав 1-wire и single wire и долго недоумевал почему же они не определяются моим usb-1wire адаптером.

    Пока ардуина не пришла, думаю прокладывать провода, скажите их можно садить на один провод несколько?
    Или надо будет на каждый датчик использовать свой порт?
    • 0
      DHT22 нельзя садить несколько на один провод, может есть к-то нестандартный хак, которого я не видел, но по умолчанию у них нет индивидуальных адресов и тд чтобы так делать
    • 0
      с DHT22 и с многим остальными(не всем изза 16кб памяти и малого GPIO) с успехом может стравится и MSP430 LaunchPad которых аж два доставляют за неск дней и всего за $4.30 даже в России habrahabr.ru/post/160769/

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