Система централизованная с резервированием.
Проект разработан нашими соратниками и выложен для повторения. Доступны исходники, печатные платы, прошивки последней версии.
Мной были изготовлены прототипы модулей на базе контроллера ATmega328 и трансивера CC1101 фирмы TI, этот трансивер не смотря на миниатюрный корпус, был выбран не случайно, т.к. по отзывам авторов с ним получены лучшие результаты качества связи. Размеры модуля будут сокращены до 20х45 мм. Также возможно применить трансивер MRF49 от Microchip или использовать готовые модули сторонних производителей Panstamp, Jeelabs, XBee. Модули работают в диапазоне 433/868/915 MHz, я выбрал 868 Mhz. Модули уверенно работают на расстоянии 15 метров через 4 железобетонные стены. По прямой видимости еще не опробованы.
Огромным преимуществом является работа модулей от батарей. Удобно использовать для контроля метеоусловий и использовать солнечные батареи для зарядки аккумуляторов. Модули с батарейным питанием работают до 2,4 вольта, с парой дополнительных сенсоров на I2C например BMP085 + HIH6131, в спящем режиме потребляют менее 90 мкА, в активном 10-20 мА.
Аккумуляторов на 2700 с запасом хватает на 2 недели, когда выходит солнце через 3-4 часа батарея снова полностью заряжена. Все модули идентичные, в зависимости от прошивки могут быть гейтом GW для подключения к компьютеру или нодой ND периферийный модуль.
Доступны модули, работающие по сети Ethernet, прошивка подходит к контроллеру – Мегадевайс MegaD-328. В модуле доступны:
Цифровые входы/выходы до 14 линий (3.3V)
До 6 аналоговых входов с размахом до 1.1/3.3 Вольт
Аппаратный 8-бит ШИМ
Последовательный порт
TWI/I2C устройства
По шине I2C возможно подключение следующих датчиков:
BMP085 (BMP180) – Датчик малых давлений и температуры Bosch
HIH613x – Датчик влажности и температуры фирмы Honeywell (HIH6130/HIH6131/HIH6120/HIH6121)
LM75 – Термометр NXP/NS/STmicro
Si7005 – Датчик влажности Silicon Image
Ядро системы cостоит из модулей
MQTT Broker: Осуществляет рассылку переменных подписчикам
MQTT Client: Осуществляет подключение к вышестоящему брокеру
PLC: Реализует логику управления Модули расширения
Persistent Storage: Сохранение состояния системы при перезапуске
MQTTS Aggregated Gateway: Обеспечивает преобразование между протоколами MQTT и MQTTS
а так-же коммуникацию с периферийными модулями по UDP и последовательному порту
XBee Gateway: Обеспечивает связь с устройствами на основе XBee
Прочие модули расширения, например KNX и Z-Wave (не входят в open source версию)
Визуальный язык программирования Logram
Настройка алгоритмов производится стандартными логическими элементами, визуальный язык программирования Logram.
Автоматически выключает свет по таймауту Управление и получение данных при помощи PHP
Огромным плюсом данной системы является управление и получение данных при помощи PHP, т.е. есть возможность интегрировать данную систему в любые проекты и получать данные датчиков, управлять устройствами.
Получаем данные для визуализаторов с брокера при помощи PHP скрипта
Код: Выделить всё
<?php
require("phpMQTT.php"); /*https://github.com/bluerhinos/phpMQTT */
/*открываем соединение с брокером*/
$mqtt = new phpMQTT("localhost", 1883, "PHP MQTT Client");
/*$mqtt->debug = true;*/
if(!$mqtt->connect(true, NULL, "MQuser", "MQpassword")) /*Clean, Will, User, Password*/
{
exit(1);
}
/*Заявляем какие переменные нам нужны, и подписываемся на них */
/*В данном случае получаем системные переменные, как то - время и дату*/
$topics["/system/now/#"] = array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics,0);
/* цикл крутится пока есть соединение к серверу */
while($mqtt->proc()){}
$mqtt->close();
/*данная функция вызывается каждый раз, когда у нас есть обновление переменных*/
function procmsg($topic,$msg)
{
/* отрезаем тип переменной, так как в большинстве случаев он нам известен заранее */
$msgout = substr($msg,strpos($msg, ',', 1) + 1);
/*здесь мы обрабатываем переменные и решаем что с ними делать*/
echo "{$topic}\t$msgout\n";
}
?>
/system/now/day 24
/system/now/hour 11
/system/now/minute 43
/system/now/month 10
/system/now/second 57
/system/now/wDay 3
/system/now/year 2012
/system/now/second 58
Пример php скрипта, который не только читает, но и пишет
Код: Выделить всё
<?php
require("phpMQTT.php"); /*https://github.com/bluerhinos/phpMQTT */
$mqtt = new phpMQTT("serverN", 1883, "PHP Sync");
$mqtt->debug = true;
if(!$mqtt->connect(true, NULL,"user","pass")) /*Clean, Will, User, Password*/
{
exit(1);
}
$mqtt->publish("/Public/var13",128); /*$topic, $content, $qos = 0, $retain = 0*/
$mqtt->publish("/Public/var25",'"Hello World!"'); /*$topic, $content, $qos = 0, $retain = 0*/
$mqtt->close();
?>
var25 System.String
user, pass - реальный пользователь, занесенный в "security.dat"
HTTP сервер
В последней версии подключен http сервер:
Реализация Toby Jaffey (https://github.com/jobytaffey/mqtt-http-server)
Пример находится в ./htdocs/index.html
Код: Выделить всё
<html>
<head>
<title>X13</title>
</head>
<body>
<p>Hello</p>
<input id="iMin" type="number" value="99" />
<input id="chSel" type="checkbox" />
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="pubsub.js"></script>
<script type="text/javascript">
var timer;
function reconnect() {
clearTimeout(timer);
timer = setTimeout(function () { startStreaming(); }, 1000);
}
function dispatchFunc(topic, val) {
$("#iMin").attr('value', val);
}
function startStreaming() {
pubsub.register({ data: dispatchFunc, error: reconnect });
pubsub.subscribe("/var/long", { success: pubsub.read });
}
$(window).load(function () {
startStreaming();
$("#chSel").click(function () { pubsub.publish("/var/bool", $("#chSel").prop("checked")); });
});
</script>
</body>
</html>
pubsub.subscribe - Подписка на переменные
pubsub.publish - Отправка переменных
Экспорт данных
https://cosm.com/feeds/82625 Видео урок
http://www.youtube.com/watch?v=6IH9ngpr ... e=youtu.be
Сайт проекта: X13Home
Оригинал статьи: Умный дом по радиоканалу
Ветка форума: на www.ab-log.ru