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

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

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

Сообщение Andrey_B » 12 мар 2014, 22:27

Назначение скриптов не описывал, хотя все собираюсь это сделать.

Smirnoffkv
Сообщения: 17
Зарегистрирован: 06 мар 2014, 16:28

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

Сообщение Smirnoffkv » 13 мар 2014, 10:03

Скрипт Poll.php записывает в SQL значения датчиков с интервалом с которым запускается в cron, получается что база все время увеличивается. Как происходит очистка устаревших значений?

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

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

Сообщение Andrey_B » 13 мар 2014, 10:25

Примерно также.
Есть скрипт mod_clear.php, который также запускается из cron. Только один раз в сутки.

Smirnoffkv
Сообщения: 17
Зарегистрирован: 06 мар 2014, 16:28

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

Сообщение Smirnoffkv » 13 мар 2014, 10:34

Вот я и узнал про два скрипта, так доберемся до остальных :) Спасибо, сейчас попробую.

Smirnoffkv
Сообщения: 17
Зарегистрирован: 06 мар 2014, 16:28

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

Сообщение Smirnoffkv » 23 мар 2014, 13:07

Пришла метео-станция Dr.Tech, дебиан опознал ее как:
smirnoff@debian:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 046d:080f Logitech, Inc. Webcam C120
Bus 008 Device 002: ID 04fc:05d8 Sunplus Technology Co., Ltd Wireless keyboard/mouse
Bus 003 Device 002: ID 0713:0818 Interval Research Corp.
Bus 006 Device 005: ID 0bb4:0ff9 HTC (High Tech Computer Corp.) Desire / Desire HD / Hero (Charge Mode)

на сколько я понял, чтобы записать данные в SQL базу, надо запускать по cron скрипт ws.py, изменив в нем логин и пароль базы данных.
Но ничего не записывается.
По сообщениям об ошибках я понял что надо изменить ID в WeatherStation.py c 1941:8021 на 0713:0818
Тогда я попробовал вывести данные на экран (как в примере на Вашем сайте):
smirnoff@debian:/var/www/libs$ ./test.py
Traceback (most recent call last):
File "./test.py", line 8, in <module>
ws = WeatherStation.weather_station()
File "/var/www/libs/pywws/WeatherStation.py", line 353, in __init__
self.cusb = CUSBDrive(library)
File "/var/www/libs/pywws/WeatherStation.py", line 281, in __init__
self.dev = USBDevice(0x0713, 0x0818)
File "/var/www/libs/pywws/device_pyusb.py", line 98, in __init__
raise IOError("Claim interface failed")
IOError: Claim interface failed
Подскажите что надо сделать чтоб скрипт начал работать?

Smirnoffkv
Сообщения: 17
Зарегистрирован: 06 мар 2014, 16:28

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

Сообщение Smirnoffkv » 25 мар 2014, 18:51

Что ни у кого нет мыслей как опросить метео станцию? Может ссылочку какую подскажете? В каком направлении копать?

Bluefox
Сообщения: 150
Зарегистрирован: 03 мар 2014, 20:02

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

Сообщение Bluefox » 12 июн 2014, 20:46

Вот тоже интересное решение для Web-Интерфейса. Использует NodeJS, как сервер. Если есть желание, то можно создать адаптер для меги и использовать.
viewtopic.php?f=1&t=743&p=13456#p13456
Изображение

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

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

Сообщение Antti » 13 июн 2014, 00:51

Вопрос по таймерам, может кто подскажет ?
Что необходимо поменять в коде

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

$('tabs').bind('tabs', function(event, ui) {
$(prevTab).empty();
$(prevTab).stopTime();
prevTab = ui.panel;
});
чтобы он корректно работал не на вкладках, а на отдельных страницах, пробовал по всякому, не могу остановить таймеры при переходе с одной страницы на другую.

Zaratustra
Сообщения: 6
Зарегистрирован: 09 окт 2014, 12:52

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

Сообщение Zaratustra » 09 окт 2014, 13:31

