ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Разработка домашнего сайта

24/11/2008 17:11:17

Возможно, данная статья устарела.
С развитием домашней автоматизации все меньше возникает потребность в разработке собственных решений и все больше появляется готовых коробочных продуктов. Стоит обратить внимание на такие системы как Majordomo, openHAB, ioBroker, HomeAssistant и многие другие.
Все новые статьи

Гюльчатай, открой личико

В предыдущей статье "Сервер для Умного Дома" я рассказывал, что в качестве сервера выбрал Debian Linux, а в качестве интерфейса общения с пользователем, то есть со мной, HTTP-технологию или попросту Web. Преимущества очевидны. Такой интерфейс доступен с любого компьютера домашней сети, планшета, смартфона, а также из Интернета. Нет необходимости что-то устанавливать на клиентском компьютере. Бесплатные, достаточно мощные средства разработки серверного ПО, такие как язык программирования PHP, СУБД MySQL, мощный сервер Apache.

В рамках данного материала не хотелось делать лекцию для новичков в PHP. Вся документация доступна на сайте www.php.net
Здесь я расскажу о наиболее общих подходах к разработке.

Прежде всего, нужно сказать, что Web-сервер домашней автоматизации - это всего лишь интерфейс, а не основное ядро системы. Ядром системы в моем случае является комплекс скриптов, работающих постоянно или запускаемых по расписанию, через cron, которые записывают результаты своей работы в базу данных. Например, каждые 5 минут запускается PHP-скрипт, который опрашивает все датчики температуры и записывает полученные данные в соответствующие таблицы БД. Программы, которые запущенны постоянно - это, например, скрипт-сервер дискретных датчиков 1-wire, скрипт управления отоплением, скрипт управления аэрацией, программа для видеонаблюдения, сервер 1-wire сети owfs, сервер синтеза речи и т.д. Скрипты, написанные для Web нужны для отображения состояния систем, модулей и управления "ядерными" программами и процессами.

В своей вводной статье я написал, что постараюсь максимально использовать накопленный опыт и результаты работы других людей, поэтому когда речь идет о разработке Web-сайта, коим является наш Web-интерфейс, удобно использовать какую-нибудь готовую систему управления информацией, иначе CMS, иначе "движок". Таких систем в Интернете масса, как открытых, так и коммерческих. Я взял одну из них, которая позволяет легко управлять разделами и документами сайта, имеет встроенный DHTML-редактор (похожий на Word), гибкую систему управления табличными данными. Последнее мне было особенно важно, так как система автоматизации дома генерирует, обрабатывает, учитывает множество параметров и эти данные нужно хранить в БД. Можно создавать таблицы руками (посредством phpMyAdmin), но для этого нужно иметь некоторые базовые знания реляционных СУБД и это достаточно неудобно. Выбранная мною система позволяет в человеко-ориентированном виде создавать любые таблицы, связывать их с разделами и документами, легко редактировать и направлять данные из генерирующих скриптов в эти таблицы.

 

Скриншот CMS - редактирование табличных данных. Показания приборов Скриншот системы управления содержанием

 

Таким образом у меня появилась возможность отображать любые данные на своем Web-сайте. Однако работа с Web-интерфейсом в обычных обстоятельствах отличается от работы с Desktop-приложением. При нажатии какой-либо кнопки или ссылки Web-страница как правило перезагружается. Перезагрузка страницы происходит не мгновенно, особенно если на странице присутствует много информации и графики. Это неудобно. Также неудобно обновлять всю страницу целиком, когда нам нужно обновить значение одной единственной цифры... Но выход есть и заключается он в использовании при программировании Web-сайта Java-script или библиотек, построенных на этом языке, а также технологии, получившей название AJAX. Первая библиотека, которая попалась под горячую руку называлась jQuery. Из описания на сайте мне показалось удобным ее использование и я стал применять ее для разработки своего интерфейса.

Использовать jQuery достаточно просто. Нужно скачать с сайта jquery.com саму библиотеку и положить ее в папку, где расположены файлы веб-сайта. Далее простой пример того, как я отображаю значение температурного датчика.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

