⚡ Breaking Changes
- BREAKING CHANGE: Logging newline changed from "\r\n" to "\n"
- BREAKING CHANGE: WebAPI endpoint
/api/limit/configrequires different parameters
🚀 Features
- Feature: Add support for HERF 1 channel inverters
- Feature: Inverter radio statistics (rx/tx statistics)
- Feature: Allow reset of radio statistics via mqtt
- Feature: Publish Radio statistics to home assistant
- Feature: Publish YieldTotal, YieldDay and Power of all inverters to Home Assistant
- Feature: Allow reset of radio statistics via WebApp
- Feature: Show RSSI of last received packet in radio stats
- Feature: show task details in system info view
- Feature: Refactor config management interface
- Feature: Allow custom language pack for webapp
- Feature: Added spanish language pack
- Feature: Added italian language pack
- Feature: Implement language pack support for display texts
- Feature: Added spanish display translation
- Feature: Added italian display translation
- Feature: Added device info for HMS-700
- Feature: Validate JSON before uploading
- Feature: show hint if device profile missing or not selected
- Feature: New handling of command queue
- Feature: Set Limit transfer only to "OK" if the queue does not contain any more commands
- Feature: Show inverter status and current power in overview (if multiple inverters are available)
- Feature: Detect if inverter supports 'Power Distribution Logic'
- Feature: Add support for HERF-600 inverters
- Feature: Add prefix 1420 to HMS-4 channel inverters
- Feature: Added polish language pack (thanks to @AdamWitek77)
- Feature: Rewrite virutal console to support new line break and colored highlighting
- Feature: Redirect all ESP log output to the MessageOutput handler
- Feature: Allow setting the log level for the different modules at runtime
- Feature: Add syslog logger
- Feature: Allow setting of power limit on new firmware versions for HMS inverters
🐛 Fixes
- Fix: WebApp was not reloaded after firmware update
- Fix: Wrong topic in home assistant auto discovery for maxalloc and minfree
- Fix: Saving DTU config values just returned "Values are missing"
- Fix: Unable to CMT transmit power in WebApp
- Fix: Restart was triggered before all website data was sent
- Fix cs_ena_posttrans calculation
- Fix: Only count RF RX packets when packets where sent
- Fix: avoid deprecated setAuthentication() to fix memory exhaustion
- Fix: force websocket clients to authenticate
- Fix: Add state_class to several Home Assistant sensors
- Fix: "Equal brightness" in LED settings does not work correctly
- Fix: Correct output of wifi disconnect reason code
- Fix: cpplint errors
- Fix: Take DST into account when recalculating the sunrise sunset time
- Fix: Lint Error
- Fix: skip BOM in JSON files (pin_mapping and config)
- Fix lint errors
- Fix comment
- Fix: Really always execute the generate of the factory.bin file
- Fix: need to skip BOM also when migrating config
- Fix: Remove temperature readings for ESP32-S2 modules
- Fix: Auto reboot was not triggered on pin mapping change
- Fix: Wifi.begin was called with wrong parameters
- Fix: Uptime overflow after ~50 days
- Fix lint errors
- Fix: Hint regarding required device profile is shown for profiles which don't need a device profile
- Fix: Syntax error in defines
- fix: Make sure limit values sre consistent and not above 100%
- Fix: Disable SPI3_HOST with ESP32-S2 for SpiManager
- Fix: web console: prevent concurrent websockets
- Fix: disable temperature readings for ESP32-S3
- Fix lint errors
- Fix: DTU serial change not possible
- fix: bump ESPAsyncWebServer to v3.7.6
- Fix typo
- Fix possible race condition when enabling Admin Mode AP
- Fix: When enabling admin mode, the search for the STA was automatically disabled
- Fix: Prevent unpredicted behavior on overflows of millis()
- Fix: handle MQTT message fragmentation
- Fix: motivate browsers to reload web app resources
- Fix: Allow negative reactive power for inverters..
- Fix: Prevent crash when performing a lot of inverter edits
- Fix vector reservation for logging modules
- Fix: Corrected typo in string
- Fix: typo in logging tag of PinMappingClass
- Fix: Dont allow HA base topic without trailing slash
- Fix: make logging more leightweight using large shared buffer
- fix URL in greek language pack
- Fix: Websockets did not work on latest iOS versions
- Fix: WebSocket endpoints missing setAuthType for digest authentication
- Fix: Replace MessageOutput.printf with ESP_LOGI for upstream compatibility
- Fix: Replace C-style cast with static_cast for cpplint compliance
🌎 Web Application
- webapp: Update dependencies
- webapp: update dependencies
- webapp: Update dependencies
- webapp: Upgrade tsconfig node18 to node22
- webapp: Parse version string event if update search is not allowed
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Fix html error in eventlog
- webapp: add app.js.gz
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Fix data type for all range inputs
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Apply auto format
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Fix eslint issues
- webapp: add app.js.gz
- webapp: pin assignment: hide unsupported pins
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Use global AlertResponse interface
- webapp: Allow upload of language packs
- webapp: Added global reboot wait screen
- webapp: Rename interface to prevent lint errors
- webapp: Fix: WaitRetstartView showed basic auth dialog
- webapp: Update dependencies
- webapp: right-align labels for inputs on non-sm viewports
- webapp: last table row shall have no bottom border
- webapp: remove table's bottom margin
- webapp: add gap between inverter selectors
- webapp: avoid inline style in inverter channel info card
- webapp: equalize style of cards with tables in live view
- webapp: use reasonable name for radio stats accordion
- webapp: align table headers with card headers
- webapp: apply card-table class to info view cards
- webapp: adjust look of tables in accordions to live view cards
- webapp: beautify radio statistics reset button
- webapp: fix inverter "add" and "save order" button positions
- webapp: optimize spacing on bottom of cards
- webapp: MQTT: use v-if in favor of v-show
- webapp: MQTT: no login with cert if TLS disabled
- webapp: avoid inline style for inverter channel info value
- webapp: properly space alert with hint for hostname
- webapp: optimize look of firmware update cards
- webapp: inverter advanced tab needs space at the top
- webapp: optimize look of login page
- webapp: optimize body bottom padding and length
- webapp: consistently use no colon in form labels
- webapp: optimize placement of device profile doc buttons
- webapp: show pin mapping categories as cards
- webapp: device manager: optimize cards for tab nav
- webapp: always scroll up when navigating to another view
- webapp: fix inverter selection button breaking
- webapp: declare emitted event in FormFooter component
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: fix line break for reload button
- webapp: avoid undefined serial for InputSerial
- webapp: Update dependencies
- webapp: improve styling of hints on home view
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: add app.js.gz
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: show precise data age for inverters and introduce and use DataAgeDisplay component
- webapp: Update dependencies
- webapp: beautify controls on web console view
- webapp: remove (more) colons from forms
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: Allow scrolling in horizontal direction in console window
- webapp: optimize syslog settings
- webapp: Extend language packs for syslog messages
- webapp: Update dependencies
- webapp: Add hint text for the core log level
- webapp: Make css for home view only available for home view
- webapp: Add additional filter possibilities to console view
- webapp: German locale: improvements and typo fixes
- webapp: fix broken reference in locales
- webapp: German locale: be informal
- webapp: Update dependencies
- webapp: Make all styles scoped
- webapp: Use object notation for all alerts
- webapp: Auto hide alert if response was success
- webapp: Update dependencies
- webapp: add app.js.gz
- webapp: translate logging modules in admin view
- webapp: fix: return log level for more than 5 modules
- webapp: apply solarized-dark colors to web console
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update node dependency
- webapp: Update dependencies
- webapp: Updated to latest sass version
- webapp: Simplify eventlog display
- webapp: Simplify line class detection in console view
- webapp: Make compiler happy
- webapp: Make compiler happy
- webapp: Doublecheck upload files bounds
- webapp: Use correct method scope
- webapp: Doublecheck for undefined behavior
- webapp: Fix lint error
- webapp: Make compiler happy
- webapp: Update dependencies
- webapp: Comment bootstrap workaround
- webapp: Simplify authentication code
- webapp: Configure additional compression
- webapp: Fix exception on file upload select
- webapp: Minify json configs before upload
- webapp: Remove unused variable
- webapp: add app.js.gz
- webapp: Update dependencies
- webapp: Prevent compile errors on newer tsc
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Update dependencies
- webapp: Change build config to match current vue pre-definitions
- webapp: NTP admin did not receive proper headers
- webapp: add app.js.gz
- webapp: Add response error handling to getTimezoneList()
- webapp: add app.js.gz
📚 Documentation
🛠 Under the hood
- Add serial prefix 1410 to HMS_2CH inverters
- Output WiFi disconnect reason in console
- Upgrade ESPAsyncWebServer from 3.1.2 to 3.2.0
- Upgrade olikraus/U8g2 from 2.35.19 to 2.35.21
- Upgrade arkhipenko/TaskScheduler from git #testing to 3.8.5
- Upgrade ESPAsyncWebServer from 3.2.0 to 3.3.1
- Upgrade olikraus/U8g2 from 2.35.21 to 2.35.27
- issue template: asks for firmware variant
- actions: use setup-node@v4 as v3 causes warning
- actions: switch to node version 20 for linting
- actions: run yarn prettier to check web app formatting
- actions: fix a typo
- changelogs: group webapp-related changes
- Upgrade olikraus/U8g2 from 2.35.27 to 2.35.30
- actions: enable corepack to use fixed version of yarn
- Update bblanchon/ArduinoJson from 7.1.0 to 7.2.0
- Github Action: Update node version from 20 to 22
- Publish ESP heap and temperature details on MQTT
- Merge branch 'pr2293' into dev
- Publish temperature only if its not NAN
- Added icon to radio statistics
- Decrease restart delay to 1 second
- Optimize MQTT subscription handling
- Move inverter housekeeping tasks inside the InverterAbstract class
- MQTT Hass: Change char* to String&
- MQTT Hass: Rename caption parameter to name
- MQTT Hass: Change parameter order for publishInverterSensor
- MQTT Hass: Change parameter order for publishDtuSensor
- MQTT Hass: Make publish methods static
- MQTT Hass: Change parameter order for publishDtuBinarySensor
- MQTT Hass: Change parameter order for publishInverterButton
- MQTT Hass: Change parameter order for publishInverterNumber
- MQTT Hass: Harmonise parameter names
- MQTT Hass: Remove no more required checks
- MQTT Hass: Move publishBinarySensor logic into separate method
- MQTT Hass: Reorder binary sensor methods
- MQTT Hass: Move publishSensor logic into separate method
- MQTT Hass: Move yield into the publish method
- MQTT Hass: Add device_type and category to publishInverterBinarySensor
- MQTT Hass: Reorder defines
- MQTT Hass: Move serialization and allocation check into own method
- MQTT Hass: Append dtu prefix topic for each single sensor
- MQTT Hass: Implement category as enum instead of String
- MQTT Hass: Implement device class as enum instead of String
- MQTT Hass: Implement method to add common metadata to json output
- Remove unnecessary CMT SPI inversions
- Remove unnecessary delays
- Implement W5500 support
- Add SpiManager library
- Optimize CMT FIFO access
- Change cmt_spi3 implementation from C to C++
- Add Arduino SPI translation
- Use SpiManager for nRF, CMT and W5500
- Use shared SPI bus for CMT and W5500
- Only use a single SPI device for CMT
- Embed current branch into building process
- Slight adjustments to github bug_report template
- Upgrade github actions/checkout to v4
- GitHub Build Action: Automatically generate littlefs image
- Simplify network callback handling
- Simplify inverter handling
- Merge branch 'pr2306' into dev
- Apply license headers and automatic code formatting to SpiManager
- Apply automatic code formatting
- Added device profile for OpenDTU Fusion v2 PoE
- increase chunkSizeWarningLimit for webapp build (#1287)
- Rename NetworkEventCb to DtuNetworkEventCb to prevent further upgrade issues
- Add default values for ethernet pins in case they are not defined for a specific board
- Take care of different signature of ETH.begin method in Arduino Core 3.x
- Added required include to work with IDF 5
- Update espressif32 from 6.8.1 to 6.9.0
- issue template: fix typo
- Add connection check for W5500 before full initialization
- Prevent warning on GPIO ISR service registration
- Adjust name of OpenDTU Fusion v2 PoE build environment
- Add device profiles for OpenDTU Fusion v2 PoE with displays
- Merge branch 'pr2311' into dev
- Merge branch 'pr2320' into dev
- Upgrade ESPAsyncWebServer from 3.3.1 to 3.3.7
- Remove icon because device_class is set
- Remove unused DEVICE_CLASS_TEMP
- Merge branch 'pr2322' into dev
- Merge branch 'pr2323' into dev
- Update UpgradePartition.md
- Upgrade ESPAsyncWebServer from 3.3.7 to 3.3.11
- Rename NetworkEventCbList_t to DtuNetworkEventCbList_t for further upgrades
- Replace format strings by platform independent macros
- Remove EMAC related code for devices that don't have one
- Initialize the last rssi value with -127 instead of 0 to indicate a non existing connection of no data was received yet
- Merge branch 'pr2333' into dev
- Upgrade ESPAsyncWebServer from 3.3.11 to 3.3.12
- Don't set TX timeout to 0 anymore for HW/USB CDC
- Merge branch 'pr2340' into dev
- Merge branch 'pr2115' into dev
- Hotfix to not use DMA on SPI3 of ESP32-S2
- Merge branch 'pr2344' into dev
- Upgrade ESPAsyncWebServer from 3.3.12 to 3.3.13
- Upgrade ESPAsyncWebServer from 3.3.13 to 3.3.14
- Upgrade ESPAsyncWebServer from 3.3.14 to 3.3.15
- Upgrade olikraus/U8g2 from 2.35.30 to 2.36.2
- Upgrade ESPAsyncWebServer from 3.3.15 to 3.3.16
- Update nrf24/RF24 from 1.4.9 to 1.4.10
- Upgrade ESPAsyncWebServer from 3.3.16 to 3.3.17
- Rename config API to file API
- Refactor file handling API and add endpoint to delete files
- Add API endpoint to retrieve custom languages and complete language pack
- Move lookup for translation path to separate method
- Check if language pack metadata are valid
- add and use configuration write guard
- Rewrite display language handling to work with locale strings instead of magic numbers.
- Added README.md to lang folder
- Upgrade ESPAsyncWebServer from 3.3.17 to 3.3.21
- Merge branch 'pr2328' into dev
- keep console.log() when serving webapp
- Remove not required include
- Replace multiline print by printf
- Remove not required include
- Merge branch 'pr2360' into dev
- Upgrade ESPAsyncWebServer from 3.3.21 to 3.3.22
- Build factory.bin in every compile attempt
- Make function getClientId const
- Organize includes
- Remove not required string generation
- Use correct variable
- change markdown table to github style
- Update README.md
- add Sum of DC Powrr
- Feature:: Added support for HMS-450 inverters which begin with 1400
- Upgrade ESPAsyncWebServer from 3.3.22 to 3.3.23
- Update bblanchon/ArduinoJson from 7.2.0 to 7.2.1
- Upgrade ESPAsyncWebServer from 3.3.23 to 3.4.0
- Upgrade ESPAsyncWebServer from 3.4.0 to 3.4.1
- Upgrade ESPAsyncWebServer from 3.4.1 to 3.4.2
- Show totals in blue and producing inverters in green
- Disable queue debugging
- Update bblanchon/ArduinoJson from 7.2.1 to 7.3.0
- Remove extra semikolon
- Merge branch 'pr2421' into dev
- Merge branch 'pr2420' into dev
- Upgrade ESPAsyncWebServer from 3.4.2 to 3.6.0
- Update nrf24/RF24 from 1.4.10 to 1.4.11
- Use new name for ESPAsyncWebServer
- Move network reconfiguration to main loop to prevent crashes
- Merge branch 'pr2513'
- Added greek language pack
- Harmonise all language packs
- Upgrade ESP32Async/ESPAsyncWebServer from 3.6.0 to 3.6.2
- Update espressif32 from 6.9.0 to 6.10.0
- Manually applied latest changes in PR #2509
- Implement a more strict issue and pr policy
- Upgrade ESP32Async/ESPAsyncWebServer from 3.6.2 to 3.7.0
- Upgrade olikraus/U8g2 from 2.36.2 to 2.36.4
- Apply automatic code formatting
- Add partition file for 8MB devices
- Change datatype for led pins from int8_t to gpio_num_t
- Change datatype for nrf24 pins from int8_t to gpio_num_t
- Change datatype for cmt pins from int8_t to gpio_num_t
- Change datatype for w5500 pins from int8_t to gpio_num_t
- Change datatype for eth pins from int to gpio_num_t
- Make pinmapping variable const
- Move all display related initialization inside the display class
- Change datatype for display pins from uint8_t to gpio_num_t
- Move SpiManager registration into PinMapping class
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.0 to 3.7.3
- Update bblanchon/ArduinoJson from 7.3.0 to 7.3.1
- Upgrade olikraus/U8g2 from 2.36.4 to 2.36.5
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.3 to 3.7.4
- Simplify code for sunset calculation
- Simiplify code for CommandQueue
- Simplify code of weekday calculation
- Less calculation in locked code area
- Simplify Display Graphic code
- Added device profile for Olimex ESP32-POE and CMT2300A module
- Reduce nested code by one level
- Call getLocalTime() only once to prevent a delay of 10ms if no time is available
- Simplify code in radio classes
- Updated all languages to latest status
- Initialize the dnsserver object in the constructor
- feat(WebApi_prometheus.cpp): dynamically adjust the initial response buffer size
- Merge branch 'pr2633' into dev
- Slight optimization in bug report template
- Use the right format string on a lot of locations
- Make setLed method compatible with Arduino Framework 3
- Use correct signature for getMaxResendCount
- Remove not required parameters from MqttSubscribeParser
- Give reconnect more time
- Show git branch name in system info
- Remove outdated screenshots as they are available in the official documentation as well
- Use more thread save Message Output
- Hoymiles Lib: Replace lot of println by printf
- Hoymiles Lib: Move array dumping methods in separate method
- Hoymiles Lib: Use pre-rendered serial number
- Hoymiles Lib: Return command string directly instead of printing it to a stream
- Pinmapping: Remove println output
- MqttSettings: Replace all print and println with printf
- MqttHandleInverter: Replace all print and println with printf
- Configuration: Replace print and println with printf
- NetworkSettings: Replace println by printf
- NetworkSettings: Optimize setHostname function
- NetworkSettings: Optimize applyConfig function
- NetworkSettings: Optimize setStaticIp function
- NetworkSettings: Optimize handleMDNS function
- NetworkSettings: Optimize loop function
- InverterSettings: Optimize init function
- Wifi connection is only established when IP is set and the stack reports connected
- Move disableAdminMode to separate method
- Implement Wifi reconnect watchdog
- Replace all print and println with printf in startup code
- Use same name for CMT debug messages
- Use ESP Logging Macros for device startup
- Use ESP Logging Macros for webapi
- Use ESP Logging Macros for utils
- Use ESP Logging Macros for pinmapping
- Use ESP Logging Macros for configuration
- Use ESP Logging Macros for network
- Use ESP Logging Macros for mqtt
- Use ESP Logging Macros for i18n
- Use ESP Logging Macros for invertersetup
- Use ESP Logging Macros for hoymiles library
- bump mikepenz/release-changelog-builder-action from 4 to 5
- Add UI for syslog configuration to network view
- Use new logging function in syslog module
- Syslog: Send dynamic headers based on log level of the message
- CPU temperature: make boolean value human-readable in serial log
- Update bblanchon/ArduinoJson from 7.3.1 to 7.4.1
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.6 to 3.7.7
- Apply log level only for facilities which are available for configuration
- Apply code formatting
- Added missing breaking change to README.md
- remove downstream-specific task translations
- MessageOutput: remove redundant #include
- do not derive MessageOutput from Print
- Add serial number prefix 114a to HMS_2CH
- Merge branch 'pr2713' into dev
- Merge branch 'pr2675' into dev
- Upgrade olikraus/U8g2 from 2.36.5 to 2.36.12
- Update bblanchon/ArduinoJson from 7.4.1 to 7.4.2
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.7 to 3.7.9
- Use fixed version of AsyncTCP
- Add Yarn Prettier badge to readme
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.9 to 3.7.10
- MessageOutput does not use LOG macros by itself
- syslog: implement rate limiting
- logging: centralize rate limiting
- logging: unlock while processing buffer
- update discord link to point to expected channel
- github actions: Upgrade actions/checkout to v5
- Upgrade ESP32Async/ESPAsyncWebServer from 3.7.10 to 3.8.0
- Remove comment which doesn't make sense at this posistion
- Use pre-defined literals in webapi
- Added hint for breaking change
- Updated discord link to delegate user directly into the right channel
- ESP32Async/ESPAsyncWebServer @ 3.9.2
- Merge branch 'pr2905' into dev
- Upgrade ESP32Async/ESPAsyncWebServer from 3.9.2 to 3.9.3
- Upgrade espMqttClient from 1.7.0 to 1.7.2
- Upgrade olikraus/U8g2 from 2.36.12 to 2.36.15
- Add support for HMS-2000D-4T inverters with serial prefix 0x1166
- Update pl.lang.json
- Merge branch 'pr2961' into dev
- Merge branch 'pr2953' into dev
- Added Serial Prefix to readme
- Upgrade ESP32Async/ESPAsyncWebServer from 3.9.3 to 3.9.6
- Upgrade olikraus/U8g2 from 2.36.15 to 2.36.17
- Rework NTP handling
- Upgrade ESP32Async/ESPAsyncWebServer from 3.9.6 to 3.10.0
- Allow log level configuration for async websockets and async tcp stack
- Upgrade ESP32Async/ESPAsyncWebServer from 3.10.0 to 3.10.3
- Upgrade bblanchon/ArduinoJson from 7.4.2 to 7.4.3
- Upgrade olikraus/U8g2 from 2.36.17 to 2.36.18
- Upgrade nrf24/RF24 from 1.4.11 to 1.5.0
- Upgrade arkhipenko/TaskScheduler from 3.8.5 to 4.0.4
- Upgrade actions/checkout from v5 to v6
- Upgrade actions/setup-node from v4 to v6
- Upgrade node to 24 in github actions
- Upgrade actions/setup-python from v5 to v6
- Upgrade actions/stale from v9 to v10
- Upgrade dessant/lock-threads from v5 to v6
- Upgrade actions/cache from v5 to v6
- Upgrade actions/upload-artifact from v4 to v7
- Upgrade mikepenz/release-changelog-builder-action from v5 to v6
- Upgrade actions/download-artifact from v4 to v8
- Updated copyright information
- Adjusted copyright information
- Merge branch 'pr3008' into dev
- Merge upstream/master: integrate 511 commits from tbnobody/OpenDTU
- Update webapp build artifacts
- Update: Normalize line endings in webapp and build artifacts