07/04/2010 18:57:25
Одна из важных функций Умного Дома - учет и анализ расхода ресурсов. Некоторое время назад я подключил с помощью USB/CAN адаптера свой электросчетчик Меркурий 230 и написал собственную программу считывания показаний. Это позволило не только вести учет расхода электроэнергии в целом и отдельно по фазам, но и воочию, детально наблюдать параметры электроснабжения. Записывая все значения в базу данных и используя такие библиотеки как jpGraph и Open Flash Chart 2, в Web-интерфейсе Умного Дома я вывел несколько полезных графиков. Таким образом я имею возможность отслеживать потребление не только по месяцам, но и по дням, часам, минутам и даже секундам! Совсем другое дело обстоит с учетом потребления газа. Механический газовый счетчик не имеет никаких интерфейсов, поэтому считывание и запись показаний в БД возможна только вручную. Но если раз в месяц, если не забывать, еще можно записать показания счетчика, то делать это каждый день крайне утомительно. Таким образом появился вопрос - можно ли как-то учитывать потребление газа автоматически?
Безусловно, существуют системы автоматического учета потребления газа со всеми необходимыми интерфейсами и протоколами, но стоимость такого оборудования, программного обеспечения, согласования монтажа этой системы со всеми газовыми инстанциями и собственно самого монтажа выльется в копеечку. Оптическое считывание информации с табло счетчика в принципе возможно. Квитанции об уплате штрафа за нарушение правил дорожного движения с фотографией на память тому подтверждение. И ведь в целом не обязательно фотографировать и распознавать целиком табло (для чего требуется фотокамера и освещение), можно привязать какое-нибудь устройство к конкретной точке или сектору на дисковом табло. Например, часто проход через ноль закрашен красным (более темным) цветом. Но вид увешенного проводами счетчика вряд ли будет воспринят представителем газоснабжающей организации с энтузиазмом. Как еще можно учитывать потребление газа? У меня появилась идея подключить модуль на базе DS2406P (точно так же как я это уже делал с насосом Grundfos MQ) параллельно с газовым клапаном котла. Газовый клапан открыт только в процессе сжигания газа, а значит учитывая время его работы и зная номинальное расход газа котлом (указано в документации и постоянно для немодулирующих горелок) можно довольно точно учитывать потребление газа. Выход? Конечно. Но мой котел оснащен продвинутой электроникой. Может быть он сам ведет учет работы газового клапана? Оказывается ведет! Детально изучив документацию я нашел регистр, который отвечает за такой учет. Называется он "Время работы котла в режиме отопления" и измеряется в часах. Зная, что мой котел потребляет 4,7м3 газа в час необходимо только перемножить эти значения. Конечно, такой учет не будет абсолютно точным, поскольку, по всей вероятности, номинальное потребление зависит от давления в магистрали. Также не стоит забывать, что могут быть другие потребители, такие как газовая плита. Однако сделав расчеты я пришел к выводу, что газовое отопление потребляет по меньшей мере 90% от всего потребления газа в год. А если прибавить 10% к тому, что потребил котел, получится фактически то число, которое отображается счетчиком. Но тут случилась загвоздка. Я не знал какой командой получить значение этого регистра...
В предыдущей статье я рассказал о том, как мне удалось подключить котел Vaillant atmoVIT к персональному компьютеру посредством RS-232 интерфейса. У меня также получилось заглянуть в протокол общения между программой vrDIALOG и котлом. И хотя у меня по-прежнему нет описания протокола, эмпирически получен некоторый список команд, с помощью которых я могу получать многие параметры работы котла, а также и задавать свои значения в те регистры, которые допускают запись. И все дело в том, что программа vrDIALOG, видимо, адаптируется к варианту (модели) оборудования. И хотя в демо-режиме программа отображала регистр, отвечающий за время работы котла в режиме отопления, будучи подключенной к моему котлу, она это значение в закладке Диагностика не отображала. Поэтому мне пришлось немного глубже коснуться протокола Vaillant и представить более детальное описание с указанием фактических команд и регистров системы DIA.
Напомню, что котлу посылаются команды вида: x07x00x00x00xC2x01x7C
vrDIALOG формирует команды размером 7 байт
1 байт: длина команды, включая контрольную сумму
2 байт: запрос значения 00h или запись значения 80h, 03h в ответе котла означает ошибку
3-... байты: команды котлу и ответы котла
последний байт: 8-bit CRC
За что отвечает 6 байт стандартной команды выяснить не удалось, так как независимо от значения этого поля, котел возвращает одинаковые значения. В немецких источниках есть предположение, что это длина ожидаемых данных, но котел, видимо, игнорирует это поле.
Алгоритм CRC я бы назвал нестандартным. Во всяком случае ничего подобного мне никогда не попадалось. Пример на PHP (переделать на C займет 2,5 секунды)
function get_crc($crc, $my_char)
{
$short_c = ord($my_char);
if ( $crc & 0x80 )
$crc = ( $crc << 1 ) ^ 25;
else
$crc = $crc << 1;
$crc &= 0xFF;
$crc ^= $short_c;
return $crc;
}
Таким образом, диапазон значений, который используется для передачи команд от 0 до 256. С помощью vrDIALOG удалось выяснить только некоторые команды. Имея функцию работы с CRC я написал простейшую программу, которая по очереди отправляет котлу команды из всего диапазона возможных значений. Конечно, PHP не лучший вариант для написания такого рода "драйверов", но иногда и микроскопом гвозди забивают.
for ( $i = 1; $i < 255; $i++ )
{
sleep(1);
$my_cmd = "x07x00x00x00".chr($i)."x02";
$crc = get_crc($my_cmd);
$my_cmd = $my_cmd.chr($crc);
fwrite($fp, $my_cmd);
unset($crc_ok);
unset($result);
unset($my_cnt);
echo $i." - ";
while ( $crc_ok == 0 )
{
$my_cnt++;
$result .= fread($fp, 1);
$crc = get_crc($result, 1);
if ( ord($result[0]) == 3 )
{
echo "Error";
$result .= fread($fp, 2);
$crc_ok = 1;
}
elseif ( ord($result[strlen($result) - 1]) == $crc )
{
$crc_ok = 1;
for ( $j = 0; $j < $my_cnt; $j++ )
echo dd($result[$j]);
}
}
}
В результате работы программы получены следующие результаты.
Как видно из
Проведя анализ предлагаю следующую интерпретацию команд и значений. В таблице отсутствуют те команды, в ответ на которые котел вернул ошибку.
| BIN | HEX | Ответ котла | Значение | Описание | DIA |
| 1 | 01 | 050002301c | ? 35 | ??? | ??? |
| 3 | 03 | 0400f0e0 | ? - | ??? | ??? |
| 4 | 04 | 050000f0d8 | 15 С | Расчетная температура бойлера | d.7 |
| 5 | 05 | 04000f1f | ? + | ? Сигнал наличия пламени* | ??? |
| 6 | 06 | 0e00ffffffffffffffffffffff3b | ??? | ? Информация об ошибках* | ??? |
| 7 | 07 | 0400f0e0 | ? - | ??? | ??? |
| 8 | 08 | 04000111 | 1 | Режим (1 - Зима; 0 - Лето) | d.23 |
| 9 | 09 | 050003e8c6 | ? 1000 | ??? | ??? |
| 10 | 0A | 05000283af | ? 643 | ??? | ??? |
| 11 | 0B | 050002bc90 | ? 700 | ??? | ??? |
| 13 | 0D | 04000f1f | ? + | ??? | ??? |
| 14 | 0E | 04000111 | 1 | Комнатный термостат (1 - ВКЛ; 0 - ВЫКЛ) | d.8 |
| 17 | 11 | 04000010 | 0 | ??? | ??? |
| 20 | 14 | 08000297fd6800c1 | 41,50 C | Температура отходящих газов | d.48 |
| 21 | 15 | 0800ffff000055a7 | ??? | ??? | ??? |
| 22 | 16 | 0600ff21aa5f | -13,94 С | Датчик расхода ГВ | ??? |
| 23 | 17 | 0600ff21aa5f | -13,94 С | Температура бойлера | d.4 |
| 24 | 18 | 060003c400fd | 60,25 C | Температура подающей линии | d.40 |
| 25 | 19 | 050003d0fe | 61 C | Заданное значение температуры подачи | d.5 |
| 26 | 1A | 04000010 | 0 | ??? | ??? |
| 30 | 1E | 04000010 | 0 | ??? | ??? |
| 31 | 1F | 04000a1a | 10 | Число сбоев автомата розжига | d.61 |
| 32 | 20 | 04000010 | 0 | Число отключений по тепловой защите | d.60 |
| 33 | 21 | 04000212 | 2 | ??? | ??? |
| 34 | 22 | 0500000028 | 0 | Часы работы на ГВС | d.81 |
| 35 | 23 | 0500000028 | 0 | Количество стартов горелки на ГВС | d.83 |
| 36 | 24 | 0500000028 | 0 | ? Номинальный расход* | ??? |
| 37 | 25 | 050005a082 | 90 С | Расчетная температура подачи внешнего 7-8-9 регулятора | d.9 |
| 38 | 26 | 0d001c1c9c1c1c1c1d1c1c1cb3 | ??? | ??? | ??? |
| 40 | 28 | 0500179e98 | 6046 | Часы работы на отопление | d.80 |
| 41 | 29 | 0500017d57 | 381 | Количество стартов горелки на отопление | d.82 |
| 42 | 2A | 0b002d1600fb0001951c61 | ??? | ??? | ??? |
| 43 | 2B | 0b000000000000000000df | 0 | ??? | ??? |
| 44 | 2C | 04002434 | 3,6 c | Максимальное время розжига | d.65 |
| 45 | 2D | 04001505 | 2,1 c | Среднее время розжига | d.64 |
| 46 | 2E | 050003634d | ? 867 | ??? | ??? |
| 50 | 32 | 050000f0d8 | ? - | ??? | ??? |
| 51 | 33 | 050003614f | ? 865 | ??? | ??? |
| 52 | 34 | 0500000028 | 0 | ??? | ??? |
| 54 | 36 | 0500000028 | 0 | ??? | ??? |
| 55 | 37 | 0500061e3a | ? 1566 | ??? | ??? |
| 56 | 38 | 04000010 | 0 | ? Блокировка горелок* | ??? |
| 57 | 39 | 050003d0fe | 61 С | ? Заданное значение температуры подачи* | ??? |
| 60 | 3C | 04000111 | 1 | ??? | ??? |
| 62 | 3E | 04000010 | 0 | ??? | ??? |
| 63 | 3F | 04000111 | 1 | Внешний насос отопления | d.11 |
| 64 | 40 | 04000111 | 1 | ? Пламя/газовый клапан/горелки (1 - ВКЛ) | ??? |
| 65 | 41 | 0500000028 | 0 | ? Прогноз времени до отключения горелок | ??? |
| 66 | 42 | 04000010 | 0 | ? VUV* | ??? |
| 67 | 43 | 04000111 | 1 | ??? | ??? |
| 68 | 44 | 04000111 | 1 | Встроенный насос | d.10 |
| 69 | 45 | 04000010 | 0 | VUV Mittenstellung | ??? |
| 70 | 46 | 0400f0e0 | ? 240 | ??? | ??? |
| 71 | 47 | 04000f1f | ? + | ??? | ??? |
| 72 | 48 | 0400f0e0 | ? - | ? Состояние газового клапана* | ??? |
| 73 | 49 | 0400f0e0 | ? - | ? Состояние розжига* | ??? |
| 74 | 4A | 04000010 | 0 | ??? | ??? |
| 75 | 4B | 0500000028 | 0 | ??? | ??? |
| 76 | 4C | 04000a1a | ? 10 | ??? | ??? |
| 77 | 4D | 0400f0e0 | ? - | ??? | ??? |
| 78 | 4E | 04000f1f | ? + | ??? | ??? |
| 79 | 4F | 04000f1f | ? + | ??? | ??? |
| 80 | 50 | 04000f1f | ? + | ??? | ??? |
| 81 | 51 | 04000f1f | ? + | ??? | ??? |
| 82 | 52 | 0400f0e0 | ? - | ??? | ??? |
| 83 | 53 | 0400f0e0 | ? - | ??? | ??? |
| 84 | 54 | 04000010 | 0 | ??? | ??? |
| 85 | 55 | 0500000028 | 0 | ??? | ??? |
| 87 | 57 | 04000010 | 0 | ??? | ??? |
| 88 | 58 | 04000010 | 0 | Запрос нагрева бойлера через контакты C1/C2 | d.22 |
| 90 | 5A | 04000010 | 0 | ??? | ??? |
| 91 | 5B | 04000010 | 0 | ??? | ??? |
| 92 | 5C | 0500000028 | 0 | ??? | ??? |
| 93 | 5D | 04000010 | 0 | ??? | ??? |
| 94 | 5E | 04000010 | 0 | ??? | ??? |
| 95 | 5F | 04000010 | 0 | ??? | ??? |
| 97 | 61 | 04000010 | 0 | ??? | ??? |
| 99 | 63 | 04001202 | 180 сек | Выбег насоса после отключения бойлера | d.72 |
| 100 | 64 | 04001e0e | 30 мин | Выбег насоса после отключения горелок | d.01 |
| 101 | 65 | 04000010 | 0 | Корректировка значения наружной темп. | d.46 |
| 102 | 66 | 04002d3d | 45 мин | Максимальное время нагрева бойлера | d.75 |
| 103 | 67 | 04000010 | 0 | ??? | ??? |
| 104 | 68 | 0a0000000000000000fa | 0 | ??? | ??? |
| 105 | 69 | 04000010 | 0 | Статус сигнала DCF | d.91 |
| 106 | 6A | 0600fc39aa63 | -60,44 | Значение наружной температуры | d.47 |
| 107 | 6B | 06000092aaf7 | ? 9,16 | ??? | ??? |
| 108 | 6C | 04000010 | 0 | ??? | ??? |
| 109 | 6D | 04000010 | 0 | ??? | ??? |
| 110 | 6E | 04000b1b | 11 | Число безуспешных розжигов с 1 попытки | d.68 |
| 111 | 6F | 04000a1a | 10 | Число безуспешных розжигов со 2 попытки | d.69 |
| 112 | 70 | 04000010 | 0 | ??? | ??? |
| 113 | 71 | 04000111 | 1 | Старт ГВЛ по таймеру ??? |
??? d.25 |
| 114 | 72 | 04000010 | 0 | ??? | ??? |
| 115 | 73 | 0500fcec25 | 64768 | Ток ионизации | ??? |
| 116 | 74 | 04000010 | 0 | Имеется регулятор с обратной связью | d.90 |
| 117 | 75 | 04000010 | 0 | ??? | ??? |
| 118 | 76 | 0600fc39aa63 | -60,44 C | ??? | ??? |
| 119 | 77 | 0400f0e0 | ? - | ??? | ??? |
| 121 | 79 | 04000010 | 0 | ??? | ??? |
| 122 | 7A | 04000010 | 0 | ??? | ??? |
| 123 | 7B | 04000010 | 0 | ??? | ??? |
| 124 | 7C | 0500000028 | 0 | ??? | ??? |
| 125 | 7D | 0500060024 | ? 96 | ??? | ??? |
| 126 | 7E | 04000212 | 2 | ??? | ??? |
| 127 | 7F | 0500000028 | 0 | ??? | ??? |
| 128 | 80 | 050003e8c6 | ? 1000 | ??? | ??? |
| 129 | 81 | 050003d0fe | ? 976 | ??? | ??? |
| 130 | 82 | 04000010 | 0 | ??? | ??? |
| 131 | 83 | 0500000028 | 0 | ??? | ??? |
| 132 | 84 | 0500000028 | 0 | ??? | ??? |
| 134 | 86 | 04000010 | 0 | ??? | ??? |
| 137 | 89 | 04000111 | 1 | ??? | ??? |
| 138 | 8A | 04000212 | 2 | ??? | ??? |
| 139 | 8B | 0400f0e0 | ? - | ??? | ??? |
| 140 | 8C | 04000010 | 0 | ??? | ??? |
| 142 | 8E | 04000010 | 0 | ??? | ??? |
| 143 | 8F | 0c00f03e2418600007000084 | ??? | ??? | ??? |
| 144 | 90 | 0500000028 | 0 | ??? | ??? |
| 145 | 91 | 0500000028 | 0 | ??? | ??? |
| 146 | 92 | 04000616 | 6 | ??? | ??? |
| 147 | 93 | 04000212 | 2 | ??? | ??? |
| 148 | 94 | 04000010 | 0 | ??? | ??? |
| 153 | 99 | 04000212 | 2 | ??? | ??? |
| 154 | 9A | 08000009fff60058 | ??? | ??? | ??? |
| 155 | 9B | 04000010 | 0 | ??? | ??? |
| 157 | 9D | 04000717 | 7 с | Сдвиг значения горячего старта (?) | d.73 |
| 158 | 9E | 04000010 | 0 | Насос обогрева бойлера | d.12 |
| 160 | A0 | 04000212 | 2 | ??? | ??? |
| 161 | A1 | 04000010 | 0 | ??? | ??? |
| 165 | A5 | 04004353 | 67 C | Макс. температура подачи отопление | d.71 |
| 166 | A6 | 04005545 | 85 C | Макс. температура подачи ГВС | d.78 |
| 169 | A9 | 04000111 | 1 | Частичный нагрев бойлера ??? | ??? |
| 170 | AA | 04000010 | 0 | ??? | ??? |
| 171 | AB | 04000717 | 7 | Коды состояния (напри. S.07) | S.* |
| 172 | AC | 05000bc2fc | 3010 | Число часов до следующего обслуживания | d.84 |
| 175 | AF | 04000010 | 0 | Циркуляционный насос ГВС | d.13 |
| 176 | B0 | 04000010 | 0 | ??? | ??? |
| 179 | B3 | 04000010 | 0 | ? Состояние обратного контроля* | ??? |
| 180 | B4 | 04000010 | 0 | ??? | ??? |
| 181 | B5 | 0400ffef | ? 255 | ??? | ??? |
| 182 | B6 | 0600ff21aa5f | -13,94 | Температура бойлера СК внизу | d.42 |
| 184 | B8 | 060000000060 | 0 С | Температура коллектора ??? | ??? |
| 185 | B9 | 0500000028 | 0 | ??? | ??? |
| 186 | BA | 04000010 | 0 | ??? | ??? |
| 187 | BB | 04000111 | 1 | ??? | ??? |
| 188 | BC | 04000010 | 0 | ??? | ??? |
| 189 | BD | 04000010 | 0 | ??? | ??? |
| 190 | BE | 0500000028 | 0 | ??? | ??? |
| 191 | BF | 04000010 | 0 | ??? | ??? |
| 192 | C0 | 04000010 | 0 | ??? | ??? |
| 193 | C1 | 04000010 | 0 | ??? | ??? |
| 194 | C2 | 04002333 | 35 C | Минимальная температура подачи | d.85 |
| 195 | C3 | 04000212 | 2 C | Гистерезис включения | d.51 |
| 196 | C4 | 04000616 | 6 C | Гистерезис выключения | d.50 |
| 197 | C5 | 0400f0e0 | ? - | ??? | ??? |
| 198 | C6 | 04000010 | 0 | ??? | ??? |
| 199 | C7 | 04000010 | 0 | ??? | ??? |
| 200 | C8 | 04000010 | 0 | ??? | ??? |
| 202 | CA | 04000f1f | ? + | ??? | ??? |
| 203 | CB | 04000010 | 0 | ??? | ??? |
| 204 | CC | 0900000000000000e4 | 0 | ??? | ??? |
| 207 | CF | 0900000000000000e4 | 0 | ??? | ??? |
| 223 | DF | 04000010 | 0 | Насос СК ??? | ??? |
| 224 | E0 | 04000010 | 0 | ??? | ??? |
| 225 | E1 | 04004656 | 70 С | Максимальная расч. температура бойлера | d.20 |
| 231 | E7 | 04000414 | 4 | ??? | ??? |
| 232 | E8 | 04000212 | 2 | ??? | ??? |
Кроме вышеперечисленных ответов, котел может вернуть сообщения типа:
030602 - Значение успешно записано в регистр.
030107 - Возможно, ошибка контрольной суммы.
030305 - Ошибка. Некорректная команда.
Отдельный интерес представляет команда ABh, с помощью которой можно получить информацию о текущем статусе котла. Этот статус в документации Vaillant описан как S.01, S.02. Таким образом можно обращаться как к отдельным регистрам (элементам) котла, так и запрашивать самодиагностические коды электроники.
Несколько слов о кодировании температуры. В части регистров это простое преобразование HEX->BIN.
Например команда e7h (максимальная температура бойлера). Значение 46h нужно понимать как 70 градусов.
Сложнее с командой 18h (температура подачи). Котел возвращает данные 060003c400fd.
Читать это значение нужно так:
3C -> 60 градусов
40 -> 64/255 -> 0,25 градуса
Значение температуры 60,25 градуса.
Примечательно, что это информация разнесена по 3 байтам: 03 c4 00
Значения типа 00h и 01h очевидны без пояснений. Но встречаются также значения вида 0Fh и F0h. Это состояние активности элемента - активен или не активен.
Полезными для меня показались такие параметры котла как общее состояние котла системы самодиагностики, общее количество часов работы котла, состояние горелок, температура подающей линии котла, температура отходящих газов (выхлопа), значения среднего и максимального времени розжига, а также общее количество неудачного розжига с первой попытки. С помощью простейшей программы я считываю эти параметры котла и записываю в базу данных системы Умный Дом. Далее эти данные используются в программе управления отоплением и для отображения работы системы в Web-интерфейсе.