$(document).ready(
function()
{
    $.get("data.php?ow_read=temp_in", function(data){$("#temp_in").html(data);});
})
</script>                                                              
</head>
<body>
Температура в доме: <span id="temp_in" style="font-size:24pt;font-weight:600;color: #b11111"></span>
</body>
</html>

В данном примере видно, что данные предоставляются скриптом data.php, который обращается к БД и отображает последнее значение температуры, записанное в таблицу. Параметр ow_read скрипта определяет датчик, значение которого нужно вывести.
С помощью такого кода на страницу подгружаются данные из скрипта data.php при загрузке страницы. Но данные не статичны, а значит их нужно менять. Для этого я добавил следующий код

var timer = window.setInterval(
function()
{ $.get("data.php?ow_read=temp_in&"+Math.random(), function(data){$("#temp_in").html(data);}); }, 35000);

Math.random() в параметрах скрипта нужен для того, чтобы значения не кешировались.

А как же внешний вид?

Любой интерфейс состоит не только из функционального программного кода, но и из некоторого графического представления, внешнего вида, дизайна. Интерфейс должен быть понятным, удобным в работе, а в моем случае еще и легко изменяемым, расширяемым, ну и конечно более-менее красивым. Для системы автоматизации "Умный дом" на мой взгляд наиболее отвечает этим требованиям блочно-колоночная организация Web-интерфейса. Например, один блок или группу блоков можно задействовать для отображения информации с камер наблюдения, другой блок для отображения работы системы отопления, третий для индикации состояния устройств или энергопотребления. Современная реальность накладывает свои требования к разработке сайта для Умного Дома. Набирают популярность мобильные средства коммуникации, такие как смартфоны, планшетные пк, нетбуки.

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

а) взять за основу разрешение экрана 1024х768 точек
б) разработать понятную навигацию с возможностью однозначного выбора нужного пункта меню пальцами
в) Применить для отображения ключевых данных крупные шрифты и иконки

На мой взгляд для создания полноценного Web-интерфейса Умного Дома очень хорошо подходят следующие известные фреймворки:

960 Grid System
jQuery UI

960 Grid System состоит из набора CSS-файлов, которые задают колоночную организацию интерфейса.
jQuery UI будем использовать для различного рода виджетов, организации навигации, а также для создания тем оформления.


Посмотреть Демо-версию интерфейса он-лайн

Огромное преимущество данного решения заключается в том, что нет необходимости нам, как разработчикам глубоко разбираться в технологиях HTML и CSS, а, кроме того, цветовая гамма фона, размер и цвет шрифтов, закругления обрамлений блоков и многое другое уже подобраны и сделаны за нас. Нужно только выбрать понравившуюся тему для jQuery UI. В моем варианте используется тема redmond.

Для организации верхнего меню использует jQuery UI Tabs (закладки). При смене закладок содержимое подгружается динамически с помощью технологии Ajax.

Не просто, а очень просто

Главная HTML-страница. Подгружаем CSS от Grid 960 System, библиотеки jQuery, jQuery UI, активирует Tabs и прописываем меню.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Система Управления Домом</title>
<link rel="stylesheet" href="css2/reset.css" />
<link rel="stylesheet" href="css2/text.css" />
<link rel="stylesheet" href="css2/960.css" />
<link rel="stylesheet" href="css2/demo.css" />
<link type="text/css" href="css2/redmond/jquery-ui-1.8.14.custom.css" rel="stylesheet" />
<scripT type="text/javascript" src="js2/jquery-1.5.1.min.js"></script>
<scripT type="text/javascript" src="js2/jquery-ui-1.8.14.custom.min.js"></script>
<scripT type="text/javascript" src="js2/jquery.timers.js"></script>
<scripT type="text/javascript">
    $(function()
    {
        $('#tabs').tabs(
        {
            ajaxOptions: {
                cache: false,
                error: function( xhr, status, index, anchor ) {
                    $( anchor.hash ).html(
                        "Couldn't load this tab. We'll try to fix this as soon as possible. " +
                        "If this wouldn't be a demo." );
                }
            }
        });

        var prevTab = '#ui-tabs-1';

        $('#tabs').bind('tabsselect', function(event, ui) {
            $(prevTab).empty();
            $(prevTab).stopTime();
            prevTab = ui.panel;
        });

        $.get("ab-data.php?p=rtop", function(data){$("#rtop").html(data);});

        $(document).everyTime(60000, function(i) {
            $.get("ab-data.php?p=rtop", function(data){$("#rtop").html(data);});
        });

    });
