Pull to refresh

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

Reading time 17 min
Views 212K

В последнее время здесь много пишут о домашней автоматизации и умных домах. Хотел бы поделиться своим опытом, общими соображениями и конкретным проектом. Эта статься будет полезна тем кто просто хотел бы знать чем может быть в принцыпе полезен/удобен умный дом а также тем, кто хотел бы управлять(или просто наблюдать) с любого устройства с браузером(телефон, планшет, читалка, 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.
Tags:
Hubs:
+60
Comments 40
Comments Comments 40

Articles