From ba55d67cbc27fcd17d55b11a2e5b4dbfcf464807 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 13:54:03 +0200 Subject: [PATCH 01/14] changed: BUILDS.md changed: CHANGELOG.md changed: tasmota/language/de_DE.h changed: tasmota/language/en_GB.h open/todo: update all other localization files changed: tasmota/my_user_config.h changed: tasmota/support_features.ino changed: tasmota/tasmota_configurations.h changed: tasmota/tasmota_configurations_ESP32.h changed: tasmota/tasmota_template.h changed: tasmota/tasmota_template_legacy.h changed: tasmota/xdrv_03_energy.ino new file: tasmota/xnrg_21_sdm230.ino added support (POC) for Eastron SDM230 ModBus (based on existing drivers SDM120 and SDM630) - suggestion for future versions: use the same pin names for all SDM(72|120|220|230|630) drivers, e.g.: GPIO_SDMxxx_TX and GPIO_SDMxxx_RX and integrate all drivers into one (xnrg_xx_SDM-ModBus.ino) --- BUILDS.md | 235 ++++++++++++++++++++++ CHANGELOG.md | 3 + tasmota/language/de_DE.h | 5 +- tasmota/language/en_GB.h | 5 +- tasmota/my_user_config.h | 3 + tasmota/support_features.ino | 3 + tasmota/tasmota_configurations.h | 6 + tasmota/tasmota_configurations_ESP32.h | 2 +- tasmota/tasmota_template.h | 13 ++ tasmota/tasmota_template_legacy.h | 4 + tasmota/xdrv_03_energy.ino | 4 +- tasmota/xnrg_21_sdm230.ino | 261 +++++++++++++++++++++++++ 12 files changed, 539 insertions(+), 5 deletions(-) create mode 100644 tasmota/xnrg_21_sdm230.ino diff --git a/BUILDS.md b/BUILDS.md index 975e34d24..26f10c1b7 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -4,6 +4,7 @@ ESP8266 / ESP32 l = lite, t = tasmota, k = knx, s = sensors, i = ir, d = display +<<<<<<< HEAD Note: `minimal` variant is not listed as it shouldn't be used outside of the [upgrading](https://tasmota.github.io/docs/Upgrading/) process. | Feature or Sensor | l | t | k | s | i | d | Remarks @@ -236,3 +237,237 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up | USE_ETHERNET | | / - | | | | | | USE_I2S_AUDIO | | / - | | | | | | USE_TTGO_WATCH | | / - | | | | | +======= +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +|-----------------------|---|---|-------|---|---|---|---|-------- +| MY_LANGUAGE en_GB | x | x | x / x | x | x | x | x | +| USE_UFILESYS | - | - | - / x | - | - | - | - | +| USE_ARDUINO_OTA | - | - | - / - | - | - | - | - | +| USE_DOMOTICZ | - | - | x / x | x | x | x | - | +| USE_HOME_ASSISTANT | - | - | x / x | x | x | x | - | +| USE_MQTT_TLS | - | - | - / - | - | - | - | - | +| USE_MQTT_TLS_CA_CERT | - | - | - / - | - | - | - | - | +| USE_MQTT_AWS_IOT | - | - | - / - | - | - | - | - | +| USE_4K_RSA | - | - | - / - | - | - | - | - | +| USE_TELEGRAM | - | - | - / - | - | - | - | - | +| USE_KNX | - | - | - / x | x | - | - | - | +| USE_WEBSERVER | x | x | x / x | x | x | x | x | +| USE_JAVASCRIPT_ES6 | - | - | - / - | - | - | - | - | +| USE_WEBSEND_RESPONSE | - | - | - / - | - | - | - | - | +| USE_EMULATION_HUE | - | x | x / x | - | x | - | - | +| USE_EMULATION_WEMO | - | x | x / x | - | x | - | - | +| USE_DISCOVERY | - | - | - / - | - | - | - | - | +| WEBSERVER_ADVERTISE | - | - | x / - | x | - | - | x | +| MQTT_HOST_DISCOVERY | - | - | - / - | - | - | - | - | +| USE_TIMERS | - | x | x / x | x | x | x | x | +| USE_TIMERS_WEB | - | x | x / x | x | x | x | x | +| USE_SUNRISE | - | x | x / x | x | x | x | x | +| USE_RULES | - | x | x / x | x | x | x | x | +| USE_SCRIPT | - | - | - / - | - | - | - | - | +| USE_EXPRESSION | - | - | - / - | - | - | - | - | +| SUPPORT_IF_STATEMENT | - | - | - / - | - | - | - | - | +| USE_HOTPLUG | - | - | - / - | - | - | - | - | +| USE_PROMETHEUS | - | - | - / - | - | - | - | - | +| USE_PING | - | - | - / - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| ROTARY_V1 | - | - | x / x | - | x | - | - | +| USE_SONOFF_RF | - | - | x / - | x | x | - | - | +| USE_RF_FLASH | - | - | x / - | x | x | - | - | +| USE_SONOFF_SC | - | - | x / - | x | x | - | - | +| USE_TUYA_MCU | - | x | x / - | x | x | - | x | +| USE_ARMTRONIX_DIMMERS | - | - | x / - | x | - | - | - | +| USE_PS_16_DZ | - | - | x / - | x | - | - | - | +| USE_SONOFF_IFAN | - | - | x / - | x | - | - | - | +| USE_BUZZER | - | - | x / x | x | x | - | - | +| USE_ARILUX_RF | - | - | x / - | x | - | - | - | +| USE_SHUTTER | - | - | x / x | x | - | - | - | +| USE_DEEPSLEEP | - | - | x / x | - | x | - | - | +| USE_EXS_DIMMER | - | - | x / - | x | - | - | - | +| USE_DEVICE_GROUPS | - | - | x / x | - | - | - | - | +| USE_PWM_DIMMER | - | - | x / - | x | - | - | - | +| USE_KEELOQ | - | - | - / - | - | - | - | - | +| USE_SONOFF_D1 | - | - | x / - | x | - | - | - | +| USE_SHELLY_DIMMER | - | - | x / - | - | - | - | - | +| USE_AC_ZERO_CROSS_DIMMER | - | - | x / x | x | x | x | x | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| USE_LIGHT | - | x | x / x | x | x | x | x | +| USE_WS2812 | - | - | x / x | x | x | - | x | +| USE_WS2812_DMA | - | - | - / - | - | - | - | - | +| USE_MY92X1 | - | - | x / - | x | x | - | x | +| USE_SM16716 | - | - | x / - | x | x | - | x | +| USE_SM2135 | - | - | x / - | x | x | - | x | +| USE_SONOFF_L1 | - | - | x / - | x | x | - | x | +| USE_ELECTRIQ_MOODL | - | - | x / - | x | x | - | x | +| | | | | | | | | +| USE_ENERGY_SENSOR | - | x | x / x | x | x | - | - | +| USE_ENERGY_DUMMY | - | x | x / x | x | x | - | - | +| USE_PZEM004T | - | - | x / x | x | x | - | - | +| USE_PZEM_AC | - | - | x / x | x | x | - | - | +| USE_PZEM_DC | - | - | x / x | x | x | - | - | +| USE_MCP39F501 | - | x | x / - | x | x | - | - | +| USE_SDM72 | - | - | - / x | - | x | - | - | +| USE_SDM120 | - | - | - / x | - | x | - | - | +| USE_SDM630 | - | - | - / x | - | x | - | - | +| USE_DDS2382 | - | - | - / x | - | x | - | - | +| USE_DDSU666 | - | - | - / x | - | x | - | - | +| USE_SOLAX_X1 | - | - | - / - | - | - | - | - | +| USE_LE01MR | - | - | - / - | - | - | - | - | +| USE_BL09XX | - | x | x / x | x | x | - | - | +| USE_TELEINFO | - | - | - / - | - | - | - | - | +| USE_IEM3000 | - | - | - / - | - | - | - | - | +| USE_WE517 | - | - | - / - | - | - | - | - | +| | | | | | | | | +| USE_ADC_VCC | x | x | - / - | - | - | x | - | +| USE_COUNTER | - | - | x / x | x | x | - | x | +| USE_DS18x20 | - | - | x / x | x | x | - | x | +| USE_DHT | - | - | x / x | x | x | - | x | +| USE_MAX31855 | - | - | - / x | - | x | - | - | +| USE_MAX31865 | - | - | - / - | - | - | - | - | +| USE_THERMOSTAT | - | - | - / - | - | - | - | - | +| USE_LMT01 | - | - | - / x | - | x | - | - | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| USE_I2C | - | - | x / x | x | x | - | x | +| USE_SHT | - | - | - / x | - | x | - | - | +| USE_HTU | - | - | - / x | - | x | - | - | +| USE_BMP | - | - | - / x | - | x | - | - | +| USE_BME680 | - | - | - / x | - | x | - | - | +| USE_BH1750 | - | - | - / x | - | x | - | - | +| USE_VEML6070 | - | - | - / x | - | x | - | - | +| USE_ADS1115 | - | - | - / x | - | x | - | - | +| USE_INA219 | - | - | - / x | - | x | - | - | +| USE_INA226 | - | - | - / - | - | - | - | - | +| USE_SHT3X | - | - | - / x | - | x | - | - | +| USE_TSL2561 | - | - | - / - | - | - | - | - | +| USE_TSL2591 | - | - | - / - | - | - | - | - | +| USE_MGS | - | - | - / x | - | x | - | - | +| USE_SGP30 | - | - | - / x | - | x | - | - | +| USE_SI1145 | - | - | - / - | - | - | - | - | +| USE_LM75AD | - | - | - / x | - | x | - | - | +| USE_APDS9960 | - | - | - / - | - | - | - | - | +| USE_MCP230xx | - | - | - / - | - | - | - | - | +| USE_PCA9685 | - | - | - / - | - | - | - | - | +| USE_MPR121 | - | - | - / - | - | - | - | - | +| USE_CCS811 | - | - | - / - | - | x | - | - | +| USE_CCS811_V2 | - | - | - / x | - | - | - | - | +| USE_MPU6050 | - | - | - / - | - | - | - | - | +| USE_DS3231 | - | - | - / - | - | - | - | - | +| USE_MGC3130 | - | - | - / - | - | - | - | - | +| USE_MAX44009 | - | - | - / - | - | - | - | - | +| USE_SCD30 | - | - | - / x | - | x | - | - | +| USE_SCD40 | - | - | - / x | - | - | - | - | +| USE_SPS30 | - | - | - / - | - | - | - | - | +| USE_ADE7953 | - | - | x / x | x | x | - | x | +| USE_VL53L0X | - | - | - / x | - | x | - | - | +| USE_MLX90614 | - | - | - / - | - | - | - | - | +| USE_CHIRP | - | - | - / - | - | - | - | - | +| USE_PAJ7620 | - | - | - / - | - | - | - | - | +| USE_PCF8574 | - | - | - / - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| USE_HIH6 | - | - | - / x | - | x | - | - | +| USE_DHT12 | - | - | - / x | - | x | - | - | +| USE_DS1624 | - | - | - / x | - | x | - | - | +| USE_AHT1x | - | - | - / - | - | - | - | - | +| USE_HDC1080 | - | - | - / - | - | - | - | - | +| USE_WEMOS_MOTOR_V1 | - | - | - / x | - | x | - | - | +| USE_IAQ | - | - | - / x | - | x | - | - | +| USE_AS3935 | - | - | - / x | - | x | - | - | +| USE_VEML6075 | - | - | - / - | - | - | - | - | +| USE_VEML7700 | - | - | - / - | - | - | - | - | +| USE_MCP9808 | - | - | - / - | - | - | - | - | +| USE_HP303B | - | - | - / - | - | - | - | - | +| USE_EZOCO2 | - | - | - / - | - | - | - | - | +| USE_EZODO | - | - | - / - | - | - | - | - | +| USE_EZOEC | - | - | - / - | - | - | - | - | +| USE_EZOFLO | - | - | - / - | - | - | - | - | +| USE_EZOHUM | - | - | - / - | - | - | - | - | +| USE_EZOO2 | - | - | - / - | - | - | - | - | +| USE_EZOORP | - | - | - / - | - | - | - | - | +| USE_EZOPH | - | - | - / - | - | - | - | - | +| USE_EZOPMP | - | - | - / - | - | - | - | - | +| USE_EZOPRS | - | - | - / - | - | - | - | - | +| USE_EZORGB | - | - | - / - | - | - | - | - | +| USE_EZORTD | - | - | - / - | - | - | - | - | +| USE_SEESAW_SOIL | - | - | - / - | - | - | - | - | +| USE_TOF10120 | - | - | - / - | - | - | - | - | +| USE_AM2320 | - | - | - / - | - | - | - | - | +| USE_T67XX | - | - | - / - | - | - | - | - | +| USE_HM330X | - | - | - / - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| USE_SPI | - | - | - / - | - | - | - | x | +| USE_RC522 | - | - | - / - | - | - | - | - | +| USE_MHZ19 | - | - | - / x | - | x | - | - | +| USE_SENSEAIR | - | - | - / x | - | x | - | - | +| USE_PMS5003 | - | - | - / x | - | x | - | - | +| USE_NOVA_SDS | - | - | - / x | - | x | - | - | +| USE_HPMA | - | - | - / x | - | x | - | - | +| USE_SERIAL_BRIDGE | - | - | x / x | x | x | - | x | +| USE_MP3_PLAYER | - | - | - / x | - | x | - | - | +| USE_AZ7798 | - | - | - / - | - | - | - | - | +| USE_PN532_HSU | - | - | - / x | - | x | - | - | +| USE_RDM6300 | - | - | - / x | - | x | - | - | +| USE_IBEACON | - | - | - / x | - | x | - | - | +| USE_GPS | - | - | - / - | - | - | - | - | +| USE_HM10 | - | - | - / - | - | x | - | - | +| USE_HRXL | - | - | - / x | - | x | - | - | +| USE_TASMOTA_CLIENT | - | - | - / - | - | - | - | - | +| USE_OPENTHERM | - | - | - / - | - | - | - | - | +| USE_MIEL_HVAC | - | - | - / - | - | - | - | - | +| USE_PROJECTOR_CTRL | - | - | - / - | - | - | - | - | +| USE_AS608 | - | - | - / - | - | - | - | - | +| USE_TCP_BRIDGE | - | - | - / - | - | - | - | - | zbbridge +| | | | | | | | | +| USE_NRF24 | - | - | - / - | - | - | - | - | +| USE_MIBLE | - | - | - / - | - | - | - | - | +| USE_ZIGBEE | - | - | - / - | - | - | - | - | +| USE_ZIGBEE_ZNP | - | - | - / - | - | - | - | - | +| USE_ZIGBEE_EZSP | - | - | - / - | - | - | - | - | Sonoff ZbBridge +| | | | | | | | | +| USE_IR_REMOTE | - | - | x / - | x | x | x | x | +| USE_IR_RECEIVE | - | - | x / - | x | x | x | x | +| USE_IR_REMOTE_FULL | - | - | - / - | - | - | x | - | Enable ALL protocols +| | | | | | | | | +| USE_SR04 | - | - | - / - | - | x | - | - | +| USE_DYP | - | - | - / - | - | - | - | - | +| USE_TM1638 | - | - | - / x | - | x | - | - | +| USE_HX711 | - | - | - / x | - | x | - | - | +| USE_TX2x_WIND_SENSOR | - | - | - / - | - | - | - | - | +| USE_WINDMETER | - | - | - / - | - | - | - | - | +| USE_RC_SWITCH | - | - | - / x | - | x | - | - | +| USE_RF_SENSOR | - | - | - / x | - | x | - | - | AlectoV2 only +| USE_HRE | - | - | - / x | - | x | - | - | +| USE_A4988_STEPPER | - | - | - / - | - | - | - | - | +| USE_NEOPOOL | - | - | - / - | - | - | - | - | +| | | | | | | | | +| Feature or Sensor | m | l | t | k | s | i | d | Remarks +| USE_DISPLAY | - | - | - / - | - | - | - | x | +| USE_DISPLAY_LCD | - | - | - / - | - | - | - | x | +| USE_DISPLAY_SSD1306 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_MATRIX | - | - | - / - | - | - | - | x | +| USE_DISPLAY_SH1106 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_ILI9341 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_EPAPER_29 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_EPAPER_42 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_ILI9488 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_SSD1351 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_RA8876 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_ST7789 | - | - | - / - | - | - | - | x | +| USE_DISPLAY_TM1637 | - | - | - / - | - | - | - | x | +| | | | | | | | | +| USE_FT5206 | - | - | - / - | - | - | - | - | +| USE_FTC532 | - | - | - / - | - | - | - | - | +| USE_BS814A2 | - | - | - / - | - | - | - | - | +| | | | | | | | | +| ESP32 Feature | m | l | t | k | s | i | d | Remarks +| USE_HALLEFFECT | | | / x | | | | | +| USE_MI_ESP32 | | | / x | | | | | See SetOption115 +| USE_IBEACON_ESP32 | | | / - | | | | | +| USE_WEBCAM | | | / - | | | | | +| USE_ETHERNET | | | / - | | | | | +| USE_I2S_AUDIO | | | / - | | | | | +| USE_TTGO_WATCH | | | / - | | | | | +>>>>>>> changed: BUILDS.md diff --git a/CHANGELOG.md b/CHANGELOG.md index e118a4994..f58774b26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development +- added support (POC) for Eastron SDM230 ModBus (based on existing drivers SDM120 and SDM630) - suggestion for future versions: +use the same pin names for all SDM(72|120|220|230|630) drivers, e.g.: GPIO_SDMxxx_TX and GPIO_SDMxxx_RX and integrate +all drivers into one (xnrg_xx_SDM-ModBus.ino) ## [2022.01.2] ### Added diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 5dc9f72dd..dd5ddd31d 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Außerhalb Bereich" #define D_SENSOR_DETECTED "erkannt" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Exportiere Leistung" #define D_IMPORT_POWER "Importiere Leistung" #define D_PHASE_ANGLE "Phasenwinkel" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Grad" #define D_TOTAL_ACTIVE "Total Wirk" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Wirk (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Spannung" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 39d0457cb..20c2b8107 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 7e4afb25d..371089801 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -781,6 +781,9 @@ // #define SDM72_IMPEXP // Show additonal import/export active energy and power in MQTT and Web (+0k5 code) //#define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) #define SDM120_SPEED 2400 // SDM120-Modbus RS485 serial speed (default: 2400 baud) +//#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) + #define SDM230_SPEED 2400 // SDM230-Modbus RS485 serial speed (default: 9600 baud) +// #define SDM230_IMPORT // Show import active energy in MQTT and Web (+0k3 code) //#define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define SDM630_SPEED 9600 // SDM630-Modbus RS485 serial speed (default: 9600 baud) // #define SDM630_IMPORT // Show import active energy in MQTT and Web (+0k3 code) diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino index 5b5eaf671..70f1f073a 100644 --- a/tasmota/support_features.ino +++ b/tasmota/support_features.ino @@ -320,6 +320,9 @@ void ResponseAppendFeatures(void) #endif #ifdef USE_TM1638 feature3 |= 0x80000000; // xsns_28_tm1638.ino +#endif +#if defined(USE_ENERGY_SENSOR) && defined(USE_SDM230) + feature3 |= 0x100000000; // xnrg_21_sdm230.ino #endif } diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h index 18bbd4d18..ba373b4f1 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -199,6 +199,7 @@ #define USE_MCP39F501 // Add support for MCP39F501 Energy monitor as used in Shelly 2 (+3k1 code) #define USE_SDM72 // Add support for Eastron SDM72-Modbus energy monitor (+0k3 code) #define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) +#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) #define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define USE_DDS2382 // Add support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #define USE_DDSU666 // Add support for Chint DDSU666 Modbus energy monitor (+0k6 code) @@ -303,6 +304,7 @@ #undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2 #undef USE_SDM72 // Disable support for Eastron SDM72-Modbus energy meter #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter + #undef USE_SDM230 // Disable support for Eastron SDM230-Modbus energy monitor (+?? code) #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy monitor (+0k6 code) #undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code) @@ -411,6 +413,7 @@ #undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2 #undef USE_SDM72 // Disable support for Eastron SDM72-Modbus energy meter #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter + #undef USE_SDM230 // Disable support for Eastron SDM230-Modbus energy monitor (+?? code) #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy monitor (+0k6 code) #undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code) @@ -586,6 +589,7 @@ #undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2 #undef USE_SDM72 // Disable support for Eastron SDM72-Modbus energy meter #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter +#undef USE_SDM230 // Disable support for Eastron SDM230-Modbus energy monitor (+?? code) #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy monitor (+0k6 code) #undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code) @@ -727,6 +731,7 @@ //#undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2 #undef USE_SDM72 // Disable support for Eastron SDM72-Modbus energy meter #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter +#undef USE_SDM230 // Disable support for Eastron SDM230-Modbus energy monitor (+?? code) #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy monitor (+0k6 code) #undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code) @@ -870,6 +875,7 @@ #undef USE_MCP39F501 // Disable MCP39F501 Energy monitor as used in Shelly 2 #undef USE_SDM72 // Disable support for Eastron SDM72-Modbus energy meter #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter +#undef USE_SDM230 // Disable support for Eastron SDM230-Modbus energy monitor (+?? code) #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy monitor (+0k6 code) #undef USE_DDS2382 // Disable support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #undef USE_DDSU666 // Disable support for Chint DDSU666 Modbus energy monitor (+0k6 code) diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index 7062dd38a..b9296e2a4 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -1,4 +1,3 @@ -/* tasmota_configurations_ESP32.h - ESP32 only Configurations for Tasmota Copyright (C) 2021 Theo Arends @@ -517,6 +516,7 @@ #define USE_MCP39F501 // Add support for MCP39F501 Energy monitor as used in Shelly 2 (+3k1 code) #define USE_SDM72 // Add support for Eastron SDM72-Modbus energy monitor (+0k3 code) #define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) +#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) #define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define USE_DDS2382 // Add support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #define USE_DDSU666 // Add support for Chint DDSU666 Modbus energy monitor (+0k6 code) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 749cc8bb2..1b1325156 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -179,6 +179,7 @@ enum UserSelectablePins { GPIO_SHIFT595_SRCLK, GPIO_SHIFT595_RCLK, GPIO_SHIFT595_OE, GPIO_SHIFT595_SER, // 74x595 Shift register GPIO_SOLAXX1_RTS, // Solax Inverter Serial interface GPIO_OPTION_E, // Emulated module + GPIO_SDM230_TX, GPIO_SDM230_RX, // SDM230 Serial interface GPIO_SENSOR_END }; enum ProgramSelectablePins { @@ -393,11 +394,19 @@ const char kSensorNames[] PROGMEM = D_SENSOR_BL0939_RX "|" D_SENSOR_BL0942_RX "|" D_SENSOR_HM330X_SET "|" +<<<<<<< HEAD D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|" +<<<<<<< HEAD D_GPIO_SHIFT595_SRCLK "|" D_GPIO_SHIFT595_RCLK "|" D_GPIO_SHIFT595_OE "|" D_GPIO_SHIFT595_SER "|" D_SENSOR_SOLAXX1_RTS "|" D_SENSOR_OPTION " E|" ; +======= +======= + D_SENSOR_SDM230_TX "|" D_SENSOR_SDM230_RX +>>>>>>> changed: BUILDS.md + ; +>>>>>>> changed: BUILDS.md const char kSensorNamesFixed[] PROGMEM = D_SENSOR_USER; @@ -760,6 +769,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_SDM72_RX), // SDM72 Serial interface #endif AGPIO(GPIO_ZEROCROSS), +#ifdef USE_SDM230 + AGPIO(GPIO_SDM230_TX), // SDM230 Serial interface + AGPIO(GPIO_SDM230_RX), // SDM230 Serial interface +#endif #endif // USE_ENERGY_SENSOR /*-------------------------------------------------------------------------------------------*\ diff --git a/tasmota/tasmota_template_legacy.h b/tasmota/tasmota_template_legacy.h index 4583a9783..6a3115187 100644 --- a/tasmota/tasmota_template_legacy.h +++ b/tasmota/tasmota_template_legacy.h @@ -242,6 +242,8 @@ enum LegacyUserSelectablePins { GPI8_IEM3000_RX, // IEM3000 Serial interface GPI8_ZIGBEE_RST, // Zigbee reset GPI8_DYP_RX, + GPI8_SDM230_TX, // SDM230 Serial interface + GPI8_SDM230_RX, // SDM230 Serial interface GPI8_SENSOR_END }; // Programmer selectable GPIO functionality @@ -471,6 +473,8 @@ const uint16_t kGpioConvert[] PROGMEM = { AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface AGPIO(GPIO_IEM3000_RX), // IEM3000 Serial interface AGPIO(GPIO_ZIGBEE_RST), // Zigbee reset + AGPIO(GPIO_SDM230_TX), // SDM230 Serial interface + AGPIO(GPIO_SDM230_RX), // SDM230 Serial interface AGPIO(GPIO_DYP_RX) }; diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 161681e14..bcd6da9d7 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -1108,7 +1108,7 @@ void EnergyShow(bool json) { EnergyFormatSum(value2_chr, Energy.daily, Settings->flag2.energy_resolution, json)); /* - #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) + #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) || defined(SDM230_IMPORT) if (!isnan(Energy.import_active[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"), EnergyFormat(value_chr, Energy.import_active, Settings->flag2.energy_resolution, json)); @@ -1117,7 +1117,7 @@ void EnergyShow(bool json) { EnergyFormatIndex(value_chr, energy_return, Settings->flag2.energy_resolution, json, 2)); } } -#endif // SDM630_IMPORT || SDM72_IMPEXP +#endif // SDM630_IMPORT || SDM72_IMPEXP || SDM230_IMPORT */ if (!isnan(Energy.export_active[0])) { diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino new file mode 100644 index 000000000..fbb8af742 --- /dev/null +++ b/tasmota/xnrg_21_sdm230.ino @@ -0,0 +1,261 @@ +/* + xnrg_08_sdm230.ino - Eastron SDM230-Modbus energy meter support for Tasmota + + Copyright (C) 2021 Gennaro Tortone and Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_ENERGY_SENSOR +#ifdef USE_SDM230 +/*********************************************************************************************\ + * Eastron SDM230 Modbus energy meter + * + * Based on: https://github.com/reaper7/SDM_Energy_Meter and https://github.com/nmakel/sdm_modbus +\*********************************************************************************************/ + +#define XNRG_21 21 + +// can be user defined in my_user_config.h +#ifndef SDM230_SPEED + #define SDM230_SPEED 2400 // default SDM230 Modbus address +#endif +// can be user defined in my_user_config.h +#ifndef SDM230_ADDR + #define SDM230_ADDR 1 // default SDM120 Modbus address +#endif + +#include +TasmotaModbus *Sdm230Modbus; + +const uint16_t sdm230_start_addresses[] { + 0x0000, // SDM230_VOLTAGE [V] + 0x0006, // SDM230_CURRENT [A] + 0x000C, // SDM230_POWER (Active) [W] + 0x0012, // SDM230_POWER (Apparent) G [VA] + 0x0018, // SDM230_POWER (Reactive) [VAr] + 0x001E, // SDM230_POWER_FACTOR + 0x0046, // SDM230_FREQUENCY [Hz] + 0X004A, // SDM230_EXPORT_ACTIVE [kWh] + 0X0180, // SDM230_RESETTABLE_TOTAL_ENERGY_ACTIVE [kWh] + 0X0056, // SDM230_MAXIMUM_TOTAL_DEMAND_POWER_ACTIVE [W] + 0x0024, // SDM230_PHASE ANGLE [Degree] +#ifdef SDM230_IMPORT + 0X0048, // SDM230_IMPORT_ACTIVE [kWh] +#endif // SDM230_IMPORT + 0X0156, // SDM230_TOTAL_ENERGY_ACTIVE [kWh] + +// 0X0158, // SDM230_TOTAL_ENERGY_REACTIVE [kVArh] +// 0X0182, // SDM230_RESETTABLE_TOTAL_ENERGY_REACTIVE [kVArh] +// 0X004C, // SDM230_IMPORT_REACTIVE [kVArh] +// 0X004E, // SDM230_EXPORT_REACTIVE [kVArh] +// 0X0054, // SDM230_TOTAL_DEMAND_POWER_ACTIVE [W] +// 0X0058, // SDM230_IMPORT_DEMAND_POWER_ACTIVE [W] +// 0X005A, // SDM230_MAXIMUM_IMPORT_DEMAND_POWER_ACTIVE [W] +// 0X005C, // SDM230_EXPORT_DEMAND_POWER_ACTIVE [W] +// 0X005E, // SDM230_MAXIMUM_EXPORT_DEMAND_POWER_ACTIVE [W] +// 0X0102, // SDM230_TOTAL_DEMAND_CURRENT [A] +// 0X0108, // SDM230_MAXIMUM_TOTAL_DEMAND_CURRENT [A] +}; + +struct SDM230 { + float resettable_total_energy = 0; + float maximum_total_demand_power = 0; + float phase_angle = 0; + uint8_t read_state = 0; + uint8_t send_retry = 0; +} Sdm230; + +/*********************************************************************************************/ + +void SDM230Every250ms(void) +{ + bool data_ready = Sdm230Modbus->ReceiveReady(); + + if (data_ready) { + uint8_t buffer[14]; // At least 5 + (2 * 2) = 9 + + uint32_t error = Sdm230Modbus->ReceiveBuffer(buffer, 2); + AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, Sdm230Modbus->ReceiveCount()); + + if (error) { + AddLog(LOG_LEVEL_DEBUG, PSTR("SDM: SDM230 error %d"), error); + } else { + Energy.data_valid[0] = 0; + + // 0 1 2 3 4 5 6 7 8 + // SA FC BC Fh Fl Sh Sl Cl Ch + // 01 04 04 43 66 33 34 1B 38 = 230.2 Volt + float value; + ((uint8_t*)&value)[3] = buffer[3]; // Get float values + ((uint8_t*)&value)[2] = buffer[4]; + ((uint8_t*)&value)[1] = buffer[5]; + ((uint8_t*)&value)[0] = buffer[6]; + + switch(Sdm230.read_state) { + case 0: + Energy.voltage[0] = value; // 230.2 V + break; + + case 1: + Energy.current[0] = value; // 1.260 A + break; + + case 2: + Energy.active_power[0] = value; // -196.3 W + break; + + case 3: + Energy.apparent_power[0] = value; // 223.4 VA + break; + + case 4: + Energy.reactive_power[0] = value; // 92.2 + break; + + case 5: + Energy.power_factor[0] = value; // -0.91 + break; + + case 6: + Energy.frequency[0] = value; // 50.0 Hz + break; + + case 7: + Energy.export_active[0] = value; // 478.492 kWh + break; + + case 8: + Sdm230.resettable_total_energy = value; + break; + + case 9: + Sdm230.maximum_total_demand_power = value; + break; + + case 10: + Sdm230.phase_angle = value; // 0.00 Deg + break; + + case 11: + Energy.import_active[0] = value; // 6.216 kWh + break; + + case 12: + EnergyUpdateTotal(); + //Energy.export_active[0] = value; // 484.708 kWh = import_active + export_active + break; + } + + Sdm230.read_state++; + if (sizeof(sdm230_start_addresses)/2 == Sdm230.read_state) { + Sdm230.read_state = 0; + } + } + } // end data ready + + if (0 == Sdm230.send_retry || data_ready) { + Sdm230.send_retry = 5; + Sdm230Modbus->Send(SDM230_ADDR, 0x04, sdm230_start_addresses[Sdm230.read_state], 2); + } else { + Sdm230.send_retry--; + } +} + +void Sdm230SnsInit(void) +{ + Sdm230Modbus = new TasmotaModbus(Pin(GPIO_SDM230_RX), Pin(GPIO_SDM230_TX)); + uint8_t result = Sdm230Modbus->Begin(SDM230_SPEED); + if (result) { + if (2 == result) { ClaimSerial(); } + } else { + TasmotaGlobal.energy_driver = ENERGY_NONE; + } +} + +void Sdm230DrvInit(void) +{ + if (PinUsed(GPIO_SDM230_RX) && PinUsed(GPIO_SDM230_TX)) { + TasmotaGlobal.energy_driver = XNRG_21; + } +} + +void Sdm230Reset(void) +{ + Sdm230.resettable_total_energy = 0; + Sdm230.maximum_total_demand_power = 0; + Sdm230.phase_angle = 0; +} + +#ifdef USE_WEBSERVER +const char HTTP_ENERGY_SDM230[] PROGMEM = + "{s}" D_RESETTABLE_TOTAL_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}" + "{s}" D_MAX_POWER "{m}%s " D_UNIT_WATT "{e}" + "{s}" D_PHASE_ANGLE "{m}%s " D_UNIT_ANGLE "{e}"; +#endif // USE_WEBSERVER + +void Sdm230Show(bool json) +{ + char resettable_energy_chr[FLOATSZ]; + dtostrfd(Sdm230.resettable_total_energy, Settings->flag2.energy_resolution, resettable_energy_chr); + char maximum_demand_chr[FLOATSZ]; + dtostrfd(Sdm230.maximum_total_demand_power, Settings->flag2.wattage_resolution, maximum_demand_chr); + char phase_angle_chr[FLOATSZ]; + dtostrfd(Sdm230.phase_angle, 2, phase_angle_chr); + + if (json) { + ResponseAppend_P(PSTR(",\"" D_JSON_RESETTABLE_TOTAL_ACTIVE "\":%s,\"" D_JSON_POWERMAX "\":%s,\"" D_JSON_PHASE_ANGLE "\":%s"), + resettable_energy_chr, maximum_demand_chr, phase_angle_chr); +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_ENERGY_SDM230, resettable_energy_chr, maximum_demand_chr, phase_angle_chr); +#endif // USE_WEBSERVER + } +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xnrg21(uint8_t function) +{ + bool result = false; + + switch (function) { + case FUNC_EVERY_250_MSECOND: + SDM230Every250ms(); + break; + case FUNC_JSON_APPEND: + Sdm230Show(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + Sdm230Show(0); + break; +#endif // USE_WEBSERVER + case FUNC_ENERGY_RESET: + Sdm230Reset(); + break; + case FUNC_INIT: + Sdm230SnsInit(); + break; + case FUNC_PRE_INIT: + Sdm230DrvInit(); + break; + } + return result; +} + +#endif // USE_SDM230 +#endif // USE_ENERGY_SENSOR From 8bc06238f3055e8b4fb48aa33b98cb45758fba46 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 14:38:04 +0200 Subject: [PATCH 02/14] changed: tasmota/i18n.h missed this change. Now tasmota-sensors compiles with success! --- tasmota/i18n.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 0af945eb0..8355ea39f 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -132,6 +132,7 @@ #define D_JSON_PH "pH" #define D_JSON_PHASE_ANGLE "PhaseAngle" #define D_JSON_POWERFACTOR "Factor" +#define D_JSON_POWERMAX "MaxPower" #define D_JSON_POWERUSAGE "Power" #define D_JSON_ACTIVE_POWERUSAGE "ActivePower" #define D_JSON_APPARENT_POWERUSAGE "ApparentPower" @@ -220,6 +221,7 @@ #define D_JSON_IMPORT "Import" #define D_JSON_EXPORT "Export" #define D_JSON_TOTAL_ACTIVE "TotalActive" +#define D_JSON_RESETTABLE_TOTAL_ACTIVE "ResetTotalActive" #define D_JSON_SIGNALSTRENGTH "SignalStrength" #define D_JSON_CHIPTEMPERATURE "ChipTemperature" From 3d1df968a4b49c620496465e473e2a6901da8e6a Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 14:46:26 +0200 Subject: [PATCH 03/14] revert changes to: tasmota/support_features.ino --- tasmota/support_features.ino | 3 --- 1 file changed, 3 deletions(-) diff --git a/tasmota/support_features.ino b/tasmota/support_features.ino index 70f1f073a..5b5eaf671 100644 --- a/tasmota/support_features.ino +++ b/tasmota/support_features.ino @@ -320,9 +320,6 @@ void ResponseAppendFeatures(void) #endif #ifdef USE_TM1638 feature3 |= 0x80000000; // xsns_28_tm1638.ino -#endif -#if defined(USE_ENERGY_SENSOR) && defined(USE_SDM230) - feature3 |= 0x100000000; // xnrg_21_sdm230.ino #endif } From 66ac4977c02255a5cb3a6413a98608929191482d Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 15:16:35 +0200 Subject: [PATCH 04/14] fixed some type: tasmota/tasmota_configurations_ESP32.h moved AGPIO(GPIO_SDM230_XX) to the end: tasmota/tasmota_template_legacy.h --- tasmota/tasmota_configurations_ESP32.h | 1 + tasmota/tasmota_template_legacy.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index b9296e2a4..bc6620370 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -1,3 +1,4 @@ +/* tasmota_configurations_ESP32.h - ESP32 only Configurations for Tasmota Copyright (C) 2021 Theo Arends diff --git a/tasmota/tasmota_template_legacy.h b/tasmota/tasmota_template_legacy.h index 6a3115187..063872508 100644 --- a/tasmota/tasmota_template_legacy.h +++ b/tasmota/tasmota_template_legacy.h @@ -473,9 +473,9 @@ const uint16_t kGpioConvert[] PROGMEM = { AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface AGPIO(GPIO_IEM3000_RX), // IEM3000 Serial interface AGPIO(GPIO_ZIGBEE_RST), // Zigbee reset + AGPIO(GPIO_DYP_RX), AGPIO(GPIO_SDM230_TX), // SDM230 Serial interface - AGPIO(GPIO_SDM230_RX), // SDM230 Serial interface - AGPIO(GPIO_DYP_RX) + AGPIO(GPIO_SDM230_RX) // SDM230 Serial interface }; /********************************************************************************************/ From 2a5214bd082a4785bb49838d67558c24751d8454 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 15:43:31 +0200 Subject: [PATCH 05/14] changed all language file for SDM230 driver --- tasmota/language/af_AF.h | 5 ++++- tasmota/language/bg_BG.h | 5 ++++- tasmota/language/cs_CZ.h | 5 ++++- tasmota/language/el_GR.h | 5 ++++- tasmota/language/es_ES.h | 5 ++++- tasmota/language/fr_FR.h | 6 +++++- tasmota/language/fy_NL.h | 5 ++++- tasmota/language/he_HE.h | 5 ++++- tasmota/language/hu_HU.h | 5 ++++- tasmota/language/it_IT.h | 5 ++++- tasmota/language/ko_KO.h | 5 ++++- tasmota/language/nl_NL.h | 5 ++++- tasmota/language/pl_PL.h | 5 ++++- tasmota/language/pt_BR.h | 5 ++++- tasmota/language/pt_PT.h | 5 ++++- tasmota/language/ro_RO.h | 5 ++++- tasmota/language/ru_RU.h | 5 ++++- tasmota/language/sk_SK.h | 5 ++++- tasmota/language/sv_SE.h | 5 ++++- tasmota/language/tr_TR.h | 5 ++++- tasmota/language/uk_UA.h | 5 ++++- tasmota/language/vi_VN.h | 5 ++++- tasmota/language/zh_CN.h | 5 ++++- tasmota/language/zh_TW.h | 5 ++++- 24 files changed, 97 insertions(+), 24 deletions(-) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index ed8d9ea65..7e1220f7f 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Uitvoer krag" #define D_IMPORT_POWER "Invoer krag" #define D_PHASE_ANGLE "Fasehoek" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Totaal aktief" +#define D_RESETTABLE_TOTAL_ACTIVE "Totaal aktief (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Spanning" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 03f77368b..376b8db07 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Изходна мощност" #define D_IMPORT_POWER "Входна мощност" #define D_PHASE_ANGLE "Фазов ъгъл" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "°" #define D_TOTAL_ACTIVE "Общо активна мощност" +#define D_RESETTABLE_TOTAL_ACTIVE "Общо активна мощност (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "Напрежение на PV1" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index e438114bf..1ef2fe374 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index d71dda45e..4c19ca029 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index ba6b95087..240bbc588 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Fuera de Rango" #define D_SENSOR_DETECTED "detectado" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Pot. Exportada" #define D_IMPORT_POWER "Pot. Importada" #define D_PHASE_ANGLE "Ángulo de Fase" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArH" #define D_UNIT_ANGLE "Grados" #define D_TOTAL_ACTIVE "P. Total Activa" +#define D_RESETTABLE_TOTAL_ACTIVE "P. Total Activa (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltaje" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 63ffb24d9..fa158ef23 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 RX" #define D_SENSOR_SDM120_TX "SDMx20 TX" #define D_SENSOR_SDM120_RX "SDMx20 RX" +#define D_SENSOR_SDM230_TX "SDM230 TX" +#define D_SENSOR_SDM230_RX "SDM230 RX" #define D_SENSOR_SDM630_TX "SDM630 TX" #define D_SENSOR_SDM630_RX "SDM630 RX" #define D_SENSOR_WE517_TX "WE517 TX" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Hors limites" #define D_SENSOR_DETECTED "détecté" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Puissance fournie" #define D_IMPORT_POWER "Puissance consommée" #define D_PHASE_ANGLE "Angle de phase" @@ -911,6 +913,8 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "°" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" + //SOLAXX1 #define D_PV1_VOLTAGE "Tension PV1" #define D_PV1_CURRENT "Courant PV1" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 7c4391321..21a74f934 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Eksportearje krêft" #define D_IMPORT_POWER "Ymportearje krêft" #define D_PHASE_ANGLE "Faze hoeke" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Hielendal wier" +#define D_RESETTABLE_TOTAL_ACTIVE "Hielendal wier (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 foltaazje" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 9ac30c95b..e824acbc6 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index da6a153f0..aed1a2501 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Fázisszög" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "fok" #define D_TOTAL_ACTIVE "Összes aktív" +#define D_RESETTABLE_TOTAL_ACTIVE "Összes aktív (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 feszültség" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index e018887f4..476b8e7b6 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 - RX" #define D_SENSOR_SDM120_TX "SDMx20 - TX" #define D_SENSOR_SDM120_RX "SDMx20 - RX" +#define D_SENSOR_SDM230_TX "SDM230 - TX" +#define D_SENSOR_SDM230_RX "SDM230 - RX" #define D_SENSOR_SDM630_TX "SDM630 - TX" #define D_SENSOR_SDM630_RX "SDM630 - RX" #define D_SENSOR_WE517_TX "WE517 - TX" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Fuori intervallo" #define D_SENSOR_DETECTED "rilevato" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Potenza esportata" #define D_IMPORT_POWER "Potenza importata" #define D_PHASE_ANGLE "Angolo fase" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "°" #define D_TOTAL_ACTIVE "Potenza attiva totale" +#define D_RESETTABLE_TOTAL_ACTIVE "Potenza attiva totale (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 - Voltaggio" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 7fffd5f2a..ad580f71b 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 37c59d587..39011d352 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Buiten beriek" #define D_SENSOR_DETECTED "herkend" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export vermogen" #define D_IMPORT_POWER "Import vermogen" #define D_PHASE_ANGLE "Fase hoek" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Totaal werkelijk" +#define D_RESETTABLE_TOTAL_ACTIVE "Totaal werkelijk (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 spanning" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index b95e509a8..c5b1bcacf 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Poza zakresem" #define D_SENSOR_DETECTED "wykryto" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Moc Eksportowana" #define D_IMPORT_POWER "Moc Inportowana" #define D_PHASE_ANGLE "Przesunięcie faz" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Stopni" #define D_TOTAL_ACTIVE "Całkowita czynna" +#define D_RESETTABLE_TOTAL_ACTIVE "Całkowita czynna (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "Napięcie PV1" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index fcd3259f5..2e7791647 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Fora de Alcance" #define D_SENSOR_DETECTED "detectou" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Exportar energia" #define D_IMPORT_POWER "Importar energia" #define D_PHASE_ANGLE "Ângulo de Fase" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Ativo" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Activo (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltagem" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 8e09503e9..eec578950 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Fora de Alcance" #define D_SENSOR_DETECTED "detectou" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Ângulo de fase" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "Voltagem PV1" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 8b737ffbb..3904106aa 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Unghi de fază" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Activ" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Activ (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltaj" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index c38aa4359..e5a20d29a 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Угол фазы" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "кВАрЧ" #define D_UNIT_ANGLE "Град" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 5e3c8b7d5..bbcc04877 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index ee3547d13..a8294d2a7 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Fasvinkel" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total aktiv" +#define D_RESETTABLE_TOTAL_ACTIVE "Total aktiv (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index d37d2755a..34f8730c8 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Phase Angle" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index dcc9f168b..6f1ff7728 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Кут фази" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "кВАр/г" #define D_UNIT_ANGLE "Град" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Напруга" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 2bf694082..ac8b43d06 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "Góc pha" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "Điện áp PV1" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index ba3c38301..e4a0d40c8 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "相位角" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "千乏时" #define D_UNIT_ANGLE "度" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 0fd2067a1..f89b9b670 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -663,6 +663,8 @@ #define D_SENSOR_SDM72_RX "SDM72 Rx" #define D_SENSOR_SDM120_TX "SDMx20 Tx" #define D_SENSOR_SDM120_RX "SDMx20 Rx" +#define D_SENSOR_SDM230_TX "SDM230 Tx" +#define D_SENSOR_SDM230_RX "SDM230 Rx" #define D_SENSOR_SDM630_TX "SDM630 Tx" #define D_SENSOR_SDM630_RX "SDM630 Rx" #define D_SENSOR_WE517_TX "WE517 Tx" @@ -899,7 +901,7 @@ #define D_OUT_OF_RANGE "Out of Range" #define D_SENSOR_DETECTED "detected" -//SDM220, SDM120, SDM72, LE01MR +//SDM220, SDM120, SDM72, LE01MR, SDM230 #define D_EXPORT_POWER "Export Power" #define D_IMPORT_POWER "Import Power" #define D_PHASE_ANGLE "相量(Phase Angle)" @@ -911,6 +913,7 @@ #define D_UNIT_KWARH "kVArh" #define D_UNIT_ANGLE "Deg" #define D_TOTAL_ACTIVE "Total Active" +#define D_RESETTABLE_TOTAL_ACTIVE "Total Active (RST)" //SOLAXX1 #define D_PV1_VOLTAGE "PV1 Voltage" From 5834ca6e077881308a551b6ea9b39455deeabac2 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 23 Oct 2021 21:04:39 +0200 Subject: [PATCH 06/14] revert changes according to arendst: "It's legacy and will not work with any addition." --- tasmota/tasmota_template_legacy.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tasmota/tasmota_template_legacy.h b/tasmota/tasmota_template_legacy.h index 063872508..4583a9783 100644 --- a/tasmota/tasmota_template_legacy.h +++ b/tasmota/tasmota_template_legacy.h @@ -242,8 +242,6 @@ enum LegacyUserSelectablePins { GPI8_IEM3000_RX, // IEM3000 Serial interface GPI8_ZIGBEE_RST, // Zigbee reset GPI8_DYP_RX, - GPI8_SDM230_TX, // SDM230 Serial interface - GPI8_SDM230_RX, // SDM230 Serial interface GPI8_SENSOR_END }; // Programmer selectable GPIO functionality @@ -473,9 +471,7 @@ const uint16_t kGpioConvert[] PROGMEM = { AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface AGPIO(GPIO_IEM3000_RX), // IEM3000 Serial interface AGPIO(GPIO_ZIGBEE_RST), // Zigbee reset - AGPIO(GPIO_DYP_RX), - AGPIO(GPIO_SDM230_TX), // SDM230 Serial interface - AGPIO(GPIO_SDM230_RX) // SDM230 Serial interface + AGPIO(GPIO_DYP_RX) }; /********************************************************************************************/ From 3d139d2f2d6a2c1165b2dacb157a3aea7e2aea50 Mon Sep 17 00:00:00 2001 From: Marcus Date: Mon, 1 Nov 2021 23:03:57 +0100 Subject: [PATCH 07/14] - changed default baudrate for SDM230 to 9.600 baud - fixed comment for SDM230_SPEED define in xnrg_21_sdm230.ino --- tasmota/my_user_config.h | 2 +- tasmota/xnrg_21_sdm230.ino | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 371089801..6253ea78d 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -782,7 +782,7 @@ //#define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) #define SDM120_SPEED 2400 // SDM120-Modbus RS485 serial speed (default: 2400 baud) //#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) - #define SDM230_SPEED 2400 // SDM230-Modbus RS485 serial speed (default: 9600 baud) + #define SDM230_SPEED 9600 // SDM230-Modbus RS485 serial speed (default: 9600 baud) // #define SDM230_IMPORT // Show import active energy in MQTT and Web (+0k3 code) //#define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define SDM630_SPEED 9600 // SDM630-Modbus RS485 serial speed (default: 9600 baud) diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino index fbb8af742..15bc90c53 100644 --- a/tasmota/xnrg_21_sdm230.ino +++ b/tasmota/xnrg_21_sdm230.ino @@ -29,7 +29,7 @@ // can be user defined in my_user_config.h #ifndef SDM230_SPEED - #define SDM230_SPEED 2400 // default SDM230 Modbus address + #define SDM230_SPEED 9600 // default SDM230 Modbus baudrate #endif // can be user defined in my_user_config.h #ifndef SDM230_ADDR From 17155798c017a7ff5ebb6ac41fc7a41ce0669caf Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 2 Nov 2021 18:17:07 +0100 Subject: [PATCH 08/14] added links for manuals / documentation --- tasmota/xnrg_21_sdm230.ino | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino index 15bc90c53..d523190e5 100644 --- a/tasmota/xnrg_21_sdm230.ino +++ b/tasmota/xnrg_21_sdm230.ino @@ -22,7 +22,13 @@ /*********************************************************************************************\ * Eastron SDM230 Modbus energy meter * - * Based on: https://github.com/reaper7/SDM_Energy_Meter and https://github.com/nmakel/sdm_modbus + * Based on: existing tasmota drivers for SDM120 and SDM630, + * https://github.com/reaper7/SDM_Energy_Meter and https://github.com/nmakel/sdm_modbus + + * manuals can be found here: + * German: https://bg-etech.de/download/manual/SDM230-Modbus.pdf + * English: https://www.eastroneurope.com/images/uploads/products/manuals/SDM230_Sereis_Manual.pdf + * Protocol Spec: https://www.eastroneurope.com/images/uploads/products/protocol/Correct_SDM230_Protocol.pdf \*********************************************************************************************/ #define XNRG_21 21 From f58c06daeef76c77046b07f6cb150814416208fe Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 3 Nov 2021 18:51:59 +0100 Subject: [PATCH 09/14] fixes --- tasmota/tasmota_template.h | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 1b1325156..737788a13 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -394,19 +394,12 @@ const char kSensorNames[] PROGMEM = D_SENSOR_BL0939_RX "|" D_SENSOR_BL0942_RX "|" D_SENSOR_HM330X_SET "|" -<<<<<<< HEAD D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|" -<<<<<<< HEAD D_GPIO_SHIFT595_SRCLK "|" D_GPIO_SHIFT595_RCLK "|" D_GPIO_SHIFT595_OE "|" D_GPIO_SHIFT595_SER "|" D_SENSOR_SOLAXX1_RTS "|" D_SENSOR_OPTION " E|" -; -======= -======= D_SENSOR_SDM230_TX "|" D_SENSOR_SDM230_RX ->>>>>>> changed: BUILDS.md - ; ->>>>>>> changed: BUILDS.md +; const char kSensorNamesFixed[] PROGMEM = D_SENSOR_USER; From 84da3deea921c260f463cb7dca4a48037208d186 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 3 Nov 2021 22:33:59 +0100 Subject: [PATCH 10/14] restructered code synced sdm230 driver default registers to generic energy driver values made maximum power, phase angle and resettable energy optional --- tasmota/my_user_config.h | 4 +- tasmota/xdrv_03_energy.ino | 4 +- tasmota/xnrg_21_sdm230.ino | 75 ++++++++++++++++++++++---------------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 6253ea78d..88e95d94b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -781,9 +781,9 @@ // #define SDM72_IMPEXP // Show additonal import/export active energy and power in MQTT and Web (+0k5 code) //#define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) #define SDM120_SPEED 2400 // SDM120-Modbus RS485 serial speed (default: 2400 baud) -//#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) +//#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+1k6 code) #define SDM230_SPEED 9600 // SDM230-Modbus RS485 serial speed (default: 9600 baud) -// #define SDM230_IMPORT // Show import active energy in MQTT and Web (+0k3 code) +// #define SDM230_MORE_REGS // read more registers (see xnrg_21_sdm230.ino, may cause timing issues (at your own risk, +0k4 code)) //#define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define SDM630_SPEED 9600 // SDM630-Modbus RS485 serial speed (default: 9600 baud) // #define SDM630_IMPORT // Show import active energy in MQTT and Web (+0k3 code) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index bcd6da9d7..eacca1506 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -1108,7 +1108,7 @@ void EnergyShow(bool json) { EnergyFormatSum(value2_chr, Energy.daily, Settings->flag2.energy_resolution, json)); /* - #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) || defined(SDM230_IMPORT) + #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) if (!isnan(Energy.import_active[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"), EnergyFormat(value_chr, Energy.import_active, Settings->flag2.energy_resolution, json)); @@ -1117,7 +1117,7 @@ void EnergyShow(bool json) { EnergyFormatIndex(value_chr, energy_return, Settings->flag2.energy_resolution, json, 2)); } } -#endif // SDM630_IMPORT || SDM72_IMPEXP || SDM230_IMPORT +#endif // SDM630_IMPORT || SDM72_IMPEXP */ if (!isnan(Energy.export_active[0])) { diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino index d523190e5..b73d90341 100644 --- a/tasmota/xnrg_21_sdm230.ino +++ b/tasmota/xnrg_21_sdm230.ino @@ -45,6 +45,7 @@ #include TasmotaModbus *Sdm230Modbus; +// read all default registers for generic energy driver const uint16_t sdm230_start_addresses[] { 0x0000, // SDM230_VOLTAGE [V] 0x0006, // SDM230_CURRENT [A] @@ -53,15 +54,18 @@ const uint16_t sdm230_start_addresses[] { 0x0018, // SDM230_POWER (Reactive) [VAr] 0x001E, // SDM230_POWER_FACTOR 0x0046, // SDM230_FREQUENCY [Hz] - 0X004A, // SDM230_EXPORT_ACTIVE [kWh] - 0X0180, // SDM230_RESETTABLE_TOTAL_ENERGY_ACTIVE [kWh] - 0X0056, // SDM230_MAXIMUM_TOTAL_DEMAND_POWER_ACTIVE [W] - 0x0024, // SDM230_PHASE ANGLE [Degree] -#ifdef SDM230_IMPORT 0X0048, // SDM230_IMPORT_ACTIVE [kWh] -#endif // SDM230_IMPORT - 0X0156, // SDM230_TOTAL_ENERGY_ACTIVE [kWh] + 0X004A, // SDM230_EXPORT_ACTIVE [kWh] +// 0X0156, // SDM230_TOTAL_ENERGY_ACTIVE [kWh] // = SDM230_IMPORT_ACTIVE = Energy.total +// read more registers offered by SDM230 (may cause timing issues) +#ifdef SDM230_MORE_REGS + 0x0024, // SDM230_PHASE ANGLE [Degree] + 0X0056, // SDM230_MAXIMUM_TOTAL_DEMAND_POWER_ACTIVE [W] + 0X0180, // SDM230_RESETTABLE_TOTAL_ENERGY_ACTIVE [kWh] +#endif // SDM230_MORE_REGS + +// for documentation / further use or implementation // 0X0158, // SDM230_TOTAL_ENERGY_REACTIVE [kVArh] // 0X0182, // SDM230_RESETTABLE_TOTAL_ENERGY_REACTIVE [kVArh] // 0X004C, // SDM230_IMPORT_REACTIVE [kVArh] @@ -76,9 +80,11 @@ const uint16_t sdm230_start_addresses[] { }; struct SDM230 { - float resettable_total_energy = 0; - float maximum_total_demand_power = 0; +#ifdef SDM230_MORE_REGS float phase_angle = 0; + float maximum_total_demand_power_active = 0; + float resettable_total_energy = 0; +#endif // SDM230_MORE_REGS uint8_t read_state = 0; uint8_t send_retry = 0; } Sdm230; @@ -139,35 +145,34 @@ void SDM230Every250ms(void) break; case 7: - Energy.export_active[0] = value; // 478.492 kWh + Energy.import_active[0] = value; // 6.216 kWh => used in EnergyUpdateTotal() break; case 8: - Sdm230.resettable_total_energy = value; + Energy.export_active[0] = value; // 478.492 kWh break; + #ifdef SDM230_MORE_REGS case 9: - Sdm230.maximum_total_demand_power = value; - break; - - case 10: Sdm230.phase_angle = value; // 0.00 Deg break; - case 11: - Energy.import_active[0] = value; // 6.216 kWh + case 10: + Sdm230.maximum_total_demand_power_active = value; break; - case 12: - EnergyUpdateTotal(); - //Energy.export_active[0] = value; // 484.708 kWh = import_active + export_active + case 11: + Sdm230.resettable_total_energy = value; break; + #endif // SDM230_MORE_REGS } Sdm230.read_state++; if (sizeof(sdm230_start_addresses)/2 == Sdm230.read_state) { Sdm230.read_state = 0; + EnergyUpdateTotal(); // update every cycle after all registers have been read } + } } // end data ready @@ -199,36 +204,42 @@ void Sdm230DrvInit(void) void Sdm230Reset(void) { - Sdm230.resettable_total_energy = 0; - Sdm230.maximum_total_demand_power = 0; + #ifdef SDM230_MORE_REGS Sdm230.phase_angle = 0; + Sdm230.maximum_total_demand_power_active = 0; + Sdm230.resettable_total_energy = 0; + #endif // SDM230_MORE_REGS } +#ifdef SDM230_MORE_REGS #ifdef USE_WEBSERVER const char HTTP_ENERGY_SDM230[] PROGMEM = - "{s}" D_RESETTABLE_TOTAL_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}" + "{s}" D_PHASE_ANGLE "{m}%s " D_UNIT_ANGLE "{e}" "{s}" D_MAX_POWER "{m}%s " D_UNIT_WATT "{e}" - "{s}" D_PHASE_ANGLE "{m}%s " D_UNIT_ANGLE "{e}"; + "{s}" D_RESETTABLE_TOTAL_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}"; #endif // USE_WEBSERVER +#endif // SDM230_MORE_REGS +#ifdef SDM230_MORE_REGS void Sdm230Show(bool json) { - char resettable_energy_chr[FLOATSZ]; - dtostrfd(Sdm230.resettable_total_energy, Settings->flag2.energy_resolution, resettable_energy_chr); - char maximum_demand_chr[FLOATSZ]; - dtostrfd(Sdm230.maximum_total_demand_power, Settings->flag2.wattage_resolution, maximum_demand_chr); char phase_angle_chr[FLOATSZ]; dtostrfd(Sdm230.phase_angle, 2, phase_angle_chr); + char maximum_demand_chr[FLOATSZ]; + dtostrfd(Sdm230.maximum_total_demand_power_active, Settings->flag2.wattage_resolution, maximum_demand_chr); + char resettable_energy_chr[FLOATSZ]; + dtostrfd(Sdm230.resettable_total_energy, Settings->flag2.energy_resolution, resettable_energy_chr); if (json) { - ResponseAppend_P(PSTR(",\"" D_JSON_RESETTABLE_TOTAL_ACTIVE "\":%s,\"" D_JSON_POWERMAX "\":%s,\"" D_JSON_PHASE_ANGLE "\":%s"), - resettable_energy_chr, maximum_demand_chr, phase_angle_chr); + ResponseAppend_P(PSTR(",\"" D_JSON_PHASE_ANGLE "\":%s,\"" D_JSON_POWERMAX "\":%s,\"" D_JSON_RESETTABLE_TOTAL_ACTIVE "\":%s"), + phase_angle_chr, maximum_demand_chr, resettable_energy_chr); #ifdef USE_WEBSERVER } else { - WSContentSend_PD(HTTP_ENERGY_SDM230, resettable_energy_chr, maximum_demand_chr, phase_angle_chr); + WSContentSend_PD(HTTP_ENERGY_SDM230, phase_angle_chr, maximum_demand_chr, resettable_energy_chr); #endif // USE_WEBSERVER } } +#endif // SDM230_MORE_REGS /*********************************************************************************************\ * Interface @@ -242,6 +253,7 @@ bool Xnrg21(uint8_t function) case FUNC_EVERY_250_MSECOND: SDM230Every250ms(); break; +#ifdef SDM230_MORE_REGS case FUNC_JSON_APPEND: Sdm230Show(1); break; @@ -250,6 +262,7 @@ bool Xnrg21(uint8_t function) Sdm230Show(0); break; #endif // USE_WEBSERVER +#endif // SDM230_MORE_REGS case FUNC_ENERGY_RESET: Sdm230Reset(); break; From 4e913e6a7f88d8e12c147e7730c8ab4f04c09612 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 6 Nov 2021 14:02:54 +0100 Subject: [PATCH 11/14] fixed phase count and frequency common setting --- tasmota/xnrg_21_sdm230.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasmota/xnrg_21_sdm230.ino b/tasmota/xnrg_21_sdm230.ino index b73d90341..9cdbdea81 100644 --- a/tasmota/xnrg_21_sdm230.ino +++ b/tasmota/xnrg_21_sdm230.ino @@ -190,6 +190,8 @@ void Sdm230SnsInit(void) uint8_t result = Sdm230Modbus->Begin(SDM230_SPEED); if (result) { if (2 == result) { ClaimSerial(); } + Energy.phase_count = 1; + Energy.frequency_common = true; // Use common frequency } else { TasmotaGlobal.energy_driver = ENERGY_NONE; } From 31d60b5525e8b780a2bb6329cc03443797bc2736 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 15 Jan 2022 14:20:31 +0100 Subject: [PATCH 12/14] rebase / fixes --- tasmota/xdrv_03_energy.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index eacca1506..161681e14 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -1108,7 +1108,7 @@ void EnergyShow(bool json) { EnergyFormatSum(value2_chr, Energy.daily, Settings->flag2.energy_resolution, json)); /* - #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) + #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) if (!isnan(Energy.import_active[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"), EnergyFormat(value_chr, Energy.import_active, Settings->flag2.energy_resolution, json)); @@ -1117,7 +1117,7 @@ void EnergyShow(bool json) { EnergyFormatIndex(value_chr, energy_return, Settings->flag2.energy_resolution, json, 2)); } } -#endif // SDM630_IMPORT || SDM72_IMPEXP +#endif // SDM630_IMPORT || SDM72_IMPEXP */ if (!isnan(Energy.export_active[0])) { From 0e97d430a230f8e40048ac30a72712663a6bf914 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 15 Jan 2022 14:25:05 +0100 Subject: [PATCH 13/14] beautified changelog / disabled (uncommented) SDM230 define in tasmota_configurations --- CHANGELOG.md | 4 +--- tasmota/tasmota_configurations.h | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f58774b26..4e6a9df59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - Development -- added support (POC) for Eastron SDM230 ModBus (based on existing drivers SDM120 and SDM630) - suggestion for future versions: -use the same pin names for all SDM(72|120|220|230|630) drivers, e.g.: GPIO_SDMxxx_TX and GPIO_SDMxxx_RX and integrate -all drivers into one (xnrg_xx_SDM-ModBus.ino) +- added support for Eastron SDM230 ModBus ## [2022.01.2] ### Added diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h index ba373b4f1..6cbf24a84 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -199,7 +199,7 @@ #define USE_MCP39F501 // Add support for MCP39F501 Energy monitor as used in Shelly 2 (+3k1 code) #define USE_SDM72 // Add support for Eastron SDM72-Modbus energy monitor (+0k3 code) #define USE_SDM120 // Add support for Eastron SDM120-Modbus energy monitor (+1k1 code) -#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) +//#define USE_SDM230 // Add support for Eastron SDM230-Modbus energy monitor (+?? code) #define USE_SDM630 // Add support for Eastron SDM630-Modbus energy monitor (+0k6 code) #define USE_DDS2382 // Add support for Hiking DDS2382 Modbus energy monitor (+0k6 code) #define USE_DDSU666 // Add support for Chint DDSU666 Modbus energy monitor (+0k6 code) From 2d5017d652fb502aab1e64dfb8f461d1403e5c90 Mon Sep 17 00:00:00 2001 From: Marcus Date: Sat, 15 Jan 2022 14:33:38 +0100 Subject: [PATCH 14/14] reverted changes, same as original-dev --- BUILDS.md | 235 ------------------------------------------------------ 1 file changed, 235 deletions(-) diff --git a/BUILDS.md b/BUILDS.md index 26f10c1b7..975e34d24 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -4,7 +4,6 @@ ESP8266 / ESP32 l = lite, t = tasmota, k = knx, s = sensors, i = ir, d = display -<<<<<<< HEAD Note: `minimal` variant is not listed as it shouldn't be used outside of the [upgrading](https://tasmota.github.io/docs/Upgrading/) process. | Feature or Sensor | l | t | k | s | i | d | Remarks @@ -237,237 +236,3 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up | USE_ETHERNET | | / - | | | | | | USE_I2S_AUDIO | | / - | | | | | | USE_TTGO_WATCH | | / - | | | | | -======= -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -|-----------------------|---|---|-------|---|---|---|---|-------- -| MY_LANGUAGE en_GB | x | x | x / x | x | x | x | x | -| USE_UFILESYS | - | - | - / x | - | - | - | - | -| USE_ARDUINO_OTA | - | - | - / - | - | - | - | - | -| USE_DOMOTICZ | - | - | x / x | x | x | x | - | -| USE_HOME_ASSISTANT | - | - | x / x | x | x | x | - | -| USE_MQTT_TLS | - | - | - / - | - | - | - | - | -| USE_MQTT_TLS_CA_CERT | - | - | - / - | - | - | - | - | -| USE_MQTT_AWS_IOT | - | - | - / - | - | - | - | - | -| USE_4K_RSA | - | - | - / - | - | - | - | - | -| USE_TELEGRAM | - | - | - / - | - | - | - | - | -| USE_KNX | - | - | - / x | x | - | - | - | -| USE_WEBSERVER | x | x | x / x | x | x | x | x | -| USE_JAVASCRIPT_ES6 | - | - | - / - | - | - | - | - | -| USE_WEBSEND_RESPONSE | - | - | - / - | - | - | - | - | -| USE_EMULATION_HUE | - | x | x / x | - | x | - | - | -| USE_EMULATION_WEMO | - | x | x / x | - | x | - | - | -| USE_DISCOVERY | - | - | - / - | - | - | - | - | -| WEBSERVER_ADVERTISE | - | - | x / - | x | - | - | x | -| MQTT_HOST_DISCOVERY | - | - | - / - | - | - | - | - | -| USE_TIMERS | - | x | x / x | x | x | x | x | -| USE_TIMERS_WEB | - | x | x / x | x | x | x | x | -| USE_SUNRISE | - | x | x / x | x | x | x | x | -| USE_RULES | - | x | x / x | x | x | x | x | -| USE_SCRIPT | - | - | - / - | - | - | - | - | -| USE_EXPRESSION | - | - | - / - | - | - | - | - | -| SUPPORT_IF_STATEMENT | - | - | - / - | - | - | - | - | -| USE_HOTPLUG | - | - | - / - | - | - | - | - | -| USE_PROMETHEUS | - | - | - / - | - | - | - | - | -| USE_PING | - | - | - / - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| ROTARY_V1 | - | - | x / x | - | x | - | - | -| USE_SONOFF_RF | - | - | x / - | x | x | - | - | -| USE_RF_FLASH | - | - | x / - | x | x | - | - | -| USE_SONOFF_SC | - | - | x / - | x | x | - | - | -| USE_TUYA_MCU | - | x | x / - | x | x | - | x | -| USE_ARMTRONIX_DIMMERS | - | - | x / - | x | - | - | - | -| USE_PS_16_DZ | - | - | x / - | x | - | - | - | -| USE_SONOFF_IFAN | - | - | x / - | x | - | - | - | -| USE_BUZZER | - | - | x / x | x | x | - | - | -| USE_ARILUX_RF | - | - | x / - | x | - | - | - | -| USE_SHUTTER | - | - | x / x | x | - | - | - | -| USE_DEEPSLEEP | - | - | x / x | - | x | - | - | -| USE_EXS_DIMMER | - | - | x / - | x | - | - | - | -| USE_DEVICE_GROUPS | - | - | x / x | - | - | - | - | -| USE_PWM_DIMMER | - | - | x / - | x | - | - | - | -| USE_KEELOQ | - | - | - / - | - | - | - | - | -| USE_SONOFF_D1 | - | - | x / - | x | - | - | - | -| USE_SHELLY_DIMMER | - | - | x / - | - | - | - | - | -| USE_AC_ZERO_CROSS_DIMMER | - | - | x / x | x | x | x | x | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| USE_LIGHT | - | x | x / x | x | x | x | x | -| USE_WS2812 | - | - | x / x | x | x | - | x | -| USE_WS2812_DMA | - | - | - / - | - | - | - | - | -| USE_MY92X1 | - | - | x / - | x | x | - | x | -| USE_SM16716 | - | - | x / - | x | x | - | x | -| USE_SM2135 | - | - | x / - | x | x | - | x | -| USE_SONOFF_L1 | - | - | x / - | x | x | - | x | -| USE_ELECTRIQ_MOODL | - | - | x / - | x | x | - | x | -| | | | | | | | | -| USE_ENERGY_SENSOR | - | x | x / x | x | x | - | - | -| USE_ENERGY_DUMMY | - | x | x / x | x | x | - | - | -| USE_PZEM004T | - | - | x / x | x | x | - | - | -| USE_PZEM_AC | - | - | x / x | x | x | - | - | -| USE_PZEM_DC | - | - | x / x | x | x | - | - | -| USE_MCP39F501 | - | x | x / - | x | x | - | - | -| USE_SDM72 | - | - | - / x | - | x | - | - | -| USE_SDM120 | - | - | - / x | - | x | - | - | -| USE_SDM630 | - | - | - / x | - | x | - | - | -| USE_DDS2382 | - | - | - / x | - | x | - | - | -| USE_DDSU666 | - | - | - / x | - | x | - | - | -| USE_SOLAX_X1 | - | - | - / - | - | - | - | - | -| USE_LE01MR | - | - | - / - | - | - | - | - | -| USE_BL09XX | - | x | x / x | x | x | - | - | -| USE_TELEINFO | - | - | - / - | - | - | - | - | -| USE_IEM3000 | - | - | - / - | - | - | - | - | -| USE_WE517 | - | - | - / - | - | - | - | - | -| | | | | | | | | -| USE_ADC_VCC | x | x | - / - | - | - | x | - | -| USE_COUNTER | - | - | x / x | x | x | - | x | -| USE_DS18x20 | - | - | x / x | x | x | - | x | -| USE_DHT | - | - | x / x | x | x | - | x | -| USE_MAX31855 | - | - | - / x | - | x | - | - | -| USE_MAX31865 | - | - | - / - | - | - | - | - | -| USE_THERMOSTAT | - | - | - / - | - | - | - | - | -| USE_LMT01 | - | - | - / x | - | x | - | - | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| USE_I2C | - | - | x / x | x | x | - | x | -| USE_SHT | - | - | - / x | - | x | - | - | -| USE_HTU | - | - | - / x | - | x | - | - | -| USE_BMP | - | - | - / x | - | x | - | - | -| USE_BME680 | - | - | - / x | - | x | - | - | -| USE_BH1750 | - | - | - / x | - | x | - | - | -| USE_VEML6070 | - | - | - / x | - | x | - | - | -| USE_ADS1115 | - | - | - / x | - | x | - | - | -| USE_INA219 | - | - | - / x | - | x | - | - | -| USE_INA226 | - | - | - / - | - | - | - | - | -| USE_SHT3X | - | - | - / x | - | x | - | - | -| USE_TSL2561 | - | - | - / - | - | - | - | - | -| USE_TSL2591 | - | - | - / - | - | - | - | - | -| USE_MGS | - | - | - / x | - | x | - | - | -| USE_SGP30 | - | - | - / x | - | x | - | - | -| USE_SI1145 | - | - | - / - | - | - | - | - | -| USE_LM75AD | - | - | - / x | - | x | - | - | -| USE_APDS9960 | - | - | - / - | - | - | - | - | -| USE_MCP230xx | - | - | - / - | - | - | - | - | -| USE_PCA9685 | - | - | - / - | - | - | - | - | -| USE_MPR121 | - | - | - / - | - | - | - | - | -| USE_CCS811 | - | - | - / - | - | x | - | - | -| USE_CCS811_V2 | - | - | - / x | - | - | - | - | -| USE_MPU6050 | - | - | - / - | - | - | - | - | -| USE_DS3231 | - | - | - / - | - | - | - | - | -| USE_MGC3130 | - | - | - / - | - | - | - | - | -| USE_MAX44009 | - | - | - / - | - | - | - | - | -| USE_SCD30 | - | - | - / x | - | x | - | - | -| USE_SCD40 | - | - | - / x | - | - | - | - | -| USE_SPS30 | - | - | - / - | - | - | - | - | -| USE_ADE7953 | - | - | x / x | x | x | - | x | -| USE_VL53L0X | - | - | - / x | - | x | - | - | -| USE_MLX90614 | - | - | - / - | - | - | - | - | -| USE_CHIRP | - | - | - / - | - | - | - | - | -| USE_PAJ7620 | - | - | - / - | - | - | - | - | -| USE_PCF8574 | - | - | - / - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| USE_HIH6 | - | - | - / x | - | x | - | - | -| USE_DHT12 | - | - | - / x | - | x | - | - | -| USE_DS1624 | - | - | - / x | - | x | - | - | -| USE_AHT1x | - | - | - / - | - | - | - | - | -| USE_HDC1080 | - | - | - / - | - | - | - | - | -| USE_WEMOS_MOTOR_V1 | - | - | - / x | - | x | - | - | -| USE_IAQ | - | - | - / x | - | x | - | - | -| USE_AS3935 | - | - | - / x | - | x | - | - | -| USE_VEML6075 | - | - | - / - | - | - | - | - | -| USE_VEML7700 | - | - | - / - | - | - | - | - | -| USE_MCP9808 | - | - | - / - | - | - | - | - | -| USE_HP303B | - | - | - / - | - | - | - | - | -| USE_EZOCO2 | - | - | - / - | - | - | - | - | -| USE_EZODO | - | - | - / - | - | - | - | - | -| USE_EZOEC | - | - | - / - | - | - | - | - | -| USE_EZOFLO | - | - | - / - | - | - | - | - | -| USE_EZOHUM | - | - | - / - | - | - | - | - | -| USE_EZOO2 | - | - | - / - | - | - | - | - | -| USE_EZOORP | - | - | - / - | - | - | - | - | -| USE_EZOPH | - | - | - / - | - | - | - | - | -| USE_EZOPMP | - | - | - / - | - | - | - | - | -| USE_EZOPRS | - | - | - / - | - | - | - | - | -| USE_EZORGB | - | - | - / - | - | - | - | - | -| USE_EZORTD | - | - | - / - | - | - | - | - | -| USE_SEESAW_SOIL | - | - | - / - | - | - | - | - | -| USE_TOF10120 | - | - | - / - | - | - | - | - | -| USE_AM2320 | - | - | - / - | - | - | - | - | -| USE_T67XX | - | - | - / - | - | - | - | - | -| USE_HM330X | - | - | - / - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| USE_SPI | - | - | - / - | - | - | - | x | -| USE_RC522 | - | - | - / - | - | - | - | - | -| USE_MHZ19 | - | - | - / x | - | x | - | - | -| USE_SENSEAIR | - | - | - / x | - | x | - | - | -| USE_PMS5003 | - | - | - / x | - | x | - | - | -| USE_NOVA_SDS | - | - | - / x | - | x | - | - | -| USE_HPMA | - | - | - / x | - | x | - | - | -| USE_SERIAL_BRIDGE | - | - | x / x | x | x | - | x | -| USE_MP3_PLAYER | - | - | - / x | - | x | - | - | -| USE_AZ7798 | - | - | - / - | - | - | - | - | -| USE_PN532_HSU | - | - | - / x | - | x | - | - | -| USE_RDM6300 | - | - | - / x | - | x | - | - | -| USE_IBEACON | - | - | - / x | - | x | - | - | -| USE_GPS | - | - | - / - | - | - | - | - | -| USE_HM10 | - | - | - / - | - | x | - | - | -| USE_HRXL | - | - | - / x | - | x | - | - | -| USE_TASMOTA_CLIENT | - | - | - / - | - | - | - | - | -| USE_OPENTHERM | - | - | - / - | - | - | - | - | -| USE_MIEL_HVAC | - | - | - / - | - | - | - | - | -| USE_PROJECTOR_CTRL | - | - | - / - | - | - | - | - | -| USE_AS608 | - | - | - / - | - | - | - | - | -| USE_TCP_BRIDGE | - | - | - / - | - | - | - | - | zbbridge -| | | | | | | | | -| USE_NRF24 | - | - | - / - | - | - | - | - | -| USE_MIBLE | - | - | - / - | - | - | - | - | -| USE_ZIGBEE | - | - | - / - | - | - | - | - | -| USE_ZIGBEE_ZNP | - | - | - / - | - | - | - | - | -| USE_ZIGBEE_EZSP | - | - | - / - | - | - | - | - | Sonoff ZbBridge -| | | | | | | | | -| USE_IR_REMOTE | - | - | x / - | x | x | x | x | -| USE_IR_RECEIVE | - | - | x / - | x | x | x | x | -| USE_IR_REMOTE_FULL | - | - | - / - | - | - | x | - | Enable ALL protocols -| | | | | | | | | -| USE_SR04 | - | - | - / - | - | x | - | - | -| USE_DYP | - | - | - / - | - | - | - | - | -| USE_TM1638 | - | - | - / x | - | x | - | - | -| USE_HX711 | - | - | - / x | - | x | - | - | -| USE_TX2x_WIND_SENSOR | - | - | - / - | - | - | - | - | -| USE_WINDMETER | - | - | - / - | - | - | - | - | -| USE_RC_SWITCH | - | - | - / x | - | x | - | - | -| USE_RF_SENSOR | - | - | - / x | - | x | - | - | AlectoV2 only -| USE_HRE | - | - | - / x | - | x | - | - | -| USE_A4988_STEPPER | - | - | - / - | - | - | - | - | -| USE_NEOPOOL | - | - | - / - | - | - | - | - | -| | | | | | | | | -| Feature or Sensor | m | l | t | k | s | i | d | Remarks -| USE_DISPLAY | - | - | - / - | - | - | - | x | -| USE_DISPLAY_LCD | - | - | - / - | - | - | - | x | -| USE_DISPLAY_SSD1306 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_MATRIX | - | - | - / - | - | - | - | x | -| USE_DISPLAY_SH1106 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_ILI9341 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_EPAPER_29 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_EPAPER_42 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_ILI9488 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_SSD1351 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_RA8876 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_ST7789 | - | - | - / - | - | - | - | x | -| USE_DISPLAY_TM1637 | - | - | - / - | - | - | - | x | -| | | | | | | | | -| USE_FT5206 | - | - | - / - | - | - | - | - | -| USE_FTC532 | - | - | - / - | - | - | - | - | -| USE_BS814A2 | - | - | - / - | - | - | - | - | -| | | | | | | | | -| ESP32 Feature | m | l | t | k | s | i | d | Remarks -| USE_HALLEFFECT | | | / x | | | | | -| USE_MI_ESP32 | | | / x | | | | | See SetOption115 -| USE_IBEACON_ESP32 | | | / - | | | | | -| USE_WEBCAM | | | / - | | | | | -| USE_ETHERNET | | | / - | | | | | -| USE_I2S_AUDIO | | | / - | | | | | -| USE_TTGO_WATCH | | | / - | | | | | ->>>>>>> changed: BUILDS.md