</script>
</head>

<body>
<div id="tabs" style="width:980px;margin-left: auto; margin-right: auto;">

    <ul>
        <li><a href="ab-pages.php?p=home"><span style="display:inline-block;" class="ui-icon ui-icon-home"></span> Главная</a></li>
        <li><a href="ab-pages.php?p=cams"><span style="display:inline-block;" class="ui-icon ui-icon-video"></span> Камеры</a></li>
        <li><a href="ab-pages.php?p=light"><span style="display:inline-block;" class="ui-icon ui-icon-lightbulb"></span> Свет&nbsp;&nbsp&nbsp;</a></li>
        <li><a href="ab-pages.php?p=weather"><span style="display:inline-block;" class="ui-icon ui-icon-image"></span> Погода</a></li>
        <li><a href="ab-pages.php?p=climate"><span style="display:inline-block;" class="ui-icon ui-icon-gear"></span> Климат</a></li>
        <li><a href="ab-pages.php?p=systems"><span style="display:inline-block;" class="ui-icon ui-icon-wrench"></span> Системы</a></li>
        <li style="position:absolute;width:97%;margin-top:5px;text-align:right" id="rtop"></li>";

   </ul>

</div>
</body>
</html>

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

        $('#tabs').bind('tabsselect', function(event, ui) {
            $(prevTab).empty();
            $(prevTab).stopTime();
            prevTab = ui.panel;
        });

Это пожалуй единственная сложность, с которой я столкнулся при разработке. Но решение я нашел, а значит вам будет легче. Проблема тут в следующем. Каждая страница в UI Tabs подгружается динамически: Камеры, Свет, Погода и т.д. На каждой странице присутствует свой код, который относится к контенту и автоматическому обновлению блоков. После переключения с одной закладки на другую содержимое предыдущей страницы остается в памяти. Таким образом получается две неприятные штуки. Во-первых, в фоновом режиме продолжает работать js-код обновления данных, нагружая сервер запросами, тогда как мы можем находится совершенно в другой закладке, а, во-вторых, мы не можем на разных страницах использовать одинаковые id и class для похожиж HTML-элементов (так, к примеру, график температуры выводится в 3-х различных закладках), так как они начинают конфликтовать друг с другом. В качестве решения использован приведеный выше код, который очищает из памяти HTML-содержимое и останавливает все запущенные js-таймеры при смене страницы.

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

<scripT type="text/javascript">

   $(document).ready(
   function()
   {
      var tab_index = $('#tabs').tabs("option", "selected") + 1;

      $('#ui-tabs-' + tab_index).everyTime(50000, function(i) {
           $('#monitor1').attr('src', 'page.php?s=6&Photo_Name=snap/Monitor1.jpg&Photo_Width=460&Photo_Quality=95&nc'+Math.random());
           $('#monitor2').attr('src', 'page.php?s=6&Photo_Name=snap/Monitor2.jpg&Photo_Width=460&Photo_Height=368&Photo_Quality=95&nc'+Math.random());
      });
  });

</script>

<div class="grid_6">
<img id="monitor1" src="page.php?s=6&Photo_Name=snap/Monitor1.jpg&Photo_Width=460&Photo_Quality=95" width="460" height="368">
</div>

<div class="grid_6">
<img id="monitor2" src="page.php?s=6&Photo_Name=snap/Monitor2.jpg&Photo_Width=460&Photo_Height=368&Photo_Quality=95" width="460" height="368">
</div>

<div class="clear"></div>
<br>

