GSM устройство управления котлами Webasto и не только

ещё бы знать где нормальная инструкция и прошивка последняя. ато по крупицам в старой теме собирал. что странно на фото выше у ребят на плате вижу что идёт с пинов 10 и 11. а на схеме, найденной в старом посте там на другие ноги. в скетче тоже

#define GSM_RX             10  // пин софт RX Arduino для соединения с TX модуля SIM800
#define GSM_TX             11  // пин софт TX Arduino для соединения с RX модуля SIM800

если 10 и 11 это D10 и D11, то у меня конечно не туда припаяно. я же по схеме паял…

Эта схема, насколько я знаю, тоже не очень актуальная. Всю инфу я собрал тут:

2 лайка

Спасибо! нашёл там версию посвежее. Теперь не могу разобраться с самой вебастой. по какому она у меня протоколу работает.
Как узнать? в гугле по этим данным - полный ноль :frowning:
Дать команду на старт WTT не может - пункт серый. Только подачей +12 запускается.
Вот лог при этом.

В логе указано , что это котел БМВ. У них свой протокол . Мной не изучался , поэтому в девайсе не реализован

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

Штатное управление может быть также потенциалом +12в

похоже, что так и есть. брал на авито у того, кто скупает перебирает и продаёт их. только при такой настройке он определяется в WTT.

у нас даже за сброс времени наработки котла от 5тр до войны спрашивали. какая документация может быть? никто ничего не знает…ну или найти в ответах котла то, что мне нужно (температуру ОЖ, пламя, вот только с чтением ошибок наверное сложно будет). я то хотел через mqtt получать ошибки с котла, чтобы оперативно понимать почему он не работает. получается проще плату махнуть с тем, кому управление по шине не нужно, а так же просто потенциалом идёт управление на включение.

Зачем все время считывать ошибки котла? Сделать нормальную ревизию котла и он будет работать годами. Это как бы надёжный девайс при правильном подходе. Судя по логу протокол должен быть простой . Похож на универсальный котел

Прежде чем что то сказать нужно подумать. Причем здесь чип-тюнинг вообще не понятно. Обычно ,говоря это слово, речь идёт о прошивке двс , ну в крайнем случае АКПП . И даже если речь будет идти про замену / коррекцию прошивки именно в котле , чип-тюнер не будет обладать информацией о протоколе обмена данными , ему это не обязательно знать и не нужно . Он просто возьмёт соответствующее оборудование, которое это делает , не вдаваясь в особенности протокола, и сделает работу по прошивке.
Про Документацию тоже странное заявление. Откуда возьмётся документация на протокол обмена данными с котлом у чип-тюнеров? Этой информации нет даже у людей-официалов по работе с котлами (Вебасто , Эбер). И даже вдруг если информация и есть. Попросить не получится. купить возможно.

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

1 лайк

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

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

О, а такой вопрос, тут один человек настраивал на таком котле девайс:

И у него он заработал на протоколе W-Bus. Зачем тогда отдельный протокол TTE_C?

Странный вопрос. на котле Эво написано , он как бы и должен по wbus работать. Тте_с нужен для других печек

Просьба к bsb568 , снять лог с нажатием кнопки удалить ошибки. А также снять разъем с какого нибудь элемента чтобы ошибка в памяти была и снять лог с ошибкой. Протокол БМВ котла почти расшарил . Позже выложу описание

также не понятно как в протоколе бмв сделана шифровка отрицательной температуры , сделал эмулятор котла бмв . никак не получается ответ котла построить так , чтобы WTT увидела отрицательную температуру. Поэтому желательно лог снять при отрицательной температуре

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

вот скетч эмулятора котла BMW. Просто загрузить скетч в голую ардуино, воткнуть в комп и выбрать в WTT ком-порт этой ардуины. После чего выбрать в WTT котел Thermo Top C/Z BMW. и можно диагностировать эмулятор ))

byte otv00[]= {0xC8, 0x38, 0x71, 0x03, 0x01, 0x01, 0x01, 0x0A, 0x16, 0x01, 0xD9, 0x17, 0x01};
byte otv08[]= {0x02, 0x0D, 0x01};

byte otv0401[]= {0x01, 0x07, 0x08, 0x09, 0x18, 0x50};
byte otv0402[]= {0x02, 0x0D, 0x08, 0x06, 0x08, 0x40};
byte otv0403[]= {0x03, 0x02, 0x04, 0x25, 0x01, 0x01};
byte otv0404[]= {0x00};
byte otv05[]=   {};
byte otv0B[]= {0x10, 0x3D, 0xff, 0x00, 0x00, 0x50, 0x01, 0x80, 0x2C}; 
byte otv9402[]= {0x10}; 


void sendMessage(const byte *command, const size_t size)
{

  
 const byte siZe = size+5;
  byte Mes[siZe];
  byte Checksum = 0;
  for(byte i=0; i<siZe; i++) {
    if (i==0) Mes[i] = 0x6B;
    if (i==1) Mes[i] = size+3; 
    if (i==2) Mes[i] = 0x3F; 
    if (i==3) Mes[i] = 0xA0; 
    if (i==4) {for (byte t=0; t<size; t++ ) {Mes[i]=command[t]; Checksum^=Mes[i] ;Serial.write (Mes[i]);  i++;}}
    if (i!=siZe-1) Checksum^=Mes[i];
    else Mes[i] = Checksum;    
    Serial.write (Mes[i]); 
      }
  
  
  }


