Допиливыем Умный дом Ноолайт при помощи Mikrotik 0



Система «Умный дом Ноолайт» — одно из лучших решений на рынке домашней автоматизации на сегодня. Я являюсь инженером ИТ, имею опыт по внедрению систем автоматизации на различный объектах жилой и офисной инфраструктуры. Мне есть с чем сравнивать, так как мне довелось работать с различными конкурирующими системами, такими как 1-wire, bechkhoff, zigbee, x10, KNX.

умный дом Ноолайт + Mikrotik

Уточню, я не считаю систему Ноолайт — лучшей системой автоматизации помещений. Считаю систему оптимальной в сегменте домашней и малой офисной автоматизации. Главные преимущества системы:
— цена внедрения
— полнота компонентной базы
— стоимость обслуживания

Как и любой продукт, система имеет слабые стороны. К таковым я отношу:
— слабые возможности контроллеров
— точность датчиков
— отсутствие обратной связи контроллер — пользователь

Сегодня я бы хотел поговорить о способах устранения недостатков системы на примере типового сценария «гигростат».

Мы ожидаем что «умный дом» будет поддерживать оптимальный микроклимат автономно. Микроклимат жилых помещений, прежде всего, подразумевает такие параметры, как температура и влажность жилища. Для поддержания оптимальной влажности применяются гигростаты. Типовой сценарий работы гигростата: когда в помещении поднимается влажность, автоматически включается вытяжка. При достижении оптимальной влажности вытяжка выключается. Таким образом, дом всегда сам знает, когда и что делать для поддержания комфортной влажности, в теории…

На первый взгляд для реализации данного сценария достаточно просто указать пороговые значения датчиков влажности для гигростатов и забыть о проблеме. К сожалению, это не так. В бытовых датчиках влажности, закономерно используют шкалу относительной влажности воздуха, которая отражает эквивалентное отношение массовой доли водяного пара в воздухе к максимально возможной при данной температуре в процентах. Мы все со школы помним термокинетическую теорию, которая увязывает точку росы, температуру, влажность и давление в одну систему. А это означает, что субъективное ощущение влажности воздуха для человека в единицах измерения будет различаться в зависимости от таких переменных как:
— абсолютная влажность воздуха
— атмосферное давление
— температура на улице
— работа систем поддержки микроклимата в помещении

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

image

С одной стороны, можно установить достаточно высокое пороговое значение влажности в гигростатах, что исключит ошибочные срабатывания. Такой подход приведёт к тому, что вытяжка в помещении будет включаться с большой задержкой, а иногда, когда на улице жарко и сухо, может вообще не включиться. Мы же хотим, чтобы вытяжка включалась сразу, как только пользователь включил смеситель душа либо с минимальной задержкой. Это означает, что пороговое значение для срабатывания датчика влажности должно быть лишь на пару процентов выше текущего. Но, если мы выставляем низкое пороговое значение, появляются ложные срабатывания гигростатов, например, из-за того, что на улице пошел дождь, изменилась температура или давление. В реальных условиях никому не нужен гигростат, настройки которого приходится менять несколько раз в месяц.

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

Контроллеры Ноолайт, конечно, не имеют возможности реализовать такую логику работы. Но решить задачу все же можно, используя API контроллера. Ради такой простой задачи запускать дополнительное устройство в сети будет неразумно. Благо, у меня, как у всякого уважающего себя ИТ-шника, в локальной сети нашелся роутер фирмы Mikrotik.

Первой идеей было выделить на роутере партицию, развернуть CentOs, установить пакеты httpd, php, crontab, написать 40 строк сценария и получить результат.

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

Привожу листинг скрипта донастройки контроллера, reset_rhsensors.rsc с комментариями в коде

# Переменная: на сколько % увеличить пороговое значение гигростата относительно контрольного датчика 
:local sensMaxShift  4;
# Переменная: адрес контроллера Ноолайт PR-1132 в локальной сети
:local pr1132addr "172.22.22.2";

# Переменные: устранение погрешностей датчиков гигростатов относительно контрольного датчика
:local sens1rhShift -2;
:local sens2rhShift  3;

