<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Умный дом]]></title><description><![CDATA[Обсуждение использования Raspberry Pi в проектах связанных с умным домом]]></description><link>https://raspberrypi.ru/forum/category/46</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 03:13:51 GMT</lastBuildDate><atom:link href="https://raspberrypi.ru/forum/category/46.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Nov 2024 03:39:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Raspberry Pi и умный дом]]></title><description><![CDATA[<p dir="auto">Многие пытаются собрать «Умный дом» своими руками. При выборе системы стоит учитывать не только ассортимент и стоимость конечных устройств, но и возможности контроллера.</p>
<p dir="auto">Большинство контроллеров сразу готовы к работе «из коробки», но представляют ограниченные возможности. Однако нередко именно гибкость и возможность лёгкой интеграции является основополагающим критерием при выборе. И вот, появился долгожданный «кубик Lego» для систем автоматизации на базе технологии Z-Wave, который обладает желаемой гибкостью и в то же время большим функционалом и низкой ценой. Плата расширения RaZberry для Raspberry Pi, превращает самый популярный и дешёвый мини-компьютер в Z-Wave контроллер домашней автоматизации.<br />
<strong>RaZberry</strong> — это решение три в одном:</p>
<ul>
<li>плата с трансивером Z-Wave ZM3102</li>
<li>прошивка для ZM3102, расширяющая возможности стандартных прошивок для стиков</li>
<li>ПО Z-Way</li>
</ul>
<p dir="auto"><img src="/forum/assets/uploads/files/1732764625869-69f82e1f-4517-47cb-8e84-65df27f9cf8a-image.png" alt="69f82e1f-4517-47cb-8e84-65df27f9cf8a-image.png" class=" img-fluid img-markdown" /></p>
<h3>Железо</h3>
<p dir="auto">В ОС Linux RaZberry виден как com-порт /dev/ttyAMA0. Плата по сути состоит из</p>
<ul>
<li>трансивера ZM3102,</li>
<li>памяти EEPROM для хранения данных сети Z-Wave,</li>
<li>PCBA антенны</li>
<li>коннектора ножек UART для GPIO Raspberry Pi.</li>
</ul>
<p dir="auto">Реально используется только ножки Vcc, Gnd, TX и RX. Остальные ножки не используется для работы платы и лишь помогают её крепче зафиксировать. В теории эти ножки можно использовать для других нужд.</p>
<h3>Прошивка</h3>
<p dir="auto">Плата предоставляет интерфейс полностью совместимый с Sigma Designs Serial API, что даёт возможность использовать не только прилагаемое ПО Z-Way, но и любое другое ПО для Z-Wave (Open Z-Wave, LinuxMCE, FHEM или самописное), а также облачный сервис Z-Cloud (см. <a href="http://code.google.com/p/z-cloud/wiki/WikiRaspberryInstallationHowto" rel="nofollow ugc">инструкцию</a>).</p>
<p dir="auto">Плата также предоставляет расширение протокола Sigma Designs Serial API от <a href="http://Z-Wave.Me" rel="nofollow ugc">Z-Wave.Me</a>, которое необходимо для работы ПО Z-Way.<br />
Прошивка также позволяет обновлять себя по UART, что позволит не только исправить возможные баги в будущем, но и сменить версию прошивки с той, что установлена по умолчанию (SDK 4.54.01) на более старую 5.03, не имеющую полезных функций NWI, Explorer Frame и Random HomeId, но включающую функционал SUC/SIS. (Для внимательных: да, я не ошибся, 4 &gt; 5 <img src="https://raspberrypi.ru/forum/assets/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=l0bs4eq4n9s" class="not-responsive emoji emoji-android emoji--wink" style="height:23px;width:auto;vertical-align:middle" title=";)" alt="😉" /></p>
<h3>Программное обеспечение</h3>
<p dir="auto">Z-Way устанавливается поверх Raspbian wheezy путём запуска команды</p>
<pre><code>wget ‐q ­‐O ­‐ http://razberry.z-­wave.me/install | sudo bash
</code></pre>
<p dir="auto">Скрипт установки</p>
<ul>
<li>поставит Z-Way в /opt/z-way-server</li>
<li>пропишет в /etc/init.d/Z-Way скрипт для запуска,</li>
<li>добавит его в авто запуск и настроит порт ttyAMA0.</li>
</ul>
<p dir="auto">После перезагрузки (для применения настроек ядра для ttyAMA0 — по умолчанию Raspbian использует UART для консоли) сервер готов к работе.<br />
В браузере откройте http://IP_OF_RASPBERRY:8083 и начните строить сеть Z-Wave.<br />
Рассмотрим подробней поставляемое в комплекте с RaZberry ПО Z-Way.<br />
Оно состоит из нескольких частей:</p>
<ul>
<li>библиотека libzway — основа движка Z-Wave, предоставляющая C API для простой работы с Z-Wave (зависит от pthreads, zlib, openssl)</li>
<li>библиотека libzwayjs — биндинг между C и JavaScript движком Google V8. Предоставляет простое JS API для работы с сетью Z-Wave (зависит от libv8 и libzway)</li>
<li>библиотека libzwayhttp — HTTP сервис для обслуживания внешних клиентов, в том числе пользовательские интерфейсы. Предоставляет JSON API (зависит от libmicrohttpd, openssl, libzwayjs и libzway)</li>
<li>main.cpp — обвязка для запуска всех сервисов вместе, чтения конфигов и параметров командной строки</li>
</ul>
<p dir="auto">Такая структура позволяет использовать разные уровни интеграции с составными частями Z-Way.<br />
Для проектов, где важна производительность, доступен API уровня C (в комплекте есть заголовочные .h файлы для libzway), для проектов, где нужна оперативная разработка, проще использовать JS API.<br />
Важно, что оба интерфейса имеют сходную структуру, что позволяет просто портировать код с JavaScript на C после быстрого прототипирования.</p>
<p dir="auto">Далее я опишу API уровня JavaScript и покажу, как создавать простые правила автоматизации. Интерфейс уровня C останется за рамками данной статьи.<br />
Стоит заметить, что синтаксис в движке JavaScript Z-Way на стороне сервера сделан по аналогии с тем, что было реализовано для Z-Cloud на стороне клиента — см. описание API Z-Cloud.<br />
Для дальнейшего чтива предполагается, что читатель уже знаком с особенностями протокола Z-Wave (<a href="http://habrahabr.ru/post/163387/" rel="nofollow ugc">см.подробное описание протокола Z-Wave)</a>.<br />
Всё относящееся к Z-Wave в пространстве имён JavaScript находится в глобальном объекте zway, который предоставляет полное дерево данных и методов над устройствами Z-Wave.<br />
Дочерний объект controller, содержит данные специфические для контроллера Z-Wave, а также список устройств devices.<br />
Каждое устройство содержит структуру данных (data), а также список каналов устройства (instances).<br />
Каждый канал имеет список Классов Команд Z-Wave, поддерживаемых устройством. На Классе Команд имеются методы для вызова функций (Set, Get, ...), а также дерево данных (data), где хранится вся информация о Классе.<br />
Графически это  можно иллюстрировать примерно так (картинка из документации):<br />
<img src="/forum/assets/uploads/files/1732764656992-55903489-3753-45fc-ac8f-1a3d88403bf6-image.png" alt="55903489-3753-45fc-ac8f-1a3d88403bf6-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Структура  API асинхронна и делится на две части:</p>
<ul>
<li>отправка команд и запросов</li>
<li>получение событий изменения состояний</li>
</ul>
<p dir="auto">Отправка команд осуществляется запросами вида</p>
<pre><code>zway.devices[2].instances[0].commandClasses.Basic.Set(0)
</code></pre>
<p dir="auto">(этот пример выключит свет).</p>
<p dir="auto">Функция .Get() отправит запрос значения устройству.zway.devices[2].RequestNodeNeighbourUpdate() попросит устройство обновить соседей, а командаzway.AddNodeToNetwork(1) запустит процесс добавления нового устройства к сети.<br />
Более подробно все команды описаны в документации на странице документации проекта RaZberry.<br />
Каждому запросу можно добавить два дополнительных параметра: callback-функции для успешной и неудачной отправки.<br />
Команды ставят в очередь на отправку соответствующие пакеты. Отправка осуществляется через Sigma Designs Serial API, реализованную на плате расширения RaZberry. Вся магия Z-Wave скрыта под этим уровнем абстракции: для устройств на батарейках эти пакеты помечаются как ожидающие пробуждения, для шифрования идёт предварительный обмен ключами, для экономии заряда батареек и времени в эфире некоторые пакеты стыкуются вместе и многое другое…<br />
Как и в любом протоколе, в Z-Wave много своих тараканов, которые все находятся под ковром API Z-Way и не вылезают оттуда.<br />
Все полученные от устройств данные записываются в дерево data, относящееся к устройству или Классу Команд.<br />
Каждый элемент дерева data имеет атрибуты value (значение элемента), updateTime и invalidateTime (timestamp дат обновления и устаревания значения), name (имя). Структура дерева тоже подробно описана в документации.<br />
Для получения уведомлений об изменении значений дерева существует система подписок на события. Функция bind для каждого элемента дерева позволяет привязать callback функцию к изменению данных.<br />
zway.devices[2].instances[0].commandClasses.Basic.data.level.bind(function (type[, arg]) {}, [arg, [watchChildren=false&rsqb;&rsqb;);Опциональный аргумент arg, передаваемый bind будет передан в callback функцию и пригодится для передачи дополнительных параметров для разделения разных событий, имеющих общий callback-обработчик. Параметр watchChildren (true или false) позволяет отслеживать не только изменения данного элемента дерева, но и дочерних. Объект this в callback функции — это элемент дерева data, на котором запускается bind: this.value — значение, this.updateTime — дата последнего обовления и т.д. Аргумент type содержит битовую маску типа изменения (изменён, обновлён, удалён, устарел,… — подробно все значения описаны в ZDefsPublic.h, который входит в комплект ПО).Аналогично есть функция bind на глобальном объекте zway, которая позволяет отслеживать изменения в массивах devices, instances и commandClasses:zway.bind(function(type, nodeId, instanceId, commandClassId) {}, [mask = 0xffff])Аргумент type указывает на характер изменения (добавлено/удалено устройство/канал/класс команд или сохранён файл с деревом данных на диск (ZDDX-файл). Триплет nodeId, instanceId, commandClassId указывает на изенённый объект.Отписаться от событий можно функцией unbind.Для упрощения синтаксиса можно опускать слова commandClasses, instances[0] (именно нулевой канал!), .value(level == 0 аналогично level.value == 0, но при JSON-сериализации без .value будет сериализован весь элемент дерева с его атрибутами, а только значение).<br />
Стоит обратить внимание, что глобальный объект zway является нативным в v8, т.е. это не обычный JavaScript объект: у него можно лишь менять данные элементов дерева. Все остальные изменения в дереве игнорируются.Приведём несколько примеров:Запуск shell-команд при получении контроллером событий Basic Set от других устройств сети (например, выключатель ассоциирован с контроллером с каналом 1 при помощи MultiChannelAssociation)</p>
<pre><code>var instanceId = 1;

var ctrlNodeId = zway.controller.data.nodeId.value; // Get controler Node Id

if (zway.devices[ctrlNodeId] &amp;&amp; zway.devices[ctrlNodeId].instances[instanceId]) { // Check that instance object exists

    var basicCC = zway.devices[ctrlNodeId].instances[instanceId].Basic;

    if (basicCC) { // check that Basic exists

        basicCC.data.level.bind(function() { // bind to Basic level value

            system("echo " + this.value);

        });

    }

}
</code></pre>
<p dir="auto">Автоматическое отключение диммера света через 10 секунд после включения (для реле используйте SwitchBinary вместо SwitchMultilevel). (Здесь предполагается, что устройство умеет отправлять отчёты и ассоциировано с контроллером)</p>
<pre><code>var nodeId = 2;
var instanceId = 0;

var _tmr = null

zway.devices[nodeId].instances[instanceId].SwitchMultilevel.data.level.bind(function() {

    var node = args[0];

    var instance = args[1];

    if (_tmr) {

        clearTimeout(_tmr);

    }

    _tmr = null;

    if (this.value &gt; 0) {

        _tmr = setTimeout(function () {

            zway.devices[nodeId].instances[instanceId].SwitchMultilevel.Set(0);

            _tmr = null;

        }, 10*1000);

    }

});
</code></pre>
<p dir="auto">тут стоит обратить внимание, что для запуска данного кода несколько раз нужно вводить массив _tmr для каждого устройства/канаоа)</p>
<h3>Выполнение JavaScript кода</h3>
<p dir="auto">Куда вставлять этот JavaScript код? Есть несколько способов выполнить данный код:Записать код в файл и положить его на SD-карту Raspberry Pi в папку /opt/z-way-server/[ваша папка]. Далее этот код можно исполнить из automation/main.js: executeFile(pathToJavaScriptFile).Вы также можете прописать ваш собственный JavaScript файл в config.xml вместо родного файла RaZberry.Отправить его по HTTP через Z-Way JSON API</p>
<h3>Теперь опишем Z-Way HTTP/JSON API</h3>
<p dir="auto">Данный интерфейс взаимодействия с сервером Z-Way использует протокол HTTP и формат JSON для передачи данных. С его помощью не сложно создать графические интерфейс для сервера автоматизации.Команды кодируются прямо в URL запроса, а ответы приходят в привычном аяксерам JSON формате.Запрос<br />
/ZWaveAPI/Data/ предоставляет JSON структуру полного дерева обновлений с момента времени . Она имеет вид</p>
<pre><code>{ path1: object1, path2: object2, ... updateTime: }
</code></pre>
<ul>
<li>Здесь pathN — это путь к изменившемуся элементу дерева,</li>
<li>objectN — новое значение этого элемента.</li>
<li>updateTime — время формирования обновлений (его нужно указать в следующем запросе, чтоб получить обновления)</li>
</ul>
<p dir="auto">Если запросить /ZWaveAPI/Data/0, то сервер вернёт полную структуру данных.</p>
<p dir="auto">Запрос /ZWaveAPI/Run/ запускает JavaScript код zway..<br />
Этот запрос аналогичен более общему /JS/Run/ и создан для совместимости с API сервиса Z-Cloud.<br />
Запрос /JS/Run/ выполняет в v8 движке и возвращает в виде JSON результат выполнения этой команды.<br />
Другие команды описаны в документации.<br />
Несколько примеров:</p>
<pre><code>http://localhost:8083/ZWaveAPI/Run/devices[2].SwitchMultilvel.data.level.value
</code></pre>
<p dir="auto">— возвращает последний полученный от устройства уровень яркости (стоит перед чтением послать</p>
<pre><code>SwitchMultilevel.Get())http://localhost:8083/ZWaveAPI/Run/devices[3].instances[1].SensorMultilvel.data.level.value
</code></pre>
<p dir="auto">— возвращает последнее полученный от устройства значение датчика (стоит перед чтением послать</p>
<pre><code>SensorMultilevel.Get())http://localhost:8083/ZWaveAPI/Run/devices[2].Basic.Set(0)
</code></pre>
<p dir="auto">— выключает устройство<br />
Напомним, instances[0], commandClasses и value можно опустить.!</p>
<p dir="auto">Не забывайте, что некоторые символы требуется явно кодировать перед отправкой (url encode): например, + { }.</p>
<p dir="auto">Вместе с софтом поставляется базовый интерфейс для браузера. Он тоже использует Z-Way JSON API для взаимодействия с сервером. Его код удобно использовать для изучения работы API. Также может оказаться полезным расширение для jQuery для отслеживания обновлений дерева, полученных запросом/ZWaveAPI/Data/Вот так выглядит взаимодействие разных слоёв системы (картинка из документации):</p>
<p dir="auto"><img src="/forum/assets/uploads/files/1732764661487-dea5b837-231c-491b-be96-5652eb1b16d2-image.png" alt="dea5b837-231c-491b-be96-5652eb1b16d2-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Через некоторое время планируется написание JS скриптов для автоматизации, предназначенных для простых пользователей (кривые заготовки уже лежат в папке automation). Их можно будет использовать совместно с собственными скриптами пользователя, т.е. собственные скрипты можно уже начинать писать и использовать в ваших проектах.</p>
<h3>Где взять?</h3>
<p dir="auto">Raspberry Pi продаются на сайтах RS components или Farnell.Плата RaZberry и другое Z-Wave оборудование доступно в интернет-магазине <a href="http://Z-Wave.Me" rel="nofollow ugc">Z-Wave.Me</a> и других.</p>
<h3>Пора автоматизировать!</h3>
<p dir="auto">Уверен, RaZberry станет удобным решением для построения бюджетных систем автоматизации на базе Z-Wav</p>
]]></description><link>https://raspberrypi.ru/forum/topic/4458/raspberry-pi-и-умный-дом</link><guid isPermaLink="true">https://raspberrypi.ru/forum/topic/4458/raspberry-pi-и-умный-дом</guid><dc:creator><![CDATA[pi]]></dc:creator><pubDate>Thu, 28 Nov 2024 03:39:50 GMT</pubDate></item><item><title><![CDATA[Система автоматизации: включение чайника дома по интернету]]></title><description><![CDATA[<p dir="auto">я в таких вопросах теряюсь, а потому обращаюсь за помощью к специалистам. чтобы ничего не сгорело от моих экспериментов. пару месяцев назад мне установили умный свет умный свет. можно регулировать дистанционно где и когда включать свет. существуют различные варианты сценариев подключения света, так что можно выбирать подходящее для каждого. это очень удобно. стоит конечно не очень дешево, но комфорт прежде всего.</p>
]]></description><link>https://raspberrypi.ru/forum/topic/3797/система-автоматизации-включение-чайника-дома-по-интернету</link><guid isPermaLink="true">https://raspberrypi.ru/forum/topic/3797/система-автоматизации-включение-чайника-дома-по-интернету</guid><dc:creator><![CDATA[pi]]></dc:creator><pubDate>Mon, 18 Nov 2024 16:51:17 GMT</pubDate></item><item><title><![CDATA[Умный дом или гараж]]></title><description><![CDATA[<p dir="auto">Здравствуйте! Нужна помощь в создании мне данного проекта за адекватные деньги или просто помочь. Мне нужно написать с нуля все конфиги и т.д. и т.п. как для чайников с описанием. Смысл таков: плата с 8 реле подключена к малине, которой надо управлять через сайт и выводить информацию на сайт о работе этих реле, соединение с инетом по usb модему с статическим ip или через Ethernet, а так же онлайн вещание на сайт видео с камеры usb и другие полезные фичи.Есть конкретное готовое техническое задание, могу скинуть файлик. Предложения и помощи жду как здесь так и на <a href="mailto:Golev_@mail.ru" rel="nofollow ugc">Golev_@mail.ru</a></p>
]]></description><link>https://raspberrypi.ru/forum/topic/3674/умный-дом-или-гараж</link><guid isPermaLink="true">https://raspberrypi.ru/forum/topic/3674/умный-дом-или-гараж</guid><dc:creator><![CDATA[pi]]></dc:creator><pubDate>Mon, 18 Nov 2024 16:50:48 GMT</pubDate></item><item><title><![CDATA[Освещение в и умные розетки]]></title><description><![CDATA[<p dir="auto">На дняк как раз у себя в блоге писал про проходные выключатели на импульсных реле вместе с малиной.<br />
http://home-smart-home.ru/proxodnoj-vyklyuchatel-raspberry-pi</p>
<p dir="auto">Только стоит учитывать не только номинал а еще и какую нагрузку вы будете подключать в вашу «розетку» если с резистивной все несколько проще (лампы люстры утюги и тд) то с индуктивной будте аккуратнее! Чтобы наши реле не залипали не искрили.</p>
]]></description><link>https://raspberrypi.ru/forum/topic/3494/освещение-в-и-умные-розетки</link><guid isPermaLink="true">https://raspberrypi.ru/forum/topic/3494/освещение-в-и-умные-розетки</guid><dc:creator><![CDATA[pi]]></dc:creator><pubDate>Mon, 18 Nov 2024 16:50:08 GMT</pubDate></item><item><title><![CDATA[Выбираю железо под задачу автоматизации]]></title><description><![CDATA[<p dir="auto">Если будут коммерчески предложения по работе - kosmobit@mail.ru.</p>
]]></description><link>https://raspberrypi.ru/forum/topic/2974/выбираю-железо-под-задачу-автоматизации</link><guid isPermaLink="true">https://raspberrypi.ru/forum/topic/2974/выбираю-железо-под-задачу-автоматизации</guid><dc:creator><![CDATA[pi]]></dc:creator><pubDate>Mon, 18 Nov 2024 16:44:30 GMT</pubDate></item></channel></rss>