Browse Source

Bugfix: powermeter no data

pull/1551/head
Patrick Amrhein 6 months ago
parent
commit
0b2b72fac7
  1. 74
      src/plugins/zeroExport/powermeter.h

74
src/plugins/zeroExport/powermeter.h

@ -26,7 +26,7 @@ typedef struct {
float P1; float P1;
float P2; float P2;
float P3; float P3;
} PowerMeterBuffer_t; } PowermeterBuffer_t;
class powermeter { class powermeter {
public: public:
@ -47,23 +47,23 @@ class powermeter {
*/ */
void loop(void) void loop(void)
{ {
PowerMeterBuffer_t power; PowermeterBuffer_t power;
if(millis() - previousMillis <= 3000) return; // skip when it is to fast if(millis() - previousMillis <= 3000) return; // skip when it is to fast
for (u_short group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) for (u_short group = 0; group < ZEROEXPORT_MAX_GROUPS; group++)
{ {
switch (mCfg->groups[group].pm_type) { switch (mCfg->groups[group].pm_type) {
case zeroExportPowermeterType_t::Shelly: case zeroExportPowermeterType_t::Shelly:
getPowermeterWattsShelly(*mLog, group); power = getPowermeterWattsShelly(*mLog, group);
break; break;
case zeroExportPowermeterType_t::Tasmota: case zeroExportPowermeterType_t::Tasmota:
getPowermeterWattsTasmota(*mLog, group); power = getPowermeterWattsTasmota(*mLog, group);
break; break;
case zeroExportPowermeterType_t::Mqtt: case zeroExportPowermeterType_t::Mqtt:
getPowermeterWattsMqtt(*mLog, group); power = getPowermeterWattsMqtt(*mLog, group);
break; break;
case zeroExportPowermeterType_t::Hichi: case zeroExportPowermeterType_t::Hichi:
getPowermeterWattsHichi(*mLog, group); power = getPowermeterWattsHichi(*mLog, group);
break; break;
case zeroExportPowermeterType_t::Tibber: case zeroExportPowermeterType_t::Tibber:
power = getPowermeterWattsTibber(*mLog, group); power = getPowermeterWattsTibber(*mLog, group);
@ -80,16 +80,16 @@ class powermeter {
* @param group * @param group
* @returns true/false * @returns true/false
*/ */
PowerMeterBuffer_t getDataAVG(uint8_t group) { PowermeterBuffer_t getDataAVG(uint8_t group) {
PowerMeterBuffer_t avg; PowermeterBuffer_t avg;
avg.P = avg.P1 = avg.P2 = avg.P2 = avg.P3 = 0; avg.P = avg.P1 = avg.P2 = avg.P2 = avg.P3 = 0;
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
{ {
avg.P += powermeterbuffer[group][i].P; avg.P += mPowermeterBuffer[group][i].P;
avg.P1 += powermeterbuffer[group][i].P1; avg.P1 += mPowermeterBuffer[group][i].P1;
avg.P2 += powermeterbuffer[group][i].P2; avg.P2 += mPowermeterBuffer[group][i].P2;
avg.P3 += powermeterbuffer[group][i].P3; avg.P3 += mPowermeterBuffer[group][i].P3;
} }
avg.P = avg.P / 5; avg.P = avg.P / 5;
avg.P1 = avg.P1 / 5; avg.P1 = avg.P1 / 5;
@ -106,8 +106,9 @@ class powermeter {
* @param group * @param group
* @returns true/false * @returns true/false
*/ */
PowerMeterBuffer_t getPowermeterWattsShelly(JsonObject logObj, uint8_t group) { PowermeterBuffer_t getPowermeterWattsShelly(JsonObject logObj, uint8_t group) {
PowerMeterBuffer_t result; PowermeterBuffer_t result;
result.P = result.P1 = result.P2 = result.P3 = 0;
logObj["mod"] = "getPowermeterWattsShelly"; logObj["mod"] = "getPowermeterWattsShelly";
@ -115,9 +116,8 @@ class powermeter {
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
http.setUserAgent("Ahoy-Agent"); http.setUserAgent("Ahoy-Agent");
// TODO: Ahoy-0.8.850024-zero // TODO: Ahoy-0.8.850024-zero
http.setConnectTimeout(1000); http.setConnectTimeout(500);
http.setTimeout(1000); http.setTimeout(1000);
// TODO: Timeout von 1000 reduzieren?
http.addHeader("Content-Type", "application/json"); http.addHeader("Content-Type", "application/json");
http.addHeader("Accept", "application/json"); http.addHeader("Accept", "application/json");
@ -257,8 +257,9 @@ class powermeter {
* } * }
* } * }
*/ */
PowerMeterBuffer_t getPowermeterWattsTasmota(JsonObject logObj, uint8_t group) { PowermeterBuffer_t getPowermeterWattsTasmota(JsonObject logObj, uint8_t group) {
PowerMeterBuffer_t result; PowermeterBuffer_t result;
result.P = result.P1 = result.P2 = result.P3 = 0;
logObj["mod"] = "getPowermeterWattsTasmota"; logObj["mod"] = "getPowermeterWattsTasmota";
/* /*
@ -329,12 +330,14 @@ class powermeter {
* @param group * @param group
* @returns true/false * @returns true/false
*/ */
PowerMeterBuffer_t getPowermeterWattsMqtt(JsonObject logObj, uint8_t group) { PowermeterBuffer_t getPowermeterWattsMqtt(JsonObject logObj, uint8_t group) {
PowerMeterBuffer_t result; PowermeterBuffer_t result;
result.P = result.P1 = result.P2 = result.P3 = 0;
logObj["mod"] = "getPowermeterWattsMqtt"; logObj["mod"] = "getPowermeterWattsMqtt";
// Hier neuer Code - Anfang // Hier neuer Code - Anfang
// TODO: Noch nicht komplett // TODO: Noch nicht komplett
// Hier neuer Code - Ende // Hier neuer Code - Ende
@ -348,16 +351,18 @@ class powermeter {
* @param group * @param group
* @returns true/false * @returns true/false
*/ */
PowerMeterBuffer_t getPowermeterWattsHichi(JsonObject logObj, uint8_t group) { PowermeterBuffer_t getPowermeterWattsHichi(JsonObject logObj, uint8_t group) {
PowerMeterBuffer_t result; PowermeterBuffer_t result;
result.P = result.P1 = result.P2 = result.P3 = 0;
logObj["mod"] = "getPowermeterWattsHichi"; logObj["mod"] = "getPowermeterWattsHichi";
// Hier neuer Code - Anfang // Hier neuer Code - Anfang
// TODO: Noch nicht komplett // TODO: Noch nicht komplett
// Hier neuer Code - Ende // Hier neuer Code - Ende
return result; return result;
} }
@ -402,15 +407,17 @@ class powermeter {
{{0x01, 0x00, 0x01, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterImport}, {{0x01, 0x00, 0x01, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterImport},
{{0x01, 0x00, 0x02, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterExport}}; {{0x01, 0x00, 0x02, 0x08, 0x00, 0xff}, &smlOBISWh, &_powerMeterExport}};
PowerMeterBuffer_t getPowermeterWattsTibber(JsonObject logObj, uint8_t group) { PowermeterBuffer_t getPowermeterWattsTibber(JsonObject logObj, uint8_t group) {
PowerMeterBuffer_t result; PowermeterBuffer_t result;
result.P = result.P1 = result.P2 = result.P3 = 0;
logObj["mod"] = "getPowermeterWattsTibber"; logObj["mod"] = "getPowermeterWattsTibber";
HTTPClient http; HTTPClient http;
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
http.setUserAgent("Ahoy-Agent"); http.setUserAgent("Ahoy-Agent");
http.setConnectTimeout(1000); // TODO: Ahoy-0.8.850024-zero
http.setConnectTimeout(500);
http.setTimeout(1000); http.setTimeout(1000);
http.addHeader("Content-Type", "application/json"); http.addHeader("Content-Type", "application/json");
http.addHeader("Accept", "application/json"); http.addHeader("Accept", "application/json");
@ -458,21 +465,20 @@ class powermeter {
return result; return result;
} }
void bufferWrite(PowerMeterBuffer_t raw, short group) void bufferWrite(PowermeterBuffer_t raw, short group)
{ {
powermeterbuffer[group][powerbufferpos[group]] = raw; mPowermeterBuffer[group][mPowermeterBufferPos[group]] = raw;
powerbufferpos[group]++; mPowermeterBufferPos[group]++;
if(powerbufferpos[group] >= 5) powerbufferpos[group] = 0; if(mPowermeterBufferPos[group] >= 5) mPowermeterBufferPos[group] = 0;
} }
zeroExport_t *mCfg; zeroExport_t *mCfg;
JsonObject *mLog; JsonObject *mLog;
unsigned long previousMillis = 0; unsigned long previousMillis = 0;
PowerMeterBuffer_t powermeterbuffer[ZEROEXPORT_MAX_GROUPS][5] = { 0 }; PowermeterBuffer_t mPowermeterBuffer[ZEROEXPORT_MAX_GROUPS][5] = { 0 };
short powerbufferpos[ZEROEXPORT_MAX_GROUPS] = { 0 }; short mPowermeterBufferPos[ZEROEXPORT_MAX_GROUPS] = { 0 };
}; };
// TODO: Vorlagen für Powermeter-Analyse // TODO: Vorlagen für Powermeter-Analyse

Loading…
Cancel
Save