Commit Graph
21491 Commits
Author SHA1 Message Date
Heo ye wonandGitHub 2eda5214cf MAX7219 matrix: add positioned text support for multi-row displays (#24917) 2026-07-27 13:34:31 +02:00
s-hadingerandGitHub 6fbf626977 MQTT more hardening and fixes from pubsub3 (#24920) 2026-07-26 21:54:04 +02:00
Theo Arends 2f136a3290 Bump version v15.5.0.2 2026-07-23 21:57:45 +02:00
s-hadingerandGitHub 2d340102a3 PubSub lib renamed TasmotaPubSub, hardening fixes and comprehensive non-regression tests (#24916) 2026-07-23 20:49:54 +02:00
sfromisandGitHub 70fa0c5ad5 Include USE_TCP_BRIDGE with tasmota-zigbee build (#24912)
Since tasmota-zigbee is for use with CC2530, it makes sense to have USE_TCP_BRIDGE included too, for users wanting to use it with Z2M or ZHA.
2026-07-22 17:27:05 +02:00
Theo Arends 23ed46deff Update change logs 2026-07-21 14:04:17 +02:00
s-hadingerandGitHub c144ac9639 TLS support for EC P-384 curve in server certificate (#24909) 2026-07-20 21:40:53 +02:00
Theo Arends 453b8ad138 Update change logs 2026-07-20 17:13:35 +02:00
AntonisandGitHub 4383a8673a MagicSwitch: add configurable masking window (fixing problems with multiple false triggering) (#24888) 2026-07-20 15:53:36 +02:00
gionagandGitHub 3dd46b0b44 Fix ESP8266 crash-loop on PZEM/Modbus: move stray delay() inside rx-enable guard (#24886) 2026-07-20 15:52:18 +02:00
s-hadingerandGitHub 5614aaec2a HASPmota and LVGL stripes widget (#24907) 2026-07-18 17:34:55 +02:00
Agent Blu, 006andGitHub 2bceaa0431 Committing new ST7567 display (#24903) 2026-07-18 11:50:48 +02:00
Christian BaarsandGitHub 61fe447df6 Update default .clangd with new compile flags and includes (#24897)
intended as base configuration for editors other than Visual Studio Code, which do not have such feature rich extension like Pioarduino for Visual Studio Code. Tested with Zed.
2026-07-15 16:00:20 +02:00
Christian BaarsandGitHub a1639507d1 Udisp SPI fix for mono color display (#24899)
* fix union offset for SPI mono display

* fix debug log to correcty use USE_UNIVERSAL_TOUCH
2026-07-14 19:03:57 +02:00
s-hadingerandGitHub a6454b7459 Update Changelog 2026-07-07 20:02:06 +02:00
5acc4a368b Add Matter virtual IR HVAC thermostat support (#24821)
* Add Matter virtual IR HVAC thermostat support

Introduce a generic Matter thermostat plugin and a virtual HVAC plugin that maps thermostat state changes to Tasmota IRHVAC commands.

Add virtual HVAC option switches for IRHVAC boolean options such as Econo, Quiet, Turbo, Light, Filter, Clean, Beep, and iFeel. These option endpoints are attached to the HVAC endpoint PartsList instead of being listed as top-level aggregator parts.

Expose the new virtual device types in the Matter UI and refresh endpoint PartsList attributes when endpoint composition changes.

* Warn on invalid Matter v.HVAC vendor

* Fix regression

* Matter virtual IR HVAC thermostat support

* Revert

---------

Co-authored-by: Jean-Laurent Girod <macjl@users.noreply.github.com>
Co-authored-by: s-hadinger <49731213+s-hadinger@users.noreply.github.com>
2026-07-07 20:00:24 +02:00
hk2k2andGitHub ff1548f686 Create SH1107_128x128_display.ini (#24877)
Add Display.ini Support for 
1,5" SH1107 with 128x128 Pixel in I2C Mode.
2026-07-07 14:52:48 +02:00
s-hadingerandGitHub 0e4f4c7a97 HASPmota new style for demo (#24875) 2026-07-05 17:54:01 +02:00
s-hadingerandGitHub aec8e2395a HASPmota ability to set default screen background on p0b0 object (#24874) 2026-07-04 12:47:01 +02:00
Theo Arends 989866fe6d Update change logs 2026-07-03 14:29:13 +02:00
mikep1998andGitHub a3ac5bab3d Fix default button/switch actions on builds without rules (#24871)
RulesProcessEvent() in xdrv_10_system_events.ino (which owns the Xdrv10
slot when neither USE_RULES nor USE_SCRIPT is compiled) returned true
unconditionally. SendKey() interprets true as "event serviced", so the
default ButtonN -> ExecuteCommandPower action never executed: the press
was logged (BTN: ButtonN multi-press 1) but the relay never toggled.
Return false instead, mirroring xdrv_10_rules.ino's 'serviced' semantics
where true means a rule actually consumed the event.
2026-07-03 14:23:31 +02:00
Theo Arends d87c17af21 Update change logs 2026-07-02 15:49:43 +02:00
a1720a9d72 Fix *float* output in EQ3 mqtt messages (#24869)
Recent core refactoring removed standard support for float variables in printf family functions, resulting in eQ-3 telemetry messages showing '*float' instead of actual float values. Updated the formatting specifier to %1_f and passed the reference to the float parameter to ResponseAppend_P function

Co-authored-by: Jens.Heilig <jens.heilig@esystems-mtg.de>
2026-07-02 09:32:50 +02:00
hk2k2andGitHub 5b212c1d97 Create ST7789_320x240.ini (#24868)
Add ST7789 Display 2" with 320x240 Resolution
2026-07-02 09:03:54 +02:00
Theo Arends 846490ece4 Add logging for Hosted MCU SDIO connection (#24864) 2026-07-01 16:19:26 +02:00
Pierre JochemandGitHub 1495844c32 feat: add qemu emulator for esp32 (#24861)
* feat: add qemu emulator

* chore: use current dir instead of cloning repo

* Add QEMU emulator tooling under tools/qemu

tools/qemu/tasmota-qemu.sh builds the current Tasmota checkout for an ESP32
PlatformIO env and boots it under an Espressif QEMU fork on an amd64 host:
serial console, and a browsable web UI via the WiFi-capable fork.

  NET_WIFI=1 tools/qemu/tasmota-qemu.sh   # build -> image -> wifi QEMU -> web UI

Notes:
- Builds the local working tree (no clone); artifacts and QEMU forks live under
  a gitignored tasmota-qemu/ at the repo root.
- ESP32-only helper; no Tasmota core source is changed.

See tools/qemu/README.md for commands, env vars, and panic-debugging notes.

* chore: cleanup
2026-06-27 17:07:46 +02:00
Theo Arends 796242fdac Update change logs 2026-06-27 10:59:33 +02:00
GrzegorzandGitHub d3eb7505f2 MiElHVAC auto-enable i-See widevane when setting AirDirection (#24860)
* 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`.

* MiElHVAC auto-enable i-See widevane when setting AirDirection

### Problem
`HVACSetAirDirection` (`indirect` / `direct` / `even`) sets the i-See airflow
direction via a `0x41 0x08` runstate packet (flag `0x2000`). The unit only
honors that value once i-See airflow control is enabled, which requires
`widevane=0x80` sent in a `0x01` settings packet.

Until now the user had to manually run `HVACSetWideVane isee` **before**
`HVACSetAirDirection`, otherwise the direction change was silently ignored.

### Change
`HVACSetAirDirection` now sets the widevane to
`MIEL_HVAC_SETTINGS_WIDEVANE_ISEE` (`0x80`) in the same call.

The dispatcher always sends the settings (`0x01`) packet before the runstate
(`0x41`) packet, so the unit receives the i-See enable first and the direction
value on the following tick — no manual ordering required.

### Notes
- `off` is unchanged (still expressed as `widevane=0x8c` via `0x01`).
- The existing capability guard (`cap_vane_v` + `sc_has_isee`) is unchanged.
2026-06-27 10:12:53 +02:00
s-hadingerandGitHub e352266405 Berry fix warnings when running unit tests (#24859) 2026-06-26 15:52:27 +02:00
s-hadingerandGitHub 39ad0f57a4 Berry bytes methods setbits/getbits transposed to native and support for big endian (#24857) 2026-06-26 09:23:33 +02:00
Theo Arends 8b4828807b Add default BSSID on initial config 2026-06-22 17:31:50 +02:00
Theo Arends 8dc0e1d3fa Bump version v15.5.0.1 2026-06-22 17:07:22 +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 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 c992ddb8ae Fix GUI console background color 2026-06-21 15:20:07 +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 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