Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

THN132N поддержка Transmit #18

Open
karev-anton opened this issue Mar 16, 2021 · 7 comments
Open

THN132N поддержка Transmit #18

karev-anton opened this issue Mar 16, 2021 · 7 comments

Comments

@karev-anton
Copy link
Contributor

Все таки не все метеостанции поддерживают THGN132 ( согласно таблице https://oregonscientific.ru/tablitsa-sovmestimosti-datchikov) и хотелось бы добавить поддержку THN132N если возможно. Собрал данные по своему датчику, но не удаётся посчитать контрольную сумму, могли бы помочь? А то есть две метеостанции, а датчики поломались, хотелось сделать простые на Arduino или вообще слать на них погоду с интернета, но никак не удаётся подобрать THN132 именно.

Во вложении примеры данных с датчика:
oregon.txt
Интервалы отправки у них аналогичные с THGN132.

@karev-anton
Copy link
Contributor Author

или может подскажите как crs посчитать, checksum корректно считается, а вот с CRS никак побороть не могу, сейчас метод такой использую (6 байт - sum - считается корректно, 7 байт - crs - она вот некорректна считается):

void Oregon_TM::calculateAndSetChecksum132_S(void)
{
byte CCIT_POLY = 0x07;
SendBuffer[6] = 0x00;
SendBuffer[7] = 0x00;
byte summ = 0x00;
byte crc = 0xD6;
byte cur_nible;
for(int i = 0; i<6; i++)
{
cur_nible = (SendBuffer[i] & 0xF0) >> 4;
summ += cur_nible;

cur_nible = SendBuffer[i] & 0x0F;
summ += cur_nible;
if (i !=2)
{
  crc ^= cur_nible;
  for(int j = 0; j < 4; j++)
  if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
  else crc <<= 1;
}  

}
SendBuffer[6] += (summ & 0x0F) <<4;
SendBuffer[6] += (summ & 0xF0) >>4;
SendBuffer[7] += crc & 0x0F;
SendBuffer[7] += crc & 0xF0;
}

@invandy
Copy link
Owner

invandy commented Mar 17, 2021

Думаю вот так должно быть:

void Oregon_TM::calculateAndSetChecksum132_S(void)
{
byte CCIT_POLY = 0x07;
byte summ = 0x00;
byte crc = 0xD6;
byte cur_nible;
for(int i = 0; i < 6; i++)
{
cur_nible = (SendBuffer[i] & 0xF0) >> 4;
summ += cur_nible;
if (i !=3)
{
crc ^= cur_nible;
for(int j = 0; j < 4; j++)
if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
else crc <<= 1;
}
cur_nible = SendBuffer[i] & 0x0F;
summ += cur_nible;
if (i !=2)
{
crc ^= cur_nible;
for(int j = 0; j < 4; j++)
if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
else crc <<= 1;
}
}
SendBuffer[6] = summ;
SendBuffer[7] = crc;
}

@karev-anton
Copy link
Contributor Author

проверил, не сошлось всё равно, получается вот так, для одного примера:
EC40 1158 3110 23 73 THN132N CHNL: 1 BAT: F ID: 15 TMP: 11.3C
EC40 1158 3110 32 13
т.е. перевёрнутая чексумма, но это понятно как поправить, а вот CRS не сходится всё равно.

@invandy
Copy link
Owner

invandy commented Mar 22, 2021

Да, действительно. Похоже вот так должно быть

void Oregon_TM::calculateAndSetChecksum132S(void)
{
byte CCIT_POLY = 0x07;
byte summ = 0x00;
byte crc = 0xD6;
SendBuffer[6] = SendBuffer[7] = 0x00;
byte cur_nible;
for(int i = 0; i < 6; i++)
{
cur_nible = (SendBuffer[i] & 0xF0) >> 4;
summ += cur_nible;
if (i !=3)
{
crc ^= cur_nible;
for(int j = 0; j < 4; j++)
if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
else crc <<= 1;
}
cur_nible = SendBuffer[i] & 0x0F;
summ += cur_nible;
if (i !=2)
{
crc ^= cur_nible;
for(int j = 0; j < 4; j++)
if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
else crc <<= 1;
}
}
for(int j = 0; j < 4; j++)
if (crc & 0x80) crc = (crc << 1) ^ CCIT_POLY;
else crc <<= 1;

SendBuffer[6] += (summ & 0x0F) << 4;
SendBuffer[6] += (summ & 0xF0) >> 4;
SendBuffer[7] += (crc & 0x0F) << 4;
SendBuffer[7] += (crc & 0xF0) >> 4;
}

@karev-anton
Copy link
Contributor Author

сработало, проверил на 6 показаниях с отрицательными и положительными значениями, спасибо вам огромное!!! Чуть позже протестирую работу уже с учётом динамического изменения температуры и сделаю pull request, что бы сохранить в истории. Спасибо ещё раз!

@mr-brune
Copy link

do you have some update?

@invandy
Copy link
Owner

invandy commented Mar 19, 2024

What kind of update do you mean?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants