Как стать автором
Обновить

Комментарии 40

Что за планшет такой?
Стоимость всей системы какова оказалась?
И сильно ли ощущается разница с автоматической системой и без нее?
Стоимость за все оборудование прмерно 500-600к (Z-Wave около 140к)
В плане экономии электроэнергии с автоматизацией примерно на 1.5к в месяц дешевле зимой, чем без нее. По автоматизации климата, ощущется разница, потому что в среднем держится температура и влажность, которая нам комфортна. Вентиляцию тоже не надо бегать, скорости и температуру входящего воздуха менять. Это если сравнивать тоже оборудование с кучей пультов и автоматизацию. Если вообще без каких то заморочек типа вентиляции, то будет душно, либо придется открывать окна, а на улице слишком шумно, грязно и жарко или холодно.
А не практичнее было бы использовать приточно-вытяжной кондиционер (что-то типа такого Breezart 1000 Lux W) с функцией увлажнения?
Тут несколько проблем. Такие вентиляции требует врезку в водопроводную магистраль, как в случае с водным нагревателем, так и с охладителем, что не очень законно. Свою функцию выполнять будут не очень хорошо. Если бы там был хотя бы фрионный охладитель, тогда можно было бы использовать вместо кондиционера. Регулировать температуру можно только для всех помещений сразу и в небольшом промежутке температур, а это не очень удобно, когда ты не один. Либо нужно делать VaV систему, но это нецелесообразно если у вас площадь небольшая. Увлажнение если и будет то тоже так себе, лучше использовать отдельный увлажнитель для приточки, он будет более производительный.
Кратко весьма недешево. Особенно учитывая использование z-wave у которого все устройства дороже чем у zigbee
Самое «прекрасное», что ни один из скриншотов Flow не снабжен даже кусочком кода, что делает статью малополезной и ставит ее в ранг статей «как нарисовать сову».

Статья не соответствует выбранной теме — это очередная общая статья.

Возможно в будущих статьях это будет исправлено, но пока ничего нет.
Согласен, статья получилась обзорной, ко второй части постараюсь выпилить все прибитое гвоздями и относящиеся к авторизации. Исходники фронта и бека положу на гитхаб.
вот было бы интересно! вообще статья правильная. я тоже дошел до упрвления климатом и написанию своего фронтенд. вообще уже реализую примочку webgl, но времени не хватает. хотелось бы флоу посмотреть по алгоритму управления климатом в доме. это возможно?
Все исходники выложу со второй статьей.

Тут как-бы другая цель. Сам думаю написать статью о своем "Умном доме" и пока вырисовывается сказ в 2-х частях.
Первая часть будет о том, что мой "Умный Дом" умеет — т.е. какие функции реализованы, как происходит взаимодействие с пользователями и т.д.


А вторая часть уже о том, как это все устроено и работает изнутри.


Т.е первая часть не будет изобиловать деталями, а будет в основном служить для "затравки", а вторая уже будет объяснять заинтересованным лицам технические подробности. Думаю, что так будет удобнее читать, так как в одной части трудно уместить все вместе.

Ну тогда и называйте статьи понятно и пишите в начале свои задумки.

PS Кстати именно на вашей статье habr.com/ru/post/396985 я когда то учился.
Отличный материал!
Так в NodeRed примерно так и устроено. Сама логика рисуется в графическом редакторе, готовых модулей пруд-пруди, главное уметь искать и потом подружить одно с другим. Кодить там надо только совсем уж причудливые сценарии. Судя по тому, что автор брал готовые модули типа Z-WAVE и Broadlink (хотя, мог и сам что-то спаять/наардуинить), такой подход ему больше нравится.
Кодить там пришлось все равно, и доп модули для Node-RED, и логика сценариев почти вся в функциях, логика работы с протоколом Z-Wave и с вентиляцией. Но подумал что я выложу все сразу на github. Так удобнее будет поднять у себя и разобраться, чем по разрозненным кускам кода. К сожалению к первой статье не успел выпилить чуствительную информацию.
Я знаю, изучал этот продукт несколько лет назад (он мне понравился, но ещё был сыроватым), решил тогда пока остаться на blynk (так и сижу на нём до сих пор). Я его заметил, т.к. он из коробки был интегрирован в дистрибутив Raspbian, на котором у меня живёт сервер умного дома.
Да в NR вся суть кроется в настройках нод и коде нод function.
Без этого — картинка бесполезна.

