Prometheus API: use integrated serialString() method to fetch serial number
This commit is contained in:
parent
8e4e055930
commit
d62c5b239f
@ -11,7 +11,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void onPrometheusMetrics(AsyncWebServerRequest* request);
|
void onPrometheusMetrics(AsyncWebServerRequest* request);
|
||||||
|
|
||||||
void addField(AsyncResponseStream* stream, const char* serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId, const char* channelName = NULL);
|
void addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId, const char* channelName = NULL);
|
||||||
|
|
||||||
AsyncWebServer* _server;
|
AsyncWebServer* _server;
|
||||||
};
|
};
|
||||||
@ -49,17 +49,14 @@ void WebApiPrometheusClass::onPrometheusMetrics(AsyncWebServerRequest* request)
|
|||||||
for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) {
|
for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) {
|
||||||
auto inv = Hoymiles.getInverterByPos(i);
|
auto inv = Hoymiles.getInverterByPos(i);
|
||||||
|
|
||||||
char serial[sizeof(uint64_t) * 8 + 1];
|
String serial = inv->serialString();
|
||||||
snprintf(serial, sizeof(serial), "%0x%08x",
|
|
||||||
((uint32_t)((inv->serial() >> 32) & 0xFFFFFFFF)),
|
|
||||||
((uint32_t)(inv->serial() & 0xFFFFFFFF)));
|
|
||||||
const char* name = inv->name();
|
const char* name = inv->name();
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
stream->print(F("# HELP opendtu_last_update last update from inverter in s\n"));
|
stream->print(F("# HELP opendtu_last_update last update from inverter in s\n"));
|
||||||
stream->print(F("# TYPE opendtu_last_update gauge\n"));
|
stream->print(F("# TYPE opendtu_last_update gauge\n"));
|
||||||
}
|
}
|
||||||
stream->printf("opendtu_last_update{serial=\"%s\",unit=\"%d\",name=\"%s\"} %d\n",
|
stream->printf("opendtu_last_update{serial=\"%s\",unit=\"%d\",name=\"%s\"} %d\n",
|
||||||
serial, i, name, inv->Statistics()->getLastUpdate() / 1000);
|
serial.c_str(), i, name, inv->Statistics()->getLastUpdate() / 1000);
|
||||||
|
|
||||||
// Loop all channels
|
// Loop all channels
|
||||||
for (uint8_t c = 0; c <= inv->Statistics()->getChannelCount(); c++) {
|
for (uint8_t c = 0; c <= inv->Statistics()->getChannelCount(); c++) {
|
||||||
@ -87,7 +84,7 @@ void WebApiPrometheusClass::onPrometheusMetrics(AsyncWebServerRequest* request)
|
|||||||
request->send(stream);
|
request->send(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebApiPrometheusClass::addField(AsyncResponseStream* stream, const char* serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId, const char* channelName)
|
void WebApiPrometheusClass::addField(AsyncResponseStream* stream, String& serial, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId, const char* channelName)
|
||||||
{
|
{
|
||||||
if (inv->Statistics()->hasChannelFieldValue(channel, fieldId)) {
|
if (inv->Statistics()->hasChannelFieldValue(channel, fieldId)) {
|
||||||
const char* chanName = (channelName == NULL) ? inv->Statistics()->getChannelFieldName(channel, fieldId) : channelName;
|
const char* chanName = (channelName == NULL) ? inv->Statistics()->getChannelFieldName(channel, fieldId) : channelName;
|
||||||
@ -95,6 +92,6 @@ void WebApiPrometheusClass::addField(AsyncResponseStream* stream, const char* se
|
|||||||
stream->printf("# HELP opendtu_%s in %s\n", chanName, inv->Statistics()->getChannelFieldUnit(channel, fieldId));
|
stream->printf("# HELP opendtu_%s in %s\n", chanName, inv->Statistics()->getChannelFieldUnit(channel, fieldId));
|
||||||
stream->printf("# TYPE opendtu_%s gauge\n", chanName);
|
stream->printf("# TYPE opendtu_%s gauge\n", chanName);
|
||||||
}
|
}
|
||||||
stream->printf("opendtu_%s{serial=\"%s\",unit=\"%d\",name=\"%s\",channel=\"%d\"} %f\n", chanName, serial, idx, inv->name(), channel, inv->Statistics()->getChannelFieldValue(channel, fieldId));
|
stream->printf("opendtu_%s{serial=\"%s\",unit=\"%d\",name=\"%s\",channel=\"%d\"} %f\n", chanName, serial.c_str(), idx, inv->name(), channel, inv->Statistics()->getChannelFieldValue(channel, fieldId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user