Improoved websocket handling
This commit is contained in:
parent
f1566eaab7
commit
46d88c6520
@ -12,4 +12,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
AsyncWebSocket* _ws;
|
AsyncWebSocket* _ws;
|
||||||
void addField(JsonDocument& root, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId);
|
void addField(JsonDocument& root, uint8_t idx, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId);
|
||||||
|
|
||||||
|
uint32_t _lastWsPublish = 0;
|
||||||
|
uint32_t _lastInvUpdateCheck = 0;
|
||||||
|
uint32_t _newestInverterTimestamp = 0;
|
||||||
};
|
};
|
||||||
@ -1,7 +1,6 @@
|
|||||||
#include "WebApi_ws_live.h"
|
#include "WebApi_ws_live.h"
|
||||||
#include "AsyncJson.h"
|
#include "AsyncJson.h"
|
||||||
#include "Configuration.h"
|
#include "Configuration.h"
|
||||||
#include <Every.h>
|
|
||||||
|
|
||||||
void WebApiWsLiveClass::init(AsyncWebSocket* ws)
|
void WebApiWsLiveClass::init(AsyncWebSocket* ws)
|
||||||
{
|
{
|
||||||
@ -10,12 +9,27 @@ void WebApiWsLiveClass::init(AsyncWebSocket* ws)
|
|||||||
|
|
||||||
void WebApiWsLiveClass::loop()
|
void WebApiWsLiveClass::loop()
|
||||||
{
|
{
|
||||||
EVERY_N_SECONDS(10)
|
// do nothing if no WS client is connected
|
||||||
{
|
if (_ws->count() == 0) {
|
||||||
// do nothing if no WS client is connected
|
return;
|
||||||
if (_ws->count() == 0) {
|
}
|
||||||
return;
|
|
||||||
|
if (millis() - _lastInvUpdateCheck < 1000) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_lastInvUpdateCheck = millis();
|
||||||
|
|
||||||
|
uint32_t maxTimeStamp = 0;
|
||||||
|
for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) {
|
||||||
|
auto inv = Hoymiles.getInverterByPos(i);
|
||||||
|
|
||||||
|
if (inv->getLastStatsUpdate() > maxTimeStamp) {
|
||||||
|
maxTimeStamp = inv->getLastStatsUpdate();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update on every inverter change or at least after 10 seconds
|
||||||
|
if (millis() - _lastWsPublish > (10 * 1000) || (maxTimeStamp != _newestInverterTimestamp)) {
|
||||||
|
|
||||||
DynamicJsonDocument root(40960);
|
DynamicJsonDocument root(40960);
|
||||||
// Loop all inverters
|
// Loop all inverters
|
||||||
@ -48,6 +62,10 @@ void WebApiWsLiveClass::loop()
|
|||||||
addField(root, i, inv, c, FLD_EFF);
|
addField(root, i, inv, c, FLD_EFF);
|
||||||
addField(root, i, inv, c, FLD_IRR);
|
addField(root, i, inv, c, FLD_IRR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inv->getLastStatsUpdate() > _newestInverterTimestamp) {
|
||||||
|
_newestInverterTimestamp = inv->getLastStatsUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len = measureJson(root);
|
size_t len = measureJson(root);
|
||||||
@ -56,6 +74,8 @@ void WebApiWsLiveClass::loop()
|
|||||||
serializeJson(root, (char*)buffer->get(), len + 1);
|
serializeJson(root, (char*)buffer->get(), len + 1);
|
||||||
_ws->textAll(buffer);
|
_ws->textAll(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_lastWsPublish = millis();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user