void decodeTelegram() { long tl = 0; long tld = 0; int x; if (Serial3.available()) { input = Serial3.read(); char inChar = (char)input; // Fill buffer up to and including a new line (\n) buffer[bufpos] = input & 127; bufpos++; if (input == '\n') { // We received a new line (data up to \n) // 1-0:1.8.1 = Elektra verbruik laag tarief, Tarief 1(DSMR v4.0) if (sscanf(buffer, "1-0:1.8.1(%ld.%ld" , &tl, &tld) == 2) { tl *= 1000; tl += tld; mEVLT = tl; if (mEVLT > 0) { Serial.println("*** BEGIN LOOP ***"); Serial.print("Elektra - meterstand verbruik + T-1 tarief: "); Serial.println(mEVLT); tEVLT = mEVLT; } } // 1-0:1.8.2 = Elektra verbruik hoog tarief, Tarief 2(DSMR v4.0) if (sscanf(buffer, "1-0:1.8.2(%ld.%ld" , &tl, &tld) == 2) { tl *= 1000; tl += tld; mEVHT = tl; if (mEVHT > 0) { Serial.print("Elektra - meterstand verbruik + T-2 tarief: "); Serial.println(mEVHT); tEVHT = mEVHT; } } // 1-0:2.8.1 = Elektra levering hoog tarief, - T-1 (DSMR v4.0) if (sscanf(buffer, "1-0:2.8.1(%ld.%ld" , &tl, &tld) == 2) { tl *= 1000; tl += tld; mELHT = tl; if (mELHT > 0) { Serial.print("Elektra - meterstand levering - T-1 tarief: "); Serial.println(mELHT); tELHT = mELHT; } } // 1-0:2.8.2 = Elektra levering laag tarief, - T-2 if (sscanf(buffer, "1-0:2.8.2(%ld.%ld" , &tl, &tld) == 2) { tl *= 1000; tl += tld; mELLT = tl; if (mELLT > 0) { Serial.print("Elektra - meterstand levering - T-2 tarief: "); Serial.println(mELLT); tELLT = mELLT; } } // 1-0:1.7.0 = Elektra verbruik actueel, (+P) (DSMR v4.0) if (sscanf(buffer, "1-0:1.7.0(%ld.%ld" , &tl , &tld) == 2) { mEAV = (tl * 1000) + tld; if (mEAV > 0) { Serial.print("Elektra - actueel verbruik (W): "); Serial.println(mEAV); cLV = mEAV; } } // 1-0:2.7.0 = Elektra levering actueel (-P) in 1 watt resolutie if (sscanf(buffer, "1-0:2.7.0(%ld.%ld" , &tl, &tld) == 2) { mEAL = (tl * 1000) + tld; if (mEAL > 0) { Serial.print("Elektra - actueel levering (W): "); Serial.println(mEAL); cLV = 0 - mEAL; } } // 0-1:24.2.1 = Gas (DSMR v4.0) on Kaifa MA105 meter if (strncmp(buffer, "0-1:24.2.1", strlen("0-1:24.2.1")) == 0) { if (sscanf(strrchr(buffer, '(') + 1, "%d.%d", &tl, &tld) == 2) { mG = (tl * 1000) + tld; Serial.print("Gas - meterstand (liters): "); Serial.println(mG); tG = mG; Serial.println(""); } // Het vullen van het beeldscherm met de gemeten waarden drawSlimme(tEVLT, tEVHT, tELHT, tELLT, cLV, tG); if (x_loop > refresh_rate) { WriteSDcard(tEVLT, tEVHT, tELHT, tELLT, cLV, tG); x_loop = 0; } x_loop ++; } // Empty buffer again (whole array) for (int i = 0; i < 75; i++) { buffer[i] = 0; } bufpos = 0; } if (input == '!') { //uitroepteken geeft einde van telegram aan, dus we gaan data versturen mEVLT = 0; mEAV = 0; mG = 0; cLV = 0; mEAL = 0; mEAV = 0; // Serial.println("Einde report "); } } //Einde 'if AltSerial.available' } //Einde 'decodeTelegram()' functie