Modbus термостат

Модель BHT-1000.


Темплейт:

“device_type” : “BHT-1000”,
“device” : {
“name” : “BHT-1000”,
“id” : “bht1000”,
“channels” : [
{
“name” : “Power”,
“type”: “switch”,
“reg_type” : “holding”,
“address” : “0x00”,
“format”: “s16”,
“on_value”: 165,
“off_value”: 90

                    },
  	{
  		"name" : "Room Temperature",
                            "type" : "temperature",
  		"reg_type" : "holding",
  		"address" : "0x02",
                            "format": "s16",
                            "scale": 0.5
  	},
  	{
  		"name" : "Setting Temperature",
                            "type" : "range",
  		"reg_type" : "holding",
  		"address" : "0x04",
                            "format": "s16",
                            "scale": 0.5,
                            "min": "0x0a",
                            "max": "0x1e"
  	}
  ]

}
}

Вообщем-то работает:

Но есть ньюансы…

  1. Кнопка включения - выключения. Отображает правильно состояние. Включает, но не выключает. Отсебятина в темплейте “off_value”: 90 не работает. Есть ли способ задать переменную для состояния “отключено” также, как для “включено”?

  2. По неизвестной причине термостат отдает температуру на градус больше, чем показание на дисплее. Как сделать корректировку на этот градус?

  3. Есть ли возможность задать нижнюю границу установки температуры? Верхняя задается, нижняя по аналогии “min”: “0x0a” - не работает. Так оно было бы удобнее… Ну и вопрос - как вставить этот регулятор в виджет? Получается вставить только как “Dimmable light control”, но это совсем не то - корежится регулятор, а других вариантов виджетов в интерфейсе нет.

Не очень понятно, что вы собственно хотите сделать. Какой формат данных в этом регистре?

сейчас такое не поддерживается, можно сделать только через правила

пока нет

нужно больше подробностей, что значит корежится

Хочу чтобы кнопка правильно работала на управление. Формат регистра - включено A5(165), выключено 5A(90), отчего так сделали - надо производителя спрашивать. Включение работает, поскольку отрабатывается параметр “on_value”

жаль

Это если сделать виджет из переменной температуры через имеющийся “Dimmable light control”. Картинка как оно должно быть выше. Ни к чему кнопки включения. Ползунок становится с верхней границей 255.

Поделитесь пожалуйста, у вас получилось правильно заставить работать данный термостат?

Угу. Делаю корректировку температуры на градус скриптом в WB. Управление включением-выключением тоже можно скриптом сделать в WB, но мне без надобности, я отказался от интерфейса управления в WB в пользу мажордомо (красивее и удобнее), туда отдаю по MQTT данные с WB как есть и уже там управляю включением термостата (если надо вручную). Вообщем нормально работает. Иногда ошибки связи проскакивают, но это никак не влияет на что-либо.

По идее включение/выключение не критично управлять с самого термостата, главное чтобы температура регулировалась и с этим, как я понимаю, справляется.
Тогда подскажите ссылку где покупали, уже час просматриваю китайские площадки, не могу найти. :frowning:
Поиск по тегам “термостат, modbus и rs-485” выдает кучу устройств, но данного нет.

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

Доброго дня! Помогите с поиском термостата в системе. Подключен по модбасу (А и B на WB5). Адрес 9 (ещё второй с адресом 32, но не суть, хотя бы один сделать).


На рисунке всё верно? А может скриптом прописать, если да, то что писать?

Вам нужно открывать документацию на термостат и описывать все каналы. Никакого автоматического обнаружения каналов в протоколе Modbus, к сожалению, не предусмотрено.

адрес в 8ой системе?

В интерфейсе адрес задается либо в десятичной (32) системе счисления, либо в шестнадцатеричной 0x20

заполнять так? :{
“device_type” : “TS”,
“device” : {
“name”: “Thermostat”,
“id”: “ts-123”,
“channels”: [

       {
            "name" : "Temperature_in_room",
	"type" : "temperature",
            "reg_type" : "holding",
            "address" : 0x20,
            "format": "s16",
            "scale" : 1
        },
]
}

}

В “device_type” что писать?

Что угодно. Это описательный параметр. А вот регистры надо уже смотреть в документации, а не передирать один в один. Вам выше же сказали. Ищите описание модбас протокола на свой девайс. Без этого ничего не выйдет.

1 лайк

Сделано. А как теперь мне этот термостат включить в правило или виртуальное устройство?

А у вас уже получилось поуправлять этим устройством из веб-интерфейса (не через правила)?
Если да, то использовать его в правилах можно так же, как и все остальные устройства. При этом

“название параметра записывается в виде “Device/Control”, где названия Device и Control для каждого параметра можно найти на странице Settings веб-интерфейса в таблице MQTT Channels” - это цитата из https://contactless.ru/wiki/index.php/Движок_правил_wb-rules#.D0.9F.D0.B5.D1.80.D0.B2.D0.BE.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.BE
То есть ищете там своё новое устройство и названия его параметров, и используете их в правилах так же, как любые другие устройства.

Все привет. Оживлю тему…
С Али пришел аналогичный термостат с похожими описательными параметрами.
https://ru.aliexpress.com/item/Touchscreen-Colourful-Programmable-Room-Thermostat-for-Electric-Heating-with-Modbus-function/32770741068.html?spm=a2g0s.9042311.0.0.3da233edsV4dDF
Т.к. по описанию протокола термостата формат байта имеет 1 стоповый бит, подключил термостат на второй разъем RS585 на WB5. /dev/ttyAPP2. порт настроил согласно описанию. Адрес в термостате по умолчанию 0x01. Но я все равно никак не могу до него достучаться.

Подскажите пожалуйста как проверить связь через утилиту modbus_client?
Остановил сервис пробую прочитать значение температуры

root@wirenboard-AVZWUKUM:~# modbus_client --debug -mrtu -pnone -s1 /dev/ttyAPP2 -a1 -t0x03 -r40002
Opening /dev/ttyAPP2 at 9600 bauds (N, 8, 1)
[02][03][9C][41][00][01][FA][7D]
Waiting for a confirmation...
ERROR Connection timed out: select
<00>ERROR occured!

Выдает такое((
пробовал через меню термостата менять адреса - то же самое

Скорее всего неправильный порт, смотрите табличку тут: RS-485 — Wiren Board

Спасибо! И вправду порт должен был быть
/dev/ttyAPP4
Все заработало!
Еще прошу уточнить - могут ли сосуществовать два modbus устройства на одной линии с разными характеристиками интерфейса? На WB5 получается всего два порта rs485. Как быть если потребуется подключить третий тип устройств со своими характеристиками?

Добрый день!

Во-первых, у многих RS-485 устройств можно поменять настройки интерфейса, и после этого повесить на одну шину (в частности, в наших Modbus устройствах можно поменять).
Если вам всё-таки понадобятся дополнительные порты, то можете добавить модули расширения https://wirenboard.com/ru/product/WBE-I-RS485-ISO/ - так к двум имеющимся портам вы можете добавить ещё два порта RS-485.

Можете уточнить, что вы имеете в виду под “характеристиками интерфейса”?