#include SoftwareSerial mySerial(2,3); unsigned long last = 0; unsigned long now = 0; char str[16]; int bid = 0; byte bytes[120]; byte dlen = 0; void setup() { Serial.begin(2400,SERIAL_8E1); mySerial.begin(2400); // command packet to request frame str[0] = (char) 16; str[1] = (char) 64; str[2] = (char) 253; str[3] = (char) 61; str[4] = (char) 22; str[5] = (char) 16; str[6] = (char) 64; str[7] = (char) 253; str[8] = (char) 61; str[9] = (char) 22; str[10] = (char) 16; str[11] = (char) 91; str[12] = (char) 68; str[13] = (char) 159; str[14] = (char) 22; str[15] = '\0'; } void loop() { now = millis(); if (mySerial.available()) { byte val = (byte) mySerial.read(); bytes[bid] = val; bid++; if (bytes[0]!=104) { bid = 0; } if (bid==3) { if (bytes[1]==bytes[2]) { dlen = bytes[1]; } else { bid = 0; } } if (bid==100) { parse(); bid = 0; } } if ((now-last)>10000) { last = now; Serial.println(str); mySerial.println(str[0]); } } void parse() { Serial.print("Address: "); Serial.println(bytes[5]); byte i=25; Serial.print("Energy (kWh): "); Serial.println(decodeval(i)); i+=6; Serial.print("Volume (m3): "); Serial.println(decodeval(i)*0.01); i+=6; Serial.print("Ontime (hours): "); Serial.println(decodeval(i)); i+=6; Serial.print("Flow temperature: "); Serial.println(decodeval(i)/100.0); i+=6; Serial.print("Return temperature: "); Serial.println(decodeval(i)/100.0); i+=6; Serial.print("Temperature difference (K): "); Serial.println(decodeval(i)/100.0); i+=6; Serial.print("Power (W): "); Serial.println(decodeval(i)); i+=6; Serial.print("Max Power (W): "); Serial.println(decodeval(i)); i+=6; Serial.print("Volume flow (m3/h): "); Serial.println(decodeval(i)); i+=6; Serial.print("Max volume flow (m3/h): "); Serial.println(decodeval(i)); i+=6; } long decodeval(long i) { return bytes[i+2] + (bytes[i+3]<<8) + (bytes[i+4]<<16) + (bytes[i+5]<<24); }