Web-интерфейс Умного Дома и разработка домашнего сайта

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 16 мар 2012, 23:24

Загрузил новый архив демо-интерфейса.
Основное изменение - использование модуля mysqli вместо mysql для работы с MySQL. Это позволит в дальнейшем использовать расширенные функции СУБД и улучшит производительность.

dimonix
Сообщения: 368
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение dimonix » 22 мар 2012, 11:58

Andrey_B писал(а):Насчет философии Сергей99 правильно сказал. В данный момент я не могу предложить готовый продукт, но это не значит, что его не будет когда-нибудь в будущем.
"предложить готовый продукт" - очень здравая мысль ;) я уже морально готов купить :)
а если серьезно, то готового комплекта, видимо не получиться - у всех свои требования и своё оборудование. но вот хорошо документированный демо-набор "кубиков" с примерами интерфейса к оборудованию и опенсорсными вариантами необходимых функций CMS пользовался бы спросом. он вполне подходит для построения статичного сайта. желающие динамики и дальнейшего развития могут и купить CMS у Вашей местной конторы.
в данном вопросе мною движет исключительно рациональность, т.к. людям без навыка программирования может понадобится очень много времени для того, чтобы разобраться в структуре Вашей БД или написать свою с адаптацией к Вашему интерфейсу.
Что Вы думаете по этому поводу?

з.ы. продолжаю "бороться" с демо, в частности проблему кодировки mysql можно полностью решить сборкой его из исходников
"make BUILD_OPTIMIZED=yes WITH_CHARSET=cp1251"
и добавлением в my.cnf (обратите внимание на имя секции):
[mysqld]
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
Последний раз редактировалось dimonix 23 мар 2012, 12:24, всего редактировалось 1 раз.

dimonix
Сообщения: 368
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение dimonix » 22 мар 2012, 18:24

попробую описать структуру БД. прошу не пинать, а поправить если есть неточности :roll:

Код: Выделить всё

function get_id_cl($cont_label, $ctype = 0)
example:
$keys_id = get_id_cl("keys", 1);
вытаскивает из таблицы tCont числовой идентификатор для контента с именем $cont_label
существующие в таблице имена контента (списков, таблиц и т.д.) содержатся в поле Cont_label
по структуре таблицы tCont не удалось установить назначение CType, при всех вызовах функции
$ctype = 1
также представляет интерес поле Title - человеческое название контента, и поле ListID, которое ссылается
на саму таблицу (список) с контентом. ListID=0 видимо указывает на отсутствие таблицы в базе, и в этом случае данные пишутся
в лог-файл. остальные поля пока не так интересны, поскольку относятся к самой CMS.

получается, что ListID связан с именем таблицы с данными $table_name="tmp_".$ListID
в частности, при ListID=10 попадаем в таблицу tmp_10 с "электрическими" параметрами.

Код: Выделить всё

function show_list($ID, $command, $sort = "", $num = "", $where = "", $return = "")
example:
$el_total_id = get_id_cl("el_total_t2", 1);
$el_total_t2 = show_list($el_total_id, "#dev_value#", "dev_date DESC", 1, "", 1);
в этой функции сосредоточен весь интеллект вывода из базы, недаром целых 236 строк!
продолжение следует ...

з.ы. меня поражает практически полное отсутствие комментариев. поддержка такого большого
проект в этом случае требует поистине хорошей памяти ;)

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 23 мар 2012, 12:14

dimonix, я разделяю вашу точку зрения. Возможно, такой "новый" демо-набор в скором времени появится.
Что касается ваших изысканий, то можно было бы и у меня спросить - я бы все подробно рассказал. ;)
По поводу комментариев. На каждую функцию есть документация. И то, что присутствует в демо-интерфейсе, это только малая часть всего проекта.
Но исходных код морально устарел. Сейчас идет работа по его переделке. Я думаю специальная версия CMS для Умного Дома также будет доступна с исходными кодами.
show_list() - это никакой не интеллект. Это функция, которая облегчает вывод/доступ к данным в базе, чтобы не писать каждый раз длинные SQL-запросы и сократить объем кода на прикладном, так сказать, уровне.
$CType = это тип объекта структуры: раздел (папка, группа - в нем не может быть данных) - 0, документ - 1 (все данные в нем). Но от этого скорее психологического разделения в структуре, думаю, стоит и вовсе отказаться.