<div class="grid_6">
   <div class="ui-corner-all ui-state-default">
      <span style="display:inline-block;" class="ui-icon ui-icon-play"></span>
      <a href="/zm/index.php?view=watch&mid=1" target="_blank">Смотреть он-лайн</a>
   </div>
</div>

<div class="grid_6">
   <div class="ui-corner-all ui-state-default">
      <span style="display:inline-block;" class="ui-icon ui-icon-play"></span>
      <a href="/zm/index.php?view=watch&mid=2" target="_blank">Смотреть он-лайн</a>
   </div>
</div>

В данном примере хорошо видно, как удобно использовать Grid 960 System. В идеологии Grid960 вся страница делится на 12 колонок. Соответственно чтобы вывести содержимое в блоке, занимающем 6 колонок или половину страницы, достаточно прописать у DIV'а класс grid_6. Таким образом можно как угодно компоновать страницу в рамках двенадцати колонок. Например, 4 + 3 + 5 или 1 + 7 + 4 и т.д. Блок с классом clear прерывает верхнюю разметку колонок и начинает новую. То есть, если верхняя часть страницы у нас содержит, к примеру, контент в 2 колонки, то нижняя может содержать другое разделение. И таких частей на странице может быть сколько угодно.
Также в показаном примере видно как работает автоматическое обновление контента с помощью библиотеки jQuery Timers. В отличие от традиционного подхода с использованием функции setInterval в данном варианте удобно привязывать таймер к конкретным блокам на странице по их id.

Посмотреть как работает предложенный веб-интерфейс можно в Демо-версии.
В демо интерфейсе в закладке "Система" есть возможность изменить оформление (тему).

Теперь доступны также исходники демо-версии: ab-log-demo.zip
Исходники предназначены для ознакомления с принципами работы интерфейса и не содержат систему управления содержанием.
Также исходники не содержат скриптов, отвечающих за работу с датчиками и исполнительными устройствами. Это только интерфейс.

Краткая инструкция по установке:
1. Скачать архив и распаковать его в папку, доступную Web-серверу
2. В папке !sql_dump содержится дамп MySQL базы данных, который необходимо загрузить в БД
3. Отредактировать файл cadmin/db.php на предмет имени пользователя, пароля и имени БД.

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2018-08-07 09:45:15 | Andrey_B
dmitry, поправил.


2018-08-06 19:54:18 | dmitry sergeev
Кодировку вот тут сорвало - https:/www.ab-log.ru/demo/ В хроме и мозиле фигню показывает, а вот ие (проси Господи :-) кажет нормально.


2016-04-03 22:14:35 | ККК
Класс! Автору спасибо!


2015-01-03 15:46:19 | Andrey_B
Сергей, это вам нужно на наш форум. Там это легче обсудить и код не съедается.


2015-01-03 11:25:16 | Сергей
Ещё раз извините за мусор, но код не могу загрузить, сайт его "съедает".
Всё-же вопрос, как создать команду переключения порта в кнопке?


2015-01-03 11:16:55 | Сергей
Прошу совет от знающих людей, если конечно есть возможность коротко сформулировать ответ.
Делаю первые шаги в HTML, но уже и в них заблудился.
Думаю такой вопрос возникает у многих, так как всё начинается с малого.
Хочу сделать простейший код, создать кнопку на форме и чтобы при её нажатии произошло событие:
Переключение порта.
Через браузер запускаю :/192.168.2.230/sec/?cmd=13:2 Работает нормально.
На форме написал код:
ПЕРЕКЛЮЧЕНИЕ
Работает, но впридачу загружается новое окно которое мне не нужно.
А вот код переключения в кнопке(button) никак не удаётся сконструировать.
Пытался разобраться в коде Web приложения "Panel", но ничего пока не получилось, там всё пока слишком сложно для меня.
Хотя давно знаком с Clipper,FoxPro,Delphi. Но создание Web приложений на мой взгляд сильно от них отличается.
Перерыл кучу обучающих сайтов, но всё в пустую.


2014-08-22 01:07:16 | Алексей
По поводу основного кода рекомендовал бы локализовать таймеры и не применять ко всему документу. А еще лучше если сделать отдельно табы с ajax загрузкой данных при их нажатии в один div а не в несколько как сделанно в jquery ui. Поставить унифицированный таймер для обновления. Упростится код и страница заметно "похудеет"


