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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
VGor
Сообщения: 2
Зарегистрирован: 11 ноя 2011, 09:13

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

Сообщение VGor » 12 янв 2012, 12:56

Добрый день, Андрей!

Просмотрел ваши статьи о создании сайта для "умного дома". Взял за образец ваш проект - ab-log-demo.zip . С работой базы и взамодействием с CMS разобрался. Графики отображаются. А вот файлы с расширением jpg :
Monitor1.jpg
Monitor2.jpg
Monitor3.jpg
и др.
не отображаются. Думал, что проблема именно в файлах с расширением jpg или в работе PHP.

Однако код:
<?
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_JPEG));
$file = "snap/Camera1.jpg";
echo file_get_contents($file);
?>

работает.

Заранее спасибо за помощь.

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 20 янв 2012, 00:04

Помогите пожалуйста разобраться с графиками... Вывод самого графика я сделал... но как сделать, чтобы можно было выбирать как дневной, так и месячный (как у Вас на сайте)?

Вот код (датчиков в серверной), который у меня выводит за сутки:

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

<?php
// Подключаем библиотеку
include ("libs/jpgraph/jpgraph.php");
include ("libs/jpgraph/jpgraph_line.php");
define('SQL_INC',1);
require 'inc/config.inc.php';
require 'inc/sql.inc.php';

$daytime=time()-86400;
 
// Пишем SQL-запрос к базе
$data = mysql_query("select date, temp_ulici, temp_in, temp_servernoy from temp_garaj where date >= $daytime");
 
while ($row=mysql_fetch_array($data)) {
$temp_ulici[] = $row['temp_ulici'];
$temp_stoyki[] = $row['temp_in'];
$temp_servernoy[] = $row['temp_servernoy'];
$xdata[] = date('G:i',$row['date']);
}
 

//создаем график шириной 460 и высотой 200 пикселов
$graph = new Graph(450,200,"auto");

//устанавливаем типы данных по осям абсцисс и ординат
$graph->SetScale("textlin");

//установим заголовок
$graph->title->Set('Температура стойки');
$graph->title->SetFont(FF_VERDANA, FS_BOLD, 12);

$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);
//каждое 11-е значение
$graph->xaxis->SetTextTickInterval(11);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos('min');

$stoyka=new LinePlot($temp_stoyki);
$stoyka->SetColor('red');

$servernaya=new LinePlot($temp_servernoy);
$servernaya->SetColor('blue');

$ulica=new LinePlot($temp_ulici);
$ulica->SetColor('green');

$graph->Add($stoyka);
$graph->Add($servernaya);
$graph->Add($ulica);
$graph->Stroke();