dimonix
Сообщения: 368
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение dimonix » 23 мар 2012, 14:12

Andrey_B писал(а):dimonix, я разделяю вашу точку зрения. Возможно, такой "новый" демо-набор в скором времени появится.
Что касается ваших изысканий, то можно было бы и у меня спросить - я бы все подробно рассказал. ;)
По поводу комментариев. На каждую функцию есть документация. И то, что присутствует в демо-интерфейсе, это только малая часть всего проекта.
Замечательно! Будем ждать выхода нового демо-комплекта.

Пока суть да дело, я все же попытаюсь использовать текущую демо версию. Т.е. нужно сделать
максимально простой метод наполнения базы, по возможности не меняя существующую структуру, чтобы интерфейс работал без изменений (пока). То, что там много избыточной информации, наследуемой из CMS, это понятно.

Итак, таблица tmp_7 содержит список всех ключей и датчиков. Форма для заполнения таблицы уже была описана на форуме.
Для своих ключей/датчиков можно отредактировать phpmyadmin'ом. чем отличаются key_type=auto и key? и пока не понял из какой таблицы идет ссылка на tmpID?

Далее нужно разобраться с описанием полей таблиц с данными: "датчики" tmp_2 (температуры, освещенность, потребление эл-ва и газа, давление воды), tmp_8 (журнал срабатывания ключей) и tmp_10 (параметры электроснабжения). Отопление пока отложим.
Описание полей таблиц tmp_$ListID нужно брать из таблицы tListField, строки с соотв. ListID. Но не понятна нумерация поля ListFieldID, она не подряд, а десятичными блоками. LType - тип поля? 1-дата, 8-decimal, остальное пока тоже не понятно.
Таблица tmp_2 - туда пишутся подряд все "устройства". Различить можно только по ContID. Но из какой таблицы он берётся?
Таблица tmp_10 - туда пишутся подряд все электрические параметры. Вопрос такой же: из какой таблицы берётся ContID?

Сергей99
Сообщения: 15
Зарегистрирован: 18 мар 2011, 18:16

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Сергей99 » 23 мар 2012, 14:55

Упрямство достойное похвалы, кстати!

ЗЫ Беру свой сарказм в пред. сообщении обратно. :roll:

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 23 мар 2012, 17:48

Есть понятие "списки" или "модули" - это таблицы типа tmp_*, которые создаются средствами CMS. Исходя из названия можно подумать, что эти таблицы временные, но это не так. Просто это таблицы, которые создает, удаляет, меняет сама CMS, то есть пользователь, а не разработчик.
Название этого списка, как и его идентификатор содержится в таблице tList
Описание полей, как вы правильно заметили, в tListField.
Поле LType действительно определяет тип поля, но этот тип не всегда равнозначен типу в MySQL-базе. Например, есть такие типы как "ссылка" (это поле типа INT, содержащее идентификатор документа в системе) или файл (поле типа TEXT, содержащее имя загруженного файла) и т.д., то есть мета-типы.
"Список" или "модуль", описанный в tList + tListField сам по себе набор (тип) данных.
Например таблица может включать такие поля как: дата, значение
80% данных из датчиков можно хранить именно так: дата, значение. Возникает вопрос, зачем плодить таблицы? Нужно держать все в одной, но тогда их нужно как-то друг от друга отличать.
С другой стороны у нас есть структура нашего сайта: разделы и документы. Эта структура содержится в tCont и tContExt (в ней информация о подчинении)
То есть мы создаем документ: датчик 1 и документ датчик 2 (у них разные идентификаторы ContID). Так вот в зависимости от того, какой идентификатор мы запишем в нашу tmp_*, это и будет принадлежностью записи к тому или иному документу структуры. Стоит сказать, что у документа есть поле ListID - какая таблица к нему как бы подключена.
По логике то все просто. tCont - структура. tmp_* - подключаемые к тем или иным документам "расширенные, табличные" данные.
Вся прелесть в том, что:
1) не нужен phpMyAdmin вовсе
2) есть набор функций, облегчающий запись, чтение из таких вот таблиц на уровне уже лицевого интерфейса
3) при необходимости можно залезть в CMS и посмотреть данные, отсортировать, поискать и т.д.