2014-08-22 00:54:15 | Алексей
По поводу шаманского кода посмотрите событие activate( event, ui ) плагина jquery ui.
$( ".or" ).tabs({
activate: function( event, ui ) {
oldTab.html("");
}
});


2014-06-06 15:36:39 | Antti
Андрей, добрый день. Подскажи пожалуйста, что необходимо поменять в коде


$('tabs').bind('tabs', function(event, ui) {
$(prevTab).empty();
$(prevTab).stopTime();
prevTab = ui.panel;
});

Чтобы он корректно работал не на вкладках, а на отдельных страницах, пробовал по всякому, не могу остановить таймеры при переходе с одной страницы на другую.


2014-01-20 12:26:03 | Andrey_B
dombt, нет никакой коммерческой тайны. Только там по-моему и так все понятно из содержимого. Если у вас будут вопросы по конкретным таблицам - могу ответить.


2014-01-19 22:41:15 | dombt
Здравствуйте!
Спасибо за ответ.
Извините за назойливость, но Вы ничего не ответили по базам данных .
Хотелось бы узнать назначение таблиц. Или эта информация коммерческая?
Спасибо.


2014-01-14 17:06:42 | Andrey_B
dombt, в данный момент я использую собственную CMS. В разделе "Демо-интерфейс" вы найдете архив. Там все исходники, включая исходники CMS.


2014-01-13 13:00:41 | dombt
Добрый день!
Очень понравилась Ваша разработка.Меня заинтересовал вопрос разработки WEB интерфейса.
У меня есть несколько разрозненных модулей -простенькая метеостанция,управление газовым котлом ,видео наблюдение,управление поливом и т.д.
Стоит задача объединения всего этогою Хочу разработать WEB интерфейс наподобие Вашего.
Вы пишете:"удобно использовать какую-нибудь готовую систему управления информацией, иначе CMS, иначе "движок". Таких систем в Интернете масса, как открытых, так и коммерческих. Я взял одну из них, которая позволяет легко управлять разделами и документами сайта, имеет встроенный DHTML-редактор (похожий на Word), гибкую систему управления табличными данными."
Если не секрет какую?
Нельзя ли получит краткое описание БД
Спасибо


2013-09-10 20:17:45 | Илья
Ставлю на windows server 2012 r2 64bit, Apache : 2.4.4 MySQL : 5.6.12 PHP : 5.4.12 PHPMyAdmin : 4.0.4 SqlBuddy : 1.3.3 XDebug : 2.2.3, Базу я смог загрузить, но сайт не показывается выводит одни ошибки.


2013-08-26 12:01:48 | Andrey_B
Илья, так ведь процесс установки зависит от множества факторов. На разных ОС он разный.


2013-08-17 17:48:30 | Илья
Добрый день, а можете сделать подробное видео, как правильно поставить весь веб интерфейс, поскольку у меня не получается загрузить БД.


2013-04-24 15:31:51 | Mixman
Я правильно понял, что будет включена система управления содержанием? Еще больше жду публикации :)))


2013-04-24 10:52:21 | Andrey_B
Mixman, работа идет. В принципе многое уже сделано и в таком виде уже можно опубликовать. Думаю, совсем в ближайшее время смогу кое-что показать.
Сам интерфейс не поменяется, но все исходники будут переработаны под новую систему управления, которая также будет включена в архив.


2013-04-24 10:07:38 | Mixman
Когда ждать новый исходный код интерфейса? Каждый день захожу на эту страницу.


2013-01-30 10:58:09 | Andrey_B
Alexx, это вам надо в настройках PHP (php.ini) изменить значение "error_reporting "
Вот так: error_reporting = E_ALL & ~E_NOTICE
А вообще сейчас я готовлю новый код, там таких проблем не будет. Скоро выложу.