# Записываем на диск XML-файл с показаниями всех датчиков контроллера
/tool fetch url=("http://".$pr1132addr."/sens.xml") mode=http
:local filename;
:local filedata;
# Считаем файл с диска роутера в переменную $filedata
:set filename "sens.xml";
:set $filedata [/file get $filename contents]

# Мы знаем, что контрольный датчик является 3-м в списке, значит его значение находится между тегами <snsh2> и </snsh2>
# Записываем значение контрольного датчика в целочисленную переменную sens3Value
:local lineBegin 0;
:local lineEnd 0;
:local sens3Value "";
:set lineBegin ( [:find $filedata "<snsh2>" 0 ] + 7 ) ;
:set lineEnd [:find $filedata "</snsh2>" 0 ] ;
:set sens3Value [:pick $filedata $lineBegin $lineEnd] ;

# Рассчитываем правильное пороговое значение гигростатов и записываем в переменную hygroValue
:local hygroValue 0;
:set hygroValue ( $sens3Value + $sensMaxShift ) ;

# Для каждого гигростата уточняем пороговое значение датчика влажности с учетом погрешности датчика и формируем HTTP-запросы к API для корректировки пороговых значений гигростатов в переменные req1, req2
:local req1 ("http://".$pr1132addr."/hygro1.htm\?hygsmd=1&hygssns=1&hygsch=21&hyghst=");
:local req2 ("http://".$pr1132addr."/hygro2.htm\?hygsmd=1&hygssns=2&hygsch=3&hyghst=");
:set req1 ( $req1 . $hygroValue + $sens1rhShift ) ;
:set req2 ( $req2 . $hygroValue + $sens2rhShift ) ;

# Отправляем HTTP-запросы с обработкой возможных ошибок
:do {
  /tool fetch url=$req1 mode=http keep-result=no
} on-error={ :put ( "on-error due 302: " . $req1 ) };
:do {
  /tool fetch url=$req2 mode=http keep-result=no
} on-error={ :put ( "on-error due 302: " . $req2 ) };


# Воспроизвести звук, чтобы уведомить о том, что скрипт успешно отработал (необязательная часть)
 :for j from=1 to=4 step=1 do={
   :for i from=2000 to=50 step=-400 do={
     :beep frequency=$i length=11ms;
     :delay 11ms;
   }
   :for i from=800 to=2000 step=400 do={
     :beep frequency=$i length=11ms;
     :delay 11ms;
   }
 }

Привожу листинг файла со значениями датчиков, sens.xml, на контроллере Ноолайт PR-1132
<?xml version="1.0" encoding="ISO-8859-1"?>
<response> 
        <snst0>26,7</snst0> 
        <snsh0>33</snsh0> 
        <snt0>0</snt0> 
        <snst1>25,5</snst1> 
        <snsh1>42</snsh1> 
        <snt1>0</snt1> 
        <snst2>24,5</snst2> 
        <snsh2>34</snsh2> 
        <snt2>0</snt2> 
        <snst3>-</snst3> 
        <snsh3>-</snsh3> 
        <snt3>1</snt3> 
</response>

Если вы смотрели код, наверняка обратили внимание, что в коде имеет место блок устранения погрешности датчиков влажности. Увы, если в одном месте разместить все датчики, увидим, что значения датчиков будут расходиться до 5%. Более точно выяснить значение относительной влажности датчиками Ноолайт невозможно. Считаю, что для бытовых целей таковая точность достаточна. Данную погрешность можно простить, учитывая стоимость компонентов системы.

Конечно, у специалиста отрасли могут возникнуть гомерические рассуждения о том, что полноценная автоматизация должна быть без костылей, да на отказоустойчивой базе, да на шине вроде beckhoff или knx. Я со всем согласен. Но в то же время вижу, что Ноолайт дает инструментарий который позволяет решать задачи малой автоматизации, надежными гибкими средствами со стоимостью владения стремящейся к нулю. Часто, именно таких решений ожидают от нас заказчики.

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

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (0):