Специально перешел на NodeRED, чтобы не кодить. У меня вся логика в нем сделана графически, используя только стандартные блоки.
Считаю, что использовать графические среды, чтобы в итоге все описывать в блоках function — это нонсенс. Тогда и NodeRED не нужен.

Ну а настройки блоков? Просто приляпать ноды нельзя.

Настройки есть, конечно. Но только тот минимум, который нужен. Для меня это не кодинг, так как во многих графических средах программирования так сделано — вы тыкаете в элемент, получая его свойства или параметры.

Кодить придется. На готовых много чего не сделать. Ну к примеру делал вкл/выкл света по двум датчикам, суть в подсчете вошедших-вышедших из комнаты. Как вы блоками реализуете ++n и --n?
Датчики сяоми дают давление в гпа, а мне надо в мм.рт.ст. Я нашел монстрообразный конвертер, но ведь проще умножение выполнить в одно блоке function. Блока подсчета времени тоже нет, пришлось писать.

Ждем второй части, мне кажется, она будет более полезной большинству читателей, потому что бОльшая часть умных домов начинает создаваться с более простых вещей, как управление светом и тд.
Понравилось, что автор сделал упор на роботу всего функционала при отсутствии интернета, для меня это тоже было важным.
Интересует, реализовано ли управление голосом. Сначала казалось это не особо нужным, а сейчас в 90% случаев управляю функционалом через голос. Да, интернет при это нужен, но голосовой ассистент может быть прикручен «сбоку», например та же Алиса через написание навыка. Хотя ряд простых фраз можно распознавать и «в оффлайне».

Поскольку чистых IR-кодов для кондиционеров я не нашел, а пульт передает все состояние целиком (обороты, режим, температура) — все возможные состояния для обогрева и охлаждения были скопированы с пульта кондиционера с помощью Broadlink в базу данных. Чистых команд для включения и отключения тоже не нашлось.

А их и нет. Каждое нажатие кнопки пульта либо генерит внутри пульта необходимую посылку (без отправки через IR), либо отправляет весь пакет.
примеры из личного опыта, ESP + библиотека irsend
// NEC
unsigned int NrawDataOn[67] = {8600,4200, 600,1550, 600,500, 600,1550, 600,500, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,1550,
600,500, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550,
600,1550, 650}; // NEC A55A38C7

unsigned int NrawDataOff[67] = {8600,4200, 600,1550, 600,500, 600,1550, 600,500, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,1550,
600,500, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 650,500, 600,500, 600,500, 600,1550, 600,1550,
600,1550, 600}; // NEC A55A38C7

// MITSUBISHI
unsigned int MrawDataOn[179] = {3150,1500, 450,350, 450,1100, 450,350, 450,350, 400,1150, 400,350, 450,1150, 400,350, 450,350, 400,1150, 450,1100, 450,1100, 450,350, 400,1150, 450,350, 400,1150, 400,1150, 450,1100,
450,350, 400,350, 450,350, 450,350, 400,1150, 400,1150, 450,350, 400,1150, 400,1150, 450,350, 400,350, 450,1100, 450,350, 450,350, 400,1150, 400,350, 450,350, 400,1150, 450,1100, 450,350, 400,1150, 450,1100, 450,1100,
450,1150, 400,1150, 400,1150, 450,1100, 450,1100, 450,1150, 400,1150, 400,350, 450,350, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,1100, 450,1150, 400,
1150, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 450,350, 400,1150, 400,1150, 450,350, 400,350, 450,1100, 450,1150, 400,1150, 400,350, 450,350, 400,400, 400,1150, 400,1150, 400,400, 400,350, 450,350,
400,1150, 400}; // UNKNOWN 59602EFD

unsigned int MrawDataOff[179] = {3200,1500, 450,350, 400,1150, 450,350, 400,350, 450,1100, 450,350, 450,1100, 450,350, 400,350, 450,1150, 400,1150, 400,1150, 400,400, 400,1150, 400,350, 450,1150, 400,1150, 400,1150,
400,350, 450,350, 450,350, 400,350, 450,1100, 450,1150, 400,350, 450,1100, 450,1150, 400,350, 450,350, 400,1150, 400,400, 400,350, 450,1100, 450,350, 400,350, 450,1150, 400,1150, 400,350, 450,1150, 400,1150, 400,1150,
400,1150, 450,1100, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,350, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 400,1150, 450,1100, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,
1100, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 450,350, 400,350, 450,1100, 450,1150, 400,350, 450,1100, 450,1150, 400,1150, 400,1150, 400,400, 400,350, 450,350, 400,1150, 400,350, 450,350, 450,350, 400,350,
450,1100, 450}; // UNKNOWN 41EA0121