2013-01-29 21:04:29 | Alexx
Здравствуйте! Не подскажите? Распаковал файлы, залил дамп в бд, в итоге во всех блоках Notice: Undefined variable: s in T:homevirtualhome.rupage.php on line 683 Notice: Undefined offset: 0 in T:homevirtualhome.rupage.php on line 128 Notice: Undefined variable: res_text in T:homevirtualhome.rupage.php


2013-01-21 11:51:17 | Andrey_B
Денис, я использую собственную CMS. Скоро я опубликую исходные коды в рамках "демо интерфейса".


2013-01-20 20:21:36 | Денис
Здравствуйте, Андрей! Хотелось бы узнать какую CMS Вы используете в качестве движка для управления сайтом домашней автоматизации, если не секрет?


2012-10-17 14:06:20 | Виталий
Добрый день,Спасибо за Ваш сайт, это единственный реальный и живой сайт где я могу осуществить свою мечту,сделать Умный дом своими руками,Купил ноут, установил линукс ubuntu , установил проги ,базу данных, и здесьне совсем понял как дальше делать т.к. с базами не работал,если можно разьясните пож подробнее как установить Ваши исходники демо-версии: ab-log-demo.zip
Краткая инструкция по установке:
1. Скачать архив и распаковать его в папку??????(где ее найти), доступную Web-серверу
2. В папке !sql_dump содержится дамп MySQL базы данных, который необходимо загрузить в БД (как это сделать и с паролем не знаю как)
3. Отредактировать файл cadmin/db.php на предмет имени пользователя, пароля и имени БД
С уважением Ваш ученик Виталий


2012-09-27 12:31:29 | Andrey_B
Солнцеворот, механизм передачи команд физическим устройствам (датчикам, исполнительным устройствам) зависит от используемой технологии и разный для 1-wire, X-10, Ethernet и т.д. Соответствующие описания даны в статьях, посвященных этим технологиям. Программно опрос датчиков температуры у меня в отдельном скрипте (я его не раз приводил в том числе на форуме), работа с датчиками по принципу Conditional Search описана в статье про водоочистку. А вот для ключей (исполнительных модулей) есть отдельный скрипт-обработчик. Если нужно, я могу выслать свою реализацию.


2012-09-25 22:45:42 | Солнцеворот
Я невнимательно смотрел или действительно на сайте нет статьи о механизме непосредственно передачи команд на выключатели и датчики температуры?

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


2012-08-29 12:32:10 | Andrey_B
Нисколько не возражаю против такого подхода, просто у каждого программирующего человека есть свои предпочтения, привычки и "фишки", к которым он привык. ;)


2012-08-28 13:34:44 | Владимир
Да, оно немного сожрало мой код.


2012-08-28 13:33:17 | Владимир
Замечательная демка, долго ломал голову как организовать управление домом и решил взять её за основу.

Хочу позволить себе маленький комментарий, может Вы уже знаете. но всё же

у Вас в коде используется безумное количество раз echo и все разборки переменных идут используя if
почему бы для разбора параметров не использовать замечательную контрукцию switch case
а вместо того чтобы писать:

if(условие){
echo"текст";
echo"текст";
echo"текст";
}
и мучаться с кавычкаи и отсутствием подсветки в редакторе

не использовать

if(условие){ ?>

Здесь пишем то что буде выводиться по условию совершенно спокойно
не заморачиваясь на кавычки и прочее вставляя переменные при помощи а затем снова поставив скобку


2011-11-16 23:26:50 | Andrey_B
Олег, удобнее эти вопросы обсудить в форуме, поэтому регистрируйтесь. Там много интересного.
Записывать и одновременно транслировать в Интернет Zoneminder может. Для распознавания освещенности не обязательно видео, достаточно одного кадра в несколько минут.
На форуме я выкладывал почти все файлы демо-версии. Можете скачать там. Но это не продукт, который можно установить. Это просто набор файлов для ознакомления с кодом. Там нет моей специфической структуры БД и нет некоторых файлов для работы с моей БД.


2011-11-16 22:26:27 | Oleg
Андрей, еще раз спасибо за Ваш сайт, ибо с него я тоже себе начал изготавливать нечто подобное...
Есть пару вопросов, что не совсем я понял..
1. Видео-наблюдение. Хочу сделать что-то типа домофона, и вывод с камер, хотя бы 10-15 кадров/сек на планшетник (который будет в роли "головы", с него и будет по сути управление домом, он по wifi будет с серваком конектиться). Вообщем, можно ли в zoneminder, отдельно писать файлы для распознавания освещенности, лиц и одновременно выводить видео? Или может что посоветуете для этой реализации..?
2. Очень понравился сайт (демо-версия) Вашего дома.. Наверное с моей стороны очень нагло, но спрошу, исходники планируете выложить?

P.S. Спасибо за то что выложили.. но иногда по наглости и готовенького всего хочется :)
P.S. Полазил на Вашем Демо сайте, получается там не все демо? В частности пару раз клацнул включить гирлянду, и освещение уличное... показало что клацнулось... затем выключил за собой... так что проверьте.. чтобы там никто Вам "не наделал" дел...