Уважаемые знатоки, помогите, пожалуйста, настроить совместную работу Web интерфейса и Мегадевайса.
Я скачал демо-версию-2 и установил на сервер. Сам интерфейс работает.
Методом научного тыка (правки в mod_megad.php, key.php, админ-панель-устройства-ключи) удалось добиться управления выходами контроллера на странице Свет, при этом контроллер реагирует, становится жирным ВКЛ, пишется время включения и выключения.
НО: если я на самом контроллере включаю соответствующий вход или через базовый интерфейс контроллера, то данные на странице Демо-интерфейса не обновляются.
Если я включаю вход на контроллере, то он обрабатывает выход, который прописан в настройках Action, а не в настройках mod_megad,php, хотя этот скрипт и ip сервера прописаны в настройках контроллера.
Если я ставлю в настройках контроллера скрипт mod_megad2, где обрабатывается долгое нажатие, то все работает: и короткое нажатие и долгое, но данные на основном сайте также не обновляются.
Как сделать так, чтобы на основном веб-интерфейсе обновлялись данные по факту сработки выходов/выходов?
Может у кого-то есть данные по скриптам Web интерфейса? Какой за что отвечает, какие параметры нужно менять под свой контроллер?
Веб интерфейс установлен на Windows 7+OpenServer

Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

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

Сообщение Mixman » 09 окт 2014, 14:58

Напишите свой mod_megad.php сюда

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

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

Сообщение Andrey_B » 09 окт 2014, 15:27

Zaratustra,
1. Если в устройстве прописан правильный IP-адрес сервера и указан скрипт, то сценарий по умолчанию (Action) выполняться не должен.
2. В демо-интерфейсе нет скрипта, который бы периодически опрашивал состояния портов устройств и обновлял информацию в БД. По большому счету (если все происходит через сервер) в таком скрипте нет необходимости. Управление выходами через встроенный Web-интерфейс устройства не совсем штатная с точки зрения серверной автоматизации штука. Тем не менее, такой скрипт можно написать. Он совсем несложный.

Zaratustra
Сообщения: 6
Зарегистрирован: 09 окт 2014, 12:52

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

Сообщение Zaratustra » 09 окт 2014, 18:24

Mixman писал(а):Напишите свой mod_megad.php сюда
Вот код
<?
require_once("ab-cms/class/main_class.php");
$ab = new cms_lib();

function key_update($key_label)
{
global $ab;

$keys_id = $ab->get_id("keys");
$key_tmpID = $ab->mod_read($keys_id, "#tmpID#", "", 1, "key_label='$key_label'");
$key_pio = $ab->mod_read($keys_id, "#key_pio#", "", 1, "tmpID=$key_tmpID");
if ( $key_pio == 1 ) $key_pio = 0; else $key_pio = 1;
$ab->mod_write($keys_id, "key_pio=$key_pio", "tmpID=$key_tmpID");
$ab->mod_write($ab->get_id("keys_journal"), "SYSDATE(), $key_tmpID, $key_pio");
}
// Считываем состояние выхода и записываем значение в БД
if ( !empty($argv[1]) )
{
sleep(2);
$keys_id = $ab->get_id("keys");
$key_tmpID = $ab->mod_read($keys_id, "#tmpID#", "", 1, "key_label='".$argv[1]."'");
$key_addr = $ab->mod_read($keys_id, "#key_addr#", "", 1, "tmpID=$key_tmpID");
list($null, $key_addr, $key_port) = explode(".", $key_addr);
$key_addr = "192.168.1.$key_addr";
$pass = "sec";
$state = file_get_contents("http://$key_addr/$pass/?pt=$key_port&cmd=get");
if ( preg_match("/^ON/", $state) )
$key_pio = 1;
else
$key_pio = 0;

//$key_pio = $ab->mod_read($keys_id, "#key_pio#", "", 1, "tmpID=$key_tmpID");
//if ( $key_pio == 1 ) $key_pio = 0; else $key_pio = 1;
$ab->mod_write($keys_id, "key_pio=$key_pio", "tmpID=$key_tmpID");
$ab->mod_write($ab->get_id("keys_journal"), "SYSDATE(), $key_tmpID, $key_pio");
}
if ( $_SERVER['REMOTE_ADDR'] == "192.168.1.14" )
{
// Выключатель 1 (кухня)
if ( $_GET['pt'] == "0" )
{
echo "9:2";
exec("php mod_megad.php \"test_port\" > /dev/null &");
}
}
?>

Zaratustra
Сообщения: 6
Зарегистрирован: 09 окт 2014, 12:52

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

Сообщение Zaratustra » 09 окт 2014, 18:50

