Выпуск №3. Ethernet контроллер Megad-328


Ethernet контроллер Megad-328

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

Итак, если вкратце, купил я в 2013 году такой MegaD-328 ethernet контролер.Ethernet controller MegaD-328

     Краткая справка с сайта «https://ab-log.ru»:

{начало отрывка}

Модуль MegaD-328 является устройством, которое может работать как в децентрализованной схеме, так и в централизованной. Например, к одному устройству у нас подключены кнопки и светильники. Пользователь посредством Web-интерфейса настраивает устройство таким образом, чтобы при нажатии на кнопку, включались те или иные светильники или другие подключенные приборы. При этом существует возможность удаленного управления подключенными нагрузками и изменения логики работы с помощью встроенного в MegaD-328 Web-интерфейса.

Когда же в системе есть сервер, в котором заложены все интеллектуальные алгоритмы, MegaD-328 при нажатии на кнопку сообщает об этом событии ему и внимательно слушает ответ. Если сервер приказал включить или выключить те или иные потребители, MegaD-328 незамедлительно выполняет эти команды.
Сервер также по собственной инициативе (по заложенному в программе алгоритму) или по команде пользователя может послать любую команду для включения и выключения приборов. Таким образом, пользователь может работать через свой iPhone, HTC или Samsung с красивым Web-интерфейсом сервера, а сервер в свою очередь будет передавать команды устройствам MegaD-328 по сети Ethernet.

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

Иными словами логику устройства можно выразить так: есть сервер - работаем с ним, нет сервера - работаем сами. Пользователь всегда может рассчитывать на интеллектуальное управление со стороны сервера, но при возникновении аварии ключевые функции по-прежнему будут работать."

{конец отрывка}

Продолжаю статью…

 

Подключил к портам (3-6) на вход 4 инфракрасных датчика Pyronix COLT XS

Выставил на портах режим срабатывания датчика на «R», т.к. при срабатывании датчика низкий сигнал. (R - устройство реагирует только при размыкании контакта/выключателя.)

При срабатывании датчика запускается скрипт megad.php, который  делает запись в базу данных mySql, расположенную на микрокомпьютере raspberry Pi, где установлен также веб-сервер nginx, который собственно и выполняет скрипт megad.php, а также другие о которых напишу ниже.

 

На скринах ниже видно, что база состоит из одной таблицы с 4-мя полями, в которую записывается время и порт при срабатывании датчиков движения.

Вот код megad.php

$time_evening)
//{ 
//if (!mysql_query($sql,$link))
//  {
//  die('Error: ' . mysql_error());
//  }
//echo "9:1";}

// else if ( $_GET['pt'] == "6" AND $date_sql>$time_evening)
//{ 
//if (!mysql_query($sql,$link))
//  {
//  die('Error: ' . mysql_error());
//  }
//echo "10:1";}

mysql_close($link);	
?>

В планировщике Cron raspberry-Pi выставил расписание на запуск скрипта shutdown.php каждые 10 минут

 

Скрипт shutdown.php делает обход всех портов выхода и считывает статус (включен/не включен). Если включен, то смотрит на время последней записи в базе данных  датчика движения с которым связан порт выхода и сравнивает с текущим временем. Если это время больше 5 минут (можно написать 10), то система понимает, что в комнате никого нет и отключает свет.

код shutdown.php

В настоящий момент сервер базы данных не доступен, поэтому 
            корректное отображение страницы невозможно.

" ); exit(); } function Off_light($dname, $dcnx, $file_for_get, $select_for_port_limit, $delete_for_port, $select_for_port, $light_off_adr, $insert_for_OnPort) { //Дата на 10 минут раньше от текущей $date_sql=date("Y-m-d H:i:s",mktime(date("H"),date("i")-5,date("s"),date("m"),date("d"),date("Y"))); if (!@mysql_select_db($dname, $dcnx)) { echo( "

В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.