2011-11-03 23:24:43 | Andrey_B
Петр, никакого ограничения нет. Но база данных наполняется очень быстро. Поэтому есть скрипт, который ночью (когда нагрузка на сервер минимальна) удаляет данные которые старше определенной даты. По разным типам данных эта дата разная. В среднем данные с датчиков хранятся от двух недель до месяца.


2011-11-03 01:14:55 | Петр
А у вас стоит какое либо ограничение строк в MySQL. я имею ввиду что когда количество строк достигает числа N, то строка записывается последней, а первая строка удаляется,


2011-10-15 12:44:22 | Andrey_B
Андрей, я не знаю как в данной ситуации можно сделать более подробное описание. В статье чего-то не хватает?
"Ничего не работает" - распространенный комментарий, на который однако невозможно дать адекватный ответ. На форуме есть ветки про Web-интерфейс - напишите там развернуто о своей проблеме, мы постараемся помочь.


2011-10-15 11:14:05 | Андрей
Все бы хорошо , но только не работает (точней я скорей всего что то не так делаю). Хотелось бы несколько более подробного описания.


2011-05-15 00:09:18 | Алексей
В начале хочу поблагодарить автора за такую проделанную работу в этой области.

Моё мнение по поводу cms. Выбор пал на MODx, в ней можно встраивать отдельные куски html и php кода, нет нужды каждый раз перемешать туда сюда скрипты. Все делается через веб интерфейс, так же легко прикрутить к нему Grid System и jquery.

Как куплю все детали, приступлю к реализации, о результатах отпишусь позже.


2011-03-18 13:12:43 | gtsx4444
Вот теперь получил, оказалось в спаме! Отвечу.


2011-03-18 12:55:05 | Andrey_B
Сергей99, я на сайте сделал форум, где и написал вам ответ. Так как тема, затронутая вами, весьма обширна, предлагаю вести обсуждение там.
Форум

gtsx4444, а я написал вам на почту письмо по поводу веб-камеры. Получали?


2011-03-18 00:22:14 | Сергей99
Благодарю за комментарий.
Говоря о костяке я имел ввиду именно основу отображения информации. Понятно что с технической точки зрения основа это датчики и исполнительные механизмы, а с программной - база данных.
С этими вопросами я худо-бедно разобрался. Модуль измерения температуры процессора есть, данные в таблицу по крону записывает, все работает. Как простой образец для изучения основ достаточно. Но вот с красявостями как раз затык вышел.


2011-03-17 21:51:20 | gtsx4444
Сергей99, позволю себе прокомментировать, мне кажется вы не совсем правы в том смысле, что костяком является веб-сайт. Все дело в том, что веб-сайт это лишь удобный интерфейс для взаимодействия с разными устройствами (датчиками, светом, котлом..). А ядро системы это база данных и обслуживающие ее утилиты сбора и анализа данных. Лично я начал создавать свой "умный дом" именно с этого: изучил возможность подключения устройств и сбора данных, когда это все готово и есть модули для интерпретации данных (на Perl, на другом языке или на PHP как у автора) можно делать вывод в веб-интерфейс. Он может быть предельно простым HTML с таблицами, так и основанный на AJAX с Grid System и т.д., это уже наведение красоты, что называется))
Думаю, еще Андрей добавит от себя.