Andrey_B писал(а):Zaratustra,
1. Если в устройстве прописан правильный IP-адрес сервера и указан скрипт, то сценарий по умолчанию (Action) выполняться не должен.
2. В демо-интерфейсе нет скрипта, который бы периодически опрашивал состояния портов устройств и обновлял информацию в БД. По большому счету (если все происходит через сервер) в таком скрипте нет необходимости. Управление выходами через встроенный Web-интерфейс устройства не совсем штатная с точки зрения серверной автоматизации штука. Тем не менее, такой скрипт можно написать. Он совсем несложный.
Андрей, вот что прописано в контроллере:
IP: 192.168.1.14 (адрес контроллера)
GW: 192.168.1.7 (адрес компьютера с ВЕБ интерфейсом, пробовал разные варианты 255.255.255.255, 255.255.255.0, 192.168.1.1-это роутер)
SRV: 192.168.1.7:80 (компьютер с ВЕБ интерф.)
Script: mog_megad.php
Preset: 7I7O

Mega ID: megad
srv loop: yes

Сценарий Action выполняется с небольшой задержкой, секунда-две, при этом мигает желтый светодиод на сетевом разъёме.
Если удалить название скрипта или вписать скрипт mod_megad2.php, то реакция заметно быстрее (по сценарию Action или сценарию megad2 соответственно, оба быстрее).

Чего я хочу добиться от системы: чтобы при срабатывании входа (кнопка-выключатель света, геркон, любой другой датчик) передавалась информация на компьютер, где она регистрировалась бы в базе данных и давался ответ согласно установленного сценария. Например, сработал датчик движения в подвале - включить свет. При этом чтобы в Веб интерфейсе правильно отображалось состояние выходов, то есть чтобы в закладке "Свет" в строке "Свет в подвале" появилось ВКЛ.

PS: Провел эксперимент: в файле mod_megad.php вместо адреса мегадевайса прописал IP телефона и в браузере телефона ввел запрос http://192.168.1.7/mod_megad.php?pt=0, на что через секунду получил ответ 9:2, как настроено в скрипте. При этом на странице Свет состояние выхода не поменялось (в админке в ключах также поменял IP порта на телефонный)

Аналогично буду хотеть и с вкладкой "Климат", но до неё я еще не дошел, хотя купил десяток DHT11, так что подскажите, пожалуйста, какой скрипт и в каких местах редактировать.
Последний раз редактировалось Zaratustra 10 окт 2014, 03:07, всего редактировалось 2 раза.

Shtil
Сообщения: 9
Зарегистрирован: 02 окт 2014, 01:42

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

Сообщение Shtil » 09 окт 2014, 23:12

Добрый вечер,
помогите пожалуйста разобраться...
подключил к АЦП порту интерфейсного модуля датчик MQ4
на команду
http://192.168.100.20/sec/?pt=A6&cmd=get
Девайс отвечает "OFF/2", где цифра меняется в зависимости от числа включений на порте "P0"
на команду
http://192.168.100.20/sec/?pt=14&cmd=get
Девайс отвечает значениями 0/1/2...5

Пускание газа и дыма ситуацию не меняют.
Подскажите, что я делаю не так?

Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

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

Сообщение Mixman » 10 окт 2014, 10:03

Zaratustra писал(а):
Mixman писал(а):Напишите свой mod_megad.php сюда

if ( $_SERVER['REMOTE_ADDR'] == "192.168.1.14" )
{
// Выключатель 1 (кухня)
if ( $_GET['pt'] == "0" )
{
echo "9:2";
exec("php mod_megad.php \"test_port\" > /dev/null &");
}
}
?>
перемудрили.
Проверьте адрес меги в строке
if ( $_SERVER['REMOTE_ADDR'] == "192.168.1.14" )
По умолчанию мега 192.168.0.14

Если все правильно, то двигаемся дальше.

if ( $_GET['pt'] == "0" )
{
echo "9:2"; \\ можно заменить на file_get_contents("http://192.168.1.14/sec/?cmd=9:2"); - так в 99,9% случаех работает

exec("php mod_megad.php \"test_port\" > /dev/null &"); // это зачем?
key_update("light_room"); // тут указываем Label ключа, который прописываете в админке ([ip-server]/ab-cms/)

}

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

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

Сообщение Andrey_B » 10 окт 2014, 10:06

Zaratustra,

Если сценарий выполняется с задержкой - это означает, что устройство пытается связаться с сервером, но по каким-то причинам у него это не получается. Проверьте (отключите на время) настройки брандмауэра.
Чтобы убедиться, в том - пытается ли устройство отправлять сообщения на сервер, необходимо смотреть логи Web-сервера на компьютере.
Надеюсь это "Script: mog_megad.php" - опечатка?
Не совсем понятно это: "Если удалить название скрипта или вписать скрипт mod_megad2.php, то реакция заметно быстрее". Эту фразу можно понять так - если указать имя другого скрипта, то все работает. Это так?