void setup() 
{
pinMode (0, INPUT);
}

void loop() {

static uint32_t prev = 0 ; 
static bool timer = 0 ; 
static bool inita = 0 ;  

if (!timer && !inita) {
  static bool lasta = 0; 
  if (!digitalRead(0) && lasta){timer =1 ; prev= millis(); } 
  lasta = digitalRead(0);
}

if (timer && millis() - prev>290) {prev = millis(); timer=0; inita = 1; Serial.begin (9600, SERIAL_8E1); }


  static byte header = 0;             // состояние заголовка 
  static byte message_size = 0;       // размер тела принимаемого сообщения, кол-во байт
  static byte j = 2;                  // инкремент
  static byte n = 2;
  const byte bufsize = 140;           // размер буфера принятого сообщения
  static byte buf [bufsize] = {0};    // буфер принятого сообщения
  static byte checksum = 0;           // контрольная сумма входящего сообщения
  static uint32_t prevRESETheader=0;  // таймер сброса заголовка если в момент приёма сообщения данные оборвались
  static bool RESETheader_timer = 0;  // таймер сброса заголовка если в момент приёма сообщения данные оборвались
if (inita){
if (Serial.available())
       {

        // первый старт байт
 if (header == 0){buf[0]=Serial.read(); delayMicroseconds(250); Serial.write (buf[0]);
         if (buf[0]==0x4F || buf[0]==0x3F){header = 1; RESETheader_timer=1; prevRESETheader = millis(); }
         else {header = 0; RESETheader_timer=0;}
         }                  

 // длина сообщения
 else if (header == 1 ){buf[1]=Serial.read(); delayMicroseconds(250);  Serial.write (buf[1]); message_size = buf[1]; if (message_size > bufsize) message_size = bufsize;  header = 4;j=2;n=2;checksum = 0;} 

 // пишем тело сообщения 
 else if (header == 4 && j< message_size+n) {
 buf[j] = Serial.read(); delayMicroseconds(250);  Serial.write (buf[j]);
 
 if (j<message_size+n-1) checksum^= buf[j]; // подсчёт КС
 
 if (j==message_size+n-1) header = 5; 
  j++;} 

 } // end of Serial.available()

 // сообщение приняли, действуем
 if (header == 5) {  
   
for(byte i = 0; i<n; i++) checksum^=buf[i]; // прибавляем к контрольной сумме старт байты

 // если контрольная сумма верна: 
if ( checksum == buf[message_size+n-1]) {
if (buf[2]==0x6B){

     if (buf[3]==0x00) {sendMessage(otv00, sizeof (otv00));}  
else if (buf[3]==0x08) {sendMessage(otv08, sizeof (otv08));}
else if (buf[3]==0x04 && buf[4]==0x01) {sendMessage(otv0401, sizeof (otv0401));}
else if (buf[3]==0x04 && buf[4]==0x02) {sendMessage(otv0402, sizeof (otv0402));}
else if (buf[3]==0x04 && buf[4]==0x03) {sendMessage(otv0403, sizeof (otv0403));}
else if (buf[3]==0x04 && buf[4]==0x04) {sendMessage(otv0404, sizeof (otv0404));}
else if (buf[3]==0x0B) {sendMessage(otv0B, sizeof (otv0B));} 
else if (buf[3]==0x05) {sendMessage(otv05, sizeof (otv05));} 
else if (buf[3]==0x94 && buf[4]==0x02) {sendMessage(otv9402, sizeof (otv9402));}
                }
       }
message_size = 0; header=0; RESETheader_timer=0; j=2; checksum = 0;
  }
}
}

А вот и само

описание протокола котла BMW

или вот

1 лайк

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

1 лайк

это очень сложно сделать. у меня кронштейт, который держит вебасту не даёт снять крышку, которая закрывает разъёмы на свечу, вентилятор и т.д. я недавно снимал плату (похоже ошибки у меня были по вентилятору из-за трещинах в пайке, пропаивал плату и ставил обратно, теперь она может работать не по 10 минут а хоть полчаса). поскольку дальний край крышки не получается снять из-за кронштейна, то разъёмы смог снять и одеть только когда плата была вытащена из дна и стояла под 45 градусов. потом еле натянул ближнюю часть крышки. поэтому на ходу не отключить. могу лишь снять с ошибками (которые возможно сейчас есть с последнего сброса) потом стереть и снять снова.
или смысл именно в моменте обнаружения ошибки? чтобы отследить какое сообщение она выдаст?
температуру тоже посмотрю умеет ли отрицательную показывать или нет. постараюсь после работы не забыть взять ноут.

Да , так пойдёт. Только стирать нужно в момент снятия лога. В принципе по ошибкам и их удалению методом подбора ответов от котла ,думаю, я правильно разобрался. Только нужно проверить эту теорию. Почитайте выше описание протокола я сделал. Позже добавлю протокол этого котла в скетч.

Вроде получилось. Лог залить на форум и на pastebin не получилось, поэтому он тут 6jan1.7z — Яндекс Диск
Правда ошибка снова вылезает. Хоть и реже, видать придется всё-таки вентилятор сам снимать, смотреть щетки…
Отрицательная температура возможно всё-таки есть, похоже показывается как например +240~ +247 градусов :rofl: