Статья

Интеграция приточной вентиляции Ventmachine c Home Assistant по Modbus

Хотел бы рассказать о довольно простой интеграции приточной вентиляции от компании Ventmachine c Home Assistant (далее HA). Сначала давайте разберемся с устройствами - что к чему и как подключаем, а также как работает.

На самом деле, мы подключаем к нашему умному дому не саму приточку, а ее блок управления. Таким образом, абсолютно всё равно какой у нас тип приточки (Satellite, Колибри, ПВУ и т.п.), а важна фирма-производитель блока управления.

Фирмы-производители блоков управления:

  1. GTC
  2. Zentec

Способы подключения:

  1. Modbus - подключение осуществляется напрямую из блока приточки двумя проводами к устройству, на котором установлен HA, через RS485 переходник (можно заказать на алишке).
  2. Modbus-TCP - подключение осуществляется от небольшой платы в приточке (уточняйте ее наличие у продавца) в вашу локальную сеть через витую пару и rj45 разъемы. Я бы советовал именно этот вариант подключения, т.к. не нужно кидать дополнительные провода по дому/квартире.

Пример реализации

Действующие лица:

Home Assistant 0.110.х (Hass.io на raspberry pi 3 b).Ventmachine Satellite.Блок управления GTC (Modbus-TCP).

Цель: Регулировать температуру входящего воздуха и скорость вентилятора с телефона, в удобном графическом интерфейсе.
Долгосрочная цель: объединить кондиционеры и приточку в единый термостат и задавать только целевую температуру.

Подключение

Для начала нам нужно зафиксировать ip адрес приточки в локальной сети.

Далее прописываем в configuration.yaml следующую информацию:

адрес и порт (502) приточки;регистры, которые хотим считывать;два объекта типа input_number для дальнейшей регулировки температуры и скорости;бинарный сенсор пинга для отслеживания доступности.

Список регистров надо запросить у установщиков или напрямую в фирме-производителе блока управления. Также есть особенности: фактические регистры и регистры в документации отличаются на единицу (у GTC это "-1").

Соответствующий код выложен в разделе фрагмент кода.

Автоматизации

Добавляем в automations.yaml триггеры, которые будут записывать в регистры новые данные из объектов input_number, а также нам надо изменять эти объекты, если поменяли их на пульте управления. Надо учитывать, что температура хранится в х10 формате, т.е. не "25.4", а "254".
Можно ещё добавить триггер на старт HA, чтобы обновлять input_number, если кто-то поменял значения с пульта, пока рестартовал HA. Это редкий сценарий, и я не стал с этим заморачиваться.

Соответствующий код выложен в разделе фрагмент кода.

Интерфейс

Теперь, когда все подготовительные работы завершены и новые объекты видны в HA, надо всё это прописать в ui-lovelace.yaml.

На общей вкладке, где сводка по всем помещениям, я вывел следующую информацию (плагин multiple-entity-row).

На отдельной вкладке под приточку я вывел управление (плагины vertical-stack-in-card, dual-gauge-card, button-card).Значения current могут отставать от target ввиду того, что опрос приточки происходит раз в 30 секунд.
График потребления выводится на основании зигби розетки от xiaomi и плагина mini-graph-card.

Соответствующий код выложен в разделе фрагмент кода.

На этом пока всё. Если есть спецы, которые помогут с чтением и записью 16-битовых регистров, то смогу также включать и выключать приточку.

Если у кого-то есть вопросы - задавайте.


GTC 5 версии? У меня пока версия 3, тут один модбас rtu, в котором пульт - мастер, то есть надо выбирать, что подключать, все вместе не работает. Пока только пульт.

Регистры 16 бит научился разбирать и пересобирать на node red нодами bitunloader и bitreloader, между которыми простая функция, перезаписывающая один из элементов разобранного 16-битного слова на массив.

Да, у меня 5я версия ПО. 


Я подключаюсь через вот такой http://gtcontrollers.com/catalog/automatika-gtc/automatika-dley-ventilation/ethernet-em-lan/">модуль . Надо уточнить, возможна ли установка на вашу версию.


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

Скоро контроллеры Simens по profibus будем интегрировать)))

Вот мануал по modbus в home assistant httpshttps://www.home-assistant.io/integrations/sensor.modbus/">://www.home-assistant.io/...

На самом деле для включения и выключения (во всяком случае в моей версии 3) holding регистр 2 имеет самый простой вариант, в нем ничего нет помимо включения и выключения:




0x03 (03)


unsigned int



Power_Dev – Включение и выключение установки


Bit 0 – Включение установки (1) / выключение установки (0)


Bit 1…Bit 15– резерв


То есть нам надо записать туда int 32768 для включения и int 0 для отключения.

Спасибо, регистры у меня такие же. Попробую сделать

