Общаемся с котлом по E-BUS (часть 2)

26 июня 2020, 11:48
Приветствую всех! Как вы помните, в прошлой статье мы познакомились с цифровым протоколом E-bus для управления котлами Viallant и Protherm, рассмотрели достоинства шины E-Bus и даже разработали и спаяли переходник на народном чипе ESP8266 для того, чтобы иметь возможность управлять котлом по Wi-Fi.

Еще раз напомню о поставленных нами целях и что в итоге мы хотим получить:

  • Эффективную работу котла, управляемого родным комнатным регулятором.
  • Возможность изменять дневную и ночную температуру, а также температуру ГВС.
  • Считывание и сброс ошибок котла.
  • Синхронизация измененной через приложение температуры с комнатной панелью.
  • Поддержка MQTT.

Как вы уже поняли, в этой части мы более детально познакомимся с программной частью управления, напишем свои модули на nodejs и многое другое. Поехали!

Итак, быстрый поиск показал, что уже есть некое решение на гитхабе от комрада из Германии. Автор проделал огромную работу по реверс-инжинирингу ebus и добавлению конфигурации для самых популярных котлов и комнатных регуляторов. Потратив несколько вечеров на изучение пакета, могу резюмировать: пакет состоит из главного демона ebusd, который осуществляет прослушку шины E-Bus в реал-тайме, осуществляет отправку и прием сообщений на линию. Для взаимодействия с ebusd, на данный момент, существует 3 способа:

  1. C помощью TCP клиента на порт 8888 демона.
  2. С помощью HTTP API (пока что работает только на чтение).
  3. С помощью MQTT (наш вариант!).

Также имеются несколько вспомогательных консольных утилит для взаимодействия с демоном: ebusctl (по сути, простой TCP клиент) и ebusfeed (отправка бинарных дампов на линию).

И на этом моменте сделаю небольшое отступление в сторону настройки нашего адаптер-переходника, который мы спаяли в прошлой статье. Автор заботливо написал прошивку для ESP8266, превращая ее в некий TCP-UART мост, ip адрес и порт которого мы впоследствии укажем ebusd. Процесс загрузки прошивки подробно указан в описании репозитория, после загрузки появляется точка доступа "ebus-******" и подключившись к ней, переходим по адресу 192.168.4.1

1600x_image.png?1593099120

В 1 и 2 пункте указываем AP и пароль нашего роутера, а также в 5 пункте меняем настройку на "Swapped D7 D8". Если все прошло гладко, то на странице Status можно будет лицезреть следующую запись: 

1600x_image.png?1593099072

Также запоминаем первую строку (в нашем случае это 192.168.1.30:9999), указывающую какой ip получила платка. Порт для подключения ebusd по дефолту: 9999. Все, настройка модуля закончена, перейдем к установке и настройке ebusd на Wirenboard.

Скачиваем последнюю версию .deb пакета для stretch c поддержкой MQTT.

wget https://github.com/john30/ebusd/releases/download/v3.4/ebusd-3.4_armhf-stretch_mqtt1.deb

Устанавливаем:

dpkg -i ebusd-3.4_armhf-stretch_mqtt1.deb

Редактируем файл конфигурации.

nano /etc/default/ebusd

Меняем строку с параметрами на 

EBUSD_OPTS="--scanconfig --device=192.168.1.30:9999 --mqttport=1883"

Опция --scanconfig позволяет автоматически выбрать .csv файл для модели нашего котла и регулятора, который автоматически скачается с сервера разработчика (если он есть в наличии). Может оказаться так, что нужной конфигурации для найденного на шине оборудования нет и придется писать .csv шаблон вручную. Но надеемся, что нам повезет)

Итак, запустим уже наконец демон:

systemctl start ebusd
systemctl enable ebusd 

И просканируем нашу шину для отображения найденных устройств:

ebusctl scan result

Получаем такой результат:

08;Vaillant;BAI00;0316;0903;21;16;49;0010015256;3100;006057;N2

15;Vaillant;37000;0130;6002;21;16;20;0020108146;0082;005159;N2

Из этого следует, что на шине два устройства с адресами 08 и 15 соответственно. Первое устройство - это сам котел, а второе - это комнатный регулятор серии 370. Отлично! 

Чтобы узнать параметры, доступные нам, выполним команду:

ebusctl find
Нам важны следующие параметры:

  • DisplayedRoomTemp - отображаемая температура с датчика температуры, встроенного в комнатный регулятор.
  • Hc1DayTemp - требуемая дневная температура.
  • Hc1NightTemp - требуемая ночная температура.
  • DisplayedHwcStorageTemp - отображаемая температура ГВС.
  • HwcTempDesired - требуемая температура ГВС.
  • currenterror - ошибки котла.

Для чтения параметров используется функция read, например, для считывания текущей температуры выполняем команду :

ebusctl read DisplayedRoomTemp -f

Для записи параметров на шину используем команду write, например, для записи требуемой дневной температуры в комнатный регулятор выполним:

ebusctl write Hc1DayTemp -c 370 22.0

-c 370 в данном случае - это circuit name комнатного регулятора, если нужно обратиться к котлу то -c bai

Итак! Разобрались с базовыми командами, теперь перейдем к MQTT .

Приведу формат топиков для считывания и записи дневной температуры, запрос других параметров осуществляется по аналогии: 

  • ebusd/370/Hc1DayTemp/get - запрос дневной температуры, результат в топик ниже.
  • ebusd/370/Hc1DayTemp - текущая заданная дневная температура.
  • ebusd/370/Hc1DayTemp/set payload:22.5 - задание температуры.


Вот таким нехитрым способом осуществляется прием и передача параметров на шину. Ну что ж, пол дела выполнено, но хотелось бы прокинуть все UI WirenBoard, чтобы было удобно и функционально))