2011-03-17 20:52:33 | Сергей99
Добрый день Андрей!
Хочу поблагодарить вас за замечательно наполненный сайт! Изучаю его с интересом и огромным желанием применить ваши наработки на практике. Недавно купил дом, есть желание оснастить его облегчающими жизнь свойствами.
Решил брать за основу ваши наработки поскольку сайт живой, постоянно пополняется и приблизительно подходит под мои желания увидеть реализацию умного дома.
В программировании я не профессионал, но общие представления и некоторый опыт затачивания программных продуктов под свои нужды имею.
Теперь о грустном. ))
Весь мой опыт основывается на Windiws - продуктах. Там свои подходы и свои мерки. В Линуксе все по-другому. Но где наша не пропадала? Влез с головой в линуксятину, стал понемногу разбираться в прикладном смысле. Вроде как получается слегка.
Поскольку за основу решил брать ваши наработки, начал разбирать вопрос создания домашнего веб-сайта, поскольку это тот костяк вокруг которого строится и расширяется система.
Стали возникать вопросы. Причем вопросы специфичные. Я абсолютно точно понимаю что вам меньше всего хочется проводить ликбез для начинающих. Тем более не совсем продвинутых. Я знаю где и как искать справку по базовым вопросам программирования, установке программ и работы с ОС. А посему такого рода вопросов задавать не буду. Но я споткнулся и уже который день не могу перешагнуть понимания принципа построения вашего домашнего сайта.
Вот смотрите. Никак не могу связать воедино сказанное в статье на этой странице. Есть CMS, она позволяет управлять содержанием и внешним видом страницы. Вы пишете что используете CMS от местной конторы. В сети валом CMS различных видов и сложности. Все они как правило заточены на бложики, ньюсы и форумы. В нашем случае это несколько неактуально.
Хорошо, дальше. Сделали страницу, отобразили, затем AJAX-ом меняем данные в некоем динамичном блоке не перегружая всю страницу. Здесь вроде все понятно.
Теперь Fluid 960 Grid System. Никак не пойму каким боком ее прикрутить. Вернее перестаю понимать в принципе как все работает.
Допустим создали с помощью CMS сайт, зашли на него, и в меню выбрали пункт о температуре. Должна быть показана страница с информацией о температуре приходящей с различных датчиков в реальном времени, некие графики по некоему временному интервалу и возможность выбирать интервал. Это так, в общем виде.
Так вот трудность в том, что я не могу понять что за что отвечает в вашем случае. Буду чрезвычайно ва благодарен если вы это проясните. Так же считаю что этот ответ будет интересен и полезен не только для меня, но и для других начинающих втягиваться в это дело.
Благодарю вас, удачи!


2011-01-17 23:58:37 | Виталий
Подскажите пожалуйста, из тех кто уже запустил сайт под умный дом какими CMS пользовались которые можно свободно скачать и добавляли еще какие мудули в CMS для нормальной работы?


2009-11-06 12:36:17 | Andrey_B
Александр, я выбрал CMS, созданную в одной из местных контор по разработке сайтов. Эта CMS хороша тем, что в ней реализован очень удобный механизм визуального создания и редактирования пользовательских таблиц, а также набор готовых PHP-функций для записи в эти сгенерированные таблицы данных. Таким образом я создал множество таблиц: для учета электроэнергии, газа, воды, температурных показателей, состояния электронных ключей. В этих же таблицах ведется журнал всех операций с 1-wire сетью, лог ошибок. Настройки системы отопления тоже тут же. Контуров несколько и у каждого контура свои параметры. Каждый контур представлен в отдельной записи. В общем, все модули системы хранят информацию в базе данных, созданной с помощью этой CMS. Готовое решение я не предлагаю, так как в принципе такими функциями обладают и другие CMS и каждый может адаптировать свое решение.


2009-11-06 09:12:08 | Александр
Скажите пожалуйста, а какую CMS вы в конечном итоге выбрали?