From 0c76a249e37c1b279f2706c0143d47f25064bda6 Mon Sep 17 00:00:00 2001 From: mheyse Date: Sun, 30 Jun 2024 15:24:46 +0200 Subject: [PATCH] feat: add Modbus support --- interface/src/i18n/de/index.ts | 3 +- interface/src/i18n/en/index.ts | 3 +- interface/src/i18n/fr/index.ts | 3 +- interface/src/i18n/it/index.ts | 3 +- interface/src/i18n/nl/index.ts | 3 +- interface/src/i18n/no/index.ts | 3 +- interface/src/i18n/pl/index.ts | 3 +- interface/src/i18n/sk/index.ts | 4 +- interface/src/i18n/sv/index.ts | 3 +- interface/src/i18n/tr/index.ts | 3 +- interface/src/project/ApplicationSettings.tsx | 69 ++ interface/src/project/types.ts | 4 + lib/eModbus/README.md | 26 + lib/eModbus/keywords.txt | 257 +++++++ lib/eModbus/library.json | 46 ++ lib/eModbus/library.properties | 9 + lib/eModbus/license.md | 7 + lib/eModbus/src/CoilData.cpp | 554 ++++++++++++++ lib/eModbus/src/CoilData.h | 122 +++ lib/eModbus/src/Logging.cpp | 68 ++ lib/eModbus/src/Logging.h | 181 +++++ lib/eModbus/src/ModbusBridgeEthernet.h | 21 + lib/eModbus/src/ModbusBridgeRTU.h | 14 + lib/eModbus/src/ModbusBridgeTemp.h | 199 +++++ lib/eModbus/src/ModbusBridgeWiFi.h | 18 + lib/eModbus/src/ModbusClient.cpp | 103 +++ lib/eModbus/src/ModbusClient.h | 119 +++ lib/eModbus/src/ModbusClientRTU.cpp | 349 +++++++++ lib/eModbus/src/ModbusClientRTU.h | 111 +++ lib/eModbus/src/ModbusClientTCP.cpp | 428 +++++++++++ lib/eModbus/src/ModbusClientTCP.h | 195 +++++ lib/eModbus/src/ModbusClientTCPasync.cpp | 401 ++++++++++ lib/eModbus/src/ModbusClientTCPasync.h | 158 ++++ lib/eModbus/src/ModbusError.h | 138 ++++ lib/eModbus/src/ModbusMessage.cpp | 705 ++++++++++++++++++ lib/eModbus/src/ModbusMessage.h | 216 ++++++ lib/eModbus/src/ModbusServer.cpp | 175 +++++ lib/eModbus/src/ModbusServer.h | 86 +++ lib/eModbus/src/ModbusServerEthernet.h | 19 + lib/eModbus/src/ModbusServerRTU.cpp | 260 +++++++ lib/eModbus/src/ModbusServerRTU.h | 92 +++ lib/eModbus/src/ModbusServerTCPasync.cpp | 267 +++++++ lib/eModbus/src/ModbusServerTCPasync.h | 92 +++ lib/eModbus/src/ModbusServerTCPtemp.h | 433 +++++++++++ lib/eModbus/src/ModbusServerWiFi.h | 16 + lib/eModbus/src/ModbusTypeDefs.cpp | 66 ++ lib/eModbus/src/ModbusTypeDefs.h | 139 ++++ lib/eModbus/src/RTUutils.cpp | 467 ++++++++++++ lib/eModbus/src/RTUutils.h | 76 ++ lib/eModbus/src/options.h | 61 ++ scripts/generate-modbus-register-doc.py | 118 +++ scripts/generate-modbus-register-doc.sh | 6 + scripts/update_modbus_registers.py | 256 +++++++ scripts/update_modbus_registers.sh | 55 ++ src/default_settings.h | 16 + src/emsdevice.cpp | 178 +++++ src/emsdevice.h | 3 + src/emsesp.cpp | 10 +- src/emsesp.h | 2 + src/helpers.cpp | 9 + src/helpers.h | 1 + src/locale_common.h | 1 + src/modbus.cpp | 509 +++++++++++++ src/modbus.h | 112 +++ src/modbus_entity_parameters.hpp | 515 +++++++++++++ src/modbus_test.h | 106 +++ src/system.cpp | 5 + src/system.h | 20 + src/test/test.cpp | 209 ++++++ src/web/WebSettingsService.cpp | 20 + src/web/WebSettingsService.h | 4 + 71 files changed, 8941 insertions(+), 12 deletions(-) create mode 100644 lib/eModbus/README.md create mode 100644 lib/eModbus/keywords.txt create mode 100644 lib/eModbus/library.json create mode 100644 lib/eModbus/library.properties create mode 100644 lib/eModbus/license.md create mode 100644 lib/eModbus/src/CoilData.cpp create mode 100644 lib/eModbus/src/CoilData.h create mode 100644 lib/eModbus/src/Logging.cpp create mode 100644 lib/eModbus/src/Logging.h create mode 100644 lib/eModbus/src/ModbusBridgeEthernet.h create mode 100644 lib/eModbus/src/ModbusBridgeRTU.h create mode 100644 lib/eModbus/src/ModbusBridgeTemp.h create mode 100644 lib/eModbus/src/ModbusBridgeWiFi.h create mode 100644 lib/eModbus/src/ModbusClient.cpp create mode 100644 lib/eModbus/src/ModbusClient.h create mode 100644 lib/eModbus/src/ModbusClientRTU.cpp create mode 100644 lib/eModbus/src/ModbusClientRTU.h create mode 100644 lib/eModbus/src/ModbusClientTCP.cpp create mode 100644 lib/eModbus/src/ModbusClientTCP.h create mode 100644 lib/eModbus/src/ModbusClientTCPasync.cpp create mode 100644 lib/eModbus/src/ModbusClientTCPasync.h create mode 100644 lib/eModbus/src/ModbusError.h create mode 100644 lib/eModbus/src/ModbusMessage.cpp create mode 100644 lib/eModbus/src/ModbusMessage.h create mode 100644 lib/eModbus/src/ModbusServer.cpp create mode 100644 lib/eModbus/src/ModbusServer.h create mode 100644 lib/eModbus/src/ModbusServerEthernet.h create mode 100644 lib/eModbus/src/ModbusServerRTU.cpp create mode 100644 lib/eModbus/src/ModbusServerRTU.h create mode 100644 lib/eModbus/src/ModbusServerTCPasync.cpp create mode 100644 lib/eModbus/src/ModbusServerTCPasync.h create mode 100644 lib/eModbus/src/ModbusServerTCPtemp.h create mode 100644 lib/eModbus/src/ModbusServerWiFi.h create mode 100644 lib/eModbus/src/ModbusTypeDefs.cpp create mode 100644 lib/eModbus/src/ModbusTypeDefs.h create mode 100644 lib/eModbus/src/RTUutils.cpp create mode 100644 lib/eModbus/src/RTUutils.h create mode 100644 lib/eModbus/src/options.h create mode 100644 scripts/generate-modbus-register-doc.py create mode 100644 scripts/generate-modbus-register-doc.sh create mode 100644 scripts/update_modbus_registers.py create mode 100644 scripts/update_modbus_registers.sh create mode 100644 src/modbus.cpp create mode 100644 src/modbus.h create mode 100644 src/modbus_entity_parameters.hpp create mode 100644 src/modbus_test.h diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index 9627a017d..fe9a40b67 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -332,7 +332,8 @@ const de: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Modbus aktivieren' }; export default de; diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index 3846441bf..ce1762eda 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -332,7 +332,8 @@ const en: Translation = { MODULES_UPDATED: 'Modules updated', MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', MODULES_NONE: 'No external modules detected', - RENAME: 'Rename' + RENAME: 'Rename', + ENABLE_MODBUS: 'Enable Modbus' }; export default en; diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts index fb4e0de39..3354f122f 100644 --- a/interface/src/i18n/fr/index.ts +++ b/interface/src/i18n/fr/index.ts @@ -332,7 +332,8 @@ const fr: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Activer Modbus' }; export default fr; diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts index 124e76a04..c7daac020 100644 --- a/interface/src/i18n/it/index.ts +++ b/interface/src/i18n/it/index.ts @@ -332,7 +332,8 @@ const it: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Abilita Modbus' }; export default it; diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 02d2e5ea5..c643913ac 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -332,7 +332,8 @@ const nl: Translation = { MODULES_UPDATED: 'Modules geüpdatet', MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren', MODULES_NONE: 'Geen externe modules gedetecteerd', - RENAME: 'Hernoemen' + RENAME: 'Hernoemen', + ENABLE_MODBUS: 'Activeer Modbus' }; export default nl; diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 2d053ebe7..7d961a727 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -332,7 +332,8 @@ const no: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Aktiver Modbus' }; export default no; diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index b367ebce9..ee4df7ba1 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -332,7 +332,8 @@ const pl: BaseTranslation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Aktywuj Modbus' }; export default pl; diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index cd83f5893..0b75b8b6d 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -332,6 +332,8 @@ const sk: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Povoliť Modbus' }; + export default sk; diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts index 6977ee6c7..22fb3ed59 100644 --- a/interface/src/i18n/sv/index.ts +++ b/interface/src/i18n/sv/index.ts @@ -332,7 +332,8 @@ const sv: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Aktivera Modbus' }; export default sv; diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts index 9b95cf8d8..95ab995c1 100644 --- a/interface/src/i18n/tr/index.ts +++ b/interface/src/i18n/tr/index.ts @@ -332,7 +332,8 @@ const tr: Translation = { MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate MODULES_NONE: 'No external modules detected', // TODO translate - RENAME: 'Rename' // TODO translate + RENAME: 'Rename', // TODO translate + ENABLE_MODBUS: 'Enable Modbus' // TODO translate }; export default tr; diff --git a/interface/src/project/ApplicationSettings.tsx b/interface/src/project/ApplicationSettings.tsx index 7b20ba357..069863994 100644 --- a/interface/src/project/ApplicationSettings.tsx +++ b/interface/src/project/ApplicationSettings.tsx @@ -826,6 +826,75 @@ const ApplicationSettings: FC = () => { )} + + Modbus + + + } + label={LL.ENABLE_MODBUS()} + /> + {data.modbus_enabled && ( + + + + + + + + + ms + }} + fullWidth + variant="outlined" + value={numberValue(data.modbus_timeout)} + type="number" + onChange={updateFormValue} + margin="normal" + disabled={saving} + /> + + + )} {restartNeeded && (