dimonix
Сообщения: 368
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение dimonix » 23 мар 2012, 18:07

Андрей, большое спасибо за столь подробное описание общих принципов. Но даже из него я так и смог найти ответ на вопрос об определении (описании) ContID для идентификации данных в таблицах tmp_2 и tmp_10 :? видимо пятница размягчает мозги ;)

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 23 мар 2012, 18:29

Да, насчет key_type
Все исполнительные ключи, которые физически существуют в виде различных устройств (1-wire, X-10, Ethernet) имеют свое отражение в БД
Это позволяет:
1. всегда знать их состояние без необходимости непосредственного физического опроса
2. иметь альясы
3. управлять ими на уровне а) веб-интерфейса б) прикладном программном уровне с помощью функции key_sw()

key_sw() имеет в себе реализацию всех поддерживаемых технологий. То есть когда программа вызывает key_sw("lamp", 1) - она понятия не имеет 1-wire это или что-то еще.
Теперь что касается типа ключа. Когда тип ключа key - это означает, что его можно переключить через Web-интерфейс. Но некоторые ключи (например, управление клапанами/приводами отопления) давать управлять вручную нельзя, это чревато. Поэтому есть тип auto.

dimonix, есть таблица tCont. Это таблица для хранения документов структуры. Идентификатор документа - поле ContID, там же поле Title. Посмотрите эту таблицу и вам все станет ясно.

dimonix
Сообщения: 368
Зарегистрирован: 19 фев 2012, 22:01
Откуда: Сколково

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение dimonix » 26 мар 2012, 19:11

Andrey_B писал(а): dimonix, есть таблица tCont. Это таблица для хранения документов структуры. Идентификатор документа - поле ContID, там же поле Title. Посмотрите эту таблицу и вам все станет ясно.
ну вроде разобрался. осталось написать опенсорсный вариант функции write_list() 8-)

danag
Сообщения: 7
Зарегистрирован: 12 фев 2012, 19:00

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение danag » 06 апр 2012, 14:37

