Загадки “прямого обмена”.
Ввводные те же (см. WBE2-I-OPENTHERM проблема 1)
В документации (OpenTherm_Modbus_BCG-1.0.2-W.pdf) работа с регистрами 40209, 40210, 40211 описана как “…В случае прохождения проверки валидности данных регистр обнуляется и в нем записывается ответ от котла/ID отправленной команды/возвратные данные от котла”
В действительности, всё происходит не совсем так, или совсем не так. Вот, например, вывод команды “mosquitto_sub -v -t ‘#’|grep opentherm” запущенной параллельно подаче команд на чтение из ячейки 0:
/devices/wbe2-i-opentherm_11/controls/TR Command/on 2
/devices/wbe2-i-opentherm_11/controls/TR ID/on 0
/devices/wbe2-i-opentherm_11/controls/TR Data/on 4864
/devices/wbe2-i-opentherm_11/controls/TR Command 2
/devices/wbe2-i-opentherm_11/controls/TR Data 4864
/devices/wbe2-i-opentherm_11/controls/TR Data 0
/devices/wbe2-i-opentherm_11/controls/TR Command 0
/devices/wbe2-i-opentherm_11/controls/TR Data 65
/devices/wbe2-i-opentherm_11/controls/TR Command 4
тут видно, что после отсылки данных в топики, ‘TR Data’ и ‘TR Command’ действительно обнулились, а от ‘TR ID’ не пришло никакого отклика. Затем в Data пришли данные, а в Command - 4/READ-ACK. Очень похоже на описание.
однако, если послать команду чтения ячейки 0, передав параметр 0, получим
/devices/wbe2-i-opentherm_11/controls/TR Command/on 2
/devices/wbe2-i-opentherm_11/controls/TR ID/on 0
/devices/wbe2-i-opentherm_11/controls/TR Data/on 0
/devices/wbe2-i-opentherm_11/controls/TR Command 2
/devices/wbe2-i-opentherm_11/controls/TR Command 0
и тишину…
т.е. “обнуление” произошло только для ‘TR Command’. Ни ‘TR ID’, ни ‘TR Data’ о своём обнулении не сообщили, равно как и не прислали никаких данных.
Можно было бы заподозрить, что “пропадают” повторяющиеся данные (т.е. если в регистре был 0, запись туда 0, или следующее по описанию “обнуление”, не приводит к публикации в соответствующем топике нуля, но в последнем случае в ‘TR Command’ должно было, в итоге, оказаться значение, отличное от 0 (либо 4/READ-ACK, либо 6/DATA-IVALID, либо 7/UNKNOWN-DATAID)…
Аналогичные проблемы происходят и другими ячейками. Например, у меня не читается (по полному циклу) ячейка 5 (Boiler faults) если из неё, предположительно, должен считываться 0 (нет ошибок).
P.S. Про то, что результаты “обнуления” и данные могут приходить в произвольном порядке (т.е. сначала ‘TR Command’ c ACK, а потом уже ‘TR Data’ с данными, или наоборот, сначала ‘TR Data’ а за ними ‘TR Command’; а иногда даже данные вперёд “обнуления”) я уже и не говорю… С этим можно как-то жить.