Работа с шаблоном

есть устройство, у него один из регистров не числовой

никак не могу в шаблоне его указать и считать.
и так пробовал
{
“name”: “Power”,
“address”: “1”,
“reg_type”: “holding”,
“type”: “switch”,
“format”: “u16”,
“on_value”: “0xAA”, // Включено (проверьте, возможно, это другое значение)
“off_value”: “0x55”, // Выключено (проверьте, возможно, это другое значение)
“default”: “0x55”, // Выключено по умолчанию
“scale”: 1,
“offset”: 0
}

и так

{
“name”: “Power”,
“address”: “1”,
“reg_type”: “holding”,
“type”: “switch”,
“format”: “u16”,
“on_value”: “0x0001”,
“off_value”: “0x0000”
},

и еще по всякому.

подскажите, пожалуйста, как можно с этим работать

Добрый день!

Прошу предоставить документацию на устройство и уточнить, что это за устройство.

Также есть предположение, что перед хексом присутствуют лишние кавычки.

я пробовал и с кавычками и без и по всякому(

support_20190215144551165.pdf (2,6 МБ)

устройство - тепловой насос

Мне потребуется некоторое время для ознакомления с документацией.

1 лайк

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

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

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

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

root@wirenboard-ASOI7OWQ:~# for i in {0..10}; do
    echo "Reading register $I"
    modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyMOD1 -a2 -t0x03 -r$I 1
done
Reading register 0
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][00][00][01][84][39]
Waiting for a confirmation...
<02><03><02><90><20><91><9C>
SUCCESS: read 1 of elements:
        Data: 0x9020 
Reading register 1
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][01][00][01][D5][F9]
Waiting for a confirmation...
<02><03><02><00><10><FD><88>
SUCCESS: read 1 of elements:
        Data: 0x0010 
Reading register 2
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][02][00][01][25][F9]
Waiting for a confirmation...
<02><03><02><00><04><FD><87>
SUCCESS: read 1 of elements:
        Data: 0x0004 
Reading register 3
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][03][00][01][74][39]
Waiting for a confirmation...
<02><03><02><00><03><BC><45>
SUCCESS: read 1 of elements:
        Data: 0x0003 
Reading register 4
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][04][00][01][C5][F8]
Waiting for a confirmation...
<02><03><02><00><46><7D><B6>
SUCCESS: read 1 of elements:
        Data: 0x0046 
Reading register 5
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][05][00][01][94][38]
Waiting for a confirmation...
<02><03><02><00><01><3D><84>
SUCCESS: read 1 of elements:
        Data: 0x0001 
Reading register 6
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][06][00][01][64][38]
Waiting for a confirmation...
<02><03><02><00><1E><7C><4C>
SUCCESS: read 1 of elements:
        Data: 0x001e 
Reading register 7
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][07][00][01][35][F8]
Waiting for a confirmation...
<02><03><02><00><02><7D><85>
SUCCESS: read 1 of elements:
        Data: 0x0002 
Reading register 8
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][08][00][01][05][FB]
Waiting for a confirmation...
<02><03><02><00><0C><FC><41>
SUCCESS: read 1 of elements:
        Data: 0x000c 
Reading register 9
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][09][00][01][54][3B]
Waiting for a confirmation...
<02><03><02><00><19><3D><8E>
SUCCESS: read 1 of elements:
        Data: 0x0019 
Reading register 10
0x0001 Opening /dev/ttyMOD1 at 9600 bauds (N, 8, 2)
[02][03][00][0A][00][01][A4][3B]
Waiting for a confirmation...
<02><03><02><00><2D><3C><59>
SUCCESS: read 1 of elements:
        Data: 0x002d
{
				"name": "Power",
				"address": "1",
				"reg_type": "holding",
				"type": "switch",
				"format": "u16",
				"on_value": "0x0010",
				"off_value": "0x0000"
			}

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

при включении и выключении устройства вручную при опросе регистра всегда значение 0x0010

понимаю что с чужим оборудованием вы не помогаете, но может уже было такое обращение? пока не смог найти решение задачи

То есть 0x10 - включено?

Логично, если значение постоянно совпадает с тем что описано как “on_value”.

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

То как написано в инструкции. Просто даже если я пишу 0x0010 то он постоянно активен. Нажимаю на выкл - он опять включается. Если пишу значения как в инструкции то он постоянно выкл. Если включаю то выключается

Проверьте то же самое (записать и прочитать для контроля того что оно удачно записалось значение) с помощью modbus_client.
Если поведение шаблона будет отличаться от поведения при использовании modbus_client - тогда, конечно, изучим. Сейчас я вижу неподходящую документацию, содержимое которой не соответствует значениям в регистрах.

1 лайк

И, кстати, перечитал тему, в документации указано что записывать значения надо командой 0xf.
То есть тип регистра в шаблоне указывать “holding_multi”
Но это не отменяет того что значения в регистрах расходятся с документацией.

1 лайк

проверил

			{
				"name": "Power",
				"address": "1",
				"reg_type": "holding_multi",
				"type": "switch",
				"format": "u16",
				"on_value": "0x0010",
				"off_value": "0x0000"
			}
{
				"name": "Power",
				"address": "1",
				"reg_type": "holding_multi",
				"type": "switch",
				"format": "u16",
				"on_value": "0xAA",
				"off_value": "0x55"
			}

но не заработало всё-таки(
может цифры записать надо?
пробовал вручную читать через modbus_client, постоянно вывод 0x0010 - без разницы, включён прибор или выключен с пульта

Я бы проверил с помощью modbus_client.

Я пробовал считывать и записывать
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a2 -t0x03 -r1
результат или ошибка или 0x0010

может какой-то еще способ есть?

Драйвер wbn-mqtt-serial работает совершенно теми же командами что и modbus_client. Нет между ними разницы.
Если вы читаете значения следуя документации и получаете неожиданные - то или неверна документация или неисправно устройство. Или документация не от него. Уточните у производителя, я не смогу ответить про стороннее.

добрый день, подскажите, пожалуйста, как можно с этими битами работать в шаблоне wb? и так и эдак и через гпт пробовал - не получается

со страницы 18 https://support.wirenboard.com/uploads/short-url/xLjcsgEFzDvcHINI4EPiHHJNScM.pdf

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

Я как то писал шаблон для контроллера ДГУ, там тоже была битовая маска в одном регистре, в итоге сделал так:

            {
                "id" : "MAN_mode",
                "name": "Режим - Ручной",
                "reg_type": "input",
                "address": "0x220F:1:1",
                "format" : "u16",
                "type": "switch",
                "readonly" : true,
                "group": "global_status"
            },
            {
                "id" : "AUT_mode",
                "name": "Режим - АВТО",
                "reg_type": "input",
                "address": "0x220F:2:1",
                "format" : "u16",
                "type": "switch",
                "readonly" : true,
                "group": "global_status"
            },

В поле "address": "0x220F:2:1" по порядку:

  1. 0x220F - непосредственно сам адрес регистра для чтения.
  2. 2 - номер бита для чтения
  3. 1 - кол-во бит для чтения (в данном случае один бит)

Может это поможет вам в данном случае?

1 лайк

спасибо, но не получилось, либо я что-то неправильно сделал
Снимок экрана 2025-02-23 в 14.09.36

{
				"id" : "MAN_mode",
				"name": "Режим - Ручной",
				"reg_type": "input",
				"address": "1:2:16",
				"format" : "u16",
				"type": "switch",
				"readonly" : true
			}