Some more optimization

This commit is contained in:
Gunnar Skjold
2023-04-17 21:33:00 +02:00
parent f0461a7cdb
commit 94865b632e
15 changed files with 308 additions and 304 deletions

View File

@@ -9,25 +9,25 @@ IEC6205621::IEC6205621(const char* p) {
lastUpdateMillis = millis();
listId = payload.substring(payload.startsWith("/") ? 1 : 0, payload.indexOf("\n"));
if(listId.startsWith("ADN")) {
if(listId.startsWith(F("ADN"))) {
meterType = AmsTypeAidon;
listId = listId.substring(0,4);
} else if(listId.startsWith("KFM")) {
} else if(listId.startsWith(F("KFM"))) {
meterType = AmsTypeKaifa;
listId = listId.substring(0,4);
} else if(listId.startsWith("KMP")) {
} else if(listId.startsWith(F("KMP"))) {
meterType = AmsTypeKamstrup;
listId = listId.substring(0,4);
} else if(listId.startsWith("ISk")) {
} else if(listId.startsWith(F("ISk"))) {
meterType = AmsTypeIskra;
listId = listId.substring(0,5);
} else if(listId.startsWith("XMX")) {
} else if(listId.startsWith(F("XMX"))) {
meterType = AmsTypeLandisGyr;
listId = listId.substring(0,6);
} else if(listId.startsWith("Ene") || listId.startsWith("EST")) {
} else if(listId.startsWith(F("Ene")) || listId.startsWith(F("EST"))) {
meterType = AmsTypeSagemcom;
listId = listId.substring(0,4);
} else if(listId.startsWith("LGF")) {
} else if(listId.startsWith(F("LGF"))) {
meterType = AmsTypeLandisGyr;
listId = listId.substring(0,4);
} else {
@@ -35,21 +35,21 @@ IEC6205621::IEC6205621(const char* p) {
listId = listId.substring(0,4);
}
meterId = extract(payload, "96.1.0");
meterId = extract(payload, F("96.1.0"));
if(meterId.isEmpty()) {
meterId = extract(payload, "0.0.5");
meterId = extract(payload, F("0.0.5"));
}
meterModel = extract(payload, "96.1.1");
meterModel = extract(payload, F("96.1.1"));
if(meterModel.isEmpty()) {
meterModel = extract(payload, "96.1.7");
meterModel = extract(payload, F("96.1.7"));
if(meterModel.isEmpty()) {
meterModel = payload.substring(payload.indexOf(listId) + listId.length(), payload.indexOf("\n"));
meterModel = payload.substring(payload.indexOf(listId) + listId.length(), payload.indexOf(F("\n")));
meterModel.trim();
}
}
String timestamp = extract(payload, "1.0.0");
String timestamp = extract(payload, F("1.0.0"));
if(timestamp.length() > 10) {
tmElements_t tm;
tm.Year = (timestamp.substring(0,2).toInt() + 2000) - 1970;
@@ -61,36 +61,36 @@ IEC6205621::IEC6205621(const char* p) {
meterTimestamp = makeTime(tm); // TODO: Adjust for time zone
}
activeImportPower = (uint16_t) (extractDouble(payload, "1.7.0"));
activeExportPower = (uint16_t) (extractDouble(payload, "2.7.0"));
reactiveImportPower = (uint16_t) (extractDouble(payload, "3.7.0"));
reactiveExportPower = (uint16_t) (extractDouble(payload, "4.7.0"));
activeImportPower = (uint16_t) (extractDouble(payload, F("1.7.0")));
activeExportPower = (uint16_t) (extractDouble(payload, F("2.7.0")));
reactiveImportPower = (uint16_t) (extractDouble(payload, F("3.7.0")));
reactiveExportPower = (uint16_t) (extractDouble(payload, F("4.7.0")));
if(activeImportPower > 0)
listType = 1;
l1voltage = extractDouble(payload, "32.7.0");
l2voltage = extractDouble(payload, "52.7.0");
l3voltage = extractDouble(payload, "72.7.0");
l1voltage = extractFloat(payload, F("32.7.0"));
l2voltage = extractFloat(payload, F("52.7.0"));
l3voltage = extractFloat(payload, F("72.7.0"));
l1current = extractDouble(payload, "31.7.0");
l2current = extractDouble(payload, "51.7.0");
l3current = extractDouble(payload, "71.7.0");
l1current = extractFloat(payload, F("31.7.0"));
l2current = extractFloat(payload, F("51.7.0"));
l3current = extractFloat(payload, F("71.7.0"));
l1activeImportPower = extractDouble(payload, "21.7.0");
l2activeImportPower = extractDouble(payload, "41.7.0");
l3activeImportPower = extractDouble(payload, "61.7.0");
l1activeImportPower = extractFloat(payload, F("21.7.0"));
l2activeImportPower = extractFloat(payload, F("41.7.0"));
l3activeImportPower = extractFloat(payload, F("61.7.0"));
l1activeExportPower = extractDouble(payload, "22.7.0");
l2activeExportPower = extractDouble(payload, "42.7.0");
l3activeExportPower = extractDouble(payload, "62.7.0");
l1activeExportPower = extractFloat(payload, F("22.7.0"));
l2activeExportPower = extractFloat(payload, F("42.7.0"));
l3activeExportPower = extractFloat(payload, F("62.7.0"));
if(l1voltage > 0 || l2voltage > 0 || l3voltage > 0)
listType = 2;
double val = 0.0;
val = extractDouble(payload, "1.8.0");
val = extractDouble(payload, F("1.8.0"));
if(val == 0) {
for(int i = 1; i < 9; i++) {
val += extractDouble(payload, "1.8." + String(i,10));
@@ -98,7 +98,7 @@ IEC6205621::IEC6205621(const char* p) {
}
if(val > 0) activeImportCounter = val / 1000;
val = extractDouble(payload, "2.8.0");
val = extractDouble(payload, F("2.8.0"));
if(val == 0) {
for(int i = 1; i < 9; i++) {
val += extractDouble(payload, "2.8." + String(i,10));
@@ -106,7 +106,7 @@ IEC6205621::IEC6205621(const char* p) {
}
if(val > 0) activeExportCounter = val / 1000;
val = extractDouble(payload, "3.8.0");
val = extractDouble(payload, F("3.8.0"));
if(val == 0) {
for(int i = 1; i < 9; i++) {
val += extractDouble(payload, "3.8." + String(i,10));
@@ -114,7 +114,7 @@ IEC6205621::IEC6205621(const char* p) {
}
if(val > 0) reactiveImportCounter = val / 1000;
val = extractDouble(payload, "4.8.0");
val = extractDouble(payload, F("4.8.0"));
if(val == 0) {
for(int i = 1; i < 9; i++) {
val += extractDouble(payload, "4.8." + String(i,10));
@@ -135,7 +135,7 @@ IEC6205621::IEC6205621(const char* p) {
String IEC6205621::extract(String payload, String obis) {
int a = payload.indexOf(String(":" + obis + "("));
if(a > 0) {
int b = payload.indexOf(")", a);
int b = payload.indexOf(F(")"), a);
if(b > a) {
return payload.substring(a+obis.length()+2, b);
}
@@ -149,9 +149,22 @@ double IEC6205621::extractDouble(String payload, String obis) {
return 0.0;
}
int a = str.indexOf("*");
int a = str.indexOf(F("*"));
String val = str.substring(0,a);
String unit = str.substring(a+1);
return unit.startsWith("k") ? val.toDouble() * 1000 : val.toDouble();
return unit.startsWith(F("k")) ? val.toDouble() * 1000 : val.toDouble();
}
float IEC6205621::extractFloat(String payload, String obis) {
String str = extract(payload, obis);
if(str.isEmpty()) {
return 0.0;
}
int a = str.indexOf(F("*"));
String val = str.substring(0,a);
String unit = str.substring(a+1);
return unit.startsWith(F("k")) ? val.toFloat() * 1000 : val.toFloat();
}