BHT-6000 Series: различия между версиями
м (→Установка параметров подключения: Ссылка на изменение modbus-адреса.) |
|||
(не показаны 33 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Термостат BHT-6000 Series}} | {{DISPLAYTITLE: Термостат BHT-6000 Series}} | ||
[[Image: BHT-6000 Series.png|300px|thumb|right| Термостат BHT-6000 Series, белый]] | [[Image: BHT-6000 Series.png|300px|thumb|right| Термостат BHT-6000 Series, белый]] | ||
== Работа по Modbus == | |||
Термостатом можно управлять по протоколу [[Протокол_Modbus|Modbus RTU]]. На физическом уровне он подключается через интерфейс [[RS-485]]. | |||
Настраивать термостат можно с помощью утилиты [[Modbus-client|modbus_client]], использовать [[Working with WB devices without a controller|приложение для компьютера на ОС Windows]] или из веб-интерфейса контроллера Wiren Board. | |||
В этой статье мы будем использовать утилиту <code>modbus_client</code>, а подключаться к контроллеру через [[SSH]]. Синтаксис и параметры командной строки можно посмотреть на странице утилиты в разделе [[Modbus-client#Аргументы командной строки|Аргументы командной строки]]. | |||
== Подготовка к работе == | |||
{{Wbincludes:Modbus: Preparing for work}} | |||
== Настройка для работы с ПО == | |||
| | [[Image: Devices View BHT-6000 Series.png |300px|thumb|right| Представление BHT-6000 Series в веб-интерфейсе]] | ||
| | |||
| | === Установка параметров подключения === | ||
|- | Вы можете перед началом работы с термостатом назначить ему [[#Установка modbus-адреса | modbus-адрес]], но параметры подключения изменить нельзя. | ||
По умолчанию в термостате заданы параметры: Адрес — 1, Скорость — 9600 бит/с, Четность — Even, Бит — 1. | |||
|- | |||
Так как у всех устройств Wiren Board параметры интерфейса по умолчанию: Скорость — 9600 бит/с, Четность — None, Бит — 2, то мы не сможем использовать термостат на одной линии с ними без перенастройки устройств Wiren Board. | |||
=== Шаблон устройства === | |||
'''ВНИМАНИЕ:''' шаблон пока не включен в поставку [[Драйвер wb-mqtt-serial|wb-mqtt-serial]], поэтому вам нужно самостоятельно скопировать шаблон на контроллер в папку <code>/usr/share/wb-mqtt-serial/templates</code>. | |||
=== | |||
Шаблон <code>config-bht-6000-series.json</code>: | |||
| | <syntaxhighlight lang="json"> | ||
{ | |||
"device_type": "BHT-6000 Series", | |||
}}{{ | "device": { | ||
"name": "BHT-6000 Series", | |||
"id": "bht-6000-series", | |||
"channels": [ | |||
{ | |||
"name": "Power", | |||
"reg_type": "holding", | |||
"address": "0x00", | |||
"type": "switch", | |||
"format": "s16" | |||
}, | |||
{ | |||
"name": "Lock buttons", | |||
"reg_type": "holding", | |||
"address": "0x06", | |||
"type": "wo-switch", | |||
"format": "s16" | |||
}, | |||
{ | |||
"name": "Temperature for internal sensor", | |||
"reg_type": "holding", | |||
"address": "0x01", | |||
"type": "temperature", | |||
"format": "s16", | |||
"scale": 0.1 | |||
}, | |||
{ | |||
"name": "Weekly program setting temperature", | |||
"reg_type": "holding", | |||
"address": "0x05", | |||
"type": "temperature", | |||
"format": "s16", | |||
"scale": 0.1 | |||
}, | |||
{ | |||
"name": "Heating status", | |||
"reg_type": "holding", | |||
"address": "0x03", | |||
"type": "switch", | |||
"format": "s16", | |||
"readonly": true | |||
}, | |||
{ | |||
"name": "Manual mode", | |||
"reg_type": "holding", | |||
"address": "0x02", | |||
"type": "switch", | |||
"format": "s16" | |||
}, | |||
{ | |||
"name": "Setting temperature", | |||
"reg_type": "holding", | |||
"address": "0x04", | |||
"type": "range", | |||
"format": "s16", | |||
"scale": 0.1, | |||
"max": 35 | |||
} | |||
] | |||
} | |||
} | |||
</syntaxhighlight> | |||
После копирования шаблона на контроллер перезапустите службу <code>wb-mqtt-serial</code>: | |||
<syntaxhighlight lang="bash"> | |||
service wb-mqtt-serial restart | |||
</syntaxhighlight> | |||
Теперь выберите шаблон термостата в разделе '''Serial Device Driver Configuration''' веб-интерфейса: | |||
# Откройте веб-интерфейс и перейдите '''Configs''' → '''Serial Device Driver Configuration'''. | |||
# Выберите один из двух интерфейсов связи и установите параметры интерфейса: Baud rate — 9600 бит/с, Parity — N, Data bits — 8, Stop bits — 1. | |||
# Нажмите на кнопку '''+ Device''' и в поле '''Device N''' выберите '''BHT-6000 Series''', где N — порядковый номер устройства. | |||
# В поле '''Slave id''' укажите modbus-адрес термостата. | |||
# Сохраните настройки нажатием на кнопку '''Save'''. | |||
Теперь устройство будет доступно на вкладке '''Devices'''. | |||
Вы можете изменить шаблон по своему усмотрению — смотрите описание шаблонов в статье [[Драйвер wb-mqtt-serial:Примеры написания шаблонов | Драйвер wb-mqtt-serial]]. | |||
== Изменение настроек термостата == | |||
Все настройки, доступные для изменения через RS-485 выведены в веб-интерфейс, но вы можете изменять их и из командной строки. Для этого нужно записать требуемые значения в [[#Таблица modbus-регистров | регистры термостата]]. | |||
В примерах термостат подключен к интерфейсу <code>/dev/ttyRS485-1</code>, имеет настройки интерфейса <code>9600/None/1/8</code> и доступен по адресу <code>2</code>. | |||
=== Установка modbus-адреса === | |||
Modbus-адрес термостата устанавливается из сервисного меню и не может быть изменен через RS-485: | |||
# Выключите термостат нажатием на кнопку <code>ON/OFF</code>. | # Выключите термостат нажатием на кнопку <code>ON/OFF</code>. | ||
# Зажмите одновременно кнопки <code>M</code> и <code>Clock</code> на 5 секунд — термостат войдет в сервисный режим. | # Зажмите одновременно кнопки <code>M</code> и <code>Clock</code> на 5 секунд — термостат войдет в сервисный режим. | ||
Строка 60: | Строка 123: | ||
Теперь вы можете подключиться к термостату по-новому modbus-адресу. | Теперь вы можете подключиться к термостату по-новому modbus-адресу. | ||
=== | === Общий алгоритм настройки === | ||
# Ищете адрес регистра и функцию записи. | |||
# Смотрите возможные значения. | |||
# Записываете в регистр значение, которое попадает в диапазон возможных. | |||
=== Блокировка кнопок === | |||
Мы хотим заблокировать все физические кнопки на термостате: | |||
# Состояние блокировки хранится в регистре '''Lock buttons''' с адресом <code>0x06</code>. Функция записи — <code>0x06</code>. | |||
# Возможные значения: 0 — Unlock, 1 — Lock. | |||
# Теперь запишите значение '''1''' в регистр '''Lock buttons''': | |||
#:<syntaxhighlight lang="bash"> | |||
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x06 -r0x06 1 | |||
Data to write: 0x1 | |||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1) | |||
[02][06][00][06][00][01][A8][38] | |||
Waiting for a confirmation... | |||
<02><06><00><06><00><01><A8><38> | |||
SUCCESS: written 1 elements! | |||
</syntaxhighlight> | |||
Кнопки термостата заблокированы. Для разблокировки запишите в регистр '''Lock buttons''' значение 0 — Unlock. | |||
===Чтение и запись значений температуры=== | |||
Значение температуры нужно конвертировать перед записью или после чтения. | |||
Прочитаем значение текущей уставки из регистра '''Setting temperature''', 0x04 — получим: | |||
<syntaxhighlight lang="bash"> | |||
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x03 -r0x04 | |||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1) | |||
[02][03][00][04][00][01][C5][F8] | |||
Waiting for a confirmation... | |||
<02><03><02><01><2C><FC><09> | |||
SUCCESS: read 1 of elements: | |||
Data: 0x012c | |||
</syntaxhighlight> | |||
В документации к термостату указан '''коэффициент конвертации — 0.1'''. Это значит, что при чтении мы должны умножить полученное значение на коэффициент, а при записи разделить. | |||
Нами было считано значение <code>0x012с</code> — это число 300, умножим его на коэффициент: <code>300 × 0.1 = 30 °С</code> | |||
Теперь запишем в регистр значение 12°C: <code>12 / 0.1 = 120</code>: | |||
<syntaxhighlight lang="bash"> | |||
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x06 -r0x04 120 | |||
Data to write: 0x78 | |||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1) | |||
[02][06][00][04][00][78][C8][1A] | |||
Waiting for a confirmation... | |||
<02><06><00><04><00><78><C8><1A> | |||
SUCCESS: written 1 elements! | |||
</syntaxhighlight> | |||
{|class="wikitable sortable" | == Таблица modbus-регистров== | ||
{|class="wikitable sortable" | |||
! Назначение | ! Назначение | ||
! Длина, байт | |||
! Адрес, Hex | |||
! Функция чтения | |||
! Функция записи | |||
! Возможные значения | |||
|- | |- | ||
| | | Power | ||
| | | 1 | ||
| | | 0x00 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| 0 — OFF, 1 — ON | |||
|- | |- | ||
| Temperature for internal sensor | |||
| 1 | | 1 | ||
| | | 0x01 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| | | 5…45 | ||
|- | |- | ||
| | | Manual mode | ||
| | | 1 | ||
| | | 0x02 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| 0 — Auto, 1 — Manual | |||
|- | |- | ||
| | | Heating status | ||
| | | 1 | ||
| | | 0x03 | ||
| | | 0x03 | ||
| | | - | ||
| 0 — Not heating, 1 — Heating | |||
|- | |- | ||
| | | Setting temperature | ||
| | | 1 | ||
| | | 0x04 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| 5…45 | |||
|- | |- | ||
| | | Weekly program setting temperature | ||
| | | 1 | ||
| | | 0x05 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| 5…45 | |||
|- | |- | ||
| | | Lock buttons | ||
| | | 1 | ||
| | | 0x06 | ||
| | | 0x03 | ||
| | | 0x06 | ||
| 0 — Unlock, 1 — Lock | |||
|} | |} | ||
== | == Документация == | ||
[https://www.manualslib.com/manual/1420786/Welquic-Bht-6000-Series.html Описание термостата и руководство по настройке] | [https://www.manualslib.com/manual/1420786/Welquic-Bht-6000-Series.html Описание термостата и руководство по настройке] | ||
Версия 10:13, 14 января 2021
Работа по Modbus
Термостатом можно управлять по протоколу Modbus RTU. На физическом уровне он подключается через интерфейс RS-485.
Настраивать термостат можно с помощью утилиты modbus_client, использовать приложение для компьютера на ОС Windows или из веб-интерфейса контроллера Wiren Board.
В этой статье мы будем использовать утилиту modbus_client
, а подключаться к контроллеру через SSH. Синтаксис и параметры командной строки можно посмотреть на странице утилиты в разделе Аргументы командной строки.
Подготовка к работе
Wbincludes:Modbus: Preparing for work
Настройка для работы с ПО
Установка параметров подключения
Вы можете перед началом работы с термостатом назначить ему modbus-адрес, но параметры подключения изменить нельзя.
По умолчанию в термостате заданы параметры: Адрес — 1, Скорость — 9600 бит/с, Четность — Even, Бит — 1.
Так как у всех устройств Wiren Board параметры интерфейса по умолчанию: Скорость — 9600 бит/с, Четность — None, Бит — 2, то мы не сможем использовать термостат на одной линии с ними без перенастройки устройств Wiren Board.
Шаблон устройства
ВНИМАНИЕ: шаблон пока не включен в поставку wb-mqtt-serial, поэтому вам нужно самостоятельно скопировать шаблон на контроллер в папку /usr/share/wb-mqtt-serial/templates
.
Шаблон config-bht-6000-series.json
:
{
"device_type": "BHT-6000 Series",
"device": {
"name": "BHT-6000 Series",
"id": "bht-6000-series",
"channels": [
{
"name": "Power",
"reg_type": "holding",
"address": "0x00",
"type": "switch",
"format": "s16"
},
{
"name": "Lock buttons",
"reg_type": "holding",
"address": "0x06",
"type": "wo-switch",
"format": "s16"
},
{
"name": "Temperature for internal sensor",
"reg_type": "holding",
"address": "0x01",
"type": "temperature",
"format": "s16",
"scale": 0.1
},
{
"name": "Weekly program setting temperature",
"reg_type": "holding",
"address": "0x05",
"type": "temperature",
"format": "s16",
"scale": 0.1
},
{
"name": "Heating status",
"reg_type": "holding",
"address": "0x03",
"type": "switch",
"format": "s16",
"readonly": true
},
{
"name": "Manual mode",
"reg_type": "holding",
"address": "0x02",
"type": "switch",
"format": "s16"
},
{
"name": "Setting temperature",
"reg_type": "holding",
"address": "0x04",
"type": "range",
"format": "s16",
"scale": 0.1,
"max": 35
}
]
}
}
После копирования шаблона на контроллер перезапустите службу wb-mqtt-serial
:
service wb-mqtt-serial restart
Теперь выберите шаблон термостата в разделе Serial Device Driver Configuration веб-интерфейса:
- Откройте веб-интерфейс и перейдите Configs → Serial Device Driver Configuration.
- Выберите один из двух интерфейсов связи и установите параметры интерфейса: Baud rate — 9600 бит/с, Parity — N, Data bits — 8, Stop bits — 1.
- Нажмите на кнопку + Device и в поле Device N выберите BHT-6000 Series, где N — порядковый номер устройства.
- В поле Slave id укажите modbus-адрес термостата.
- Сохраните настройки нажатием на кнопку Save.
Теперь устройство будет доступно на вкладке Devices.
Вы можете изменить шаблон по своему усмотрению — смотрите описание шаблонов в статье Драйвер wb-mqtt-serial.
Изменение настроек термостата
Все настройки, доступные для изменения через RS-485 выведены в веб-интерфейс, но вы можете изменять их и из командной строки. Для этого нужно записать требуемые значения в регистры термостата.
В примерах термостат подключен к интерфейсу /dev/ttyRS485-1
, имеет настройки интерфейса 9600/None/1/8
и доступен по адресу 2
.
Установка modbus-адреса
Modbus-адрес термостата устанавливается из сервисного меню и не может быть изменен через RS-485:
- Выключите термостат нажатием на кнопку
ON/OFF
. - Зажмите одновременно кнопки
M
иClock
на 5 секунд — термостат войдет в сервисный режим. - Кратким нажатием на кнопку
M
выберите параметрC
. - Кнопками
вверх ↑
ивниз ↓
установите новый адрес термостата. - После установки адреса подождите 5 секунд, термостат применит новые настройки и выйдет из сервисного режима.
- Включите термостат нажатием на кнопку
ON/OFF
.
Теперь вы можете подключиться к термостату по-новому modbus-адресу.
Общий алгоритм настройки
- Ищете адрес регистра и функцию записи.
- Смотрите возможные значения.
- Записываете в регистр значение, которое попадает в диапазон возможных.
Блокировка кнопок
Мы хотим заблокировать все физические кнопки на термостате:
- Состояние блокировки хранится в регистре Lock buttons с адресом
0x06
. Функция записи —0x06
. - Возможные значения: 0 — Unlock, 1 — Lock.
- Теперь запишите значение 1 в регистр Lock buttons:
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x06 -r0x06 1 Data to write: 0x1 Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1) [02][06][00][06][00][01][A8][38] Waiting for a confirmation... <02><06><00><06><00><01><A8><38> SUCCESS: written 1 elements!
Кнопки термостата заблокированы. Для разблокировки запишите в регистр Lock buttons значение 0 — Unlock.
Чтение и запись значений температуры
Значение температуры нужно конвертировать перед записью или после чтения.
Прочитаем значение текущей уставки из регистра Setting temperature, 0x04 — получим:
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x03 -r0x04
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[02][03][00][04][00][01][C5][F8]
Waiting for a confirmation...
<02><03><02><01><2C><FC><09>
SUCCESS: read 1 of elements:
Data: 0x012c
В документации к термостату указан коэффициент конвертации — 0.1. Это значит, что при чтении мы должны умножить полученное значение на коэффициент, а при записи разделить.
Нами было считано значение 0x012с
— это число 300, умножим его на коэффициент: 300 × 0.1 = 30 °С
Теперь запишем в регистр значение 12°C: 12 / 0.1 = 120
:
~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyRS485-1 -a2 -t0x06 -r0x04 120
Data to write: 0x78
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 1)
[02][06][00][04][00][78][C8][1A]
Waiting for a confirmation...
<02><06><00><04><00><78><C8><1A>
SUCCESS: written 1 elements!
Таблица modbus-регистров
Назначение | Длина, байт | Адрес, Hex | Функция чтения | Функция записи | Возможные значения |
---|---|---|---|---|---|
Power | 1 | 0x00 | 0x03 | 0x06 | 0 — OFF, 1 — ON |
Temperature for internal sensor | 1 | 0x01 | 0x03 | 0x06 | 5…45 |
Manual mode | 1 | 0x02 | 0x03 | 0x06 | 0 — Auto, 1 — Manual |
Heating status | 1 | 0x03 | 0x03 | - | 0 — Not heating, 1 — Heating |
Setting temperature | 1 | 0x04 | 0x03 | 0x06 | 5…45 |
Weekly program setting temperature | 1 | 0x05 | 0x03 | 0x06 | 5…45 |
Lock buttons | 1 | 0x06 | 0x03 | 0x06 | 0 — Unlock, 1 — Lock |