diff --git a/docs/DeviceProfiles/my_very_special_board.json b/docs/DeviceProfiles/my_very_special_board.json index 6c7bc4964..1baccd72c 100644 --- a/docs/DeviceProfiles/my_very_special_board.json +++ b/docs/DeviceProfiles/my_very_special_board.json @@ -25,13 +25,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": 12, - "mosi": 13, - "clk": 14, - "irq": 35, - "cs": 15 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 @@ -64,13 +57,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": -1, - "mosi": -1, - "clk": -1, - "irq": -1, - "cs": -1 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 @@ -81,7 +67,7 @@ } }, { - "name": "my_test_board DalyBMS via RS232", + "name": "my_test_board MCP2515+DalyBMS via RS232", "nrf24": { "clk": 18, "cs": 5, @@ -103,15 +89,11 @@ "bms_wakeup": 4 }, "charger": { - "can0_rx": 26, - "can0_tx": 27 - }, - "mcp2515": { - "miso": -1, - "mosi": -1, - "clk": -1, - "irq": -1, - "cs": -1 + "mcp2515_miso": 12, + "mcp2515_mosi": 13, + "mcp2515_clk": 14, + "mcp2515_irq": 35, + "mcp2515_cs": 15 }, "batteryConnectedInverter": { "pre_charge": 32, @@ -155,13 +137,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": -1, - "mosi": -1, - "clk": -1, - "irq": -1, - "cs": -1 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 @@ -202,13 +177,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": 12, - "mosi": 13, - "clk": 14, - "irq": 35, - "cs": 15 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 @@ -248,13 +216,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": 12, - "mosi": 13, - "clk": 14, - "irq": 35, - "cs": 15 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 @@ -294,13 +255,6 @@ "can0_rx": 26, "can0_tx": 27 }, - "mcp2515": { - "miso": 12, - "mosi": 13, - "clk": 14, - "irq": 35, - "cs": 15 - }, "batteryConnectedInverter": { "pre_charge": 32, "full_power": 33 diff --git a/include/PinMapping.h b/include/PinMapping.h index 784a21116..2f66b9df0 100644 --- a/include/PinMapping.h +++ b/include/PinMapping.h @@ -10,6 +10,17 @@ #define MAPPING_NAME_STRLEN 31 +struct RS485_t { + int8_t rx; + int8_t tx; + int8_t rts; +}; + +struct RS232_t { + int8_t rx; + int8_t tx; +}; + struct MCP2515_t { int8_t miso; int8_t mosi; @@ -55,15 +66,8 @@ struct Battery_t { } i2c; #endif #if defined(USE_PYLONTECH_RS485_RECEIVER) || defined(USE_DALYBMS_CONTROLLER) || defined(USE_JKBMS_CONTROLLER) - struct { - int8_t rx; - int8_t tx; - } rs232; - struct { - int8_t rx; - int8_t tx; - int8_t rts; - } rs485; + RS232_t rs232; + RS485_t rs485; #endif }; #if defined(USE_DALYBMS_CONTROLLER) @@ -121,20 +125,10 @@ struct PinMapping_t { int8_t led_rgb; #endif - int8_t victron_tx; - int8_t victron_rx; - - int8_t victron_tx2; - int8_t victron_rx2; - - int8_t victron_tx3; - int8_t victron_rx3; + RS232_t victron[3]; #if defined(USE_REFUsol_INVERTER) - int8_t REFUsol_rx; - int8_t REFUsol_tx; - // int8_t REFUsol_cts; - int8_t REFUsol_rts; + RS485_t refusol; #endif Battery_t battery; @@ -165,18 +159,18 @@ class PinMappingClass { bool isValidEthConfig() const; #endif bool isValidBatteryConfig() const; -#if defined(USE_CHARGER_MEANWELL) || defined(USE_CHARGER_HUAWEI) bool isValidChargerConfig() const; -#endif - bool isValidPreChargeConfig() const; +#if defined(USE_REFUsol_INVERTER) + bool isValidREFUsolConfig() const; +#endif private: void createPinMappingJson() const; PinMapping_t _pinMapping; - const char* help[7] = {"unknown", "CAN0 Bus", "MCP2515", "I2C0/CAN", "I2C1/CAN", "RS232", "RS485"}; + const char* help[7] = {"unknown", "CAN0 Bus", "MCP2515 CAN Bus", "I2C0/CAN Bus", "I2C1/CAN Bus", "RS232", "RS485"}; }; extern PinMappingClass PinMapping; diff --git a/src/BatteryCanReceiver.cpp b/src/BatteryCanReceiver.cpp index e0b447aff..965f545fe 100644 --- a/src/BatteryCanReceiver.cpp +++ b/src/BatteryCanReceiver.cpp @@ -13,7 +13,7 @@ bool BatteryCanReceiver::init(char const* providerName) MessageOutput.printf("%s Initialize interface...", _providerName); - if (PinMapping.isValidBatteryConfig()) { + if (!PinMapping.isValidBatteryConfig()) { MessageOutput.println(" Invalid pin config"); return false; } diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index 47b5a650c..b1edc3523 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -107,22 +107,6 @@ #define VICTRON_PIN_TX 21 #endif -#ifndef VICTRON_PIN_RX2 -#define VICTRON_PIN_RX2 -1 -#endif - -#ifndef VICTRON_PIN_TX2 -#define VICTRON_PIN_TX2 -1 -#endif - -#ifndef VICTRON_PIN_RX3 -#define VICTRON_PIN_RX3 -1 -#endif - -#ifndef VICTRON_PIN_TX3 -#define VICTRON_PIN_TX3 -1 -#endif - #ifndef REFUSOL_PIN_RX #define REFUSOL_PIN_RX -1 #endif @@ -262,19 +246,19 @@ PinMappingClass::PinMappingClass() _pinMapping.led_rgb = LED_RGB; #endif - _pinMapping.victron_tx = VICTRON_PIN_TX; - _pinMapping.victron_rx = VICTRON_PIN_RX; + _pinMapping.victron[0].tx = VICTRON_PIN_TX; + _pinMapping.victron[0].rx = VICTRON_PIN_RX; - _pinMapping.victron_tx2 = -1; - _pinMapping.victron_rx2 = -1; + _pinMapping.victron[1].tx = -1; + _pinMapping.victron[1].rx = -1; - _pinMapping.victron_tx3 = -1; - _pinMapping.victron_rx3 = -1; + _pinMapping.victron[2].tx = -1; + _pinMapping.victron[2].rx = -1; #if defined(USE_REFUsol_INVERTER) - _pinMapping.REFUsol_rx = REFUSOL_PIN_RX; - _pinMapping.REFUsol_tx = REFUSOL_PIN_TX; - _pinMapping.REFUsol_rts = REFUSOL_PIN_RTS; + _pinMapping.REFUsol.rx = REFUSOL_PIN_RX; + _pinMapping.REFUsol.tx = REFUSOL_PIN_TX; + _pinMapping.REFUsol.rts = REFUSOL_PIN_RTS; #endif #if defined(USE_PYLONTECH_RS485_RECEIVER) || defined(USE_DALYBMS_CONTROLLER) || defined(USE_JKBMS_CONTROLLER) @@ -384,22 +368,19 @@ void PinMappingClass::init(const String& deviceMapping) #if defined(USE_LED_STRIP) _pinMapping.led_rgb = doc[i]["led"]["rgb"] | LED_RGB; #endif - _pinMapping.victron_rx = doc[i]["victron"]["rs232_rx"] | VICTRON_PIN_RX; - _pinMapping.victron_tx = doc[i]["victron"]["rs232_tx"] | VICTRON_PIN_TX; - - _pinMapping.victron_rx2 = doc[i]["victron"]["rs232_rx2"] | VICTRON_PIN_RX2; - _pinMapping.victron_tx2 = doc[i]["victron"]["rs232_tx2"] | VICTRON_PIN_TX2; - - _pinMapping.victron_rx3 = doc[i]["victron"]["rs232_rx3"] | VICTRON_PIN_RX3; - _pinMapping.victron_tx3 = doc[i]["victron"]["rs232_tx3"] | VICTRON_PIN_TX3; + for (int i=0; i0)?String(i+1):String(""); + _pinMapping.victron[i].rx = doc[i]["victron"][String("rs232_rx")+offset] | -1; + _pinMapping.victron[i].tx = doc[i]["victron"][String("rs232_tx")+offset] | -1; + } #if defined(USE_REFUsol_INVERTER) - _pinMapping.REFUsol_rx = doc[i]["refusol"]["rs485_rx"] | REFUSOL_PIN_RX; - _pinMapping.REFUsol_tx = doc[i]["refusol"]["rs485_tx"] | REFUSOL_PIN_TX; + _pinMapping.REFUsol.rx = doc[i]["refusol"]["rs485_rx"] | REFUSOL_PIN_RX; + _pinMapping.REFUsol.tx = doc[i]["refusol"]["rs485_tx"] | REFUSOL_PIN_TX; if (doc[i]["refusol"].containsKey("rs485_rts")) { - _pinMapping.REFUsol_rts = doc[i]["refusol"]["rs485_rts"] | REFUSOL_PIN_RTS; + _pinMapping.REFUsol.rts = doc[i]["refusol"]["rs485_rts"] | REFUSOL_PIN_RTS; } else { - _pinMapping.REFUsol_rts = -1; + _pinMapping.REFUsol.rts = -1; } #endif @@ -611,9 +592,9 @@ bool PinMappingClass::isValidBatteryConfig() const return false; } -#if defined(USE_CHARGER_MEANWELL) || defined(USE_CHARGER_HUAWEI) bool PinMappingClass::isValidChargerConfig() const { +#if defined(USE_CHARGER_MEANWELL) || defined(USE_CHARGER_HUAWEI) if (_pinMapping.charger.provider == Charger_Provider_t::CAN0) return _pinMapping.charger.can0.rx >= 0 && _pinMapping.charger.can0.tx >= 0; @@ -627,10 +608,9 @@ bool PinMappingClass::isValidChargerConfig() const _pinMapping.charger.mcp2515.clk >= 0 && _pinMapping.charger.mcp2515.irq >= 0 && _pinMapping.charger.mcp2515.cs >= 0; - +#endif return false; } -#endif bool PinMappingClass::isValidPreChargeConfig() const { @@ -638,6 +618,16 @@ bool PinMappingClass::isValidPreChargeConfig() const && _pinMapping.full_power >= 0; } +#if defined(USE_REFUsol_INVERTER) +bool PinMappingClass::isValidREFUsolConfig() const +{ + return _pinMapping.REFUsol.rx > 0 + && _pinMapping.REFUsol.tx >= 0 + && _pinMapping.REFUsol.rx != _pinMapping.REFUsol.tx + && _pinMapping.REFUsol.rts != _pinMapping.REFUsol.rx + && _pinMapping.REFUsol.rts != _pinMapping.REFUsol.tx; +#endif + void PinMappingClass::createPinMappingJson() const { JsonDocument obj; @@ -703,18 +693,17 @@ void PinMappingClass::createPinMappingJson() const #endif JsonObject victron = doc["victron"].to(); - victron["rs232_rx"] = _pinMapping.victron_rx; - victron["rs232_tx"] = _pinMapping.victron_tx; - victron["rs232_rx2"] = _pinMapping.victron_rx2; - victron["rs232_tx2"] = _pinMapping.victron_tx2; - victron["rs232_rx3"] = _pinMapping.victron_rx3; - victron["rs232_tx3"] = _pinMapping.victron_tx3; + for (int i=0; i0)?String(i+1):String(""); + victron[String("rs232_rx")+offset] = _pinMapping.victron[i].rx; + victron[String("rs232_tx")+offset] = _pinMapping.victron[i].tx; + } #if defined(USE_REFUsol_INVERTER) JsonObject refusol = doc["refusol"].to(); - refusol["rs485_rx"] = _pinMapping.REFUsol_rx; - refusol["rs485_tx"] = _pinMapping.REFUsol_tx; - if (_pinMapping.REFUsol_rts >= 0) refusol["rs485_rts"] = _pinMapping.REFUsol_rts; + refusol["rs485_rx"] = _pinMapping.REFUsol.rx; + refusol["rs485_tx"] = _pinMapping.REFUsol.tx; + if (_pinMapping.REFUsol.rts >= 0) refusol["rs485_rts"] = _pinMapping.REFUsol.rts; #endif JsonObject battery = doc["battery"].to(); diff --git a/src/PylontechRS485Receiver.cpp b/src/PylontechRS485Receiver.cpp index 00365b1fe..2e58a8c85 100644 --- a/src/PylontechRS485Receiver.cpp +++ b/src/PylontechRS485Receiver.cpp @@ -30,9 +30,7 @@ bool PylontechRS485Receiver::init() } */ - const Battery_t& pin = PinMapping.get().battery; - - if (!PinMapping.isValidChargerConfig()) { + if (!PinMapping.isValidBatteryConfig()) { MessageOutput.println("Invalid pin config"); return false; } @@ -42,6 +40,8 @@ bool PylontechRS485Receiver::init() _upSerial = std::make_unique(*oHwSerialPort); + auto const& pin = PinMapping.get().battery; + _upSerial->begin(115200, SERIAL_8N1, pin.rs485.rx, pin.rs485.tx); MessageOutput.printf("Port= %d, RS485 (Type %d) port rx = %d, tx = %d", *oHwSerialPort, pin.rs485.rts >= 0 ? 1 : 2, pin.rs485.rx, pin.rs485.tx); if (pin.rs485.rts >= 0) { diff --git a/src/REFUsolRS485Receiver.cpp b/src/REFUsolRS485Receiver.cpp index 572ce8c13..761d380ac 100644 --- a/src/REFUsolRS485Receiver.cpp +++ b/src/REFUsolRS485Receiver.cpp @@ -53,18 +53,13 @@ void REFUsolRS485ReceiverClass::updateSettings(void) _loopTask.enable(); - const PinMapping_t& pin = PinMapping.get(); - - if (pin.REFUsol_rx < 0 || pin.REFUsol_tx < 0 - || pin.REFUsol_rx == pin.REFUsol_tx - || (pin.REFUsol_rts >= 0 - && (pin.REFUsol_rts == pin.REFUsol_rx || pin.REFUsol_rts == pin.REFUsol_tx)) - ) - { + if (!PinMapping.isValidREFUsolConfig()) { MessageOutput.println("Invalid TX/RX/RTS pin config"); return; } + auto const& pin = PinMapping.get().REFUsol; + if (!_initialized) { RS485BaudRate = 57600; auto oHwSerialPort = SerialPortManager.allocatePort(_serialPortOwner); @@ -72,9 +67,9 @@ void REFUsolRS485ReceiverClass::updateSettings(void) _upSerial = std::make_unique(*oHwSerialPort); - _upSerial->begin(RS485BaudRate, SERIAL_8N1, pin.REFUsol_rx, pin.REFUsol_tx); - MessageOutput.printf("RS485 (Type %d) port rx = %d, tx = %d", pin.REFUsol_rts >= 0 ? 1 : 2, pin.REFUsol_rx, pin.REFUsol_tx); - if (pin.REFUsol_rts >= 0) { + _upSerial->begin(RS485BaudRate, SERIAL_8N1, pin.rx, pin.tx); + MessageOutput.printf("RS485 (Type %d) port rx = %d, tx = %d", pin.rts >= 0 ? 1 : 2, pin.rx, pin.tx); + if (pin.rts >= 0) { /* * REFUsol inverter is connected via a RS485 module. Two different types of modules are supported. * Type 1: if a GPIO pin greater or equal 0 is given, we have a MAX3485 or SP3485 modul with external driven DE/RE pins @@ -82,8 +77,8 @@ void REFUsolRS485ReceiverClass::updateSettings(void) * Type 2: if the GPIO is negativ (-1), we assume that we have a RS485 TTL Modul with a self controlled DE/RE circuit. * In this case we only need a TX and RX pin. */ - MessageOutput.printf(", rts = %d", pin.REFUsol_rts); - _upSerial->setPins(pin.REFUsol_rx, pin.REFUsol_tx, UART_PIN_NO_CHANGE, pin.REFUsol_rts); + MessageOutput.printf(", rts = %d", pin.rts); + _upSerial->setPins(pin.rx, pin.tx, UART_PIN_NO_CHANGE, pin.rts); } ESP_ERROR_CHECK(uart_set_mode(*oHwSerialPort, UART_MODE_RS485_HALF_DUPLEX)); @@ -148,7 +143,7 @@ void REFUsolRS485ReceiverClass::deinit(void) _upSerial->end(); - if (PinMapping.get().REFUsol_rts >= 0) { pinMode(PinMapping.get().REFUsol_rts, INPUT); } + if (PinMapping.get().REFUsol.rts >= 0) { pinMode(PinMapping.get().REFUsol.rts, INPUT); } SerialPortManager.freePort(_serialPortOwner); diff --git a/src/VictronMppt.cpp b/src/VictronMppt.cpp index 063588bbf..1ebb4b645 100644 --- a/src/VictronMppt.cpp +++ b/src/VictronMppt.cpp @@ -38,13 +38,9 @@ void VictronMpptClass::updateSettings() return; } - const PinMapping_t& pin = PinMapping.get(); - - initController(pin.victron_rx, pin.victron_tx, _verboseLogging, 1); - - initController(pin.victron_rx2, pin.victron_tx2, _verboseLogging, 2); - - initController(pin.victron_rx3, pin.victron_tx3, _verboseLogging, 3); + auto const& pin = PinMapping.get().victron; + for (int i=0; i(pin.rs232.tx); - auto rx = static_cast(pin.rs232.rx); + auto tx = static_cast(pin.tx); + auto rx = static_cast(pin.rx); auto oHwSerialPort = SerialPortManager.allocatePort(_serialPortOwner); if (!oHwSerialPort) { return false; } diff --git a/src/WebApi_Huawei.cpp b/src/WebApi_Huawei.cpp index dc88f1d71..a789a571a 100644 --- a/src/WebApi_Huawei.cpp +++ b/src/WebApi_Huawei.cpp @@ -140,6 +140,8 @@ void WebApiHuaweiClass::onAdminGet(AsyncWebServerRequest* request) root["enabled"] = cHuawei.Enabled; root["verbose_logging"] = cHuawei.VerboseLogging; + root["charger_type"] = "HUAWEI"; + root["io_providername"] = PinMapping.get().charger.providerName; if (HuaweiCanComm.isMCP2515Provider()) root["can_controller_frequency"] = Configuration.get().MCP2515.Controller_Frequency; root["auto_power_enabled"] = cHuawei.Auto_Power_Enabled; root["auto_power_batterysoc_limits_enabled"] = cHuawei.Auto_Power_BatterySoC_Limits_Enabled; diff --git a/src/WebApi_MeanWell.cpp b/src/WebApi_MeanWell.cpp index 1fde77459..72e14d178 100644 --- a/src/WebApi_MeanWell.cpp +++ b/src/WebApi_MeanWell.cpp @@ -55,6 +55,9 @@ void WebApiMeanWellClass::onAdminGet(AsyncWebServerRequest* request) root["enabled"] = cMeanWell.Enabled; root["verbose_logging"] = cMeanWell.VerboseLogging; + root["chargerType"] = (strcmp(MeanWellCan._rp.ManufacturerName, "MEANWELL") == 0) ? + String(MeanWellCan._rp.ManufacturerName) + " " + String(MeanWellCan._rp.ManufacturerModelName): + "MeanWell NPB-450/750/1200/1700-24/48"; root["io_providername"] = PinMapping.get().charger.providerName; if (MeanWellCan.isMCP2515Provider()) root["can_controller_frequency"] = Configuration.get().MCP2515.Controller_Frequency; root["pollinterval"] = cMeanWell.PollInterval; diff --git a/src/WebApi_device.cpp b/src/WebApi_device.cpp index c5f41c19c..813f10470 100644 --- a/src/WebApi_device.cpp +++ b/src/WebApi_device.cpp @@ -141,25 +141,20 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request) #endif auto victronPinObj = curPin["victron"].to(); - if (pin.victron_rx >= 0) { - victronPinObj["rs232_rx"] = pin.victron_rx; - victronPinObj["rs232_tx"] = pin.victron_tx; - } - if (pin.victron_rx2 >= 0) { - victronPinObj["rs232_rx2"] = pin.victron_rx2; - victronPinObj["rs232_tx2"] = pin.victron_tx2; - } - if (pin.victron_rx3 >= 0) { - victronPinObj["rs232_rx3"] = pin.victron_rx3; - victronPinObj["rs232_tx3"] = pin.victron_tx3; + for (int i=0; i= 0) { + String offset = (i>0)?String(i+1):String(""); + victronPinObj[String("rs232_rx")+offset] = pin.victron[i].rx; + victronPinObj[String("rs232_tx")+offset] = pin.victron[i].tx; + } } #if defined(USE_REFUsol_INVERTER) auto refusolPinObj = curPin["refusol"].to(); - refusolPinObj["rs485_rx"] = pin.REFUsol_rx; - refusolPinObj["rs485_tx"] = pin.REFUsol_tx; - if (pin.REFUsol_rts >= 0) { - refusolPinObj["rs485_rts"] = pin.REFUsol_rts; + refusolPinObj["rs485_rx"] = pin.REFUsol.rx; + refusolPinObj["rs485_tx"] = pin.REFUsol.tx; + if (pin.REFUsol.rts >= 0) { + refusolPinObj["rs485_rts"] = pin.REFUsol.rts; } #endif diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index e06c8105a..7aaed02fb 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -1051,7 +1051,8 @@ "ChargerSettings": "AC-Ladegerät Einstellungen", "ChargerConfiguration": "AC-Ladegerät Konfiguration", "ChargerParameter": "MeanWell Parameter", - "EnableMeanWell": "Aktiviere MeanWell NPB-450/750/1200/1700-24/48 an ", + "Enable": "Aktiviere ", + "on": " an ", "UpdatesOnly": "@:base.UpdatesOnly", "PollInterval": "@:dtuadmin.PollInterval", "VerboseLogging": "@:base.VerboseLogging", diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json index 69ea16208..ed23d1c8e 100644 --- a/webapp/src/locales/en.json +++ b/webapp/src/locales/en.json @@ -1053,7 +1053,8 @@ "VerboseLogging": "@:base.VerboseLogging", "CanControllerConfiguration": "@:batteryadmin.CanControllerConfiguration", "CanControllerFrequency": "@:batteryadmin.CanControllerFrequency", - "EnableMeanWell": "Enable MeanWell NPB-450/750/1200/1700-24/48 on ", + "Enable": "Enable ", + "on": " on ", "Min_Voltage": "Min. output voltage", "Max_Voltage": "Max. output voltage", "Min_Current": "Min. output current", diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json index 614c914c2..cf3209147 100644 --- a/webapp/src/locales/fr.json +++ b/webapp/src/locales/fr.json @@ -1051,7 +1051,8 @@ "VerboseLogging": "@:base.VerboseLogging", "CanControllerConfiguration": "@:batteryadmin.CanControllerConfiguration", "CanControllerFrequency": "@:batteryadmin.CanControllerFrequency", - "EnableMeanWell": "Activer MeanWell NPB-450/750/1200/1700-24/48 sur ", + "Enable": "Activer ", + "on": " sur ", "Min_Voltage": "Tension de sortie minimale", "Max_Voltage": "Tension de sortie maximale", "Min_Current": "Courant de sortie minimal", diff --git a/webapp/src/types/AcChargerConfig.ts b/webapp/src/types/AcChargerConfig.ts index 48834ec9a..eedb5c05e 100644 --- a/webapp/src/types/AcChargerConfig.ts +++ b/webapp/src/types/AcChargerConfig.ts @@ -1,6 +1,7 @@ export interface AcChargerConfig { enabled: boolean; verbose_logging: boolean; + chargerType: string; io_providername: string; can_controller_frequency: number; pollinterval: number; diff --git a/webapp/src/views/AcChargerAdminView.vue b/webapp/src/views/AcChargerAdminView.vue index 084b980fa..057a106f2 100644 --- a/webapp/src/views/AcChargerAdminView.vue +++ b/webapp/src/views/AcChargerAdminView.vue @@ -6,7 +6,11 @@
-
diff --git a/webapp_dist/js/app.js.gz b/webapp_dist/js/app.js.gz index a55b5a96d..30aab8f99 100644 Binary files a/webapp_dist/js/app.js.gz and b/webapp_dist/js/app.js.gz differ