Browse Source

add convertToPromUnits funcionality and add promUnits and promType to type and topic

pull/356/head
Julian Gog 3 years ago
parent
commit
bf5007598e
  1. 22
      tools/esp8266/app.cpp
  2. 3
      tools/esp8266/app.h
  3. 2
      tools/esp8266/web.cpp

22
tools/esp8266/app.cpp

@ -575,6 +575,20 @@ String app::getJson(void) {
}
//-----------------------------------------------------------------------------
std::pair<String, String> app::convertToPromUnits(String shortUnit) {
if(shortUnit == "A") return {"amplere", "gauge"};
if(shortUnit == "V") return {"volts", "gauge"};
if(shortUnit == "%") return {"ratio", "gauge"};
if(shortUnit == "W") return {"watts", "gauge"};
if(shortUnit == "Wh") return {"watts_daily", "counter"};
if(shortUnit == "kWh") return {"watts_total", "counter"};
if(shortUnit == "°C") return {"celsius", "gauge"};
return {"", "gauge"};
}
String app::getMetrics(void) {
DPRINTLN(DBG_VERBOSE, F("app::showMetrics"));
String metrics;
@ -586,12 +600,14 @@ String app::getMetrics(void) {
for(uint8_t id = 0; id < mSys->getNumInverters(); id++) {
Inverter<> *iv = mSys->getInverterByPos(id);
if(NULL != iv) {
char type[40], topic[60], val[25];
char type[60], topic[60], val[25];
for(uint8_t i = 0; i < iv->listLen; i++) {
uint8_t channel = iv->assign[i].ch;
if(channel == 0) {
snprintf(type, 40, "# TYPE ahoy_solar_%s_ gauge", iv->getFieldName(i));
snprintf(topic, 60, "ahoy_solar_%s_{inverter=\"%s\"}", iv->getFieldName(i), iv->name);
String promUnit, promType;
std::tie(promUnit, promType) = convertToPromUnits( iv->getUnit(i) );
snprintf(type, 60, "# TYPE ahoy_solar_%s_%s %s", iv->getFieldName(i), promUnit.c_str(), promType.c_str());
snprintf(topic, 60, "ahoy_solar_%s_%s{inverter=\"%s\"}", iv->getFieldName(i), promUnit.c_str(), iv->name);
snprintf(val, 25, "%.3f", iv->getValue(i));
metrics += String(type) + "\n" + String(topic) + " " + String(val) + "\n";
}

3
tools/esp8266/app.h

@ -9,7 +9,6 @@
#include "dbg.h"
#include "Arduino.h"
#include <RF24.h>
#include <RF24_config.h>
#include <ArduinoJson.h>
@ -158,6 +157,8 @@ class app {
void processPayload(bool retransmit);
void processPayload(bool retransmit, uint8_t cmd);
std::pair<String, String> convertToPromUnits(String shortUnit);
void sendMqttDiscoveryConfig(void);
const char* getFieldDeviceClass(uint8_t fieldId);
const char* getFieldStateClass(uint8_t fieldId);

2
tools/esp8266/web.cpp

@ -572,7 +572,7 @@ void web::showJson(void) {
//-----------------------------------------------------------------------------
void web::showMetrics(void) {
DPRINTLN(DBG_VERBOSE, F("web::showMetrics"));
mWeb->send(200, F("application/metrics"), mMain->getMetrics());
mWeb->send(200, F("text/plain"), mMain->getMetrics());
}
//-----------------------------------------------------------------------------

Loading…
Cancel
Save