// PANASONIC
unsigned int PrawDataOn [439]= {3500, 1676, 480, 400, 464, 1244, 484, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464,
396, 468, 1260, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 468, 1256, 472, 1244, 484, 1240, 484, 396, 468, 396, 468, 1260, 468, 396, 468, 396,
468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396,
468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 396, 468, 396, 468, 396, 468, 1260, 468, 1260, 464, 400, 464, 400, 464, 400, 464, 396,
468, 396, 468, 9896, 3492, 1692, 468, 400, 464, 1260, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 396, 468,
1244, 484, 396, 492, 372, 492, 372, 492, 368, 496, 368, 492, 372, 492, 372, 492, 1236, 492, 1232, 468, 1260, 468, 400, 464, 400, 468, 1260, 464, 400, 464, 400, 464, 396,
468, 396, 468, 424, 440, 396, 468, 396, 464, 400, 492, 372, 464, 400, 492, 372, 464, 400, 464, 396, 492, 1236, 492, 372, 492, 372, 492, 1236, 492, 368, 496, 368, 492, 1236,
468, 400, 464, 420, 444, 1264, 460, 404, 460, 400, 464, 1260, 472, 1244, 480, 400, 464, 400, 464, 396, 468, 396, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1232,
468, 1264, 468, 1260, 464, 396, 468, 424, 440, 424, 440, 1260, 468, 396, 492, 1232, 496, 368, 492, 1236, 492, 396, 444, 1264, 464, 420, 440, 404, 460, 404, 460, 400, 464,
400, 464, 400, 464, 400, 464, 400, 464, 400, 460, 424, 444, 420, 444, 420, 444, 420, 444, 1260, 464, 1264, 492, 396, 464, 400, 440, 420, 444, 420, 444, 420, 444, 420, 440,
424, 440, 424, 440, 424, 440, 400, 464, 1264, 464, 1264, 464, 420, 444, 420, 444, 420, 444, 420, 444, 424, 440, 1260, 468, 396, 464, 424, 440, 424, 440, 424, 464, 400, 464,
400, 440, 420, 444, 420, 444, 420, 444, 420, 440, 424, 440, 1264, 464, 424, 440, 424, 440, 424, 440, 420, 444, 420, 444, 420, 444, 420, 444, 420, 440, 424, 440, 424, 440,
424, 440, 1288, 416, 420, 472, 1256, 468, 1244, 484, 396, 468, 1260, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 1260, 472, 1256, 472, 1256, 468, 392,
472, 1256, 472, 1256, 472, 1260, 464, 1260, 468};

unsigned int PrawDataOff [439]= {3500, 1672, 484, 396, 468, 1260, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 400, 464,
396, 468, 1256, 472, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 1244, 484, 1260, 468, 1260, 464, 400, 464, 400, 464, 1260, 468, 396, 468, 396,
468, 396, 472, 392, 472, 392, 468, 396, 468, 396, 468, 396, 468, 392, 472, 392, 472, 392, 472, 396, 468, 392, 472, 392, 472, 396, 468, 396, 468, 396, 464, 396, 468, 396,
492, 372, 468, 396, 492, 372, 492, 372, 492, 372, 492, 372, 492, 368, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1236, 464, 1260, 472, 392, 472, 392, 472, 392, 472, 392,
472, 392, 468, 9896, 3492, 1688, 472, 392, 496, 1236, 492, 372, 492, 372, 492, 372, 492, 368, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492,
1232, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1236, 468, 1260, 492, 1236, 492, 368, 492, 372, 492, 1236, 492, 372, 492, 372, 492, 368,
496, 368, 492, 372, 492, 372, 492, 372, 468, 396, 492, 372, 464, 400, 468, 400, 464, 396, 468, 396, 468, 1260, 492, 372, 492, 372, 492, 1232, 492, 372, 492, 372, 492, 1236,
492, 372, 492, 372, 492, 1232, 496, 368, 492, 372, 492, 1236, 492, 1236, 492, 376, 460, 404, 460, 404, 460, 400, 468, 396, 468, 396, 468, 396, 468, 396, 492, 372, 492, 1232,
492, 1236, 492, 1236, 492, 372, 492, 368, 496, 368, 496, 1232, 492, 376, 488, 1240, 460, 404, 464, 1260, 468, 396, 468, 1260, 492, 372, 492, 372, 492, 372, 492, 368, 496,
368, 492, 372, 492, 372, 468, 396, 468, 396, 468, 396, 492, 372, 492, 372, 492, 372, 492, 1232, 496, 1232, 492, 372, 492, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464,
400, 464, 400, 440, 404, 460, 400, 460, 1268, 460, 1264, 468, 396, 468, 396, 492, 372, 492, 372, 468, 396, 492, 1236, 492, 368, 492, 372, 492, 372, 492, 396, 468, 396, 468,
396, 468, 396, 464, 400, 440, 424, 440, 424, 440, 420, 444, 1260, 468, 420, 444, 420, 444, 420, 440, 424, 444, 420, 444, 416, 448, 416, 448, 416, 444, 420, 444, 420, 444,
424, 440, 1244, 508, 396, 468, 1260, 440, 1264, 464, 420, 444, 1284, 444, 420, 444, 420, 444, 420, 444, 424, 440, 420, 444, 420, 468, 1260, 416, 1284, 444, 1284, 472, 392,
468, 1260, 468, 1260, 468, 1260, 468, 1256, 472};