Но самым главным результатом этой работы стала возможность считывать значение, определяющее время работы котла в режиме отопления, а значит потребление газа. Конечно, разрешающая способность такого учета низкая. Минимальное величина учета - час, а значит почти 5 м3 газа. Но это, согласитесь, лучше, чем ничего. Да и с учетом тех расходов, которые происходят в зимние месяцы (от 50 до 70 м3 в сутки) такая шкала вполне приемлема. Как только наберется достаточная статистика обязательно сообщу о том, насколько полученные данные расходятся с показанием счетчика.

В котлах Vaillant, как, впрочем и в некоторых других марках, таких как Protherm, Wolf, имеется поддержка шины E-Bus. В приведенном выше примере видно, что котел Vaillant atmoVIT поддерживает работу с портом RS-232, но это не единственный способ общения с котлом. Более прогрессивным и гибким способом коммуникации является подключение компьютера, также как и других принадлежностей - регулятора calorMATIC и модулей расширения к единой шине E-Bus. При подключении к общей шине применяется принципиально иной подход. Например, при наличии двух котлов и регулятора calorMATIC 630 с помощью компьютера можно получать данные и управлять всеми этими устройствами, имея всего один адаптер, подключенный к любому свободному разъему E-BUS в колодке котла или регулятора. Есть данные что адаптер TTL-RS232 работает не со всеми котлами марки Vaillant. Возможно в последних моделях и вовсе нет прямой поддержки RS232, поэтому единственным вариантом подключения котла к компьютеру остается цифровая шина E-Bus. Для тех, кто интересуется этой темой приведу некоторые документы на тему шины E-Bus.
eBUS Specification. Network Management
eBUS Specification. Physical Layer (OSI 1). Data-Link Layer (OSI 2)
eBUS Specification. Application Layer (OSI 7)
eBUS Specification. Application Layer (OSI 7). Appendix
eBUS Specification. Physical Layer Testing
eBUS Specification. Data-Link Layer Testing
Vaillant eBUS Commands (Попытка реверс-инжиниринга)
Нужно понимать, что компьютер к шине E-Bus подключается не напрямую, а через адаптер. Для E-Bus существуют адаптеры как для USB, так и для RS232 интерфейса. Стандартная для E-Bus скорость 2400 бод.

