Browse Source

support MWh for YieldTotal

pull/1248/head
Wusaweki 1 year ago
parent
commit
81a05b3752
  1. 33
      src/plugins/Display/Display_Mono_128X64.h
  2. 43
      src/plugins/Display/Display_Mono_84X48.h
  3. 4
      src/plugins/Display/Display_data.h

33
src/plugins/Display/Display_Mono_128X64.h

@ -49,9 +49,9 @@ class DisplayMono128X64 : public DisplayMono {
/* /*
mDisplayData->nrSleeping = 10; mDisplayData->nrSleeping = 10;
mDisplayData->nrProducing = 10; mDisplayData->nrProducing = 10;
mDisplayData->totalPower = 99990; mDisplayData->totalPower = 54321.9; // W
mDisplayData->totalYieldDay = 8888; mDisplayData->totalYieldDay = 4321.9; // Wh
mDisplayData->totalYieldTotal = 9999; mDisplayData->totalYieldTotal = 4321.9; // kWh
mDisplay->drawPixel(0, 0); mDisplay->drawPixel(0, 0);
mDisplay->drawPixel(mDispWidth-1, 0); mDisplay->drawPixel(mDispWidth-1, 0);
mDisplay->drawPixel(0, mDispHeight-1); mDisplay->drawPixel(0, mDispHeight-1);
@ -64,9 +64,10 @@ class DisplayMono128X64 : public DisplayMono {
// print total power // print total power
if (mDisplayData->nrProducing > 0) { if (mDisplayData->nrProducing > 0) {
if (mDisplayData->totalPower > 999) if (mDisplayData->totalPower > 999)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.2f kW", (mDisplayData->totalPower / 1000)); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kW", (mDisplayData->totalPower / 1000.0));
else else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.0f W", mDisplayData->totalPower); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.0f W", mDisplayData->totalPower);
printText(mFmtText, l_TotalPower, 0xff); printText(mFmtText, l_TotalPower, 0xff);
} else { } else {
printText("offline", l_TotalPower, 0xff); printText("offline", l_TotalPower, 0xff);
@ -109,19 +110,27 @@ class DisplayMono128X64 : public DisplayMono {
pos = (mDispWidth - mDisplay->getStrWidth(mFmtText)) / 2; pos = (mDispWidth - mDisplay->getStrWidth(mFmtText)) / 2;
mDisplay->setFont(u8g2_font_ncenB08_symbols8_ahoy); mDisplay->setFont(u8g2_font_ncenB08_symbols8_ahoy);
if (sun_pos!=-1) if (sun_pos!=-1)
mDisplay->drawStr(pos + sun_pos + mPixelshift, mLineYOffsets[l_Status], "G"); // sun mDisplay->drawStr(pos + sun_pos + mPixelshift, mLineYOffsets[l_Status], "G"); // sun symbol
if (moon_pos!=-1) if (moon_pos!=-1)
mDisplay->drawStr(pos + moon_pos + mPixelshift, mLineYOffsets[l_Status], "H"); // moon mDisplay->drawStr(pos + moon_pos + mPixelshift, mLineYOffsets[l_Status], "H"); // moon symbol
} }
// print yields // print yields
mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy); mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy);
mDisplay->drawStr(17 + mPixelshift, mLineYOffsets[l_YieldDay], "I"); // day mDisplay->drawStr(16 + mPixelshift, mLineYOffsets[l_YieldDay], "I"); // day symbol
mDisplay->drawStr(17 + mPixelshift, mLineYOffsets[l_YieldTotal], "D"); // total mDisplay->drawStr(16 + mPixelshift, mLineYOffsets[l_YieldTotal], "D"); // total symbol
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.0f Wh", mDisplayData->totalYieldDay);
printText(mFmtText, l_YieldDay, 25); if (mDisplayData->totalYieldDay > 999.0)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.1f kWh", mDisplayData->totalYieldTotal); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kWh", mDisplayData->totalYieldDay / 1000.0);
printText(mFmtText, l_YieldTotal, 25); else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.0f Wh", mDisplayData->totalYieldDay);
printText(mFmtText, l_YieldDay, 0xff);
if (mDisplayData->totalYieldTotal > 999.0)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f MWh", mDisplayData->totalYieldTotal / 1000.0);
else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kWh", mDisplayData->totalYieldTotal);
printText(mFmtText, l_YieldTotal, 0xff);
// draw dynamic RSSI bars // draw dynamic RSSI bars
int xoffs; int xoffs;

43
src/plugins/Display/Display_Mono_84X48.h

@ -34,12 +34,11 @@ class DisplayMono84X48 : public DisplayMono {
// Layout-Test // Layout-Test
/* /*
mDisplayData->nrSleeping = 0; mDisplayData->nrSleeping = 10;
mDisplayData->nrProducing = 1; mDisplayData->nrProducing = 10;
mDisplayData->totalPower = 12345.67; mDisplayData->totalPower = 111.91; // W
mDisplayData->totalYieldDay = 12345.67; mDisplayData->totalYieldDay = 54321.9; // Wh
mDisplayData->totalYieldTotal = 1234; mDisplayData->totalYieldTotal = 654321.9; // kWh
mDisplayData->utcTs += 1000000;
mDisplay->drawPixel(0, 0); mDisplay->drawPixel(0, 0);
mDisplay->drawPixel(mDispWidth-1, 0); mDisplay->drawPixel(mDispWidth-1, 0);
mDisplay->drawPixel(0, mDispHeight-1); mDisplay->drawPixel(0, mDispHeight-1);
@ -48,12 +47,10 @@ class DisplayMono84X48 : public DisplayMono {
// print total power // print total power
if (mDisplayData->nrProducing > 0) { if (mDisplayData->nrProducing > 0) {
if (mDisplayData->totalPower > 9999) if (mDisplayData->totalPower > 999)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.2fkW", (mDisplayData->totalPower / 1000)); // forgo spacing between value and SI unit in favor of second position after decimal point snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kW", (mDisplayData->totalPower / 1000));
else if (mDisplayData->totalPower > 999)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.2f kW", (mDisplayData->totalPower / 1000));
else else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f W", mDisplayData->totalPower); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.0f W", mDisplayData->totalPower);
printText(mFmtText, l_TotalPower, 0xff); printText(mFmtText, l_TotalPower, 0xff);
} else { } else {
@ -75,21 +72,29 @@ class DisplayMono84X48 : public DisplayMono {
if (0 == mDisplayData->nrSleeping + mDisplayData->nrProducing) if (0 == mDisplayData->nrSleeping + mDisplayData->nrProducing)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "no inverter"); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "no inverter");
else if (0 == mDisplayData->nrSleeping) else if (0 == mDisplayData->nrSleeping)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "\x86"); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "\x86"); // sun symbol
else if (0 == mDisplayData->nrProducing) else if (0 == mDisplayData->nrProducing)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "\x87"); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "\x87"); // moon symbol
else else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%d\x86 %d\x87", mDisplayData->nrProducing, mDisplayData->nrSleeping); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%d\x86 %d\x87", mDisplayData->nrProducing, mDisplayData->nrSleeping);
printText(mFmtText, l_Status, 0xff); printText(mFmtText, l_Status, 0xff);
} }
// print yields // print yields
printText("\x88", l_YieldDay, 11); // day symbol printText("\x88", l_YieldDay, 10); // day symbol
printText("\x83", l_YieldTotal, 11); // total symbol printText("\x83", l_YieldTotal, 10); // total symbol
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.0f Wh", mDisplayData->totalYieldDay);
printText(mFmtText, l_YieldDay, 18); if (mDisplayData->totalYieldDay > 999.0)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.1f kWh", mDisplayData->totalYieldTotal); snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kWh", mDisplayData->totalYieldDay / 1000.0);
printText(mFmtText, l_YieldTotal, 18); else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.0f Wh", mDisplayData->totalYieldDay);
printText(mFmtText, l_YieldDay, 0xff);
if (mDisplayData->totalYieldTotal > 999.0)
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f MWh", mDisplayData->totalYieldTotal / 1000.0);
else
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.1f kWh", mDisplayData->totalYieldTotal);
printText(mFmtText, l_YieldTotal, 0xff);
// draw dynamic Nokia RSSI bars // draw dynamic Nokia RSSI bars
int rssi_bar_height = 7; int rssi_bar_height = 7;

4
src/plugins/Display/Display_data.h

@ -6,8 +6,8 @@
struct DisplayData { struct DisplayData {
const char *version=nullptr; const char *version=nullptr;
float totalPower=0.0f; // indicate current power (W) float totalPower=0.0f; // indicate current power (W)
float totalYieldDay=0.0f; // indicate day yield (W) float totalYieldDay=0.0f; // indicate day yield (Wh)
float totalYieldTotal=0.0f; // indicate total yield (W) float totalYieldTotal=0.0f; // indicate total yield (kWh)
uint32_t utcTs=0; // indicate absolute timestamp (utc unix time). 0 = time is not synchonized uint32_t utcTs=0; // indicate absolute timestamp (utc unix time). 0 = time is not synchonized
uint8_t nrProducing=0; // indicate number of producing inverters uint8_t nrProducing=0; // indicate number of producing inverters
uint8_t nrSleeping=0; // indicate number of sleeping inverters uint8_t nrSleeping=0; // indicate number of sleeping inverters

Loading…
Cancel
Save