diff --git a/include/Configuration.h b/include/Configuration.h index c034a30d..2c588748 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -122,7 +122,6 @@ struct CONFIG_T { bool Vedirect_Enabled; bool Vedirect_UpdatesOnly; - uint32_t Vedirect_PollInterval; char Mqtt_Hostname[MQTT_MAX_HOSTNAME_STRLEN + 1]; diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp index fa80dd8c..aa028ca5 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.cpp @@ -64,8 +64,7 @@ VeDirectFrameHandler::VeDirectFrameHandler() : _name(""), _value(""), _tmpFrame(), - _pollInterval(5), - _lastPoll(0) + _lastUpdate(0) { } @@ -75,17 +74,8 @@ void VeDirectFrameHandler::init(int8_t rx, int8_t tx) VedirectSerial.flush(); } -void VeDirectFrameHandler::setPollInterval(unsigned long interval) -{ - _pollInterval = interval; -} - void VeDirectFrameHandler::loop() { - if ((millis() - getLastUpdate()) < _pollInterval * 1000) { - return; - } - while ( VedirectSerial.available()) { rxData(VedirectSerial.read()); } @@ -273,7 +263,7 @@ void VeDirectFrameHandler::frameEndEvent(bool valid) { } veFrame = _tmpFrame; - setLastUpdate(); + _lastUpdate = millis(); } _tmpFrame = {}; } @@ -316,8 +306,8 @@ int VeDirectFrameHandler::hexRxEvent(uint8_t inbyte) { } bool VeDirectFrameHandler::isDataValid() { - if ((millis() - getLastUpdate()) / 1000 > _pollInterval * 5) { - return false; + if (_lastUpdate == 0) { + return false; } if (strlen(veFrame.SER) == 0) { return false; @@ -327,16 +317,7 @@ bool VeDirectFrameHandler::isDataValid() { unsigned long VeDirectFrameHandler::getLastUpdate() { - return _lastPoll; -} - -/* - * setLastUpdate - * This function is called every time a new ve.direct frame was read. - */ -void VeDirectFrameHandler::setLastUpdate() -{ - _lastPoll = millis(); + return _lastUpdate; } /* diff --git a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h index 13b51eaa..69b4cd48 100644 --- a/lib/VeDirectFrameHandler/VeDirectFrameHandler.h +++ b/lib/VeDirectFrameHandler/VeDirectFrameHandler.h @@ -88,7 +88,6 @@ public: VeDirectFrameHandler(); void init(int8_t rx, int8_t tx); // initialize HardewareSerial - void setPollInterval(unsigned long interval); // set poll intervall in seconds void loop(); // main loop to read ve.direct data unsigned long getLastUpdate(); // timestamp of last successful frame read bool isDataValid(); // return true if data valid and not outdated @@ -118,8 +117,7 @@ private: char _value[VE_MAX_VALUE_LEN]; // buffer for the field value veStruct _tmpFrame{}; // private struct for received name and value pairs MovingAverage _efficiency; - unsigned long _pollInterval; - unsigned long _lastPoll; + unsigned long _lastUpdate; }; extern VeDirectFrameHandler VeDirect; diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 4f04f990..3924315c 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -121,7 +121,6 @@ bool ConfigurationClass::write() JsonObject vedirect = doc.createNestedObject("vedirect"); vedirect["enabled"] = config.Vedirect_Enabled; vedirect["updates_only"] = config.Vedirect_UpdatesOnly; - vedirect["poll_interval"] = config.Vedirect_PollInterval; JsonObject powermeter = doc.createNestedObject("powermeter"); powermeter["enabled"] = config.PowerMeter_Enabled; @@ -330,7 +329,6 @@ bool ConfigurationClass::read() JsonObject vedirect = doc["vedirect"]; config.Vedirect_Enabled = vedirect["enabled"] | VEDIRECT_ENABLED; config.Vedirect_UpdatesOnly = vedirect["updates_only"] | VEDIRECT_UPDATESONLY; - config.Vedirect_PollInterval = vedirect["poll_interval"] | VEDIRECT_POLL_INTERVAL; JsonObject powermeter = doc["powermeter"]; config.PowerMeter_Enabled = powermeter["enabled"] | POWERMETER_ENABLED; diff --git a/src/WebApi_vedirect.cpp b/src/WebApi_vedirect.cpp index 5c880f8c..4b7e8e95 100644 --- a/src/WebApi_vedirect.cpp +++ b/src/WebApi_vedirect.cpp @@ -37,7 +37,6 @@ void WebApiVedirectClass::onVedirectStatus(AsyncWebServerRequest* request) const CONFIG_T& config = Configuration.get(); root[F("vedirect_enabled")] = config.Vedirect_Enabled; - root[F("vedirect_pollinterval")] = config.Vedirect_PollInterval; root[F("vedirect_updatesonly")] = config.Vedirect_UpdatesOnly; response->setLength(); @@ -55,7 +54,6 @@ void WebApiVedirectClass::onVedirectAdminGet(AsyncWebServerRequest* request) const CONFIG_T& config = Configuration.get(); root[F("vedirect_enabled")] = config.Vedirect_Enabled; - root[F("vedirect_pollinterval")] = config.Vedirect_PollInterval; root[F("vedirect_updatesonly")] = config.Vedirect_UpdatesOnly; response->setLength(); @@ -101,7 +99,7 @@ void WebApiVedirectClass::onVedirectAdminPost(AsyncWebServerRequest* request) return; } - if (!(root.containsKey("vedirect_enabled") && root.containsKey("vedirect_pollinterval") && root.containsKey("vedirect_updatesonly")) ) { + if (!(root.containsKey("vedirect_enabled") && root.containsKey("vedirect_updatesonly")) ) { retMsg[F("message")] = F("Values are missing!"); retMsg[F("code")] = WebApiError::GenericValueMissing; response->setLength(); @@ -109,21 +107,9 @@ void WebApiVedirectClass::onVedirectAdminPost(AsyncWebServerRequest* request) return; } - if (root[F("vedirect_pollinterval")].as() == 0) { - retMsg[F("message")] = F("Poll interval must be a number between 5 and 65535!"); - retMsg[F("code")] = WebApiError::MqttPublishInterval; - retMsg[F("param")][F("min")] = 5; - retMsg[F("param")][F("max")] = 65535; - - response->setLength(); - request->send(response); - return; - } - CONFIG_T& config = Configuration.get(); config.Vedirect_Enabled = root[F("vedirect_enabled")].as(); config.Vedirect_UpdatesOnly = root[F("vedirect_updatesonly")].as(); - config.Vedirect_PollInterval = root[F("vedirect_pollinterval")].as(); Configuration.write(); retMsg[F("type")] = F("success"); @@ -132,6 +118,4 @@ void WebApiVedirectClass::onVedirectAdminPost(AsyncWebServerRequest* request) response->setLength(); request->send(response); - - VeDirect.setPollInterval(config.Vedirect_PollInterval); -} \ No newline at end of file +} diff --git a/src/main.cpp b/src/main.cpp index e3e9ec74..cda2259f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -165,7 +165,6 @@ void setup() if (PinMapping.isValidVictronConfig()) { MessageOutput.printf("ve.direct rx = %d, tx = %d\r\n", pin.victron_rx, pin.victron_tx); VeDirect.init(pin.victron_rx, pin.victron_tx); - VeDirect.setPollInterval(config.Vedirect_PollInterval); MessageOutput.println(F("done")); } else { MessageOutput.println(F("Invalid pin config")); diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 37cf3804..91ddb4fb 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -9,7 +9,7 @@ "SecuritySettings": "Sicherheit", "DTUSettings": "DTU", "DeviceManager": "Hardware", - "VedirectSettings": "Ve.direct", + "VedirectSettings": "VE.Direct", "PowerMeterSettings": "Power Meter", "BatterySettings": "Batterie", "AcChargerSettings": "AC Ladegerät", @@ -22,7 +22,7 @@ "NTP": "NTP", "MQTT": "MQTT", "Console": "Konsole", - "Vedirect": "Ve.direct", + "Vedirect": "VE.Direct", "About": "Über", "Logout": "Abmelden", "Login": "Anmelden" @@ -318,12 +318,12 @@ "Disconnected": "getrennt" }, "vedirectinfo": { - "VedirectInformation" : "Ve.direct Info", + "VedirectInformation" : "VE.Direct Info", "ConfigurationSummary": "@:ntpinfo.ConfigurationSummary", "Status": "@:ntpinfo.Status", "Enabled": "@:mqttinfo.Enabled", "Disabled": "@:mqttinfo.Disabled", - "UpdatesOnly": "Nur Änderungen senden", + "UpdatesOnly": "@:vedirectadmin.UpdatesOnly", "UpdatesEnabled": "@:mqttinfo.Enabled", "UpdatesDisabled": "@:mqttinfo.Disabled" }, @@ -485,13 +485,12 @@ "Save": "@:dtuadmin.Save" }, "vedirectadmin": { - "VedirectSettings": "Ve.direct Einstellungen", - "VedirectConfiguration": "Ve.direct Konfiguration", - "EnableVedirect": "Aktiviere Ve.direct", - "VedirectParameter": "Ve.direct Parameter", - "PublishInterval": "Veröffentlichungsintervall:", + "VedirectSettings": "VE.Direct Einstellungen", + "VedirectConfiguration": "VE.Direct Konfiguration", + "EnableVedirect": "Aktiviere VE.Direct", + "VedirectParameter": "VE.Direct Parameter", "Seconds": "Sekunden", - "UpdatesOnly": "Nur Änderungen senden:", + "UpdatesOnly": "Werte nur bei Änderung an MQTT broker senden", "Save": "@:dtuadmin.Save" }, "powermeteradmin":{ diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 7bcb6442..24d1c1dd 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -9,7 +9,7 @@ "SecuritySettings": "Security", "DTUSettings": "DTU", "DeviceManager": "Device-Manager", - "VedirectSettings": "Ve.direct", + "VedirectSettings": "VE.Direct", "PowerMeterSettings": "Power Meter", "BatterySettings": "Battery", "AcChargerSettings": "AC Charger", @@ -22,7 +22,7 @@ "NTP": "NTP", "MQTT": "MQTT", "Console": "Console", - "Vedirect": "Ve.direct", + "Vedirect": "VE.Direct", "About": "About", "Logout": "Logout", "Login": "Login" @@ -318,12 +318,12 @@ "Disconnected": "disconnected" }, "vedirectinfo": { - "VedirectInformation" : "Ve.direct Info", + "VedirectInformation" : "VE.Direct Info", "ConfigurationSummary": "@:ntpinfo.ConfigurationSummary", "Status": "@:ntpinfo.Status", "Enabled": "@:mqttinfo.Enabled", "Disabled": "@:mqttinfo.Disabled", - "UpdatesOnly": "Send updates only", + "UpdatesOnly": "@:vedirectadmin.UpdatesOnly", "UpdatesEnabled": "@:mqttinfo.Enabled", "UpdatesDisabled": "@:mqttinfo.Disabled" }, @@ -485,13 +485,12 @@ "Save": "@:dtuadmin.Save" }, "vedirectadmin": { - "VedirectSettings": "Ve.direct Settings", - "VedirectConfiguration": "Ve.direct Configuration", - "EnableVedirect": "Enable Ve.direct", - "VedirectParameter": "Ve.direct Parameter", - "PublishInterval": "Publish Interval:", + "VedirectSettings": "VE.Direct Settings", + "VedirectConfiguration": "VE.Direct Configuration", + "EnableVedirect": "Enable VE.Direct", + "VedirectParameter": "VE.Direct Parameter", "Seconds": "seconds", - "UpdatesOnly": "Send only updates:", + "UpdatesOnly": "Publish values to MQTT only when they change", "Save": "@:dtuadmin.Save" }, "powermeteradmin":{ diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index 30bee026..623297b9 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -9,7 +9,7 @@ "SecuritySettings": "Sécurité", "DTUSettings": "DTU", "DeviceManager": "Périphériques", - "VedirectSettings": "Ve.direct", + "VedirectSettings": "VE.Direct", "PowerMeterSettings": "Power Meter", "BatterySettings": "Battery", "AcChargerSettings": "AC Charger", @@ -22,7 +22,7 @@ "NTP": "NTP", "MQTT": "MQTT", "Console": "Console", - "Vedirect": "Ve.direct", + "Vedirect": "VE.Direct", "About": "A propos", "Logout": "Déconnexion", "Login": "Connexion" @@ -318,12 +318,12 @@ "Disconnected": "déconnecté" }, "vedirectinfo": { - "VedirectInformation" : "Ve.direct Info", + "VedirectInformation" : "VE.Direct Info", "ConfigurationSummary": "@:ntpinfo.ConfigurationSummary", "Status": "@:ntpinfo.Status", "Enabled": "@:mqttinfo.Enabled", "Disabled": "@:mqttinfo.Disabled", - "UpdatesOnly": "Send updates only", + "UpdatesOnly": "@:vedirectadmin.UpdatesOnly", "UpdatesEnabled": "@:mqttinfo.Enabled", "UpdatesDisabled": "@:mqttinfo.Disabled" }, @@ -485,13 +485,12 @@ "Save": "@:dtuadmin.Save" }, "vedirectadmin": { - "VedirectSettings": "Ve.direct Settings", - "VedirectConfiguration": "Ve.direct Configuration", - "EnableVedirect": "Enable Ve.direct", - "VedirectParameter": "Ve.direct Parameter", - "PublishInterval": "Publish Interval:", + "VedirectSettings": "VE.Direct Settings", + "VedirectConfiguration": "VE.Direct Configuration", + "EnableVedirect": "Enable VE.Direct", + "VedirectParameter": "VE.Direct Parameter", "Seconds": "seconds", - "UpdatesOnly": "Send only updates:", + "UpdatesOnly": "Publish values to MQTT only when they change", "Save": "@:dtuadmin.Save" }, "inverteradmin": { diff --git a/webapp/src/router/index.ts b/webapp/src/router/index.ts index 5ae21e0f..6fe0493d 100644 --- a/webapp/src/router/index.ts +++ b/webapp/src/router/index.ts @@ -70,7 +70,7 @@ const router = createRouter({ }, { path: '/info/vedirect', - name: 'Ve.direct', + name: 'VE.Direct', component: VedirectInfoView }, { @@ -85,7 +85,7 @@ const router = createRouter({ }, { path: '/settings/vedirect', - name: 'Ve.direct Settings', + name: 'VE.Direct Settings', component: VedirectAdminView }, { diff --git a/webapp/src/types/VedirectConfig.ts b/webapp/src/types/VedirectConfig.ts index 16da141b..59a87522 100644 --- a/webapp/src/types/VedirectConfig.ts +++ b/webapp/src/types/VedirectConfig.ts @@ -1,5 +1,4 @@ export interface VedirectConfig { vedirect_enabled: boolean; - vedirect_pollinterval: number; vedirect_updatesonly: boolean; -} \ No newline at end of file +} diff --git a/webapp/src/views/VedirectAdminView.vue b/webapp/src/views/VedirectAdminView.vue index 91c63da4..1431ee1b 100644 --- a/webapp/src/views/VedirectAdminView.vue +++ b/webapp/src/views/VedirectAdminView.vue @@ -14,14 +14,9 @@ - - + type="checkbox" wide/> diff --git a/webapp/src/views/VedirectInfoView.vue b/webapp/src/views/VedirectInfoView.vue index f1a63f2b..39a109cb 100644 --- a/webapp/src/views/VedirectInfoView.vue +++ b/webapp/src/views/VedirectInfoView.vue @@ -6,23 +6,15 @@ {{ $t('vedirectinfo.Status') }} - - {{ $t('vedirectinfo.Enabled') }} - {{ $t('vedirectinfo.Disabled') }} + + - - {{ $t('vedirectinfo.UpdatesOnly') }} - - {{ $t('vedirectinfo.UpdatesEnabled') }} - {{ $t('vedirectinfo.UpdatesDisabled') }} - + + {{ $t('vedirectinfo.UpdatesOnly') }} + + + @@ -34,6 +26,7 @@