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