Принципиальная схема простейшего адаптера E-Bus без гальванической развязки

Принципиальная схема адаптера eBUS-RS232 на базе MAX232
При использовании шины e-Bus для управления котлом требуется совершенно иные подходы в программировании, чем те, что описаны в этой статье. Так как у меня успешно работает прямое подключение котла к порту RS232, я не стал детально разбираться в протоколе и не использовал адаптеры eBUS, однако буду признателен за любую полезную информацию по теме управления котлами Vaillant и шине E-Bus.
2010-04-12 23:01:17 | Andrey_B
George, as a matter of fact, my boiler (Vaillant atmoVIT) has no modulation. It's normal for Russia. Simple, without burning modulation boilers are cheaper. It's rather cheaper to buy two boiler (20kW) without modulation than one boiler (40kW) with modulation. So my calculations are close to the truth (I've compared it with gas metering readings). But, you are right. For your Ecotec this information will not be true. But I'm convinced that information about current modulation is in boiler's memory like other data. So it's perhaps possible to write programm for continuous (without any delays or not more than second) polling boiler to get current status of boiler (fire on/off) and current modulation and then to calculate avarage values to write it to database (one for minutes for example).
2010-04-12 22:30:01 | George Hills
I am worried about your gas calculation. Does the boiler modulate? I mean, does it vary its power output while burning? I have a Vaillant Ecotec and it is not enough to know how many minutes the burner has been running for. It is also necessary to know at what power level - this can be 9kW - 30 kW.
Good luck!