Feature: make power meter polling intervals configurable
this change makes the respective setting accessible from the web UI.
This commit is contained in:
parent
b891a4c1a3
commit
a2a9debd02
@ -20,6 +20,7 @@ public:
|
||||
bool init() final;
|
||||
void loop() final;
|
||||
float getPowerTotal() const final;
|
||||
bool isDataValid() const final;
|
||||
void doMqttPublish() const final;
|
||||
|
||||
using power_values_t = std::array<float, POWERMETER_HTTP_JSON_MAX_VALUES>;
|
||||
|
||||
@ -15,6 +15,7 @@ public:
|
||||
|
||||
bool init() final;
|
||||
void loop() final;
|
||||
bool isDataValid() const final;
|
||||
|
||||
// returns an empty string on success,
|
||||
// returns an error message otherwise.
|
||||
|
||||
@ -23,9 +23,9 @@ public:
|
||||
|
||||
virtual void loop() = 0;
|
||||
virtual float getPowerTotal() const = 0;
|
||||
virtual bool isDataValid() const;
|
||||
|
||||
uint32_t getLastUpdate() const { return _lastUpdate; }
|
||||
bool isDataValid() const;
|
||||
void mqttLoop() const;
|
||||
|
||||
protected:
|
||||
|
||||
@ -22,6 +22,7 @@ public:
|
||||
bool init() final;
|
||||
void loop() final;
|
||||
float getPowerTotal() const final;
|
||||
bool isDataValid() const final;
|
||||
void doMqttPublish() const final;
|
||||
|
||||
private:
|
||||
|
||||
@ -124,6 +124,12 @@ float PowerMeterHttpJson::getPowerTotal() const
|
||||
return sum;
|
||||
}
|
||||
|
||||
bool PowerMeterHttpJson::isDataValid() const
|
||||
{
|
||||
uint32_t age = millis() - getLastUpdate();
|
||||
return getLastUpdate() > 0 && (age < (3 * _cfg.PollingInterval * 1000));
|
||||
}
|
||||
|
||||
void PowerMeterHttpJson::doMqttPublish() const
|
||||
{
|
||||
mqttPublish("power1", _powerValues[0]);
|
||||
|
||||
@ -36,6 +36,12 @@ void PowerMeterHttpSml::loop()
|
||||
gotUpdate();
|
||||
}
|
||||
|
||||
bool PowerMeterHttpSml::isDataValid() const
|
||||
{
|
||||
uint32_t age = millis() - getLastUpdate();
|
||||
return getLastUpdate() > 0 && (age < (3 * _cfg.PollingInterval * 1000));
|
||||
}
|
||||
|
||||
String PowerMeterHttpSml::poll()
|
||||
{
|
||||
if (!_upHttpGetter) {
|
||||
|
||||
@ -43,6 +43,12 @@ float PowerMeterSerialSdm::getPowerTotal() const
|
||||
return _phase1Power + _phase2Power + _phase3Power;
|
||||
}
|
||||
|
||||
bool PowerMeterSerialSdm::isDataValid() const
|
||||
{
|
||||
uint32_t age = millis() - getLastUpdate();
|
||||
return getLastUpdate() > 0 && (age < (3 * _cfg.PollingInterval * 1000));
|
||||
}
|
||||
|
||||
void PowerMeterSerialSdm::doMqttPublish() const
|
||||
{
|
||||
std::lock_guard<std::mutex> l(_mutex);
|
||||
|
||||
@ -554,8 +554,9 @@
|
||||
"PowerMeterConfiguration": "Stromzähler Konfiguration",
|
||||
"PowerMeterEnable": "Aktiviere Stromzähler",
|
||||
"VerboseLogging": "@:base.VerboseLogging",
|
||||
"PowerMeterParameter": "Power Meter Parameter",
|
||||
"PowerMeterSource": "Stromzählertyp",
|
||||
"pollingInterval": "Abfrageintervall",
|
||||
"seconds": "@:base.Seconds",
|
||||
"typeMQTT": "MQTT",
|
||||
"typeSDM1ph": "SDM mit 1 Phase (SDM120/220/230)",
|
||||
"typeSDM3ph": "SDM mit 3 Phasen (SDM72/630)",
|
||||
@ -598,7 +599,7 @@
|
||||
"headerKeyDescription": "Optional. Ein benutzerdefinierter HTTP header kann definiert werden. Nützlich um z.B. ein (zusätzlichen) Authentifizierungstoken zu übermitteln.",
|
||||
"headerValue": "HTTP Header - Wert",
|
||||
"timeout": "Zeitüberschreitung",
|
||||
"milliSeconds": "ms"
|
||||
"milliSeconds": "Millisekunden"
|
||||
},
|
||||
"powerlimiteradmin": {
|
||||
"PowerLimiterSettings": "Dynamic Power Limiter Einstellungen",
|
||||
|
||||
@ -556,8 +556,9 @@
|
||||
"PowerMeterConfiguration": "Power Meter Configuration",
|
||||
"PowerMeterEnable": "Enable Power Meter",
|
||||
"VerboseLogging": "@:base.VerboseLogging",
|
||||
"PowerMeterParameter": "Power Meter Parameter",
|
||||
"PowerMeterSource": "Power Meter type",
|
||||
"pollingInterval": "Polling Interval",
|
||||
"seconds": "@:base.Seconds",
|
||||
"typeMQTT": "MQTT",
|
||||
"typeSDM1ph": "SDM for 1 phase (SDM120/220/230)",
|
||||
"typeSDM3ph": "SDM for 3 phases (SDM72/630)",
|
||||
@ -600,7 +601,7 @@
|
||||
"headerKeyDescription": "Optional. A custom HTTP header key-value pair can be defined. Useful, e.g., to send an (additional) authentication token.",
|
||||
"headerValue": "HTTP Header - Value",
|
||||
"timeout": "Timeout",
|
||||
"milliSeconds": "ms"
|
||||
"milliSeconds": "Milliseconds"
|
||||
},
|
||||
"powerlimiteradmin": {
|
||||
"PowerLimiterSettings": "Dynamic Power Limiter Settings",
|
||||
|
||||
@ -51,6 +51,14 @@
|
||||
:text="$t('powermeteradmin.SDM')"
|
||||
textVariant="text-bg-primary"
|
||||
add-space>
|
||||
|
||||
<InputElement :label="$t('powermeteradmin.pollingInterval')"
|
||||
v-model="powerMeterConfigList.serial_sdm.polling_interval"
|
||||
type="number"
|
||||
min=1
|
||||
max=15
|
||||
:postfix="$t('powermeteradmin.seconds')" />
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="sdmaddress" class="col-sm-2 col-form-label">{{ $t('powermeteradmin.sdmaddress') }}:</label>
|
||||
<div class="col-sm-10">
|
||||
@ -70,6 +78,14 @@
|
||||
v-model="powerMeterConfigList.http_json.individual_requests"
|
||||
type="checkbox"
|
||||
wide />
|
||||
|
||||
<InputElement :label="$t('powermeteradmin.pollingInterval')"
|
||||
v-model="powerMeterConfigList.http_json.polling_interval"
|
||||
type="number"
|
||||
min=1
|
||||
max=15
|
||||
:postfix="$t('powermeteradmin.seconds')"
|
||||
wide />
|
||||
</CardElement>
|
||||
|
||||
<div class="alert alert-secondary mt-5" role="alert">
|
||||
@ -156,6 +172,13 @@
|
||||
textVariant="text-bg-primary"
|
||||
add-space>
|
||||
|
||||
<InputElement :label="$t('powermeteradmin.pollingInterval')"
|
||||
v-model="powerMeterConfigList.http_sml.polling_interval"
|
||||
type="number"
|
||||
min=1
|
||||
max=15
|
||||
:postfix="$t('powermeteradmin.seconds')" />
|
||||
|
||||
<HttpRequestSettings :cfg="powerMeterConfigList.http_sml.http_request" />
|
||||
</CardElement>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user