// ROYAL CLIMA
unsigned int RrawDataOn [199]= {4491, 4402, 587, 1584, 587, 516, 582, 1585, 570, 1580, 591, 533, 557, 542, 552, 1589, 539, 594, 590, 534, 565, 1580, 591, 530, 513, 589,
565, 1576, 595, 1581, 591, 534, 565, 1585, 590, 530, 569, 1580, 565, 1577, 594, 1581, 569, 1602, 569, 534, 565, 1606, 561, 1585, 509, 1636, 569, 559, 591, 529, 569, 534,
586, 538, 561, 1589, 582, 516, 591, 533, 565, 1606, 561, 1589, 539, 1606, 591, 533, 556, 543, 565, 559, 509, 594, 565, 559, 556, 543, 590, 534, 509, 594, 539, 1627, 544,
1589, 582, 1606, 565, 1580, 543, 1628, 565, 5169, 4464, 4443, 549, 1615, 561, 542, 552, 1615, 539, 1610, 565, 555, 513, 590, 539, 1602, 569, 564, 561, 559, 539, 1611, 565,
555, 543, 560, 539, 1632, 565, 1581, 590, 534, 539, 1610, 565, 555, 544, 1606, 538, 1633, 564, 1568, 556, 1632, 539, 563, 535, 1611, 581, 1589, 539, 1633, 538, 564, 587,
533, 539, 564, 556, 569, 530, 1615, 556, 546, 561, 564, 535, 1610, 556, 1615, 539, 1607, 564, 564, 505, 594, 560, 560, 539, 564, 560, 564, 509, 594, 560, 560, 539, 564,
534, 1632, 565, 1585, 539, 1632, 535, 1614, 535, 1632, 565};

unsigned int RrawDataOff [199]= {4490, 4450, 513, 1636, 535, 590, 573, 1576, 617, 1550, 595, 534, 595, 503, 569, 1576, 600, 529, 591, 533, 591, 1554, 617, 486, 595, 529,
569, 1572, 586, 1589, 582, 517, 552, 1619, 591, 512, 586, 1580, 591, 512, 556, 1598, 590, 1572, 513, 1637, 620, 1555, 505, 1662, 569, 1576, 599, 529, 569, 1577, 620, 504,
508, 590, 599, 525, 574, 529, 591, 533, 595, 1550, 574, 1571, 600, 529, 595, 529, 595, 504, 590, 513, 594, 530, 582, 542, 595, 504, 591, 512, 582, 1585, 573, 1572, 560,
1611, 599, 1550, 556, 1593, 595, 1571, 561, 5198, 4498, 4427, 513, 1637, 534, 590, 569, 1576, 595, 1576, 621, 504, 573, 529, 569, 1576, 621, 504, 620, 504, 569, 1576, 595,
534, 569, 529, 595, 1550, 586, 1585, 586, 517, 552, 1619, 616, 508, 565, 1580, 591, 512, 582, 1585, 573, 1577, 556, 1593, 617, 1550, 513, 1658, 575, 1574, 595, 530, 569,
1581, 590, 534, 509, 590, 594, 530, 569, 529, 591, 534, 595, 1550, 513, 1636, 535, 590, 620, 504, 595, 503, 591, 538, 565, 533, 582, 543, 569, 529, 590, 513, 582, 1584,
574, 1576, 582, 1589, 569, 1576, 556, 1598, 590, 1577, 556};

Здравствуйте, поясните вот это: "Датчик CO₂ — портативный, собран на основе датчика MH-Z19b, двух аккумуляторов 18650, ESP32 и мосфета IRF520 (для отключения питания от датчика во время сна контроллера)".

