Добавьте в коде OpenTherm.cpp:
unsigned long OpenTherm::getLastResponse() {
return response;
}
И в коде OpenTherm.h (в разделе public):
unsigned long getLastResponse();
Как задать кодом вы уже разобрались, осталось понять для чего...
Согласно протоколу ID2 W(Master MemberID code) и ID3 R(Slave MemberID code) дословный перевод: "Эта группа элементов данных определяет информацию о конфигурации как на ведомых, так и на ведущих сторонах..."
Проще говоря, Slave и Master должны "представиться" друг другу. В вашем случае котёл отправляет мастеру свой Slave MemberID code = 21(hex формат), а вы, почему то, упорно возвращаете котлу чужой Master MemberID code = 07(hex формат). Откуда его взяли?
Что мастер из ID3 котла прочитал, то обратно в ID2 котла и отправил, так должно быть.
Нет там ни чего подобного. Для многих котлов ID2 и ID3 по барабану. Мой, к примеру, без обмена этой информацией, будет только мониториться.
Зачем загромождать код тем, что есть в самой библиотеке в basic requests. Как в примере, в цикле кода достаточно отправить котлу:
ot.setBoilerTemperature(64); - для ID1
ot.setDHWSetpoint(40); - для ID56
естественно, вместо (64) и (40) уставки, вычисляемые по своим правилам.
Согласен, но в случае синхронных запросов приходится после каждого запроса проверять responseStatus и в случае ошибки запрашивать код ответа для диагностики, а setBoilerTemperature() и setDHWSetpoint() его не выдают...
Согласен, но в случае синхронных запросов приходится после каждого запроса проверять responseStatus и в случае ошибки запрашивать код ответа для диагностики, а setBoilerTemperature() его не выдает...
А вот тут я согласен. Потому убрал из библиотеки ОТ все basic requests.
Для проверки работоспособности обмена данными чем проще, тем лучше. Да и понятней разбираться будет. А дальше, уже строить для себя, со своими хотелками.
Для проверки работоспособности обмена данными чем проще, тем лучше. Да и понятней разбираться будет. А дальше, уже строить для себя, со своими хотелками.
tsv_33, а можете проверить код на своем Viessmann?
Вообще, как я уже писал, по моим наблюдениям в общении устройства с котлом происходит немало ошибок как в чтении котлом запроса устройства, так и в чтении устройством ответа котла. Но, возможно, это только мой случай с котлом Buderus.
Для полноценной диагностики я замеряю все приходящие от котла импульсы и делаю более детальную их обработку в процедуре обработки прерываний. В случае ошибок вывожу всю информацию в лог и анализирую уже вручную.
А с https://github.com/miksumin/OpenTherm - ошибка компиляции
Попробуйте сделать запрос таким образом:
unsigned long request = ot.buildSetBoilerTemperatureRequest(Set_Temp_obr);
response = ot.sendRequest(request);
А с https://github.com/miksumin/OpenTherm - ошибка компиляции
Да, я там немного доработал библиотеку под себя
Вы здесь выводите response или request?
response
response надо сначала получить, однако, прежде чем выводить )))
unsigned long request = ot.buildSetBoilerTemperatureRequest(Set_Temp_obr);
response = ot.sendRequest(request);
Serial.printf("Response: 0x%08X\r\n", response);
Строка 70-71
Странная какая-то история. В ответе должен быть код ответа, т.е. что-то из:
READ_ACK = B100,
WRITE_ACK = B101,
DATA_INVALID = B110,
UNKNOWN_DATA_ID = B111
А там код запроса (0x10014D00) почему-то...
А первый код ответа (0xC000030A) - это вообще ответ на запрос статуса...
Сегодня поздно уже, завтра ещ раз посмотрю ваш код и напишу.
А там код запроса (0x10014D00) почему-то... -и что можно/нужно сделать?
Все читает, но ничего не пишет, хотя - если поставлю температуру НОЛЬ - то обогрев отключается
А первый код ответа (0xC000030A) - это вообще ответ на запрос статуса... - ДА
А первый код ответа (0xC000030A) - это вообще ответ на запрос статуса... - ДА
Так он у вас в логе после запроса на установку температуры котла потому как там у вас в коде нет получения кода response
Добавьте там response = ot.getLastResponse();
Хочется все-таки увидеть реальный код ответа с ошибкой
getLastResponse - ошибка - has no member named
а если - getLastResponseStatus - то строка 74
getLastResponse - ошибка - has no member named
а если - getLastResponseStatus - то строка 74
Добавьте в коде OpenTherm.cpp:
unsigned long OpenTherm::getLastResponse() {
return response;
}
И в коде OpenTherm.h (в разделе public):
unsigned long getLastResponse();
И поправьте свой код в строках 70 - 78, у вас там зачем-то стоит html-тег <strong></strong>
Это я хотел выделить, в коде этого нет
строка 78
Вы не добавили запрос кода response.
Строка 54:
response = ot.getLastResponse();
Serial.printf("Response: 0x%08X\r\n", response);
Ничего это не поменяло
Такое впечатление, что котел по каким-то причинам просто не принимает запрос на установку температуры.
При этом реальный код ответа котла с ошибкой мы пока так и не увидели. Завтра попробую доработать ваш код, чтобы все-таки получить код ошибки.
Не только температуру, но и MemberIDcode
Ок, спасибо, до завтра
А как задать ему MasterID ?
Как задать кодом вы уже разобрались, осталось понять для чего...
Согласно протоколу ID2 W(Master MemberID code) и ID3 R(Slave MemberID code) дословный перевод: "Эта группа элементов данных определяет информацию о конфигурации как на ведомых, так и на ведущих сторонах..."
Проще говоря, Slave и Master должны "представиться" друг другу. В вашем случае котёл отправляет мастеру свой Slave MemberID code = 21(hex формат), а вы, почему то, упорно возвращаете котлу чужой Master MemberID code = 07(hex формат). Откуда его взяли?
Что мастер из ID3 котла прочитал, то обратно в ID2 котла и отправил, так должно быть.
Ок, пишу то, что и получаю, результат тот-же
Обратите внимание, как читается год - байты надо переставлять местами (это особенность висмана?!)
Ок, пишу то, что и получаю, результат тот-же
Не вижу кода обмена переменными.
Обратите внимание, как читается год - байты надо переставлять местами (это особенность висмана?!)
Не пойму, зачем какие то танцы с бубном, протокол обязателен для всех. Если делаете правильно, то и результат будет правильным.
p.s.
С Visseman vitopend 100w мой код работает как надо, проверено...
Попробуем сначала. Немного причесал ваш код, попробуйте запустить и лог в студию
На фига для конкретного котла постоянно вычитывать ID3? 21 там лежит, нового не будет. В секундном цикле пишите в ID2 сразу 0x0021.
Или так:
Поторопился немного...
Поправьте ошибку - после строки 130 и 150 там надо добавить "}"
И еще там String() забыл добавить в нескольких строках...
Вот рабочий код:
На фига для конкретного котла постоянно вычитывать ID3? 21 там лежит, нового не будет. В секундном цикле пишите в ID2 сразу 0x0021.
Или так:
Вчера пробовали писать значение MemberID, которое читается, не помогает.
Запрос SetBoilerTemp котел просто не принимает по неизвестным причинам.
Может там какие-то ручные установки есть на котле типа режима котла или что-то еще?
Нет там ни чего подобного. Для многих котлов ID2 и ID3 по барабану. Мой, к примеру, без обмена этой информацией, будет только мониториться.
Зачем загромождать код тем, что есть в самой библиотеке в basic requests. Как в примере, в цикле кода достаточно отправить котлу:
ot.setBoilerTemperature(64); - для ID1
ot.setDHWSetpoint(40); - для ID56
естественно, вместо (64) и (40) уставки, вычисляемые по своим правилам.
Нет там ни чего подобного. Для многих котлов ID2 и ID3 по барабану. Мой, к примеру, без обмена этой информацией, будет только мониториться.
Зачем загромождать код тем, что есть в самой библиотеке в basic requests. Как в примере, в цикле кода достаточно отправить котлу:
ot.setBoilerTemperature(64); - для ID1
ot.setDHWSetpoint(40); - для ID56
естественно, вместо (64) и (40) уставки, вычисляемые по своим правилам.
Согласен, но в случае синхронных запросов приходится после каждого запроса проверять responseStatus и в случае ошибки запрашивать код ответа для диагностики, а setBoilerTemperature() и setDHWSetpoint() его не выдают...
Согласен, но в случае синхронных запросов приходится после каждого запроса проверять responseStatus и в случае ошибки запрашивать код ответа для диагностики, а setBoilerTemperature() его не выдает...
А вот тут я согласен. Потому убрал из библиотеки ОТ все basic requests.
Для проверки работоспособности обмена данными чем проще, тем лучше. Да и понятней разбираться будет. А дальше, уже строить для себя, со своими хотелками.
Response: 0x10014D00 = WRITE_DATA (ID=1) - но это не ответ, который должен быть WRITE_ACK = B101
Для проверки работоспособности обмена данными чем проще, тем лучше. Да и понятней разбираться будет. А дальше, уже строить для себя, со своими хотелками.
tsv_33, а можете проверить код на своем Viessmann?
У меня Бакси. Висманы у моих клиентов.
Вообще, как я уже писал, по моим наблюдениям в общении устройства с котлом происходит немало ошибок как в чтении котлом запроса устройства, так и в чтении устройством ответа котла. Но, возможно, это только мой случай с котлом Buderus.
Для полноценной диагностики я замеряю все приходящие от котла импульсы и делаю более детальную их обработку в процедуре обработки прерываний. В случае ошибок вывожу всю информацию в лог и анализирую уже вручную.
У меня Бакси. Висманы у моих клиентов.
Ну может будет возможность проверить у клиента на аналогичной модели котла, чтобы понять, это проблема данной модели или проблема данного котла
tsv_33 пишет
С Visseman vitopend 100w мой код работает как надо, проверено...
ОК, можете собрать тестовый бинарник из своего рабочего кода, для проверки возможностей моего котла по установке температуры
tsv_33 пишет
С Visseman vitopend 100w мой код работает как надо, проверено...
ОК, можете собрать тестовый бинарник из своего рабочего кода, для проверки возможностей моего котла по установке температуры
Возьмите с Яндекс.Диска https://disk.yandex.ru/d/Qcu-3S7WqdUTHg?w=1, только что выложил последнюю прошивку 23.01
Ну может будет возможность проверить у клиента на аналогичной модели котла, чтобы понять, это проблема данной модели или проблема данного котла
Без вариантов, доступа к их котлам у меня нет, как нет проблем и с этой моделью.
По ссылке написано:
Всем кто приобрёл готовое изделие или отдельно ПО, пожалуйста, не пытайтесь загружать в свой термостат
эту прошивку, она полноценно работать не будет!!!
Ваше ПО индивидуальное.
С ПО, скаченном от сюда, ваше изделие будет работать только в режиме мониторинга OpenTherm, управлять работой котла невозможно
У меня и моя прошивка работает в режиме мониторинга, интересует управление котлом - поддерживает ли мой котёл?
Поддерживает!
Как проверить?
Поддерживает!
Но не работает...
Поддерживает!
Но не работает...
Неправда ваша...