Для облегчения задачи нами были написаны следующие модули на node.js:

  1. wirenboard-mqtt-proxy - осуществляет проксирование любых mqtt топиков в формат WB.
  2. wirenboard-module - менеджер модулей для WB.
  3. wirenboard-module-ebus - модуль для работы с EBUS.

Все, что теперь потребуется - это установить пару модулей и прописать требуемые параметры для отображения. Приступим:

curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs git make g   gcc build-essential
npm i -g wirenboard-mqtt-proxy
wirenboard-mqtt-proxy start
wirenboard-mqtt-proxy enable

После этого в UI WB появится следующее виртуальное устройство:

1600x_image.png?1593109896

Данный прокси является демоном, позволяя линковать любые топики с топиками, понятными WB. Например: у нас есть топик от ebusd : "ebusd/370/DisplayedRoomTemp", нам его нужно прилинковать на "/devices/test/controls/t_current" чтобы он появился в UI WB. Параметр topics указывает, сколько топиков в данный момент залинкованы. Не буду углубляться вглубь, если кому интересно, код и описание модуля полностью opensource.

Далее устанавливаем менеджер пакетов WB модуль ebus:

npm i -g wirenboard-module
wirenboard-module ebus

Создаем скрипт на WB, в котором добавляем виртуальное устройство с нужными нам параметрами:

var ebus = require("ebus");

ebus.start({
id: "heating_home",
title: "Heating home (ebus)",

parameters: {
temperature: { id: "370", name: "DisplayedRoomTemp", type: "temperature" },
target_day: { id: "370", name: "Hc1DayTemp", type: "range", max: 35 },
target_night: { id: "370", name: "Hc1NightTemp", type: "range", max: 35 },

boiler_t: { id: "370", name: "DisplayedHwcStorageTemp", type: "temperature" },
boiler_target: { id: "370", name: "HwcTempDesired", type: "range", max: 100 },

boiler_error: { id: "bai", name: "currenterror", type: "text" },
}
});

Все, теперь любуемся результатом:

1600x_image.png?1593109896

На этом в принципе все, если необходимо прокинуть данные в Homekit, то это уже дело техники с помощью пакета MQTTThing.

Спасибо всем, кто дочитал до конца, надеюсь мне удалось немного освятить эту тему! 

P.S Спасибо всем, кто в прошлой статье поддержал идею о создании отдельного модуля на DIN рейку с поддержкой EBUS Ethernet Modbus Wifi POE. Он уже готов и заказан!)

1600x_image.png?1593109896

P.S.S Теперь ищу добровольцев, кто сможет одолжить котел Viallant на время написания и тестирования ПО для данного девайса. Надеюсь добрые люди найдутся)


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Александр Пинчук (JensWeber)

    Круто! Очень интересно и важно, только жаль для wb(

    • . . (Bonefolder)
      . . (Bonefolder) 12 дней назад

      Как я понимаю, не имеет значения куда вы интегрируете данный адаптер. Это всего лишь железка которая превращает один протокол связи в другой)

    • Константин Северов (legion1581)
      Все тоже самое можно проделать и на raspberry. Для интеграции с HA существует плагин. На данный момент у меня есть 5 адаптеров ebus из первой части статьи)
  2. . . (Bonefolder)
    . . (Bonefolder) 12 дней назад

    Могу одолжить котел. Но он в Севастополе))

    Вопрос, можно ли, посредством «врезания» в шину е-Bus, эмулировать VR-91 ?

    Вопрос # 2, что необходимо чтобы стать счастливым обладателем данного адаптера?

  3. (Radu)
    (Radu) 11 дней назад

    Я тоже готов купить такой адаптер

  4. (logistik)
    (logistik) 10 дней назад

    вот бы кто-нить похожее для EMS шины придумал

  5. Антон Киевский (Wild_Rat)

    Если необходимо, могу помочь с тестированием на оборудовании Protherm.

  6. (Moonlight_Guest)
    (Moonlight_Guest) отредактировано 9 дней назад

    Спасибо большое за огромный труд!

    Где и как можно заказать данный адаптер? Могу помочь с тестированием на котле Wolf.

    • Константин Северов (legion1581)

      Адаптер для ESP8266 (из первой части статьи) есть около 5 штук готовых. Модуль-адаптер из этой части статьи пока что жду пока железо придет, чтобы начать тесты

  7. (Dmikelson)
    (Dmikelson) 7 дней назад

    Спасибо за статью.Очень полезная. 

К списку статей

Full House

Интегратор
Россия, г. Москва
+7 495 199-15-81

Скидки для сообщества

Wiren Board

+7 495 150-66-19
Промокод:
SPRUTDELIVERY
Размер скидки:
0%
Вы получите бесплатную доставку.

Разумный дом

+7 487 223-51-50
Промокод:
71
Размер скидки:
20%
Указывать в письме или комментарии к заказу

УЮТНЫЙ ДОМ

+7 495 797-21-74
Промокод:
SPRUT
Размер скидки:
5%

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Тематические чаты

Похожие статьи

04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
01 октября 2018, 07:43
Нативный HomeKit на ESP8266
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
02 июля 2020, 07:24
Я хочу поделиться своей разработкой: "умным открывателем пластикового окна". В статье вы найдете все необходимое, чтобы повторить проект и изготовить собственный привод для открывания окна с использованием штатной фурнитуры окна.
02 октября 2018, 18:41
Установка SDK для компиляции прошивок под HomeKit
18 февраля 2020, 17:06
В данной статье описывается сборка слаботочного эл. щита на базе Wiren Board 6, а так же силового щита для небольшой квартиры.