Commit Graph
21782 Commits
Author SHA1 Message Date
Theo Arends 4561b51993 Merge branch 'development' into prerelease-15.5.0 v15.5.0 2026-06-22 15:30:31 +02:00
Theo Arends ee435ea968 Fix possible buffer overflow 2026-06-22 15:24:06 +02:00
Theo Arends 5ba66d80c3 Add command BSSid[1|2] [0|1|11:22:33:44:55:66] to select fixed WiFi Access Point disabling SetOption56 and SetOption57 (#24394) 2026-06-21 17:43:52 +02:00
Theo Arends a155b327ae Update CHANGELOG.md 2026-06-21 15:39:06 +02:00
Theo Arends 82f910e508 Merge branch 'development' into prerelease-15.5.0 2026-06-21 15:36:33 +02:00
Theo Arends a27df15739 Fix SML modbus/TCP on ESP32-p4 with only Ethernet shows "SML: could not connect TCP since wifi is down" (#24845) 2026-06-21 15:35:36 +02:00
Theo Arends 5ab84fe7e2 Merge branch 'development' into prerelease-15.5.0 2026-06-21 15:20:59 +02:00
Theo Arends c992ddb8ae Fix GUI console background color 2026-06-21 15:20:07 +02:00
Theo Arends 4159b1bf78 Merge branch 'development' into prerelease-15.5.0 2026-06-21 15:01:52 +02:00
Theo Arends 7f874b2a14 Update change logs 2026-06-21 15:00:33 +02:00
Štěpán DaleckýandGitHub 6c208a6b5f Enhance Matter plugin functionality for On/Off control and add support for Global Scene Control and related commands (#24854) 2026-06-21 10:18:54 +02:00
Theo Arends ba5d6c5019 Prep v15.5.0 2026-06-17 17:16:18 +02:00
Theo Arends 7e1a51bc9e Merge branch 'development' into prerelease-15.5.0 2026-06-17 17:11:35 +02:00
Theo Arends afa685472f Update template.md with last years additions 2026-06-17 14:57:28 +02:00
Theo Arends 00bab175a8 Update change logs 2026-06-17 12:36:10 +02:00
s-hadingerandGitHub ba6159f78a Berry LVGL mapping refactor (#24844) 2026-06-16 12:32:38 +02:00
s-hadingerandGitHub 43a5153cab Berry more multiple minor fixes (#24843) 2026-06-16 09:34:55 +02:00
s-hadingerandGitHub 45a72fa216 Berry multiple minor fixes (#24842) 2026-06-15 23:05:04 +02:00
s-hadingerandGitHub 88eff2ce51 AsyncHttpClientLifght code analysis (#24841) 2026-06-15 22:11:49 +02:00
s-hadingerandGitHub bd466806fe Berry optimized solidified structures for code constants and maps (#24838) 2026-06-14 20:59:19 +02:00
s-hadingerandGitHub b29f6926e1 Berry fix rare GC bug in deinit (#24837) 2026-06-14 19:54:35 +02:00
s-hadingerandGitHub fc1c2a563f Berry fix rare GC bug in bytecode (#24836) 2026-06-14 19:35:49 +02:00
sfromisandGitHub 07493b4e69 Update tasmota_globals.h - WebColor consistency (#24833)
Noticed a small inconsistency of the default light WebColor palette not fully matching the light palette example in my_user_config.h and the docs WebUI page. The color for COLOR_BUTTON_OFF was a long time ago changed from dark blue #08405e to the better-working pale blue #a1d9f7 without this being reflected in the defaults used in the absence of another #define value.

Of course, this normally makes no difference as the standard my_user_config.h defines a full dark palette anyway, but still....
2026-06-13 14:10:47 +02:00
Theo Arends c4b01cc013 Update change logs 2026-06-13 12:38:08 +02:00
joluxerandGitHub a2c38a9b76 build: copy firmware artifacts with ELF-extracted build timestamp (opt-in) (#24794)
New post-build script pio-tools/timestamp-firmware.py copies firmware
artifacts to timestamped filenames when append_timestamp = 1 is set in
the [tasmota] section of platformio_override.ini. Default off; standard
builds unaffected.

The timestamp is extracted from the ELF symbol table via nm: named PROGMEM
symbols mdate_P and mtime_P in GetBuildDateAndTime() carry __DATE__ and
__TIME__ respectively. Reading them from the ELF guarantees the filename
timestamp matches exactly the one the firmware reports at boot. No -g flag required.

Artifacts written with timestamp suffix (e.g. tasmota-4M-2026-05-01T19-02-06):
  .bin, .bin.gz, .factory.bin (ESP32)  ->  build_output/firmware/
  .elf                                 ->  build_output/firmware/
  .map.gz                              ->  build_output/map/

support_rtc.ino: mtime_P introduced as a named PROGMEM variable so nm can
locate __TIME__ by symbol name on all platforms, including ESP32 where
PSTR() is a no-op. Flash impact: +4 B; all other memory unchanged.
2026-06-13 12:23:56 +02:00
Theo Arends 77d8d4c693 Add SEN5X init data like serialnumber and version 2026-06-12 14:54:22 +02:00
Theo Arends 797b25e35d Update change logs 2026-06-11 14:29:42 +02:00
s-hadingerandGitHub 78f5526d29 Code hardening replacing strcat and strcpy with safer alternatives (#24832) 2026-06-11 14:22:26 +02:00
Theo Arends c15ea2852e Fix RTSP strncpy buffer overflow 2026-06-10 14:35:35 +02:00
s-hadingerandGitHub 9afaef377e Serial console support for Backspace when enabling #define USE_SERIAL_BACKSPACE (#24830) 2026-06-10 07:55:59 +02:00
Theo Arends cd38f60218 Change Sensirion_Core library from v0.7.2 to arduino-core v0.7.3 2026-06-05 16:42:08 +02:00
Theo Arends d4cf5df63f Fix SCD30 busspeed when ClearBus is used 2026-06-05 16:05:11 +02:00
Theo Arends 01d044cedc Changed SCD30 library FrogmoreScd30 to Sensirion arduino-i2c-scd30 v1.1.1 2026-06-05 15:31:11 +02:00
Theo Arends 6191473dfd Changed SCD4x library FrogmoreScd40 to Sensirion arduino-i2c-scd4x v1.1.0
- Bump version v15.4.0.3
2026-06-03 17:18:28 +02:00
Theo Arends 82e987a4d6 Cleanup SPS30 driver 2026-06-02 11:06:33 +02:00
bovirusandGitHub 36f4302a10 Update it_IT.h (#24817) 2026-06-02 09:38:40 +02:00
Theo Arends 2c86fa57a2 Update SEN5x library - no functional change 2026-06-01 18:08:35 +02:00
Theo Arends 2169441925 Rename library stcc4 to official name 2026-06-01 17:52:48 +02:00
Theo Arends e077f6a34d Add complete SPS30 library 2026-06-01 17:46:57 +02:00
Theo Arends 696255995a Fix SPS30 not detected on ESP8266 (#24780) 2026-06-01 17:44:51 +02:00
7a37821ecf MiElHVAC: sync SENSOR, HVACSettings and discovery on state change (#24813)
* MIELHVAC New features and bug fixes

## Changelog

### Bug Fixes

**Memory leak in `miel_hvac_pre_init()`** — `goto del` jumped past the `free(sc)` label, leaking the allocated struct on serial init failure. Replaced with explicit `delete`/`free`/`return`.

**`remotetemp_clear` semantics inverted** — variable was `true` on boot causing a CLR frame to be sent before any sensor registered. Renamed to `remotetemp_active`, initialised `false`.

**`HVACSetPurify` used wrong map** — `airdirection_map` was passed instead of `purifier_map`.

**`0x08` Set Run State flags wrong byte order** — flags are little-endian on the wire (ref: muart-group/muart-group.github.io#17). Removed `htons()` from all `0x08` flag assignments.

**`widevane_isee` false positives** — values like `0x84`/`0x85`/`0x8c` (ISEE bit + position nibble) incorrectly reported `AirDirection:"even"`. Reverted to exact-match for `0x80`, `0x28`, `0xaa`.

---

### New Features

**`0x42` HVAC Options polling** — added `miel_hvac_data_hvac_options` struct and `MIEL_HVAC_REQUEST_HVAC_OPTIONS` request. The unit is polled for Purifier, NightMode and EconoCool state. Requires short request form (len=1). Results stored in `sc_hvac_options` and published in SENSOR and HVACSETTINGS when `cap_run_state=true`.

**Run State commands (`0x41 0x08`)** — new commands `HVACSetPurify`, `HVACSetNightMode`, `HVACSetEconoCool` and `HVACSetAirDirection` sent via `0x08` on units that report `cap_run_state=true`. Optimistic update to `sc_hvac_options` applied before confirmation.

**EconoCool** — `0x08` byte 14, flag `0x10`, COOL mode only. Command `HVACSetEconoCool on|off`.

**Base Capabilities (`0x5B 0xC9`)** — queried once after connecting. Parsed into `miel_hvac_capabilities`. Results published flat inside `MiElHVAC` as `*Supported` fields. Temperature ranges published as °C. Raw packet in `CapabilitiesHex`.

**Capabilities-aware command validation** — commands blocked when unit reports feature unavailable: modes (heat/dry/fan), temperature range from capabilities, fan speeds, run state commands return `NotSupported` or `ControlNotSupported`.

**`0x42` polling skip** — skipped on units with `cap_run_state=false`, eliminating recurring timeouts.

**`miel_hvac_append_settings_json()`** — shared helper replacing ~80 lines of duplicated JSON code between SENSOR and HVACSETTINGS topics.

---

### JSON Changes

- `Power` (W) and `Energy` (kWh) published inside `MiElHVAC` and also in a separate `ENERGY{}` object outside `MiElHVAC` for Home Assistant auto-discovery
- `Purifier`, `NightMode`, `EconoCool` shown in SENSOR and HVACSETTINGS when `cap_run_state=true`; otherwise omitted
- `AirDirection` always shows current state from `0x62 0x02` regardless of control support
- `*Supported` capability fields published flat inside `MiElHVAC`: `HeatSupported`, `DrySupported`, `FanSupported`, `VaneVSupported`, `SwingSupported`, `AutoFanSupported`, `OutdoorTempSupported`, `AirDirectionSupported`, `PurifierSupported`, `NightModeSupported`, `EconoCoolSupported`

---

### Tested on
MSZ-LN25VG2W — `cap_run_state=false`, temp ranges 16–31 °C cool/auto, 10–31 °C heat, 5 fan speeds.

* Extend AirDirection capability, added web ui energy sensor, cleanup

### AirDirection — respect i-See sensor presence

`AirDirection` now requires three conditions instead of just the vertical vane capability:
- `cap_vane_v` — unit has a vertical vane
- `sc_has_isee` — i-See sensor observed at runtime (widevane ever seen with bit `0x80`, or value `0x28`/`0xaa`)
- `cap_run_state` — unit supports `0x08` for control

Resulting behaviour:

| `cap_vane_v` | `sc_has_isee` | `cap_run_state` | `AirDirection` visible | `AirDirectionSupported` |
|:-:|:-:|:-:|:-:|:-:|
|  | — | — | hidden | `not_supported` |
|  |  | — | hidden | `not_supported` |
|  |  |  | shown | `control_not_supported` |
|  |  |  | shown | `on` |

Units with vertical + horizontal vanes but no i-See sensor now correctly report `AirDirectionSupported:"not_supported"` and omit `AirDirection` from both `MiElHVAC` and `HVACSettings` JSON.

### Capability field renames

For naming consistency across the `*Supported` fields:
- `cap_heat` → `cap_mode_heat`, `HeatSupported` → `ModeHeatSupported`
- `cap_dry` → `cap_mode_dry`, `DrySupported` → `ModeDrySupported`
- `cap_fan_mode` → `cap_mode_fan`, `FanSupported` → `ModeFanSupported`
- `cap_auto_fan` → `cap_fan_auto`, `AutoFanSupported` → `FanAutoSupported`
- `OutdoorTempSupported` → `OutdoorTemperatureSupported`
- `TempCool` / `TempHeat` / `TempAuto` → `SetTemperatureCoolMinMax` / `SetTemperatureHeatMinMax` / `SetTemperatureAutoMinMax`

### Energy values

- `Power` (W) and `Energy` (kWh) published both inside `MiElHVAC` and in a standard Tasmota `ENERGY{}` sub-object (`Power`/`Total`) for Home Assistant auto-discovery.
- Added Web UI rows via `FUNC_WEB_SENSOR` showing instantaneous power (W) and cumulative total (kWh) on the Tasmota main page.

### Runtime i-See detection

New `sc_has_isee` flag in `miel_hvac_softc`, set in `miel_hvac_input_settings` on the first widevane value indicating i-See state. Once set, stays set for the session.

**Practical note:** after boot, the flag starts `false`. Units with i-See that has never been activated since Tasmota started will show `AirDirection` as hidden until i-See is first used (via IR remote or `HVACSetAirDirection`). Safe default — prevents showing misleading values on units without i-See.

* MiElHVAC Full support of AirDirection control

* MiELHVAC fix globals, VLA, duplicate JSON fields and float formatting

## Summary

- **Remove file-scope globals** (`temp_type`, `remotetemp_active`,
  `remotetemp_auto_clear_time`, `remotetemp_last_call_time`,
  `remotetemp_half`): moved into `miel_hvac_softc` as `sc_temp_type`
  and `sc_remotetemp_*`. All references updated. Eliminates potential
  conflict with other drivers sharing the same translation unit.

- **Fix VLA in `miel_hvac_send`**: `char hex_d[(len + 1) * 2]` replaced
  with fixed-size `(MIEL_HVAC_DATABUFLEN + 1) * 2`. Variable-length
  arrays on the stack are disallowed by `-Wvla` and unreliable on
  embedded targets.

- **Make `temp_type` explicit**: helper functions `miel_hvac_deg2temp`,
  `miel_hvac_temp2deg`, `miel_hvac_roomtemp2deg` now take `bool
  temp_type` as a parameter. Detection of the extended encoding moved
  from render functions to `miel_hvac_input_data()`, removing a hidden
  side effect inside JSON serialisation code.

- **Remove duplicate JSON fields**: `Purifier`, `NightMode`, `EconoCool`
  were emitted twice (from both the settings block and the options
  block). Options block now only emits `OptionsHex`.

- **Fix `RemoteTemperatureSensorAutoClearTime` JSON type**: was
  serialised as a string (`"10000"`), now a proper JSON number (`10000`).

- **Bool consistency**: assignments `= 1` / `= 0` on `bool` fields
  replaced with `= true` / `= false`.

* MiEl HVAC: sync SENSOR, HVACSettings and discovery on state change

When settings (power, mode, temp, fan, vane, etc.) are confirmed by
the unit, publish both tele/+/HVACSettings and tele/+/SENSOR so the
two topics stay consistent. Also call TasRediscover() to refresh the
retained tasmota/discovery/+/sensors snapshot used by HA on reconnect.

Apply the same treatment to Options (Purifier, NightMode, EconoCool):
when they change, update both tele/+/SENSOR and tele/+/HVACSettings
in addition to refreshing the discovery snapshot.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 17:26:40 +02:00
Jacek ZiółkowskiandGitHub 4690b4b2ed add_support_for_modbus_relays (#24812) 2026-06-01 17:23:20 +02:00
s-hadingerandGitHub 7a2fbbe7ba Tasmesh safety fixes (#24809) 2026-05-30 18:33:30 +02:00
s-hadingerandGitHub a35e045863 Ethernet strcat safety (#24808) 2026-05-30 17:19:29 +02:00
s-hadingerandGitHub 4eac8298d5 Berry mapping minor fixes (#24807) 2026-05-30 17:18:55 +02:00
s-hadingerandGitHub 944ad6de4b Zigbee multiple fixes (#24806) 2026-05-30 16:50:50 +02:00
Theo Arends 7edbc4b3d8 Add comments to dali 2026-05-30 16:42:40 +02:00
s-hadingerandGitHub 580b952dfd Artnet check datalen does not exceed payload length (#24805) 2026-05-30 16:41:20 +02:00
l-jonasandGitHub 6a142725c9 dali: allow using TM_DALI_SEND_TWICE for 3 byte frames (#24803)
This helps configuring input devices as they need frames of three bytes
length and need the command twice. Just calling DaliSend twice is not
enough for this due to the delay.
2026-05-30 16:30:33 +02:00
Theo Arends 46d0bd3425 Fix sensirion SEN6X intermittend detection 2026-05-30 15:59:02 +02:00