?>
Но как его модифицировать, чтобы был выбор сутки/месяц?
Несколько часов просидел над файлом graph.php с архива ab-log-demo.tar.gz, но так и не осилил его :( Вроде как там много лишнего (имеется ввиду для управления с ЦМС), но так как я пока не планирую админ веб-интерфейс, то подскажите пожалуйста как этот кусок допилять для такого функционала.

xace
Сообщения: 56
Зарегистрирован: 12 май 2011, 18:07

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

Сообщение xace » 21 янв 2012, 00:15

У меня примерно таек

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

SELECT DATE_FORMAT(temp_date, '%H:%i'), temp_value FROM temp WHERE temp_date>(NOW() - INTERVAL 1 DAY)

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 23 янв 2012, 20:35

Спасибо, с этим разобрался.
Не могу понять как берутся температуры, те что пишутся явным образом, вот например, вкладка Климат, "Температура на 1 этаже 24.34°".
В ab-pages.php видно что запрос идет на ab-data.php ($.get("ab-data.php?p=dev&id=temp_in", function(data){$("#temp_in").html(data + \'&deg;\');});), а там темный лес... ЦМСка по непонятному мне образу как-то считывает с базы.

Кто-то может написать простенький пример как можно считывать, чтобы не поломать структуру ab-pages.php, т.э. при запросе похожем на:

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

$.get("ab-data.php?p=dev&id=temp_in", function(data){$("#temp_in").html(data + \'&deg;\');});
в файле ab-data.php этот запрос обрабатывался понятным для чтения способом.

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

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

Сообщение Andrey_B » 23 янв 2012, 21:10

jQuery-функция .get() выполняет GET-запрос к скрипту ab-data.php с параметрами.
Вы можете отредактировать ab-data.php и написать свой код, который бы вызывался с вашими параметрами, например ab-data.php?p=my_temp
В конце ab-data.php можете добавить обработку вашего значения

elseif ( $_REQUEST['p'] == "my_temp" )
{
//Ваша выборка из БД SQL-запросом.
}

Или в чем заключался вопрос?

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 24 янв 2012, 19:32

Спасибо за наводку, но что-то не получается.
Вот вызов:

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

$(document).ready(
                function()
                {
                        $.get("data.php?p=temp_out", function(data)
                        {
                                $("#tulicinow").html(data + \'&deg;\');
                        });
                });

echo "<div id=\"tulicinow\" class=\"ab-graph-val\"></div>";
Видимо что-то не то.. и чувствую что там что-то есть лишнее...

Обработку значения решил делать в новом файле (чтобы не путать с уже имеющимся) data.php, вот его код:

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

<?
define('SQL_INC',1);
require 'inc/config.inc.php';
require 'inc/sql.inc.php';

if ( $_REQUEST['p'] == "temp_out" )
{
$daytime=time()-86400;

$tdstoyka = mysql_query("select date, temp_ulici from temp_garaj where date >= $daytime");

while ($row=mysql_fetch_array($tdstoyka)) {
$timestoyka[] = date('G:i',$row['date']);
$tulici[] = $row['temp_ulici'];
}

$cntstoyka = count($tstoyka);
$tulicinow = round($tulici[$cntstoyka-1], 1);
}

?>
Здесь на daytime не обращайте внимания.. он для нахождения в будущем мин/макс/средних значений.

Т.э. мне нужно вывести через .get $tulicinow. но что-то не получается.

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

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

Сообщение Andrey_B » 24 янв 2012, 22:24

В первом фрагменте кода у вас смешан PHP и Javascript.
Должно быть так:

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

<script>
$(document).ready(
                function()
                {
                        $.get("data.php?p=temp_out", function(data)
                        {
                                $("#tulicinow").html(data + '&deg;');
                        });
                });
</script>

<?php
echo "<div id=\"tulicinow\" class=\"ab-graph-val\"></div>";
?>
Не забудьте также включить в файл вызов библиотеки jquery. В указанном вами куске кода этого вызова нет.

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 26 янв 2012, 17:08

Кажется разобрался как этот .get работает, получается он как бы выводит результат кода в указанном в нем запросе... т.э. для того чтобы у меня выводило температуру, нужно было добавить echo $tulicinow;
Код получился такой:

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

<?
define('SQL_INC',1);
require 'inc/config.inc.php';
require 'inc/sql.inc.php';

if ( $_REQUEST['p'] == "temp_out" )
{
$daytime=time()-86400;

$tdstoyka = mysql_query("select date, temp_ulici from temp_garaj where date >= $daytime");

while ($row=mysql_fetch_array($tdstoyka)) {
$timestoyka[] = date('G:i',$row['date']);
$tulici[] = $row['temp_ulici'];
}

$cntstoyka = count($tulici);
$tulicinow = round($tulici[$cntstoyka-1], 1);
echo $tulicinow;
}

?>

P.S. На счет вызова библиотеки jquery, то она вызывается с main.php. Использую Ваш шаблон, за что очень благодарен. Походу пока на нем и буду сидеть.. пока не появится что-то готового и лучшего.. хотя думаю это далеко не скоро будет.

На счет обновления показаний, как я понял за это отвечает эта функция?:

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

$(\'#ui-tabs-\' + tab_index).everyTime(50000, function(i) {
                        $.get("data.php?p=temp_out", function(data){$("#tulicinow").html(data + \'&deg;\');});
                });
Значение 50000 это в миллисекундах или как?
...
Отвечу сам на свой вопрос, может кому пригодится.. ДА, в мс, т.э. 50000=50сек.

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 30 янв 2012, 20:57

Что-то не получается один момент победить... чтобы при выводе значения следующая надпись не начиналась с новой строки, например:

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

"Минимум: -16°C Максимум: -5,3°C"
а сейчас так:

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

Минимум:-16°C
Максимум:-5,3°C
Вот блок что выводит:

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

echo "<div style=\"float:left\">Минимум: </div>";
echo "<div style=\"color:red\" id=\"tulicimin\"></div>";
echo "<div style=\"float:left\">Максимум: </div>";
echo "<div style=\"color:red\" id=\"tulicimax\"></div>";
Я думаю собака где-то здесь зарыта:

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

$.get("data.php?p=temp_out_min", function(data){$("#tulicimin").html(data + \'&deg;C\');});
$.get("data.php?p=temp_out_max", function(data){$("#tulicimax").html(data + \'&deg;C\');});
так как после вызова этих гет-запросов переходит на новую строку.

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

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

Сообщение Andrey_B » 31 янв 2012, 10:43

DIV - это блочный элемент, после которого по умолчанию происходит перевод строки
Чтобы не было перехода на новую строку используйте тэг SPAN, который является inline-элементом или же пропишите явно поведение блока, например, так
echo "<div style=\"float:left;color:red\" id=\"tulicimin\"></div>";

KnYaz
Сообщения: 35
Зарегистрирован: 17 ноя 2011, 12:10

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

Сообщение KnYaz » 06 фев 2012, 20:32

Еще вопросик.. может подскажите.
У меня графики другого размера, т.э. выходят за поля рамки. Как эту рамку увеличить до необходимого размера?
Вроде как параметр .ui-state-default отвечает за это, но в ./css2/themes/redmond/jquery-ui-1.8.16.custom.css нет ничего такого, чтобы повлияло на размер этой рамки.

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

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

Сообщение Andrey_B » 06 фев 2012, 23:14

Непосредственно у элемента всегда можно прописать высоту или ширину. Вот так: style="height:400px"
Или указать class или id.
Например <div class="big_ramka"></div>
где в CSS (любом доступном из основного HTML) пишем
.big_ramka {height:400px;}
Ну как-то так...

Antti
Сообщения: 35
Зарегистрирован: 01 фев 2012, 01:11

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

Сообщение Antti » 26 фев 2012, 10:43

Вопросы возникли по JpGraph - не получается настроить вывод только целых значений по шкале Y, выводятся дробные, график получается очень ломаный, чтение документации не помогло, по оси Х нашел параметр, а по оси Y нет...
ИзображениеИзображение
Вопрос второй - кто нибудь пробовал настраивать JpGraph чтобы вывод графика был через Spline, чтобы график был плавный и красивый ? Пробовал по примеру с офиц. сайта и по примеру отсюда http://www.samag.ru/archive/article/410 - не получается, выдается ошибка (jpgraph error: 19002) и все тут. В примерах по шкале Х значения целые, а у нас там время, может быть из-за этого не получается ? Кто нибудь делал такое ?
Вопрос третий - Можно ли на графике выделить цветом значение 0 (ноль) по шкале Y для более наглядной визуализации (полосой другого цвета)?
P.S. Что то картинки не показываются....

Spawn
Сообщения: 7
Зарегистрирован: 29 фев 2012, 00:53

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

Сообщение Spawn » 29 фев 2012, 01:34

Со сплайнами там сложно, уже не помню в чем причина. Делайте аппроксимацию и будет вам счастье.
Вот, к примеру, у меня так:
/////сглаживание
$count=count($DATA[0]);
if ($count==0) $count=1;
$DATA[0][-1]=$DATA[0][-2]=$DATA[0][0];
$DATA[0][$count]=$DATA[0][$count+1]=$DATA[0][$count-1];
// Сглаживание графики методом усреднения соседних значений
for ($i=0;$i<$count;$i++) {
$DATA[0][$i]=($DATA[0][$i-1]+$DATA[0][$i-2]+
$DATA[0][$i]+$DATA[0][$i+1]+
$DATA[0][$i+2])/5;
}

В $DATA[0] - лежат все значения по Y
если не сглаживать, то, график как ежик :)

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

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

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

Друзья, а кто-нибудь уже разобрался со структурой БД автора? Если у кого-то есть описания таблиц и переменных, выложите, пожалуйста. Давайте совместно сделаем полное описание БД, а Андрей подкорректирует, если что не так.
У меня, например, строящаяся домашняя автоматизация процентов на 90 будет соответствовать конфигурации Андрея: котел Vaillant+клапаны, счетчик Меркурий, автополив и т.д

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

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

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

А ничего что автор как-бы против?
Уж если бы был за, то давно бы выложил. Насколько я понял его философию - он дает удочку, а вы просите рыбу.

ЗЫ Хотя ваше месторасположение как-бы намекает. ;)

andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

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

Сообщение andvas » 16 мар 2012, 15:05

Сергей99 писал(а): ЗЫ Хотя ваше месторасположение как-бы намекает. ;)
:D :D :D

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

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

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

Сергей99 писал(а):А ничего что автор как-бы против?
Уж если бы был за, то давно бы выложил. Насколько я понял его философию - он дает удочку, а вы просите рыбу.

ЗЫ Хотя ваше месторасположение как-бы намекает. ;)
т.е. Вы утверждаете, что Автор против создания участниками данного форума описания базы данных, которую он выложил в свободный доступ? так, видимо, нужно самого Автора сначала спросить. или Вы уполномочены здесь представлять его интересы? объясните, если, конечно есть что.

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

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

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

Насчет философии Сергей99 правильно сказал. В данный момент я не могу предложить готовый продукт, но это не значит, что его не будет когда-нибудь в будущем.
А насчет БД никакого секрета нет, но ситуация следующая. Я уже несколько раз говорил об этом. Структура БД продиктована используемой CMS. Но эта СMS коммерческая и я не могу выложить ее в свободный доступ. Мне так было проще, так как СMS позволяет достаточно быстро конструировать таблицы и вести разработку. На этапе исследования это сильно облегчало жизнь. Но я не считаю, что структура оптимальна. Думаю, ее можно было бы сделать намного лучше. А что касается описания, то я не против. Но структура не является статичной. Под каждый тип данных в CMS заводится своя таблица. Кроме того, данная база создана специально для логики работы CMS, но без понимания этой логики некоторые вещи очень не очевидны. Некоторую ключевую логику с картинками я здесь уже описывал.

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

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

Сообщение dimonix » 16 мар 2012, 17:59

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

Ответить