Доехал мой WB, пока отложил штатный монитор GTC и экспериментирую управлением с WB.

Оказалось, что "

Bit 1…Bit 15– резерв

" означает, что эти биты в слове у них не нули, а в принципе отсутствуют. То есть весь этот регистр - один бит.

В итоге отправляем туда "1" - приточка стартует, "0" - глохнет.

Ну и самое интересное, значение этого регистра никак не меняется и всегда остается 0, вне зависимости от того, что туда послать или в каком состоянии прибор.

А получилось считать работает приточка или нет? Это уже лежит в 16 битовом регистре

Следующим этапом это. У меня там в рабочем состоянии пока 321 во втором input регистре. Буду ковырять, что это может значить и как это разобрать.

Все оказалось интереснее. Видимо в связи с отсутствием программерского образования (впрочем, как показал опрос, это не решает в данном случае) я недопонял, что биты они перечиаляют справа налево. То есть мое предыдущее предложение кидать в регистр включения/выключения 1 связан не с тем, что они исключают биты, которые считают зарезервированными, а просто старший у них справа, и отправка единицы работает только потому, что 1 десятичная = 00000000 00000001 бинарному слову.


В общем, это все тянет на отдельную статью.


С учетом этого знания я убедился, что состояние приточки 321 вполне достоверно раскладывается по битам без всяких исключений. "Резерв" в этом случае забит нулями.

Удалось на WB через web интерфейс научиться включать и выключать приточку?

У меня получилось

А как приточка подключена к WB? 2 провода, которые идут к пульту просто подключены к RS-485 на контроллере WB? или через LAN?

По 485 на самом контроллере приточи. Рядом с портом для пульта, если память не изменяет  , то там rg11 на 4 пина. А вот ссылка

https://support.wirenboard.com/t/syberia-5/5547/8">https://support.wirenboard.com...

на тему как писать шаблон для wb 

да

defineRule("GTC_state_set_on", { //накидываем правило, которое по кнопкам будет менять параметры приточки
whenChanged: "GTC_state/Turn ON", //при нажатии на эту кнопку
then: function (newValue, devName, cellName) {
dev["GTCController"]["Power h2"] = 1; //включаем
}
});

defineRule("GTC_state_set_off", { //накидываем правило, которое по кнопкам будет менять параметры приточки
whenChanged: "GTC_state/Turn OFF", //при нажатии на эту кнопку
then: function (newValue, devName, cellName) {
dev["GTCController"]["Power h2"] = 0; //выключаем
}
});

а не проще у производителя карту регистров запросить? ABB мне вон за полтора часа прислали через обычную обратную форму связи на сайте. Правда на счетчик, но сути это не меняет.

Да, я так и делал. Прислали в день запроса

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

Ну пока я этого не умею. В Node red не очень хочется с этим идти, а в НА сразу не получилось сделать.


Дойдут руки - попробую еще раз сделать.


Если есть инструкции как, то пиши)

Мб в новых версиях ядра допилили Modbus Sensor, но на момент написания статьи работало всё как-то криво с 16 битными регистрами.

Делал тоже самое только через  WB и НодРед, но только не могу закинуть в кит. мозгов не хватает дописать переменные термостата

добрый день маюсь уже 2 дня есть приточка есть регистры 01 06 00 09 00 01 98 08 так включает и с 0 выключает в службе  modbus.write_register пишу 

hub: hub1 

unit: 1 

address: 9 

value: 1 да тут чего только не пробывал 

она не включается на порту 485 пакеты уходят возврата нет какбудто не то чтото ha отправляет

Вы подключаетесь через 

RS485 или по Modbus-TCP ?

Мой пример не подходит?

Подключался через moxa по tcp посмотрел логи и понял что в порт летят лишние данные 

Должно идти 8 блоков по2 а летят 12 по 2

Спасибо за инструкцию, Вы прямо сделали мой день сегодня! Все залетело и работает, пришлось только немного поменять синтаксис для сенсоров (возможно в самом HA поменялся синтаксис для интеграции Modbus - по крайней мере у меня в самом HA не поднимались сенсоры пока я их не переписал в самом разделе modbus (не sensor) с заменой параметров "register" на "address" и "register_type" на "input_type" в соответствии с докой здесь: https://www.home-assistant.io/integrations/modbus/">https://www.home-assistant.io/...).

Можно ли таким же образом выцепить из приточки температуру внешнего воздуха на входе?

И еще один вопрос остался - при старте HA в логи летят ворнинги ниже, нет идей с чем это может быть связано?



2021-08-22 01:46:40 WARNING (MainThread) [homeassistant.components.modbus.validators] ventmachine_target_temp with uint is not valid, trying to convert

2021-08-22 01:46:40 WARNING (MainThread) [homeassistant.components.modbus.validators] ventmachine_target_fan_speed with uint is not valid, trying to convert

2021-08-22 01:46:40 WARNING (MainThread) [homeassistant.components.modbus.validators] ventmachine_current_temp with uint is not valid, trying to convert

2021-08-22 01:46:40 WARNING (MainThread) [homeassistant.components.modbus.validators] ventmachine_current_fan_speed with uint is not valid, trying to convert

Да, в НА поменяли недавно синтаксис для модбас. Сам пока не обновлялся и не правил его.

Вытащить внешнюю температуру вроде бы было можно. Надо доку регистров смотреть.

По ошибке не подскажу. Она постоянная или только после ребута?

Если получится глянуть регистры, буду благодарен (у меня по ним документации нет).


Ошибка летит раз в 25 минут, по две ошибки для каждого сенсора (т.е. 8 ворнингов раз в 25 минут вылетает), как я понимаю ругается на "data_type: uint", но я хз что это значит )))


UPD: пока писал еще раз вылетел блок из 8 ворнингов спустя 11 минут после предыдущего.


Работает все вроде ОК, и регулировка, и данные сенсоров обновляются при изменении с пульта.


С новым синтаксисом в configuration.yaml прописал так:




modbus:


  - name: GTC


    type: tcp


    host: 192.168.10.12


    port: 502


    sensors:


      - name: ventmachine_target_temp

        unit_of_measurement: °C

        slave: 1

        address: 31

        precision: 1

        scale: 0.1

        data_type: uint

      - name: ventmachine_target_fan_speed

        slave: 1

        address: 32

        data_type: uint

      - name: ventmachine_current_temp

        unit_of_measurement: °C

        slave: 1

        address: 7

        input_type: input

        precision: 1

        scale: 0.1        

      - name: ventmachine_current_fan_speed

        slave: 1

        address: 25

        input_type: input

        data_type: uint

      - name: ventmachine_external_temp

        unit_of_measurement: °C

        slave: 1

        address: 11

        input_type: input

        precision: 1

        scale: 0.1
























Я смотрю еще в новой доке HA указано, что uint автоматически конвертируется в uint16 (возможные варианты для этого параметра 

int16, int32, int64, uint16, uint32, uint64, float16, float32, float64, string). В доке GTC по регистрам формат ответа случаем не указан? Он в формате uint16?

Надо запрашивать у GTC. Я что-то сейчас не могу найти. Можно им позвонить, кстати.

Уже запросил, получил (очень быстро отвечают и вообще молодцы GTC, по прошлому опыту общения тоже только положительные впечатления).

Внешнюю температуру выцепил - дополнил конфиг выше в новом синтаксисе. ИМХО очень полезный датчик (лучший внешний термометр: продувается, не на солнце и т.д.).

Также поправил формат внутреннего и внешнего датчиков температуры (input регистры) - они в формате signed integer по доке.

К сожалению, ворнинги выше так и остаются (в логах, так все работает). Пока не смог победить.

У меня были варнинги из-за более новой прошивки пульта и платы GTC. В итоге с их помощью откатился до старой версии и ошибки ушли, но у меня совсем другие варнинги были.



https://sprut.ai/static/media/cache/00/88/58/5/9714735/81193/1000x_image.png?1630174124" alt="1000x_image.png?1630174124" />

ребят, подскажите, заказал приточку рекупиратор Nova 600 EC. Управление через modbus. Скрин прилагаю. Смогу управлять через Homeassistant? И что конкретно нужно на али заказать? Спасибо. 

Доброго времени суток всем !

Имеется в наличие: Ventmashine V-STAT FKO 4A, ПО контроллера: 3.0.27 + переходник RS485-USB.

Есть желание запихнуть в НА. Регистры все прислали. Пульт отключил, управление все будет через HA.

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

Авансом спасибо Всем, кто откликнется.

Приветствую! Статья выглядит очень полезной, но, к сожалению, в ней протухли ссылки на снипеты. Есть возможность их обновить?
Протух весь код на сайте.
Выкладываю тут

Конфиг:

modbus:
name: GTC
type: tcp
host: 192.168.1.184
port: 502
delay: 5
timeout: 5
sensors:
- name: satellite_target_temp
unit_of_measurement: °C
slave: 1
address: 31
precision: 1
scale: 0.1
data_type: int16
- name: satellite_target_fs
slave: 1
address: 32
data_type: int16
- name: satellite_current_temp
unit_of_measurement: °C
slave: 1
address: 7
input_type: input
precision: 1
scale: 0.1
data_type: int16
- name: satellite_current_fs
slave: 1
address: 25
input_type: input
data_type: int16