Скрипт mod_megad.php работает следующим образом. На тот или иной сработавший вход скрипт сразу отвечает командой смены состояния выхода (например, 9:2), а спустя некоторое время отправляет устройству запрос на получение текущего состояния выхода. И только тогда меняет состояние порта в БД. Вот поэтому в случае с телефоном вы в БД не увидели изменения.

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

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

Сообщение Andrey_B » 10 окт 2014, 10:08

Shtil, прежде всего, убедитесь в том, что все в порядке с подключением. Обратите внимание, что распиновка датчиков от DFRobot не соответствует распиновке разъема (это, надеюсь, будет исправлено в аппаратной ревизии 5.2).
http://ab-log.ru/forum/viewtopic.php?f=1&t=757

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

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

Сообщение Andrey_B » 10 окт 2014, 10:14

Mixman,

exec("php mod_megad.php \"test_port\" > /dev/null &");
Это не код Zaratustra, это мой код.

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

Shtil
Сообщения: 9
Зарегистрирован: 02 окт 2014, 01:42

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

Сообщение Shtil » 11 окт 2014, 14:34

Андрей, спасибо, помогло. Дело было в распиновке.

Shtil
Сообщения: 9
Зарегистрирован: 02 окт 2014, 01:42

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

Сообщение Shtil » 15 окт 2014, 23:04

Здравствуйте!

Помогите пожалуйста решить проблему с выводом графиков.

Следуя инструкциям с обзора JpGraph. Рисуем графики температуры пытаюсь вывести графики и обновлять их с заданным интервалом.
Вывести получается, но вот с обновлением, без перезагрузки страницы проблема.
Вот что у меня имеется:
Исходная страница (привожу полностью, т.к. и не знаю где ошибка может быть) "svet.php":

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta http-equiv="Content-Type" Content="text/html; Charset=utf-8">
<title></title>
<head>
<script type="text/javascript" src="jquery-2.1.1.js"></script>
<script type="text/javascript">
   $(document).ready(
function()
{
    window.setInterval(
    function()
    {
	$('#timeandstring').attr('src', '/gaz.php');
    }, 3000);
}
)
</script>
</head>
<body>
<img id="timeandstring" src="/gaz.php">
</body>
</html>
И страница с php скриптом "gaz.php", который это дело обрабатывает:

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

<?php
error_reporting(0);

$hostname = "127.0.0.1"; 
$username = "root"; 
$password = ""; 
$dbName = "ua";
$userstable = "DatMegaD";
mysql_connect($hostname,$username,$password) OR DIE("Соединение с БД не удалось"); 
mysql_select_db($dbName) or die(mysql_error()); 

$query = "SELECT Time, Gaz, Temp FROM $userstable";
$res = mysql_query($query) or die(mysql_error());
$countRows= mysql_num_rows ($res)-1;
$countRowsMin=$countRows-20;
$countRowsMax=$countRows;

$query ="SELECT Time, Gaz, Temp FROM $userstable LIMIT $countRowsMin,$countRowsMax";
$res = mysql_query($query) or die(mysql_error());
$i=0;
while ($i<20)
	{
		$myrow = mysql_fetch_array($res);
		$xdata[]=$myrow['Time'];
		$ydata[]=$myrow['Gaz'];
		$ydata1[]=$myrow['Temp'];
		$i++;
	}
include_once ("/jpgraph-3.5.0b1/src/jpgraph.php");
include_once ("/jpgraph-3.5.0b1/src/jpgraph_line.php");

$graph = new Graph(500,350);
$graph->SetScale('textlin');

$graph->SetMarginColor('white');
$graph->SetFrame(true,'#B3BCCB', 1);
$graph->SetTickDensity(TICKD_DENSE);

$graph->SetMargin(50,5,5,50);
$graph->xgrid->Show();
$graph->xaxis->SetTickLabels($xdata);

$graph->xaxis->SetLabelAngle(45);
$graph->xaxis->SetPos('min');

$my_interval = ceil(5);

$graph->xaxis->SetTextTickInterval($my_interval);

$p1 = new LinePlot($ydata);
$p2 = new LinePlot($ydata1);
$graph->Add($p1);
$graph->Add($p2);
$graph->Stroke();

mysql_close();
?>
Буду очень признателен за помощь!

Ответить