Если питание отключается, как датчик считает корректно показания после подачи питания?

Он прогревается какое-то время, пока показания не нормализуются. Больших ошибок от датчика я не замечал, но мне точные показания не нужны, нужны относительные, чтобы регулировать обороты.
Обычно датчики Co₂ стационарные, им нужно постоянное питание. В моем случае питание я сделал от двух аккумуляторов 18650 с возможностью подзарядки. Так как MH-Z19b потребляет прилично, я его отключаю после передачи показаний вместе с контроллером. Потом контроллер просыпается через 15 минут, прогревает датчик, поднимает WiFi отправляет данные и опять засыпает.

На стороне вентиляции, если сценарий видит сильное увеличение или уменьшение CO₂ может поднять или скинуть несколько скоростей. Пока система не войдет в равновесие.
Спасибо за первую часть статьи.
>Во второй части статьи я расскажу…
С превеликим нетерпением буду ждать вторую часть.

OpenZwave не очень радует. Вроде работает, работает — и потом вдруг самопроизвольно "отваливается" какая-нибудь нода. Приходится пинать вручную, иногда переспаривать заново. Не говоря о том, что некоторые девайсы (вроде дверного кодового звонка) вообще не работают ни при каких настройках. В сети находятся, и даже выдают какие-то "ручки". Но они все показывают "погоду" (кроме разве что уровня заряда батареи). А на попытку открыть/закрыть вообще не реагирует.


есть мысль попробовать проприетарную либу от zwave.me. По крайней мере их фирменный софт на "малинке" (на том же самом контроллере, с теми же самыми устройствами) работает вообще беспроблемно.

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

zwave.me хороший софт, но это дополнительный сервер и дополнительные настройки и интеграции
Интересен момент с уровнем влажности при работающей вентиляции, колько она в %?

Как показывает практика, поднять влажность до приемлемых значений(хотя бы более 40%) практически неосуществимое дело в обычной квартире. Т.к. стоит открыть оконо даже на микро — уровень влажности падает до минимального. Фактически приходится закрывать все окна и двери в одной комнате и включать ультразвуокой увлажнитель — тогда более менее. Если же оконные рамы — старые, деревянные — вообще нереально.
То есть, как только в квартире появляется вентиляция (открыто окно, дверь) — влажность падает.
Итог: либо сидишь в духоте, но с хорошей влажностью, либо свежий воздух, но влажность 30?%.
В этом году в Москве холодных дней пока небыло, поэтому в среднем влажность держится в районе 30-40% при постоянно работающих двух увлажнителях. Средняя скорость притока 110-155 м³ в час.

Тогда получается увлажнители не выполняют свои функции…

Без увлажнителя 15%

У меня такой вопрос, негиковский совсем: прикидывали, насколько данная автоматизация увеличивает стоимость квартиры при продаже? Не превратится ли все это в тыкву без вашего периодического вмешательства? И будет ли готов потенциальный покупатель выбирать квартиру со всей этой "чертовщиной", которую он не понимает, доподлинно не зная дороговизны обслуживания?

Нет смысла продавать с автоматикой, никому ее обслуживать не интересно, вся автоматизация снимается максимум за несколько часов и все выключатели становятся обычными, так же как шторы и вентиляция. По сути все останется как есть, вентиляция, подогрев и прочее, но с отключённой автоматизацией. Ничего даже переделывать не придется.

Спасибо за рассказ. А кто вам систему вентиляции проектировал?
Я себе тоже приточку поставил, но не очень удачно — шумновато получилось, хочу переделать
Если вас интересует конкретная фирма, могу в личку контаткты скинуть. В основном я сам изучал вопрос по вентиляции и было примерное представление как это должно выглядеть. Систему, изоляцию и SONODEC выбирал сам. Меня только подкорректировали в нескольких местах и добавили недостающие элементы.
В чем преимущество Терморегулятор Danfoss Living Connect над обычным терморегулятором на основе медного стакана?
так же будет поддерживать нужную температуру. они у меня стоят уже три года по принципы — я не помню что они есть, но везде всегда +24
Если температура всегда одна, то преимуществ нет. Если требуется опустить температуру, например каждую ночь, то здесь уже появляются возможности для автоматизации. Поскольку тут встроенный градусник, он пытается регулировать температуру батареи под этот показатель. Для центрального отопления это не особо актуально. Из-за близкого расположения градусника, показания не всегда корректны. Еще одно преимущество, это отключить батареи раньше окончания отопительного сезона.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.