ардуина в этом случае (с пустым скетчем) выступает лишь в роли транспорта USB-serial (CH340) <-> K-Line. Изначально пытался сделать как тут, но потом наткнулся на здешнюю ветку.
Предлагаю перецепить клайн части схем к софт сериал порту и погонять байты между ардуинами, используя скетчи из примера софт сериал. Проверить тем самым обе схемы. Если l9637d работает, скорее всего её нужно подключить и просто вместо 510 Ом пробовать другие резисторы 1к 2к 4.7к 10к. Должно заработать
С прослушкой видимо косяк вышел. Я дома подключил к минитаймеру. Нажал на нем запуск, в окне протокола WTT увидел команду. Подумал что работает. А когда приехал в гараж и начал проверять с котлом, то понял, что вижу сообщения только с одной стороны, а ответы котла не вижу. Короче ерунда какая-то. Попробую, как Вы говорите, с помощью нормального k-line адаптера еще послушать. Вот скрин лога запуска котла от минитаймера (последняя команда - это остановка):
redbiz, посмотрел скетч 478 внимательней, есть там недочеты, скорее всего дело в скетче. Он старый . вот убрал лишнее из последнего скетча. Запуск котла тактовой кнопкой.
но не проверял !!. позже проверю
UPDATE. чуть еще поправил, проверил без клайн адаптера, вроде все правильно скетч выдает
//------------------- распиновка ног ардуино --------------------------------------------------------
#define DopOn 4 // сюда доп канал от сигналки на включение вебасто
#define DopOff 5 // сюда доп канал от сигналки на выключение вебасто
#define PUMPE 13 // пин управления помпой
#define StatusWebastoLED 15 // (А1) пин LED индикация включенности котла
#define StartButtonpin 16 // (А2) пин тактовой кнопки вкл/выкл котла
enum BUTT {StartButton, DopOnButton , DopOffButton };
//---------------------------для организации взаимодействия с котлом по цифровой шине и различные таймеры----------------------------
#include <Button.h>
Button test;
#define K_LINE Serial //UART для соединения с шиной котла
#define TX 1
// команды для котлов с шиной W-BUS
byte StartByte = 0x21;
const byte HEATER_BEGIN[] {0x51, 0x0A};
byte HEATER_START[] {StartByte, 0x3B};
byte HEATER_PRESENCE[] {0x44, StartByte, 0x00};
const byte HEATER_STOP[] {0x10};
const byte HEATER_STATUS_VEVO[] {0x50, 0x05};
const byte HEATER_STATUS_VEVO07[] {0x50, 0x07};
const byte HEATER_STATUS_EVO[] {0x50, 0x30, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x1E, 0x32, 0x6F};
const byte HEATER_DTC_REQUEST[] {0x56, 0x01};
const byte HEATER_DTC_ERASE[] {0x56, 0x03};
enum ProtocolSTATUS_ {STATUSBUS=1, ANALOG}; // возможные протоколы чтения статуса котла
enum ProtocolSTART_ {STARTBUS=1, IMPULSE, POTENCIAL}; // возможные протоколы запуска котла
enum HeaterBUSTYPE_ {TTC_E=1, WBUS, HYDRONIC}; // тип шины котла
byte ProtocolSTATUS = STATUSBUS;
byte ProtocolSTART = STARTBUS;
byte HeaterBUSTYPE = WBUS;
byte WBUS_VER = 0x31;
byte w_bus_init = 0; //состояние инициализация шины w-bus (25мс LOW, 25мс HIGH для ЭВО)
byte StartMessageRepeat = 0; //количество отправленных сообщений на старт котла
byte StopMessageRepeat = 4; //количество отправленных сообщений на остановку котла
byte TimeWebasto = 30; //время работы котла, = 30мин
uint32_t currmillis = 0; //снимок системного времени
uint32_t Prev_PeriodW_BusMessage = 0; //переменная для таймера периодической отправки сообщений состояния котла в шину W-Bus
uint32_t Prev_PeriodW_BusStartStop = 0; //переменная для таймера периодической отправки сообщений старта/стопа котла в шину W-Bus
uint32_t prevInitreset = 0; //переменная для таймера сброса инита шины
bool Initreset = 0; //переменная для таймера сброса инита шины
uint32_t timerInit = 0; //для таймера инита шины W-BUS
uint32_t last_Flame = 0; //для таймера сброса флага пламени, если нет ответов от котла
uint32_t prevGND_impulse = 0; bool GND_impulse_timer = 0; //для таймера создания импульса GND - для протокола запуска котла импульсом GND
uint32_t prevPumpe=0; bool Pumpe_timer=0; //для таймера - работы помпы после выключения котла
byte PumpeTime = 200; //сек, время работы помпы после выключения котла
bool CentrLock = 0; //выбираем работу помпы , а не ЦЗ
enum needAction_ {NO_ACTION, NEED_DTCCLEAR};// возможные действия, стоящие в очереди
byte needAction = NO_ACTION;
byte NOanswer=0;
uint32_t prevNeedTimer = 0; bool NeedTimer = 0;
uint32_t prevWorkCycleHeater; bool WorkCycleHeater_timer=0; //для таймера отсчёта цикла работы котла
//---------------------------------Основные переменные--------------------------------------------------------------------------------
bool webasto = 0; // флаг команды на работу Webasto. 0 - котел выключен, 1 - котел включен
bool startWebasto_OK = 0; // флаг успешного запуска котла
float Vpit = 0.0; // Измеряемое напряжение бортсети
int PowerHeater= 0; // мощность работы котла
bool waterpump = 0; // флаг работы циркуляционного насоса
bool plug = 0; // флаг работы штифта накаливания
bool airfan = 0; // флаг работы нагнетателя воздуха
bool fuelpump = 0; // флаг работы топливного насоса
bool blowerfan = 0; // флаг работы вентилятора печки автомобиля
byte flameout = 0; // количество срывов пламени
byte DTC[13] ={0}; // коды неисправностей котла
byte countDTC = 0;
int8_t HeaterC = 0; // t котла
//---------------------------СТАРТОВЫЙ ЦИКЛ--------------------------------------------------------------------------------------------
void setup()
{
test.NO();
test.pullUp();
test.duration_bounce ( 50);
test.duration_click_Db ( 250);
test.duration_inactivity_Up(5000);
test.duration_inactivity_Dn(1000);
test.duration_press ( 500);
test.button(StartButtonpin, DopOn, DopOff);
pinMode (DopOn, INPUT_PULLUP);
pinMode (DopOff, INPUT_PULLUP);
pinMode (PUMPE, OUTPUT); digitalWrite (PUMPE, LOW);
pinMode (StatusWebastoLED, OUTPUT); digitalWrite (StatusWebastoLED, LOW);
HEATER_START[0] = StartByte;
HEATER_PRESENCE[1] = StartByte;
K_LINE.begin(2400, SERIAL_8E1);
}
//--------------------------------------------------------------ЛУП---------------------------------------------------------------
void loop()
{
currmillis = millis();
test.read();
Heater_BUS();
timers_and_buttons ();
}
//-----------------------------------------------------------конец луп-------------------------------------------------------------
void Heater_BUS ()
{
static byte requiredmessage = 1; // что отправляем в данный момент поддержание старта, запрос параметров или запрос ошибок
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 (HeaterBUSTYPE == WBUS){
if (webasto)
{
if (StartMessageRepeat<4 && (currmillis-Prev_PeriodW_BusStartStop>800) && w_bus_init >= 9){
sendMessage (HEATER_START, sizeof(HEATER_START));
StartMessageRepeat++;
Prev_PeriodW_BusStartStop = currmillis;
}
if (StartMessageRepeat>=4)
{
if (currmillis-Prev_PeriodW_BusMessage>4000)
{
if (requiredmessage==1) sendMessage (HEATER_PRESENCE, sizeof(HEATER_PRESENCE));
else if (requiredmessage==2) {if (WBUS_VER >= 0x40) sendMessage (HEATER_STATUS_EVO, sizeof(HEATER_STATUS_EVO));
if (WBUS_VER >= 0x30 && WBUS_VER < 0x40)sendMessage (HEATER_STATUS_VEVO, sizeof(HEATER_STATUS_VEVO));}
else if (requiredmessage==3) sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST));
requiredmessage++; if (requiredmessage > 3) requiredmessage = 1;
StopMessageRepeat = 0;
Prev_PeriodW_BusMessage = currmillis;
}
}
}
else if (StopMessageRepeat<4 && (currmillis-Prev_PeriodW_BusStartStop>800))
{
sendMessage (HEATER_STOP, sizeof(HEATER_STOP));
StopMessageRepeat++;
StartMessageRepeat = 0;
Prev_PeriodW_BusStartStop = currmillis;
}
if (w_bus_init==1) {K_LINE.end(); pinMode (TX, OUTPUT); digitalWrite(TX, 0); timerInit = millis(); w_bus_init++;}
else if (w_bus_init==2 && millis() - timerInit>24) {timerInit = currmillis; digitalWrite(TX, 1); w_bus_init++; }
else if (w_bus_init==3 && millis() - timerInit>24) {K_LINE.begin (2400,SERIAL_8E1 ); w_bus_init=9;
if (needAction>0) sendMessage (HEATER_BEGIN, sizeof(HEATER_BEGIN));}
if (K_LINE.available()){
// первый старт байт
if (header == 0){buf[0]=K_LINE.read();
if (buf[0]==0x4F || buf[0]==0x44){header = 1; RESETheader_timer=1; prevRESETheader = currmillis; }
else {header = 0; RESETheader_timer=0;}
}
// длина сообщения
else if (header == 1 ){buf[1]=K_LINE.read(); 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] = K_LINE.read();
if (j<message_size+n-1) checksum^= buf[j]; // подсчёт КС
if (j==message_size+n-1) header = 5;
j++;}
} // end of K_LINE.available()
// сообщение приняли, действуем
if (header == 5) {
for(byte i = 0; i<n; i++) checksum^=buf[i]; // прибавляем к контрольной сумме старт байты
// если контрольная сумма верна:
if ( checksum == buf[message_size+n-1]) {
prevInitreset = currmillis; // нулим таймер сброса инита
NOanswer = 0;
if (buf[0]==0x44 && buf[2]==0xC4 && buf[3]==0x00) {w_bus_init = 1; delay (500); K_LINE.flush();} // если получили от котла сбой инита, делаем переинит
if (buf[2]==0xD1 && buf[3]==0x0A) {w_bus_init = 10; if (WBUS_VER != buf[4]) WBUS_VER = buf[4];} //если получили ответ на старт коммуникации
if ((buf[2]^0x80)==HEATER_START[0] && buf[3]==HEATER_START[1]) {StartMessageRepeat =4;} // ответ на команду запуск котла
if (buf[2]==0x90) {StopMessageRepeat=4;} // если получили ответ на команду стоп котла
if (buf[2]==0xD6 && buf[3]==0x03) {needAction=0; w_bus_init = 9; NeedTimer = 0;} // если получили ответ на команду стирания ошибок
if (buf[2]==0xD6 && buf[3]==0x01) // если получили ответ на запрос DTC (сообщение с кодами ошибок)
{
if (needAction>0 && needAction<NEED_DTCCLEAR) w_bus_init = 14;
for (byte h = 0; h< sizeof(DTC); h++) DTC[h]=0;
DTC[0] = buf[4];
if (buf[4]<=sizeof(DTC)) for (byte h = 0; h< buf[4]; h++) {DTC[h+1]=buf[h*3+5]; bitWrite (DTC[6], h+1, (buf[h*3+6] & 0x02)>>1);}
}
//--------------------------------------------------- котлы EVO (W-BUS 4.x)-------------------------------------
if (WBUS_VER >= 0x40)
{
if (buf[2]==0xD0 && buf[3]==0x30) // если получили сообщение с текущими данными
{
if (buf[4] ==0x0A) {
airfan = (bool)buf[5]; // получаем флаг работы нагнетателя воздуха
plug = (buf[5] & 0x02)>>1; // получаем флаг работы штифта накаливания
fuelpump = (buf[5] & 0x04)>>2; // получаем флаг работы топливного насоса
waterpump = (buf[5] & 0x08)>>3; // получаем флаг работы циркуляционного насоса
blowerfan = (buf[6] & 0x10)>>4; // получаем флаг работы вентилятора печки автомобиля
}
if (buf[6] ==0x0C) HeaterC = buf[7]-50; // получаем температуру антифриза в котле
if (buf[8]==0x0E) {Vpit = (float)((buf[9]<<8)|buf[10])/1000.0;} // получаем напряжение борт сети
if (buf[11]==0x10) {startWebasto_OK = (bool)buf[12]; last_Flame = currmillis;} // проверяем наличие пламени
if (buf[13]==0x12) {PowerHeater = buf[14]/2; } // читаем мощность работы котла
if (buf[18]==0x32) {flameout = buf[19];}
if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 12; sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST));}
}
}// end of котлы EVO (W-BUS 4.x)
//--------------------------------------------------- котлы VEVO, штатные TTC, TTE, TTV (W-BUS 3.x)-------------------------------------
else if (WBUS_VER >= 0x30 && WBUS_VER <0x40)
{
if (buf[2]==0xD0 && buf[3]==0x05) // если получили сообщение с текущими данными 50 05
{
startWebasto_OK = buf[7]; last_Flame = currmillis; // проверяем наличие пламени у VEVO (W-BUS 3.x)
HeaterC = buf[4]-50; // проверяем t котла у VEVO (W-BUS 3.x)
PowerHeater = (((uint32_t)buf[8]<<8)|buf[9])/515; // читаем мощность работы котла из двух байт
Vpit = (float)((buf[5]<<8)|buf[6])/1000.00; // читаем напряжение сети из двух байт
if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 12; sendMessage (HEATER_STATUS_VEVO07, sizeof(HEATER_STATUS_VEVO07));}
}
if (buf[2]==0xD0 && buf[3]==0x07) // если получили сообщение с текущими данными 50 07
{
flameout = buf[9];
if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 13; sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST));}
}
}
} // конец контрольная сумма верна:
// если контрольная сумма не совпала:
//else K_LINE.println("CRC fail!!!" );
message_size = 0; header=0; RESETheader_timer=0; j=2; checksum = 0;
}
}// end WBUS
// таймер сброса заголовка если данные оборвались по середине сообщения
if (RESETheader_timer && currmillis - prevRESETheader > 500) {RESETheader_timer = 0; header = 0; if (HeaterBUSTYPE == TTC_E)j=3; else if (HeaterBUSTYPE == WBUS)j=2; }
if (currmillis - last_Flame>30000 && ProtocolSTATUS==STATUSBUS) {startWebasto_OK=0; last_Flame = currmillis;} // делаем статус "нет пламени" через 30 сек, если не получаем сообщения от котла
if (Initreset && currmillis - prevInitreset>3000) {// сброс инита, если прошло более 3 сек без ответа после отправки последнего сообщения ,больше 5 раз
NOanswer++; if (NOanswer <=5)prevInitreset=currmillis;
else{NOanswer=0; Initreset = 0; w_bus_init = 1; if (webasto) StartMessageRepeat=0;} }
if (w_bus_init==10 && HeaterBUSTYPE == WBUS)
{
if (needAction>0 && needAction < NEED_DTCCLEAR)
{
if (WBUS_VER >= 0x40) sendMessage (HEATER_STATUS_EVO, sizeof(HEATER_STATUS_EVO));
else if (WBUS_VER >= 0x30 && WBUS_VER <0x40)sendMessage (HEATER_STATUS_VEVO, sizeof(HEATER_STATUS_VEVO));
w_bus_init=11;
}
if (needAction==NEED_DTCCLEAR) { sendMessage (HEATER_DTC_ERASE, sizeof(HEATER_DTC_ERASE)); w_bus_init = 20; }
}
if ((NeedTimer && currmillis - prevNeedTimer>11000) || w_bus_init == 14) {NeedTimer = 0;w_bus_init = 9; }
}
void sendMessage(const byte *command, const size_t size)
{
if (!Initreset){ Initreset = 1; prevInitreset = currmillis;} // включение таймера сброса инита
const byte siZe = size+3;
byte Mes[siZe];
byte Checksum = 0;
for(byte i=0; i<siZe; i++) {
if (i==0) Mes[i] = 0xF4;
if (i==1) Mes[i]=size+1;
if (i==2) {for (byte t=0; t<size; t++ ) {Mes[i]=command[t]; Checksum^=Mes[i] ;K_LINE.write (Mes[i]); K_LINE.read(); i++;}}
if (i!=siZe-1) Checksum^=Mes[i];
else Mes[i] = Checksum;
K_LINE.write (Mes[i]); K_LINE.read();
}
}
void Queue (const byte &actioN) {needAction = actioN;
if (ProtocolSTATUS==STATUSBUS){NeedTimer = 1; prevNeedTimer = currmillis; if (!webasto) w_bus_init = 1;}}
void timers_and_buttons (){
digitalWrite (StatusWebastoLED, webasto); // индикация включенности котла
//ниже для таймера работы помпы после выключения котла
if (Pumpe_timer && currmillis - prevPumpe > (uint32_t) PumpeTime * 1000ul) {digitalWrite (PUMPE, 0); Pumpe_timer=0;}
//ниже для таймера старта котла по шине и аналогу
if (WorkCycleHeater_timer && currmillis - prevWorkCycleHeater > (uint32_t)TimeWebasto * 60000UL) {StopWebasto();}
///если нажали на допканал - делаем соответствующее состояние котла
if (test.event_click_Dn (DopOnButton) && !webasto) {StartWebasto();}
if (test.event_click_Dn (DopOffButton) && webasto) {StopWebasto();}
//если нажали тактовую кнопку меняем состояние котла на противоположное
if (test.event_press_short (StartButton))
{
if (!webasto) {StartWebasto(); }
else {StopWebasto();}
}
}
void StartWebasto()
{
if (ProtocolSTART==STARTBUS) {StartMessageRepeat = 0; } else StartMessageRepeat = 4;
webasto = 1;
prevWorkCycleHeater=currmillis;
WorkCycleHeater_timer = true;
if (!CentrLock) {digitalWrite (PUMPE, 1);} // включаем помпу
w_bus_init = 1;
}
void StopWebasto()
{
StopMessageRepeat = 0;
webasto = 0;
WorkCycleHeater_timer = false;
if (!CentrLock) {Pumpe_timer=1; prevPumpe = currmillis;} // включаем таймер, по окончании которого помпа выключится
if (ProtocolSTATUS==STATUSBUS) startWebasto_OK = 0;
}
Сегодня послушал протокол с помощью VAG COM KKL 409. На картинке первый столбец - это запуск и остановка котла от минитаймера 1533. Загрузил скетч #478 в обе Arduino. При первой попытке с LM393 котел запустился и работал (хоть и проскочило сообщение "Ошибка контрольной суммы". Кстати, что это?). На последующих тестах котел запускался и тух (переставал качать насос). Где-то раньше, где-то позже.
Со скетчем из сообщения #1960 по схеме #1942 ничего не запустилось, на кнопку не реагировало, диоды не моргали, команды в протоколировании не появлялись.
а кнопку то какого пина замыкали ? Нужно было пин А2 коротко на массу замыкать и в Тх начинают идти сообщения для запуска котла , я проверил . Можете пин индикации включенности котла выбрать 13. чтоб знать отреагировала ли кнопка
Значит так, докладываю: Котел со скетчем из #1960 запускается и останавливается по кнопке великолепно! Спасибо огромное за помощь! Теперь можно двигаться дальше, к gsm :)
А сложно ли в скетч добавить цикл на перезапуск котла через каждые 45 мин? (что бы обойти ограничение в прошивке на 50мин) Ну т.е. через 45мин остановить, выждать минуты три на завершение продувки и запустить заново. И так по кругу, пока не остановлю кнопкой.
Здравствуйте, спасибо за ваш проэкт, очень все понятно и доступно. Собрал вашу схему залил скеч 4.1 на смс ардуинка отвечает весь функционал работает кроме показателя батареи пишет либо no data либо 00.
И еше ни как не могу прописать датчики, в порте вижу что смс приходит а ответа нету... Пробовал исправлять в скетче адреса всеравно остаться те которые были, еепром чистил..
И снова здравствуйте, я уже два года пользуюсь скетчем 3.89 , и не заходил на эту ветку , с прошлой зимы . Скетч 3.89 у меня работает в принципе без проблем, и температуры отдает, и напряжение , и замками дверей управляет через mqtt . Но вот решил обновить смартфон , и встал вопрос по переустановке всего софта на новый телефон, зашел на эту ветку сайта, вдруг что нибудь новое вкусное появилось? Стоит ли шить скетчи 4 версии , или там ни чего нового нет ?
принципиально нового ничего, так... косметика только . мне надо было вести историю прошивок, что меняется в каждой , но я этого не делал , поэтому так сходу и не скажешь что там нового , смотреть по скетчу надо.
С адрессами разобрался, поправил их в скетче еепрома.
Осталось два вопроса...
1. Нету информации от вольт метра и температуры пламени. (я так понял потомучто в скетче настроено чтение этих параметров из шины w-bus) ткните носом где поправить.
2. Так и не получается с mqtt, на российском брокере https://clusterfly.ru/ не могу отправить метрики, кнопка просто не нажимается у них на сайте... В тех поддержке мен, там никто так и не понял. Говорят первый раз слышим про какие-то метрики.
Максим, помогите доделать устройство...
Первый вопрос так и остался..
Со вторым частично разобрался, получилось отправить метрики через другой клиент но брокера использую все того же cluster fly. Метрики пришли, ардуинка подключилась к брокеру (часто моргает) но данные не обновляться и не работает ни одна кнопка, на смс ардуинка работает хорошо.
Kir, как же вам помочь если вы не предоставили никакой информации, какой котёл, как запускаете и считываете с него параметры. На кластерфлай у меня так и не получилось добиться чтобы работало. Поэтому пока только смс или свой мктт брокер поднимать
Redbiz, для скетч 1960 нет актуальной платы и схемы. Вы же сами хотели чтоб только с кнопки запускалось . Актуальная инфа по полному функционалу в посте #5.
Извините, с ардинкой работал давно и то так баловлся многое по забывал.. Котёл вебасто аналоговый цэшка.
С данными разобрался, просто инструкцию еше раз прочёл
С мктт тоже разобрался нашёл несколько брокеров на которых работает устройство, правда несколько из них общедоступных(побоялся что, кто нито, что нито отправит лишнее), другой работает 6 или 8 часов в сутки потом ему надо несколько часов перезаряжаться бред... Ну и платный российский брокер на котором все понятно и все работает сразу и есть вебсокет нормальный. Цена кстати всего 200р за 6 месяцев.
Так что еше раз спасибо за ваш великолепный и простой как оказалось проект,очень крутое устройство получилось!))
Попробую еше проверит на своём котле работает ли w-bus, что наврятли..
Отчитываюсь, по аналогу работает все показывает все прекрасно, по шине диагностики HeaterBusType TTC_E котёл запустился температуру, напряжение и количество ошибок показывает, а вот состояние пламени и мощность горения увы, не показывает.. А ошибки сбросить я так понимаю ни как нельзя через ваше устройство?
На метрику ошибок надо нажать , если мне память не изменяет . По поводу пламени очень странно , что не работает , врядли протоколы отличаются у разных котлов одной модели . Пробуйте более старые скетчи 3.89 чтоли
Приветствую всех, может быть нужно кому, есть полностью готовый к установке комплект, проработала год на моей машине, работала даже в -40.
Пинов могу отсыпать для разъёма, если нужно ещё что-то подключить. В данный момент прошита под котлы для шины W-Bus, подключается в разрыв "таймера" вэбасто.
Интересный глюк сегодня подхватил, пришло сообщение "Call Ready" пытался его найти в прошивки, но не нашёл. Ещё самое странное что модуль перестал отвечать на СМС.
Здравствуйте! Честно скажу, всю тему не читал, 40 страниц многовато)
Кто-нибудь делал сие устройство на esp? У дома хотелось бы рулить по WiFi, он отлично ловит. Можно было бы слать показания в умный дом и из него же рулить девайсом. А вне дома- GSM.
Интересный глюк сегодня подхватил, пришло сообщение "Call Ready" пытался его найти в прошивки, но не нашёл. Ещё самое странное что модуль перестал отвечать на СМС.
Есть опыт работы с модулями, поэтому мне понятно что произошло:
1) Call Ready - это модуль перезапустился, он находит сеть и пишет Call Ready и SMS Ready ююю
2) перестал отвечать на смс - модуль не был инициализирован стартовыми АТ-командами, может даже и скорость другая... Поэтому ничего не работает, присылает чушь - вообще капец.
Программа не сырая, а отличная. А вот китайские модули все портят, купите оригиналы и будем вам счастье.
я знаю, что пишу.. если с модулем правильно работать, правильное питание и прочее - то все ок.
программа не должна пересылать вам стартовые слова модуля, а раз она это делает - это ни что иное как глюк программы. можете даже не спорть. подключите к модулю напрямую к его юарту шнур юсб с юартом и включите модулю питание и увидите что он передает. и вот это попадает в смс? вы хотите меня убедить что программа отличная??.. ноу коммент.
Короткое замыкание, я вас прошу, прекратите уже срать в тапки. Программа предоставляется как есть, это не платный продукт, а лишь результат хобби. Судя по вашим постам в других темах, ваша квалификация, мягко говоря, не дотягивает, чтобы таким образом оценивать работу других. Я не сомневаюсь, что вы научились работать с модемом на каком то приемлемом уровне, только не надо сообщать об этом всем при каждом удобном случае. Людям это неинтересно.
Программа не сырая, а отличная. А вот китайские модули все портят, купите оригиналы и будем вам счастье.
я знаю, что пишу.. если с модулем правильно работать, правильное питание и прочее - то все ок.
программа не должна пересылать вам стартовые слова модуля, а раз она это делает - это ни что иное как глюк программы. можете даже не спорть. подключите к модулю напрямую к его юарту шнур юсб с юартом и включите модулю питание и увидите что он передает. и вот это попадает в смс? вы хотите меня убедить что программа отличная??.. ноу коммент.
Если у вас есть большой опыт работы с gsm модулями. Может подскажите, есть ли достойные библиотеки для работы с модулями?
Я не пойму как у вас wtt вообще связывается с котлом через эти связки с ардуинами. При работе wtt с котлом ардуина как бы лишняя
Можно убрать l9637d, оставив схему lm393 и играться дополнительными резисторами пробовать wbus 10к к питанию подтянуть, 2k, 1k
ардуина в этом случае (с пустым скетчем) выступает лишь в роли транспорта USB-serial (CH340) <-> K-Line. Изначально пытался сделать как тут, но потом наткнулся на здешнюю ветку.
Предлагаю перецепить клайн части схем к софт сериал порту и погонять байты между ардуинами, используя скетчи из примера софт сериал. Проверить тем самым обе схемы. Если l9637d работает, скорее всего её нужно подключить и просто вместо 510 Ом пробовать другие резисторы 1к 2к 4.7к 10к. Должно заработать
Спасибо! Попробую еще разные варианты. С софт-сериалом у меня ничего не получилось, видимо неправильно его прописывал...
А подслушка то в итоге получилась когда котёл запустился, есть лог?
С прослушкой видимо косяк вышел. Я дома подключил к минитаймеру. Нажал на нем запуск, в окне протокола WTT увидел команду. Подумал что работает. А когда приехал в гараж и начал проверять с котлом, то понял, что вижу сообщения только с одной стороны, а ответы котла не вижу. Короче ерунда какая-то. Попробую, как Вы говорите, с помощью нормального k-line адаптера еще послушать. Вот скрин лога запуска котла от минитаймера (последняя команда - это остановка):
MaksVV, с протоколом гидроников так и не получилось разобраться?
не, че то некогда тогда стало, а потом вспоминать наработки уже как-то лениво было. Может и придёт ещё муза, кто знает.
redbiz, посмотрел скетч 478 внимательней, есть там недочеты, скорее всего дело в скетче. Он старый . вот убрал лишнее из последнего скетча. Запуск котла тактовой кнопкой.
но не проверял !!. позже проверю
UPDATE. чуть еще поправил, проверил без клайн адаптера, вроде все правильно скетч выдает
//------------------- распиновка ног ардуино -------------------------------------------------------- #define DopOn 4 // сюда доп канал от сигналки на включение вебасто #define DopOff 5 // сюда доп канал от сигналки на выключение вебасто #define PUMPE 13 // пин управления помпой #define StatusWebastoLED 15 // (А1) пин LED индикация включенности котла #define StartButtonpin 16 // (А2) пин тактовой кнопки вкл/выкл котла enum BUTT {StartButton, DopOnButton , DopOffButton }; //---------------------------для организации взаимодействия с котлом по цифровой шине и различные таймеры---------------------------- #include <Button.h> Button test; #define K_LINE Serial //UART для соединения с шиной котла #define TX 1 // команды для котлов с шиной W-BUS byte StartByte = 0x21; const byte HEATER_BEGIN[] {0x51, 0x0A}; byte HEATER_START[] {StartByte, 0x3B}; byte HEATER_PRESENCE[] {0x44, StartByte, 0x00}; const byte HEATER_STOP[] {0x10}; const byte HEATER_STATUS_VEVO[] {0x50, 0x05}; const byte HEATER_STATUS_VEVO07[] {0x50, 0x07}; const byte HEATER_STATUS_EVO[] {0x50, 0x30, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x1E, 0x32, 0x6F}; const byte HEATER_DTC_REQUEST[] {0x56, 0x01}; const byte HEATER_DTC_ERASE[] {0x56, 0x03}; enum ProtocolSTATUS_ {STATUSBUS=1, ANALOG}; // возможные протоколы чтения статуса котла enum ProtocolSTART_ {STARTBUS=1, IMPULSE, POTENCIAL}; // возможные протоколы запуска котла enum HeaterBUSTYPE_ {TTC_E=1, WBUS, HYDRONIC}; // тип шины котла byte ProtocolSTATUS = STATUSBUS; byte ProtocolSTART = STARTBUS; byte HeaterBUSTYPE = WBUS; byte WBUS_VER = 0x31; byte w_bus_init = 0; //состояние инициализация шины w-bus (25мс LOW, 25мс HIGH для ЭВО) byte StartMessageRepeat = 0; //количество отправленных сообщений на старт котла byte StopMessageRepeat = 4; //количество отправленных сообщений на остановку котла byte TimeWebasto = 30; //время работы котла, = 30мин uint32_t currmillis = 0; //снимок системного времени uint32_t Prev_PeriodW_BusMessage = 0; //переменная для таймера периодической отправки сообщений состояния котла в шину W-Bus uint32_t Prev_PeriodW_BusStartStop = 0; //переменная для таймера периодической отправки сообщений старта/стопа котла в шину W-Bus uint32_t prevInitreset = 0; //переменная для таймера сброса инита шины bool Initreset = 0; //переменная для таймера сброса инита шины uint32_t timerInit = 0; //для таймера инита шины W-BUS uint32_t last_Flame = 0; //для таймера сброса флага пламени, если нет ответов от котла uint32_t prevGND_impulse = 0; bool GND_impulse_timer = 0; //для таймера создания импульса GND - для протокола запуска котла импульсом GND uint32_t prevPumpe=0; bool Pumpe_timer=0; //для таймера - работы помпы после выключения котла byte PumpeTime = 200; //сек, время работы помпы после выключения котла bool CentrLock = 0; //выбираем работу помпы , а не ЦЗ enum needAction_ {NO_ACTION, NEED_DTCCLEAR};// возможные действия, стоящие в очереди byte needAction = NO_ACTION; byte NOanswer=0; uint32_t prevNeedTimer = 0; bool NeedTimer = 0; uint32_t prevWorkCycleHeater; bool WorkCycleHeater_timer=0; //для таймера отсчёта цикла работы котла //---------------------------------Основные переменные-------------------------------------------------------------------------------- bool webasto = 0; // флаг команды на работу Webasto. 0 - котел выключен, 1 - котел включен bool startWebasto_OK = 0; // флаг успешного запуска котла float Vpit = 0.0; // Измеряемое напряжение бортсети int PowerHeater= 0; // мощность работы котла bool waterpump = 0; // флаг работы циркуляционного насоса bool plug = 0; // флаг работы штифта накаливания bool airfan = 0; // флаг работы нагнетателя воздуха bool fuelpump = 0; // флаг работы топливного насоса bool blowerfan = 0; // флаг работы вентилятора печки автомобиля byte flameout = 0; // количество срывов пламени byte DTC[13] ={0}; // коды неисправностей котла byte countDTC = 0; int8_t HeaterC = 0; // t котла //---------------------------СТАРТОВЫЙ ЦИКЛ-------------------------------------------------------------------------------------------- void setup() { test.NO(); test.pullUp(); test.duration_bounce ( 50); test.duration_click_Db ( 250); test.duration_inactivity_Up(5000); test.duration_inactivity_Dn(1000); test.duration_press ( 500); test.button(StartButtonpin, DopOn, DopOff); pinMode (DopOn, INPUT_PULLUP); pinMode (DopOff, INPUT_PULLUP); pinMode (PUMPE, OUTPUT); digitalWrite (PUMPE, LOW); pinMode (StatusWebastoLED, OUTPUT); digitalWrite (StatusWebastoLED, LOW); HEATER_START[0] = StartByte; HEATER_PRESENCE[1] = StartByte; K_LINE.begin(2400, SERIAL_8E1); } //--------------------------------------------------------------ЛУП--------------------------------------------------------------- void loop() { currmillis = millis(); test.read(); Heater_BUS(); timers_and_buttons (); } //-----------------------------------------------------------конец луп------------------------------------------------------------- void Heater_BUS () { static byte requiredmessage = 1; // что отправляем в данный момент поддержание старта, запрос параметров или запрос ошибок 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 (HeaterBUSTYPE == WBUS){ if (webasto) { if (StartMessageRepeat<4 && (currmillis-Prev_PeriodW_BusStartStop>800) && w_bus_init >= 9){ sendMessage (HEATER_START, sizeof(HEATER_START)); StartMessageRepeat++; Prev_PeriodW_BusStartStop = currmillis; } if (StartMessageRepeat>=4) { if (currmillis-Prev_PeriodW_BusMessage>4000) { if (requiredmessage==1) sendMessage (HEATER_PRESENCE, sizeof(HEATER_PRESENCE)); else if (requiredmessage==2) {if (WBUS_VER >= 0x40) sendMessage (HEATER_STATUS_EVO, sizeof(HEATER_STATUS_EVO)); if (WBUS_VER >= 0x30 && WBUS_VER < 0x40)sendMessage (HEATER_STATUS_VEVO, sizeof(HEATER_STATUS_VEVO));} else if (requiredmessage==3) sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST)); requiredmessage++; if (requiredmessage > 3) requiredmessage = 1; StopMessageRepeat = 0; Prev_PeriodW_BusMessage = currmillis; } } } else if (StopMessageRepeat<4 && (currmillis-Prev_PeriodW_BusStartStop>800)) { sendMessage (HEATER_STOP, sizeof(HEATER_STOP)); StopMessageRepeat++; StartMessageRepeat = 0; Prev_PeriodW_BusStartStop = currmillis; } if (w_bus_init==1) {K_LINE.end(); pinMode (TX, OUTPUT); digitalWrite(TX, 0); timerInit = millis(); w_bus_init++;} else if (w_bus_init==2 && millis() - timerInit>24) {timerInit = currmillis; digitalWrite(TX, 1); w_bus_init++; } else if (w_bus_init==3 && millis() - timerInit>24) {K_LINE.begin (2400,SERIAL_8E1 ); w_bus_init=9; if (needAction>0) sendMessage (HEATER_BEGIN, sizeof(HEATER_BEGIN));} if (K_LINE.available()){ // первый старт байт if (header == 0){buf[0]=K_LINE.read(); if (buf[0]==0x4F || buf[0]==0x44){header = 1; RESETheader_timer=1; prevRESETheader = currmillis; } else {header = 0; RESETheader_timer=0;} } // длина сообщения else if (header == 1 ){buf[1]=K_LINE.read(); 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] = K_LINE.read(); if (j<message_size+n-1) checksum^= buf[j]; // подсчёт КС if (j==message_size+n-1) header = 5; j++;} } // end of K_LINE.available() // сообщение приняли, действуем if (header == 5) { for(byte i = 0; i<n; i++) checksum^=buf[i]; // прибавляем к контрольной сумме старт байты // если контрольная сумма верна: if ( checksum == buf[message_size+n-1]) { prevInitreset = currmillis; // нулим таймер сброса инита NOanswer = 0; if (buf[0]==0x44 && buf[2]==0xC4 && buf[3]==0x00) {w_bus_init = 1; delay (500); K_LINE.flush();} // если получили от котла сбой инита, делаем переинит if (buf[2]==0xD1 && buf[3]==0x0A) {w_bus_init = 10; if (WBUS_VER != buf[4]) WBUS_VER = buf[4];} //если получили ответ на старт коммуникации if ((buf[2]^0x80)==HEATER_START[0] && buf[3]==HEATER_START[1]) {StartMessageRepeat =4;} // ответ на команду запуск котла if (buf[2]==0x90) {StopMessageRepeat=4;} // если получили ответ на команду стоп котла if (buf[2]==0xD6 && buf[3]==0x03) {needAction=0; w_bus_init = 9; NeedTimer = 0;} // если получили ответ на команду стирания ошибок if (buf[2]==0xD6 && buf[3]==0x01) // если получили ответ на запрос DTC (сообщение с кодами ошибок) { if (needAction>0 && needAction<NEED_DTCCLEAR) w_bus_init = 14; for (byte h = 0; h< sizeof(DTC); h++) DTC[h]=0; DTC[0] = buf[4]; if (buf[4]<=sizeof(DTC)) for (byte h = 0; h< buf[4]; h++) {DTC[h+1]=buf[h*3+5]; bitWrite (DTC[6], h+1, (buf[h*3+6] & 0x02)>>1);} } //--------------------------------------------------- котлы EVO (W-BUS 4.x)------------------------------------- if (WBUS_VER >= 0x40) { if (buf[2]==0xD0 && buf[3]==0x30) // если получили сообщение с текущими данными { if (buf[4] ==0x0A) { airfan = (bool)buf[5]; // получаем флаг работы нагнетателя воздуха plug = (buf[5] & 0x02)>>1; // получаем флаг работы штифта накаливания fuelpump = (buf[5] & 0x04)>>2; // получаем флаг работы топливного насоса waterpump = (buf[5] & 0x08)>>3; // получаем флаг работы циркуляционного насоса blowerfan = (buf[6] & 0x10)>>4; // получаем флаг работы вентилятора печки автомобиля } if (buf[6] ==0x0C) HeaterC = buf[7]-50; // получаем температуру антифриза в котле if (buf[8]==0x0E) {Vpit = (float)((buf[9]<<8)|buf[10])/1000.0;} // получаем напряжение борт сети if (buf[11]==0x10) {startWebasto_OK = (bool)buf[12]; last_Flame = currmillis;} // проверяем наличие пламени if (buf[13]==0x12) {PowerHeater = buf[14]/2; } // читаем мощность работы котла if (buf[18]==0x32) {flameout = buf[19];} if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 12; sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST));} } }// end of котлы EVO (W-BUS 4.x) //--------------------------------------------------- котлы VEVO, штатные TTC, TTE, TTV (W-BUS 3.x)------------------------------------- else if (WBUS_VER >= 0x30 && WBUS_VER <0x40) { if (buf[2]==0xD0 && buf[3]==0x05) // если получили сообщение с текущими данными 50 05 { startWebasto_OK = buf[7]; last_Flame = currmillis; // проверяем наличие пламени у VEVO (W-BUS 3.x) HeaterC = buf[4]-50; // проверяем t котла у VEVO (W-BUS 3.x) PowerHeater = (((uint32_t)buf[8]<<8)|buf[9])/515; // читаем мощность работы котла из двух байт Vpit = (float)((buf[5]<<8)|buf[6])/1000.00; // читаем напряжение сети из двух байт if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 12; sendMessage (HEATER_STATUS_VEVO07, sizeof(HEATER_STATUS_VEVO07));} } if (buf[2]==0xD0 && buf[3]==0x07) // если получили сообщение с текущими данными 50 07 { flameout = buf[9]; if (needAction>0 && needAction<NEED_DTCCLEAR) {w_bus_init = 13; sendMessage (HEATER_DTC_REQUEST, sizeof(HEATER_DTC_REQUEST));} } } } // конец контрольная сумма верна: // если контрольная сумма не совпала: //else K_LINE.println("CRC fail!!!" ); message_size = 0; header=0; RESETheader_timer=0; j=2; checksum = 0; } }// end WBUS // таймер сброса заголовка если данные оборвались по середине сообщения if (RESETheader_timer && currmillis - prevRESETheader > 500) {RESETheader_timer = 0; header = 0; if (HeaterBUSTYPE == TTC_E)j=3; else if (HeaterBUSTYPE == WBUS)j=2; } if (currmillis - last_Flame>30000 && ProtocolSTATUS==STATUSBUS) {startWebasto_OK=0; last_Flame = currmillis;} // делаем статус "нет пламени" через 30 сек, если не получаем сообщения от котла if (Initreset && currmillis - prevInitreset>3000) {// сброс инита, если прошло более 3 сек без ответа после отправки последнего сообщения ,больше 5 раз NOanswer++; if (NOanswer <=5)prevInitreset=currmillis; else{NOanswer=0; Initreset = 0; w_bus_init = 1; if (webasto) StartMessageRepeat=0;} } if (w_bus_init==10 && HeaterBUSTYPE == WBUS) { if (needAction>0 && needAction < NEED_DTCCLEAR) { if (WBUS_VER >= 0x40) sendMessage (HEATER_STATUS_EVO, sizeof(HEATER_STATUS_EVO)); else if (WBUS_VER >= 0x30 && WBUS_VER <0x40)sendMessage (HEATER_STATUS_VEVO, sizeof(HEATER_STATUS_VEVO)); w_bus_init=11; } if (needAction==NEED_DTCCLEAR) { sendMessage (HEATER_DTC_ERASE, sizeof(HEATER_DTC_ERASE)); w_bus_init = 20; } } if ((NeedTimer && currmillis - prevNeedTimer>11000) || w_bus_init == 14) {NeedTimer = 0;w_bus_init = 9; } } void sendMessage(const byte *command, const size_t size) { if (!Initreset){ Initreset = 1; prevInitreset = currmillis;} // включение таймера сброса инита const byte siZe = size+3; byte Mes[siZe]; byte Checksum = 0; for(byte i=0; i<siZe; i++) { if (i==0) Mes[i] = 0xF4; if (i==1) Mes[i]=size+1; if (i==2) {for (byte t=0; t<size; t++ ) {Mes[i]=command[t]; Checksum^=Mes[i] ;K_LINE.write (Mes[i]); K_LINE.read(); i++;}} if (i!=siZe-1) Checksum^=Mes[i]; else Mes[i] = Checksum; K_LINE.write (Mes[i]); K_LINE.read(); } } void Queue (const byte &actioN) {needAction = actioN; if (ProtocolSTATUS==STATUSBUS){NeedTimer = 1; prevNeedTimer = currmillis; if (!webasto) w_bus_init = 1;}} void timers_and_buttons (){ digitalWrite (StatusWebastoLED, webasto); // индикация включенности котла //ниже для таймера работы помпы после выключения котла if (Pumpe_timer && currmillis - prevPumpe > (uint32_t) PumpeTime * 1000ul) {digitalWrite (PUMPE, 0); Pumpe_timer=0;} //ниже для таймера старта котла по шине и аналогу if (WorkCycleHeater_timer && currmillis - prevWorkCycleHeater > (uint32_t)TimeWebasto * 60000UL) {StopWebasto();} ///если нажали на допканал - делаем соответствующее состояние котла if (test.event_click_Dn (DopOnButton) && !webasto) {StartWebasto();} if (test.event_click_Dn (DopOffButton) && webasto) {StopWebasto();} //если нажали тактовую кнопку меняем состояние котла на противоположное if (test.event_press_short (StartButton)) { if (!webasto) {StartWebasto(); } else {StopWebasto();} } } void StartWebasto() { if (ProtocolSTART==STARTBUS) {StartMessageRepeat = 0; } else StartMessageRepeat = 4; webasto = 1; prevWorkCycleHeater=currmillis; WorkCycleHeater_timer = true; if (!CentrLock) {digitalWrite (PUMPE, 1);} // включаем помпу w_bus_init = 1; } void StopWebasto() { StopMessageRepeat = 0; webasto = 0; WorkCycleHeater_timer = false; if (!CentrLock) {Pumpe_timer=1; prevPumpe = currmillis;} // включаем таймер, по окончании которого помпа выключится if (ProtocolSTATUS==STATUSBUS) startWebasto_OK = 0; }Всем привет!
Сегодня послушал протокол с помощью VAG COM KKL 409. На картинке первый столбец - это запуск и остановка котла от минитаймера 1533. Загрузил скетч #478 в обе Arduino. При первой попытке с LM393 котел запустился и работал (хоть и проскочило сообщение "Ошибка контрольной суммы". Кстати, что это?). На последующих тестах котел запускался и тух (переставал качать насос). Где-то раньше, где-то позже.
Со скетчем из сообщения #1960 по схеме #1942 ничего не запустилось, на кнопку не реагировало, диоды не моргали, команды в протоколировании не появлялись.
а кнопку то какого пина замыкали ? Нужно было пин А2 коротко на массу замыкать и в Тх начинают идти сообщения для запуска котла , я проверил . Можете пин индикации включенности котла выбрать 13. чтоб знать отреагировала ли кнопка
Как в схеме, пин А3 с подтяжкой через 10к на +5в через кнопку замыкается на массу
Эх... Сейчас вот дома попробовал замкнуть А2 - диодики действительно заморгали :( , хоть опять возвращайся в гараж и проверяй...
Посмотрел скетч, действительно запуск на пин А2 прописан. Исправил на 17 (А3) - теперь на мою кнопку реагирует.
Приветствую!
Значит так, докладываю: Котел со скетчем из #1960 запускается и останавливается по кнопке великолепно! Спасибо огромное за помощь! Теперь можно двигаться дальше, к gsm :)
А сложно ли в скетч добавить цикл на перезапуск котла через каждые 45 мин? (что бы обойти ограничение в прошивке на 50мин) Ну т.е. через 45мин остановить, выждать минуты три на завершение продувки и запустить заново. И так по кругу, пока не остановлю кнопкой.
для меня не сложно, а для вас , скорее всего да. Но дальше сами.
Здравствуйте, спасибо за ваш проэкт, очень все понятно и доступно. Собрал вашу схему залил скеч 4.1 на смс ардуинка отвечает весь функционал работает кроме показателя батареи пишет либо no data либо 00.
И еше ни как не могу прописать датчики, в порте вижу что смс приходит а ответа нету... Пробовал исправлять в скетче адреса всеравно остаться те которые были, еепром чистил..
Ок проверю что там с адресами
Так на всякий случай адресса моих датчиков... Может что делаю не правильно...
28 8C F4 60 62 20 01 D5
28 5C 05 7F 62 20 01 D8
28 B1 30 8D 62 20 01 9B
Считывал другой про мини, через flprog путем чтения порта onewite
И кстати шунтирующий диод я думаю не так важен.. У меня пришёл либо бракованный либо че, но из за него чуть всю плату не спалил.
Уже почти всю тему прочёл.. Кто нибудь нашёл другой сервер mqtt, а-то тот что предлогает автор платный стал
И снова здравствуйте, я уже два года пользуюсь скетчем 3.89 , и не заходил на эту ветку , с прошлой зимы . Скетч 3.89 у меня работает в принципе без проблем, и температуры отдает, и напряжение , и замками дверей управляет через mqtt . Но вот решил обновить смартфон , и встал вопрос по переустановке всего софта на новый телефон, зашел на эту ветку сайта, вдруг что нибудь новое вкусное появилось? Стоит ли шить скетчи 4 версии , или там ни чего нового нет ?
принципиально нового ничего, так... косметика только . мне надо было вести историю прошивок, что меняется в каждой , но я этого не делал , поэтому так сходу и не скажешь что там нового , смотреть по скетчу надо.
С адрессами разобрался, поправил их в скетче еепрома.
Осталось два вопроса...
1. Нету информации от вольт метра и температуры пламени. (я так понял потомучто в скетче настроено чтение этих параметров из шины w-bus) ткните носом где поправить.
2. Так и не получается с mqtt, на российском брокере https://clusterfly.ru/ не могу отправить метрики, кнопка просто не нажимается у них на сайте... В тех поддержке мен, там никто так и не понял. Говорят первый раз слышим про какие-то метрики.
Максим, помогите доделать устройство...
Первый вопрос так и остался..
Со вторым частично разобрался, получилось отправить метрики через другой клиент но брокера использую все того же cluster fly. Метрики пришли, ардуинка подключилась к брокеру (часто моргает) но данные не обновляться и не работает ни одна кнопка, на смс ардуинка работает хорошо.
Приветствую! А какая последняя (актуальная) схема и плата устройства, под скетч #1960
Сделал сперва без GSM - работает! Теперь хочу с GSM попробовать :) Спасибо!
Kir, как же вам помочь если вы не предоставили никакой информации, какой котёл, как запускаете и считываете с него параметры. На кластерфлай у меня так и не получилось добиться чтобы работало. Поэтому пока только смс или свой мктт брокер поднимать
Redbiz, для скетч 1960 нет актуальной платы и схемы. Вы же сами хотели чтоб только с кнопки запускалось . Актуальная инфа по полному функционалу в посте #5.
Извините, с ардинкой работал давно и то так баловлся многое по забывал.. Котёл вебасто аналоговый цэшка.
С данными разобрался, просто инструкцию еше раз прочёл
С мктт тоже разобрался нашёл несколько брокеров на которых работает устройство, правда несколько из них общедоступных(побоялся что, кто нито, что нито отправит лишнее), другой работает 6 или 8 часов в сутки потом ему надо несколько часов перезаряжаться бред... Ну и платный российский брокер на котором все понятно и все работает сразу и есть вебсокет нормальный. Цена кстати всего 200р за 6 месяцев.
Так что еше раз спасибо за ваш великолепный и простой как оказалось проект,очень крутое устройство получилось!))
Попробую еше проверит на своём котле работает ли w-bus, что наврятли..
На стандартной С шке все должно нормально работать по шине, я старалсо. Только не wbus она называется, но это детали
Отчитываюсь, по аналогу работает все показывает все прекрасно, по шине диагностики HeaterBusType TTC_E котёл запустился температуру, напряжение и количество ошибок показывает, а вот состояние пламени и мощность горения увы, не показывает.. А ошибки сбросить я так понимаю ни как нельзя через ваше устройство?
СМС команда - «Erase DTC» - запрос стирания кодов неисправности подогревателя. На некоторых подогревателях этой же командой снимается и блокировка.
Я это видел, я имел ввиду через mqtt
На метрику ошибок надо нажать , если мне память не изменяет . По поводу пламени очень странно , что не работает , врядли протоколы отличаются у разных котлов одной модели . Пробуйте более старые скетчи 3.89 чтоли
Хорошо попробую. На метрику я нажимал ничего не происходило. Попробую на других скечах.
Приветствую всех, может быть нужно кому, есть полностью готовый к установке комплект, проработала год на моей машине, работала даже в -40.
Пинов могу отсыпать для разъёма, если нужно ещё что-то подключить. В данный момент прошита под котлы для шины W-Bus, подключается в разрыв "таймера" вэбасто.
Если кому интересно, пишите в контакт @maxkit
Интересный глюк сегодня подхватил, пришло сообщение "Call Ready" пытался его найти в прошивки, но не нашёл. Ещё самое странное что модуль перестал отвечать на СМС.
Здравствуйте! Честно скажу, всю тему не читал, 40 страниц многовато)
Кто-нибудь делал сие устройство на esp? У дома хотелось бы рулить по WiFi, он отлично ловит. Можно было бы слать показания в умный дом и из него же рулить девайсом. А вне дома- GSM.
Если кому интересно, пишите в контакт @maxkit
Можно почту ?
maxkit(собака)oagc.ru
Интересный глюк сегодня подхватил, пришло сообщение "Call Ready" пытался его найти в прошивки, но не нашёл. Ещё самое странное что модуль перестал отвечать на СМС.
Есть опыт работы с модулями, поэтому мне понятно что произошло:
1) Call Ready - это модуль перезапустился, он находит сеть и пишет Call Ready и SMS Ready ююю
2) перестал отвечать на смс - модуль не был инициализирован стартовыми АТ-командами, может даже и скорость другая... Поэтому ничего не работает, присылает чушь - вообще капец.
вывод - программа очень сырая и глючная.
Программа не сырая, а отличная. А вот китайские модули все портят, купите оригиналы и будем вам счастье.
А вот китайские модули все портят, купите оригиналы и будем вам счастье.
что значит оригинальные?
Программа действительно очень хорошая! Работает на отлично, а мелкие ошибки и глюки это нормально для проекта который по сути тянул один человек.
MaksVV, а есть просто код управления котлом, без GSM и MQTT? Хочу попробовать свою версию написать.
Программа не сырая, а отличная. А вот китайские модули все портят, купите оригиналы и будем вам счастье.
я знаю, что пишу.. если с модулем правильно работать, правильное питание и прочее - то все ок.
программа не должна пересылать вам стартовые слова модуля, а раз она это делает - это ни что иное как глюк программы. можете даже не спорть. подключите к модулю напрямую к его юарту шнур юсб с юартом и включите модулю питание и увидите что он передает. и вот это попадает в смс? вы хотите меня убедить что программа отличная??.. ноу коммент.
Короткое замыкание, я вас прошу, прекратите уже срать в тапки. Программа предоставляется как есть, это не платный продукт, а лишь результат хобби. Судя по вашим постам в других темах, ваша квалификация, мягко говоря, не дотягивает, чтобы таким образом оценивать работу других. Я не сомневаюсь, что вы научились работать с модемом на каком то приемлемом уровне, только не надо сообщать об этом всем при каждом удобном случае. Людям это неинтересно.
MaksVV, а есть просто код управления котлом, без GSM и MQTT? Хочу попробовать свою версию написать.
#1960
Программа не сырая, а отличная. А вот китайские модули все портят, купите оригиналы и будем вам счастье.
я знаю, что пишу.. если с модулем правильно работать, правильное питание и прочее - то все ок.
программа не должна пересылать вам стартовые слова модуля, а раз она это делает - это ни что иное как глюк программы. можете даже не спорть. подключите к модулю напрямую к его юарту шнур юсб с юартом и включите модулю питание и увидите что он передает. и вот это попадает в смс? вы хотите меня убедить что программа отличная??.. ноу коммент.
Если у вас есть большой опыт работы с gsm модулями. Может подскажите, есть ли достойные библиотеки для работы с модулями?