input_number:
satellite_target_fs:
name: satellite_target_fs
min: 1
max: 10
step: 1
icon: mdi:fan
satellite_target_temp:
name: satellite_target_temp
min: 5
max: 30
step: 1
icon: mdi:thermometer

sensor:
- platform: template
sensors:
satellite_target_fs_round:
friendly_name: "Скорость"
value_template: "{{ states('input_number.satellite_target_fs')|round(0) }}"
Это интерфейс задания температуры

type: custom:stack-in-card
cards:
- type: custom:dual-gauge-card
title: Температура
min: 5
max: 30
outer:
entity: sensor.satellite_current_temp
label: Current
unit: °
inner:
entity: input_number.satellite_target_temp
label: Target
unit: °
colors:
- color: var(--label-badge-red)
value: 23
- color: var(--label-badge-yellow)
value: 21
- color: var(--label-badge-green)
value: 18
- color: var(--label-badge-blue)
value: 15
- color: var(--paper-blue-400)
value: 0
- type: horizontal-stack
cards:
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: card
color: rgb(60, 60, 60)
icon: mdi:minus
tap_action:
action: call-service
service: input_number.decrement
service_data:
entity_id: input_number.satellite_target_temp
styles:
card:
- width: 100px
- height: 35px
- type: custom:button-card
entity: sensor.satellite_target_fs_round
color_type: card
color: rgb(40, 40, 40)
icon: mdi:thermometer
show_state: false
show_name: false
size: 40px
tap_action:
action: none
styles:
card:
- width: 70px
- height: 35px
- type: custom:button-card
color_type: card
color: rgb(60, 60, 60)
icon: mdi:plus
tap_action:
action: call-service
service: input_number.increment
service_data:
entity_id: input_number.satellite_target_temp
styles:
card:
- width: 100px
- height: 35px
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: blank-card
- type: horizontal-stack
cards:
- type: custom:button-card
color_type: blank-card

Это интерфейс задания скорости

type: custom:stack-in-card
cards:
- type: custom:dual-gauge-card
title: Скорость
min: 1
max: 10
outer:
entity: sensor.satellite_current_fs
label: Current
inner:
entity: sensor.satellite_target_fs_round
label: Target
colors:
- color: '#8263b1'
value: 0
- type: horizontal-stack
cards:
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: card
color: rgb(60, 60, 60)
icon: mdi:minus
tap_action:
action: call-service
service: input_number.decrement
service_data:
entity_id: input_number.satellite_target_fs
styles:
card:
- width: 100px
- height: 35px
- type: custom:button-card
entity: sensor.satellite_target_fs_round
color_type: card
color: rgb(40, 40, 40)
icon: mdi:fan
show_state: false
show_name: false
size: 40px
tap_action:
action: none
styles:
card:
- width: 70px
- height: 35px
- type: custom:button-card
color_type: card
color: rgb(60, 60, 60)
icon: mdi:plus
tap_action:
action: call-service
service: input_number.increment
service_data:
entity_id: input_number.satellite_target_fs
styles:
card:
- width: 100px
- height: 35px
- type: custom:button-card
color_type: blank-card
- type: custom:button-card
color_type: blank-card
- type: horizontal-stack
cards:
- type: custom:button-card
color_type: blank-card
автоматизации

alias: Satellite select fs-select option
trigger:
- platform: state
entity_id: sensor.satellite_target_fs
action:
- service: input_number.set_value
data_template:
entity_id: input_number.satellite_target_fs
value: '{{ (states(''sensor.satellite_target_fs''))|int }}'

alias: Satellite select temp-select option
trigger:
- platform: state
entity_id: sensor.satellite_target_temp
action:
- service: input_number.set_value
data_template:
entity_id: input_number.satellite_target_temp
value: '{{ (states(''sensor.satellite_target_temp''))|int }}'

alias: Satellite set fan speed
trigger:
- platform: state
entity_id: input_number.satellite_target_fs
action:
- service: modbus.write_register
data_template:
hub: GTC
unit: 1
address: 32
value: '{{ (states(''input_number.satellite_target_fs''))|int }}'

alias: Satellite set temp
trigger:
- platform: state
entity_id: input_number.satellite_target_temp
action:
- service: modbus.write_register
data_template:
hub: GTC
unit: 1
address: 31
value: '{{ (((states(''input_number.satellite_target_temp''))|float)*10)|int }}'
Здраствуйте автор!
А как сейчас все работает? менялся ли файл конфигурации?
пытаюсь завести приточку вентмашины в НА, но пока безрезультатно, пробовал разные конфигурации, ни одна не заработала, в том числе и все указанные в этой ветке.

Вернуться назад

Устройства


Xiaomi

Socket

(24 отзыва)

Raspberry Pi

Raspberry Pi 3 Model B

(2 отзыва)

Вернуться назад