From 4f63ea77369ca06efe064cd8063bc60116e7cebe Mon Sep 17 00:00:00 2001 From: Julian Gog Date: Mon, 17 Oct 2022 17:16:11 +0200 Subject: [PATCH] copy and modify json endpoint --- tools/esp8266/app.cpp | 26 ++++++++++++++++++++++++++ tools/esp8266/app.h | 2 ++ tools/esp8266/web.cpp | 7 +++++++ tools/esp8266/web.h | 1 + 4 files changed, 36 insertions(+) diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 7c4fa901..83b69f1a 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -574,6 +574,32 @@ String app::getJson(void) { return modJson; } +//----------------------------------------------------------------------------- +String app::getMetrics(void) { + DPRINTLN(DBG_VERBOSE, F("app::getMetrics")); + String metrics; + char headline[80]; + + snprintf(headline, 80, "ahoy_solar_info{version=\"%s\",image=\"\",devicename=\"%s\"} 1", mVersion, mSysConfig.deviceName); + metrics += "# TYPE ahoy_solar_info gauge\n" + String(headline) + "\n"; + + for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { + Inverter<> *iv = mSys->getInverterByPos(id); + if(NULL != iv) { + char type[40], 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); + snprintf(val, 25, "%.3f", iv->getValue(i)); + metrics += String(type) + "\n" + String(topic) + " " + String(val) + "\n"; + } + } + } + } + return metrics; +} //----------------------------------------------------------------------------- bool app::getWifiApActive(void) { diff --git a/tools/esp8266/app.h b/tools/esp8266/app.h index a2738a1a..bc667b79 100644 --- a/tools/esp8266/app.h +++ b/tools/esp8266/app.h @@ -73,7 +73,9 @@ class app { void resetPayload(Inverter<>* iv); String getStatistics(void); String getJson(void); + String getMetrics(void); bool getWifiApActive(void); + uint8_t getIrqPin(void) { return mConfig.pinIrq; diff --git a/tools/esp8266/web.cpp b/tools/esp8266/web.cpp index 563cb635..082cfe52 100644 --- a/tools/esp8266/web.cpp +++ b/tools/esp8266/web.cpp @@ -71,6 +71,7 @@ void web::setup(void) { mWeb->on("/visualization", std::bind(&web::showVisualization, this)); mWeb->on("/livedata", std::bind(&web::showLiveData, this)); mWeb->on("/json", std::bind(&web::showJson, this)); + mWeb->on("/metrics", std::bind(&web::showMetrics, this)); mWeb->on("/api", HTTP_POST, std::bind(&web::showWebApi, this)); } @@ -568,6 +569,12 @@ void web::showJson(void) { mWeb->send(200, F("application/json"), mMain->getJson()); } +//----------------------------------------------------------------------------- +void web::showMetrics(void) { + DPRINTLN(DBG_VERBOSE, F("web::showMetrics")); + mWeb->send(200, F("application/metrics"), mMain->getMetrics()); +} + //----------------------------------------------------------------------------- void web::showWebApi(void) { diff --git a/tools/esp8266/web.h b/tools/esp8266/web.h index ad9aa7c6..5f3bd7e9 100644 --- a/tools/esp8266/web.h +++ b/tools/esp8266/web.h @@ -43,6 +43,7 @@ class web { void showLiveData(void); void showJson(void); void showWebApi(void); + void showMetrics(void); private: #ifdef ESP8266