Проблема с построением графика с помощью JPgraph
Выпадает ошибка:
Cannot use auto scaling since its imposible to determine a valid min/max value of y-axis(only null values

Код: Выделить всё

<?
// Подключаем библиотеку
include ("libs/jpgraph/jpgraph.php");
include ("libs/jpgraph/jpgraph_line.php");


$db = mysql_connect("localhost", "root", "ВАШ_ПАРОЛЬ");
mysql_select_db("test", $db);
$result = mysql_query("SELECT DATE_FORMAT(ow_date, '%H:%i'), ow_val FROM test_table WHERE ow_date>(NOW() - INTERVAL 1 DAY)",$db);

    while($array = mysql_fetch_array($result))
{

    $ydata[] = $array["ow_date"];
    $xdata[] = $array["ow_val"];
}

$graph = new Graph("800.600");
$graph->SetScale("textlin");
$graph->SetMarginColor('white');
$graph->SetFrame(true,'#B3BCCB', 1);
$graph->SetTickDensity(TICKD_DENSE);
$graph->img->SetMargin(50,20,20,60);
$graph->title->SetMargin(10);
$graph->xaxis->SetTickLabels($xdata);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos('min');

$my_interval = ceil($i / 30);
$graph->xaxis->SetTextTickInterval($my_interval);

$lineplot=new LinePlot($ydata);
$graph->Add($lineplot);
$graph->Stroke();

?>

Подскажите как решить проблему?

PS запрос SELECT DATE_FORMAT(ow_date, '%H:%i'), ow_val FROM test_table WHERE ow_date>(NOW() - INTERVAL 1 DAY) в phpmyadmin выводит нормальный ответ в виде 2-х столбцов:
ow_date, '%H:%i' ow_val
цыфры температура
Последний раз редактировалось danag 07 апр 2012, 11:59, всего редактировалось 1 раз.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 06 апр 2012, 14:55

danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()

danag
Сообщения: 7
Зарегистрирован: 12 фев 2012, 19:00

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение danag » 06 апр 2012, 15:04

Andrey_B писал(а):danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
Не помогает та же ошибка 25044

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 06 апр 2012, 16:20

Секундочку, вы ко всему прочему, перепутали X с Y
Y - это данные
X - это даты.
А у вас все наоборот.

danag
Сообщения: 7
Зарегистрирован: 12 фев 2012, 19:00

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение danag » 06 апр 2012, 16:30

Andrey_B писал(а):danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
Переделал код вместо $ydata[] и $xdata[] заменил на
$ydata = array[0]
$xdata = array[1]

Теперь ошибка 25064
Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 06 апр 2012, 16:35

В коде вот так, как вы написали?
$ydata = array[0];
или все-таки вот так?
$ydata = $array[0];

В общем покажите весь ваш код снова. Похоже на то, что вы заблудились в трех соснах.

danag
Сообщения: 7
Зарегистрирован: 12 фев 2012, 19:00

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение danag » 06 апр 2012, 20:46

Вопрос снимается, спасибо что помогли:

Вот готовый скрипт:

Код: Выделить всё

<?
// Подключаем библиотеку
include ("libs/jpgraph/jpgraph.php");
include ("libs/jpgraph/jpgraph_line.php");

$i = 0;
$db = mysql_connect("localhost", "root", "ВАШ_ПАРОЛЬ");
mysql_select_db("test", $db);
$result = mysql_query("SELECT DATE_FORMAT(ow_date, '%H:%i'), ow_val FROM test_table ORDER BY test_table.ow_date ASC",$db) or die(mysql_error());
    while($array = mysql_fetch_array($result))
{
 $xdata[$i] = $array[0];
 $ydata[$i] = $array[1];
 $i++;
}
if ( $i > 1)
{
        $my_interval = ceil($i / 30);
        $graph = new Graph(600,250,"auto");
        $graph->SetScale("textlin");
        $graph->SetMarginColor('white');
        $graph->SetFrame(true,'#B3BCCB', 1);
        $graph->SetTickDensity(TICKD_DENSE);
        $graph->img->SetMargin(50,20,20,60);
        $graph->title->SetMargin(10);
        $graph->xaxis->SetTitlemargin(30);
        $graph->xaxis->SetTickLabels($xdata);
        $graph->title->Set("Температура в ");
        $graph->xaxis->title->Set("Температуа, С");
        $graph->yaxis->title->Set("Время, ч ");
        $graph->xaxis->SetLabelAngle(90);
        $graph->xaxis->SetPos('min');
        $graph->xaxis->SetTextTickInterval($my_interval);


        $lineplot=new LinePlot($ydata);
        $graph->Add($lineplot);
        $graph->Stroke();
}
?>

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение vtec » 11 апр 2012, 13:34

Кто нибудь думал использовать Twitter bootstrap для создания домашнего сайта?
Если интересно то:
Страница Twitter bootstrap http://twitter.github.com/bootstrap/
Краткое описание
http://habrahabr.ru/post/138818/
http://jkeks.ru/jkeks.ru/archives/1853
Как создать страницу для iphone, ipad, думаю и для android подойдет http://k33g.github.com/2011/12/30/IOS5- ... STRAP.html

Мне кажется очень интересное решение, главное что очень быстро можно создавать страницы.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение Andrey_B » 11 апр 2012, 16:16

Я думал. Очень интересная штука. Ценность ее не только в том, что можно быстро создавать страницы, но также в отработанных технологиях адаптивной подстройки страниц под различные разрешения.

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Web-интерфейс Умного Дома и разработка домашнего сайта

Сообщение vtec » 18 апр 2012, 07:27

Сейчас ещё раз посмотрел. Блин ну нравится мне он %). 99% буду делать вэб интерфейс на нем.

Ответить