" ); exit(); } // Проверяем какие порты включены $lines7 = file($file_for_get); // Осуществим проход массива и выведем содержимое в виде HTML-кода вместе с номерами строк. foreach ($lines7 as $line_num => $line) { $arr7=htmlspecialchars($line); echo $arr7; } if($arr7==="ON") { //Проверяем время последнего срабатывания датчика и если есть результат то обрабатываем $ath7 = mysql_query($select_for_port_limit); if($ath7) { $num_rows7 = mysql_num_rows($ath7); if ($num_rows7>0) { $author7 = mysql_fetch_array($ath7); echo "
id = ".$author7['id']."
"; echo "port = ".$author7['port']."
"; echo "status = ".$author7['status']."
"; echo "date = ".$author7['timelast']."
"; echo "time=".$date_sql; if ($author7['timelast']<$date_sql) // echo $date_sql; { $delresult7=mysql_query($delete_for_port); $result7=mysql_query($select_for_port); while ($row7 = mysql_fetch_array($result7, MYSQL_ASSOC)) { echo "
id = ".$row7['id']."
"; echo "port = ".$row7['port']."
"; echo "status = ".$row7['status']."
"; echo "date = ".$row7['timelast']."
"; } $handle7 = fopen($light_off_adr, "r"); echo $handle7; } } //Если нет записей этого датчика и порт включен, то не выключаем и добавляем одну запись else { echo "
Порт".$pt ." включен, но запись в БД не найдена
"; if (!mysql_query($insert_for_OnPort,$dcnx)) {die('Error: ' . mysql_error());} echo "Запись " .$pt ." добавлена"; } } } $res="Функция по порту ".$pt." отработана"; return $res; } for ($pt = 7; $pt <= 13; $pt++) { if($pt==7) { $arg1='http://192.168.0.14/sec/?pt=7&cmd=get'; //получаем значение порта "on" или "off" с сервера Ethernet-controler $arg2="select timelast from light where port=3 ORDER BY id DESC LIMIT 1"; //sql запрос последнего значения времени записи порта датчика 3, связанного с портом выхода 7(выключателем) $arg3="delete from light where port=3"; //sql запрос на удаление всех записей датчика 3 $arg4="select * from light where port=3"; //sql запрос записей по порту датчика 3 $arg5="http://192.168.0.14/sec/?cmd=7:0"; //команда серверу Ethernet-controler на выключение порта 7 $arg6="INSERT INTO light (port, status) VALUES(3,1)"; //если порт включен и записей датчика нет, срабатывает этот запрос, который вводит одну запись, чтобы при следующем запуске этой функции свет выключился, если время простоя датчика больше указанного //echo

; echo Off_light($dbname, $dbcnx,$arg1, $arg2, $arg3, $arg4, $arg5, $arg6); } else if($pt==8) { $arg1='http://192.168.0.14/sec/?pt=8&cmd=get'; $arg2="select timelast from light where port=4 ORDER BY id DESC LIMIT 1"; $arg3="delete from light where port=4"; $arg4="select * from light where port=4"; $arg5="http://192.168.0.14/sec/?cmd=8:0"; $arg6="INSERT INTO light (port, status) VALUES(4,1)"; //echo

; echo Off_light($dbname, $dbcnx,$arg1, $arg2, $arg3, $arg4, $arg5, $arg6); } else if($pt==9) { $arg1='http://192.168.0.14/sec/?pt=9&cmd=get'; $arg2="select timelast from light where port=5 ORDER BY id DESC LIMIT 1"; $arg3="delete from light where port=5"; $arg4="select * from light where port=5"; $arg5="http://192.168.0.14/sec/?cmd=9:0"; $arg6="INSERT INTO light (port, status) VALUES(5,1)"; //echo

; echo Off_light($dbname, $dbcnx,$arg1, $arg2, $arg3, $arg4, $arg5, $arg6); } else if($pt==10) { $arg1='http://192.168.0.14/sec/?pt=10&cmd=get'; $arg2="select timelast from light where port=6 ORDER BY id DESC LIMIT 1"; $arg3="delete from light where port=6"; $arg4="select * from light where port=6"; $arg5="http://192.168.0.14/sec/?cmd=10:0"; $arg6="INSERT INTO light (port, status) VALUES(6,1)"; //echo

; echo Off_light($dbname, $dbcnx,$arg1, $arg2, $arg3, $arg4, $arg5, $arg6); } } mysql_close($dbcnx); ?>

 

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

Разрабатывался для планшета и имел такой внешний вид:

Код index.html



  
    
    
	
	  
    Система "Умный дом"

    
    

    
    
    
  
 
 
 
    

  

Привет, я в Разделе Охрана.

Привет, я в Разделе Гидропоника.

Тут будет ответ от сервера


Код Ajax.php



 

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

Вместо Ethernet-controller можно использовать Ардуино с Ethernet или Wi-fi модулем

Файлы для скачивания:

Скачать www.zip

Наверх


Добавить комментарий (через VK):

Добавить комментарий к статье могут только зарегистрированные пользователи: