Web-интерфейс Умного Дома и разработка домашнего сайта
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Загрузил новый архив демо-интерфейса.
Основное изменение - использование модуля mysqli вместо mysql для работы с MySQL. Это позволит в дальнейшем использовать расширенные функции СУБД и улучшит производительность.
Основное изменение - использование модуля mysqli вместо mysql для работы с MySQL. Это позволит в дальнейшем использовать расширенные функции СУБД и улучшит производительность.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
"предложить готовый продукт" - очень здравая мысль я уже морально готов купить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 раз.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
попробую описать структуру БД. прошу не пинать, а поправить если есть неточности
вытаскивает из таблицы tCont числовой идентификатор для контента с именем $cont_label
существующие в таблице имена контента (списков, таблиц и т.д.) содержатся в поле Cont_label
по структуре таблицы tCont не удалось установить назначение CType, при всех вызовах функции
$ctype = 1
также представляет интерес поле Title - человеческое название контента, и поле ListID, которое ссылается
на саму таблицу (список) с контентом. ListID=0 видимо указывает на отсутствие таблицы в базе, и в этом случае данные пишутся
в лог-файл. остальные поля пока не так интересны, поскольку относятся к самой CMS.
получается, что ListID связан с именем таблицы с данными $table_name="tmp_".$ListID
в частности, при ListID=10 попадаем в таблицу tmp_10 с "электрическими" параметрами.
в этой функции сосредоточен весь интеллект вывода из базы, недаром целых 236 строк!
продолжение следует ...
з.ы. меня поражает практически полное отсутствие комментариев. поддержка такого большого
проект в этом случае требует поистине хорошей памяти
Код: Выделить всё
function get_id_cl($cont_label, $ctype = 0)
example:
$keys_id = get_id_cl("keys", 1);
существующие в таблице имена контента (списков, таблиц и т.д.) содержатся в поле 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);
продолжение следует ...
з.ы. меня поражает практически полное отсутствие комментариев. поддержка такого большого
проект в этом случае требует поистине хорошей памяти
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
dimonix, я разделяю вашу точку зрения. Возможно, такой "новый" демо-набор в скором времени появится.
Что касается ваших изысканий, то можно было бы и у меня спросить - я бы все подробно рассказал.
По поводу комментариев. На каждую функцию есть документация. И то, что присутствует в демо-интерфейсе, это только малая часть всего проекта.
Но исходных код морально устарел. Сейчас идет работа по его переделке. Я думаю специальная версия CMS для Умного Дома также будет доступна с исходными кодами.
show_list() - это никакой не интеллект. Это функция, которая облегчает вывод/доступ к данным в базе, чтобы не писать каждый раз длинные SQL-запросы и сократить объем кода на прикладном, так сказать, уровне.
$CType = это тип объекта структуры: раздел (папка, группа - в нем не может быть данных) - 0, документ - 1 (все данные в нем). Но от этого скорее психологического разделения в структуре, думаю, стоит и вовсе отказаться.
Что касается ваших изысканий, то можно было бы и у меня спросить - я бы все подробно рассказал.
По поводу комментариев. На каждую функцию есть документация. И то, что присутствует в демо-интерфейсе, это только малая часть всего проекта.
Но исходных код морально устарел. Сейчас идет работа по его переделке. Я думаю специальная версия CMS для Умного Дома также будет доступна с исходными кодами.
show_list() - это никакой не интеллект. Это функция, которая облегчает вывод/доступ к данным в базе, чтобы не писать каждый раз длинные SQL-запросы и сократить объем кода на прикладном, так сказать, уровне.
$CType = это тип объекта структуры: раздел (папка, группа - в нем не может быть данных) - 0, документ - 1 (все данные в нем). Но от этого скорее психологического разделения в структуре, думаю, стоит и вовсе отказаться.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Замечательно! Будем ждать выхода нового демо-комплекта.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?
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Упрямство достойное похвалы, кстати!
ЗЫ Беру свой сарказм в пред. сообщении обратно.
ЗЫ Беру свой сарказм в пред. сообщении обратно.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Есть понятие "списки" или "модули" - это таблицы типа 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 и посмотреть данные, отсортировать, поискать и т.д.
Название этого списка, как и его идентификатор содержится в таблице tList
Описание полей, как вы правильно заметили, в tListField.
Поле LType действительно определяет тип поля, но этот тип не всегда равнозначен типу в MySQL-базе. Например, есть такие типы как "ссылка" (это поле типа INT, содержащее идентификатор документа в системе) или файл (поле типа TEXT, содержащее имя загруженного файла) и т.д., то есть мета-типы.
"Список" или "модуль", описанный в tList + tListField сам по себе набор (тип) данных.
Например таблица может включать такие поля как: дата, значение
80% данных из датчиков можно хранить именно так: дата, значение. Возникает вопрос, зачем плодить таблицы? Нужно держать все в одной, но тогда их нужно как-то друг от друга отличать.
С другой стороны у нас есть структура нашего сайта: разделы и документы. Эта структура содержится в tCont и tContExt (в ней информация о подчинении)
То есть мы создаем документ: датчик 1 и документ датчик 2 (у них разные идентификаторы ContID). Так вот в зависимости от того, какой идентификатор мы запишем в нашу tmp_*, это и будет принадлежностью записи к тому или иному документу структуры. Стоит сказать, что у документа есть поле ListID - какая таблица к нему как бы подключена.
По логике то все просто. tCont - структура. tmp_* - подключаемые к тем или иным документам "расширенные, табличные" данные.
Вся прелесть в том, что:
1) не нужен phpMyAdmin вовсе
2) есть набор функций, облегчающий запись, чтение из таких вот таблиц на уровне уже лицевого интерфейса
3) при необходимости можно залезть в CMS и посмотреть данные, отсортировать, поискать и т.д.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Андрей, большое спасибо за столь подробное описание общих принципов. Но даже из него я так и смог найти ответ на вопрос об определении (описании) ContID для идентификации данных в таблицах tmp_2 и tmp_10 видимо пятница размягчает мозги
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Да, насчет 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. Посмотрите эту таблицу и вам все станет ясно.
Все исполнительные ключи, которые физически существуют в виде различных устройств (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. Посмотрите эту таблицу и вам все станет ясно.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
ну вроде разобрался. осталось написать опенсорсный вариант функции write_list()Andrey_B писал(а): dimonix, есть таблица tCont. Это таблица для хранения документов структуры. Идентификатор документа - поле ContID, там же поле Title. Посмотрите эту таблицу и вам все станет ясно.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Проблема с построением графика с помощью JPgraph
Выпадает ошибка:
Подскажите как решить проблему?
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
цыфры температура
Выпадает ошибка:
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 раз.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Не помогает та же ошибка 25044Andrey_B писал(а):danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Секундочку, вы ко всему прочему, перепутали X с Y
Y - это данные
X - это даты.
А у вас все наоборот.
Y - это данные
X - это даты.
А у вас все наоборот.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Переделал код вместо $ydata[] и $xdata[] заменил наAndrey_B писал(а):danag, вы используете функцию mysql_fetch_array()
Вам необходимо делать либо так:
$ydata[] = $array[0];
$xdata[] = $array[1];
либо использовать функцию mysql_fetch_assoc()
$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
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
В коде вот так, как вы написали?
$ydata = array[0];
или все-таки вот так?
$ydata = $array[0];
В общем покажите весь ваш код снова. Похоже на то, что вы заблудились в трех соснах.
$ydata = array[0];
или все-таки вот так?
$ydata = $array[0];
В общем покажите весь ваш код снова. Похоже на то, что вы заблудились в трех соснах.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Вопрос снимается, спасибо что помогли:
Вот готовый скрипт:
Вот готовый скрипт:
Код: Выделить всё
<?
// Подключаем библиотеку
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();
}
?>
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Кто нибудь думал использовать 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
Мне кажется очень интересное решение, главное что очень быстро можно создавать страницы.
Если интересно то:
Страница 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
Мне кажется очень интересное решение, главное что очень быстро можно создавать страницы.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Я думал. Очень интересная штука. Ценность ее не только в том, что можно быстро создавать страницы, но также в отработанных технологиях адаптивной подстройки страниц под различные разрешения.
Re: Web-интерфейс Умного Дома и разработка домашнего сайта
Сейчас ещё раз посмотрел. Блин ну нравится мне он %). 99% буду делать вэб интерфейс на нем.