Version History - MiWiFi XiaoHack Edition
📡 Automatic releases from GitHub
The latest versions are synchronized automatically from GitHub.
Showing 6–10 of 57 releases
📦 v3.5.4 – XiaoHack Edition
Date: 2026-01-28 19:16:32
View original release on GitHub
📝 Changelog — MiWiFi Integration
📦 Version v3.5.4 – 2026-01-28
✅ Fixes & Stability
- 🔁 Fixed repeated “Unexpected error fetching MiWiFi updater data” loops
- Implemented a safe request wrapper to handle the common
httpx“client has been closed” condition. - Requests are retried once after recreating the HTTP client via Home Assistant’s shared client factory, preventing log spam and repeated coordinator failures.
- 🧼 Mitigated potential long-run memory growth related to unmanaged HTTP clients
- All HTTP requests now consistently reuse Home Assistant’s shared
httpxclient (get_async_client) through aclient_factory, avoiding ad-hoc client creation. - A user reported this change corrected a severe memory growth issue that saturated their system roughly every ~48h after updating to the previous version (suggesting the integration was contributing to the increasing memory usage).
- 🔐 Improved protocol stability (AUTO → HTTP/HTTPS) without breaking legacy setups
- Protocol detection remains compatible while requests are now executed through the retry-safe wrapper.
- 🙌 Community contribution
- Thanks to @pacorola for the upstream improvements and real-world testing that helped identify and validate this fix.
⚙️ Improvements
- 🧩 More resilient networking layer
- The Luci client can recover from closed-client states during reloads/reconnections by recreating the HA-managed client on demand.
✅ Compatibility
- No breaking changes expected.
- Works with existing AUTO/HTTP/HTTPS configurations and keeps current endpoint mappings intact.
📘 How to Update
- Update the integration files (HACS or manual).
- Restart Home Assistant.
- (Recommended) Check logs after restart to confirm the updater no longer spams:
- “Unexpected error fetching MiWiFi updater data”
- If you previously experienced memory growth, monitor HA memory usage over the next days to confirm stability.
ℹ️ Información adicional
- If your router firmware is unstable or reboots often, the new retry-safe client logic helps prevent transient closed-client errors from cascading into repeated failures.
💖 Support & Donations
If you find this integration useful and want to support continued development:
🔄 Summary of changes
| Area | Change |
|---|---|
| Networking | Retry-safe requests + HA shared client factory |
| Stability | Reduced updater log loops during closed-client scenarios |
| Memory | Reduced risk of resource accumulation from unmanaged HTTP clients |
| Credits | Contribution + validation by @pacorola |
📦 v3.5.3 – XiaoHack Edition
Date: 2026-01-25 18:14:09
View original release on GitHub
📝 Changelog — MiWiFi Integration
📦 Version v3.5.3 – 2026-01-25
✅ Fixes & Stability
- 🧩 Fixed duplicated device_tracker entities/devices in Mesh setups
- Client trackers now use a stable Unique ID based only on the client MAC, not the router
entry_id. - Prevents HA creating
*_2,*_3duplicates when a device roams between nodes.
- 🧱 Fixed Home Assistant warning about invalid __HTML_PLACEHOLDER_0__ references (HA 2025.12+)
- Ensures the referenced router/node device exists in the device registry before linking clients via
via_device. - Eliminates:
device_registry.async_get_or_create referencing a non existing via_device.
- 🧹 Improved cleanup/migration for legacy client sensors
- Automatically removes old per-device sensor unique_id schemes that caused duplicates across Mesh routers.
- ⚙️ Fixed “Create device sensors” option not being applied correctly
- The option is now respected on startup and after restarts, preventing unexpected behavior where sensors were skipped even when enabled.
⚙️ Improvements
- 📡 Per-device sensors are now Mesh-safe and consistent
- When “Create device sensors” is enabled:
- Sensors are created using a stable MAC-based unique_id (so they don’t duplicate when roaming).
- Sensors are created as disabled by default (opt-in), matching best practices.
- When disabled:
- Any existing per-device sensors are purged/removed automatically.
- 🔗 Added/standardized “Connected via” data for Mesh visibility
- Device tracker entities expose the “connected via node/router” data so the panel can always identify the current node even if device sensors are not enabled.
- 🧰 Kept key debug logs for troubleshooting
- Restored/kept the sensor startup debug that prints
is_main,device_sensors_enabled, and device counts to diagnose edge cases quickly.
✅ Compatibility
- ✅ Compatible with Home Assistant 2026.1.0+
- ✅ Forward-compatible with Home Assistant 2025.12+ device-registry
via_devicevalidation changes. - 🧩 Designed for Mesh (multi-router) deployments: clients roam without duplicate devices/entities.
📘 How to Update
- Replace all files inside
custom_components/miwifi/with the contents of this release. - Restart Home Assistant.
- If you previously had duplicates:
- Check Settings → Devices & Services → Entities for leftover old entries (this release will auto-clean most of them).
- If you want per-device sensors:
- Enable “Create device sensors” in the integration options.
- Then selectively enable the client sensors you actually want (they are disabled by default).
ℹ️ Additional Information
- Client devices in Mesh should now exist once in Home Assistant, while still showing which node they are connected through.
- This release focuses on stability + entity identity. Next step is aligning the MiWiFi Panel to display node assignment and device entities consistently.
💖 Support & Donations
If you find this integration useful and want to support continued development:
🔎 Summary of changes (v3.5.2 → v3.5.3)
| Area | Before | After |
|---|---|---|
| Mesh client identity | Duplicate devices/entities on roaming | Stable MAC-based unique IDs |
via_device linkage | Warning + future breakage risk | Safe linking (router device ensured) |
| Per-device sensors | Not created / inconsistent, duplicates possible | Created only when enabled, stable IDs, disabled by default |
Service block_device | Could fail due to main-router capability detection mismatch | Uses main router consistently and correct capability check |
| Debug visibility | Key sensor startup logs missing | Logs kept for troubleshooting |
📦 v3.5.2 – XiaoHack Edition
Date: 2026-01-18 18:27:15
View original release on GitHub
📝 Changelog — MiWiFi Integration
📦 Version v3.5.2 – 2026-01-18
✅ Fixes & Stability
- 🧯 Fixed config entry setup cancellations (AX6000 / slow LUCI endpoints)
- Error resolved:
Setup of config entry ... cancelledasyncio.exceptions.CancelledError- Root cause: certain firmwares can hang on
wifi_macfilter_infoduring the first refresh, causing Home Assistant bootstrap timeouts. - Fix: added per-call timeout support in LUCI requests and enforced a short timeout for
macfilter_info()to fail fast and avoid bootstrap cancellation.
- 🧩 Fixed MiWiFi Panel showing 0 connected devices (device_tracker not adding entities)
- Error resolved:
Error adding entity device_tracker.miwifi_* ...AttributeError: 'MiWifiDeviceTracker' object has no attribute '__attr_name'- Root cause: missing / incorrect
_attr_nameinitialization referenced bydevice_infoduring entity add. - Fix: ensured
_attr_nameis always set and consistently referenced, restoring stable device_tracker entity creation.
- 🔁 Prevented duplicated client sensors in mesh roaming scenarios
- Issue resolved:
- sensors being created as
sensor.<name>andsensor.<name>_2depending on which mesh node the client connected to. - Root cause: per-device sensor identity was derived from router entry context or name-based entity_id, causing collisions when clients roam between nodes.
- Fix:
- device sensor unique_id is now derived from MAC + sensor key, independent of router entry.
- entity_id is now stable:
sensor.miwifi_<mac>_<key>.
- 🧰 PR #239 improvements (merged with XiaoHack adjustments)
- Integrated upstream fixes and stability improvements from PR #239, with minimal, compatibility-safe adaptations to the XiaoHack codebase.
- Ensured the new behavior remains non-breaking for existing installs while improving reliability on newer Home Assistant versions.
⚙️ Improvements
- 🔧 New global switch for client sensors (disabled by default)
- Added
enable_device_sensors(default: false) in the integration options. - Behavior:
- When OFF: no per-device client sensors are created (and legacy duplicates are cleaned from the main router).
- When ON: per-device sensors are created only from the main router to avoid duplicates in mesh, and remain disabled-by-default in the entity registry so users enable only what they want.
- 🧭 UI labels added for new option
- Added friendly option label in
strings.jsonso the setting is visible and understandable from the UI.
✅ Compatibility
- ✅ Home Assistant 2026.1+ (Python 3.13 cancellation behavior / bootstrap timeouts)
- ✅ Mesh environments (stable identity for roaming clients)
- ✅ Routers with partial/slow LUCI endpoints (fail-fast behavior for problematic endpoints)
📘 How to Update
HACS (recommended)
- HACS → Integrations → MiWiFi XiaoHack Edition
- Update to v3.5.2
- Restart Home Assistant
Manual
- Replace
/config/custom_components/miwifi/with thev3.5.2release - Restart Home Assistant
Optional (client sensors)
- Settings → Devices & services → MiWiFi → Configure
- Enable: Create device sensors (clients)
Note: client sensors remain disabled-by-default in the Entity Registry. Enable only the entities you want.
ℹ️ Additional Information
- Recommended defaults:
- Keep
enable_device_sensors = falseunless you explicitly need per-device sensors. - Migration/cleanup:
- Legacy per-device sensor duplicates tied to router entry context are automatically cleaned from the main router.
💖 Support & Donations
If you find this integration useful and want to support continued development:
🙌 Credits
- Thanks to @pacorola for contributing the improvements included via PR #239.
🔎 Summary of changes
| Area | Change | File(s) | Impact |
|---|---|---|---|
| LUCI / Bootstrap | Fail-fast timeout for macfilter_info to prevent setup cancellation | luci.py, updater.py | Prevents bootstrap-stage cancellations on slow firmwares |
| Device Tracker | Fix _attr_name / device_info crash + restore stable naming | device_tracker.py | Panel shows clients again; entities add reliably |
| Client Sensors | Mesh-safe unique_id and stable entity_id by MAC + key | sensor.py | Eliminates duplicate _2 sensors during roaming |
| Options / UI | Global switch to enable/disable client sensors (default OFF) | const.py, config_flow.py, strings.json | User-controlled creation of per-device sensors |
| Upstream | PR #239 merged (XiaoHack-adapted) | luci.py, updater.py, device_tracker.py | Stability and HA async best practices improvements |
📦 v3.5.1 – XiaoHack Edition
Date: 2026-01-04 20:40:08
View original release on GitHub
📝 Changelog — MiWiFi Integration
📦 Version v3.5.1 – 2026-01-04
✅ Fixes & Stability
- 🧵 Fixed Home Assistant “blocking call” warning (SSL / certifi)
- Warning resolved:
Detected blocking call to load_verify_locations... inside the event loop- Root cause: direct
httpx.AsyncClient()creation inside the event loop inMiWifiPanelUpdate.async_release_notes(). - Fix: switched to Home Assistant’s recommended shared client (
get_async_client(self.hass)) to avoid blockingSSLContext.load_verify_locations. #227
- 🐞 Fixed __HTML_PLACEHOLDER_0__ when adding entities
- Warning resolved:
RuntimeWarning: coroutine 'EntityPlatform.async_add_entities' was never awaited- Root cause:
platform.async_add_entities(to_add)called from a@callbackcontext (non-async) insensor.py. - Fix: safely schedules the coroutine via
hass.async_create_task(...)when needed.
⚙️ Improvements
- 🧩 Compatibility-safe fallbacks
- Added a safe fallback when
homeassistant.helpers.httpx_client.get_async_clientis not available (very old Home Assistant), preserving legacy behavior without breaking modern async best practices.
✅ Compatibility
- ✅ Home Assistant: compatible with current versions where event-loop blocking calls are detected and where
EntityPlatform.async_add_entitiesis async. - 🛡️ Legacy-friendly: includes fallback logic for older installations.
📘 How to Update
HACS (recommended)
- HACS → Integrations → MiWiFi XiaoHack Edition
- Update to v3.5.1
- Restart Home Assistant
Manual
- Replace
/config/custom_components/miwifi/with thev3.5.1release - Restart Home Assistant
ℹ️ Additional Information
- No configuration changes.
- No migrations.
- This release focuses on eliminating async warnings that can impact stability/performance in modern Home Assistant environments.
💖 Support & Donations
If you find this integration useful and want to support continued development:
🔎 Summary of changes
| Area | Change | File(s) | Impact |
|---|---|---|---|
| Async / SSL | Remove blocking load_verify_locations from event loop | update.py | Eliminates HA “blocking call” warning |
| Entities | Properly schedule async_add_entities from callbacks | sensor.py | Eliminates “coroutine was never awaited” warning |
📦 v3.5.0 – XiaoHack Edition
Date: 2026-01-03 18:23:14
View original release on GitHub
📝 Changelog — MiWiFi Integration
📦 Version v3.5.0 – 2026-01-03
✅ Fixes & Stability
- 🧠 Stable per-device metrics exposure: device traffic/usage metrics are now exposed through dedicated sensor entities (instead of relying only on
device_trackerattributes), improving compatibility across dashboards and automations. - 🔄 Reliable dynamic updates: new device sensors are created automatically when a new client is detected, without requiring a Home Assistant restart (hooked to the same internal update/signaling flow).
- 🧹 Cleaner entity lifecycle: device sensors follow the same cleanup logic as tracked devices, avoiding orphan entities after purges.
⚙️ Improvements
- 📡 New per-device sensors (one set per client entity), built from the same authoritative source (
updater.devices) used by the tracker: sensor.<entity>_down_speedsensor.<entity>_up_speedsensor.<entity>_total_usagesensor.<entity>_signal_qualitysensor.<entity>_signalsensor.<entity>_ipsensor.<entity>_connectionsensor.<entity>_onlinesensor.<entity>_last_activitysensor.<entity>_first_seensensor.<entity>_internet_blocked
- 📏 Human-readable units (recommended HA approach):
- Device speeds are exposed as DATA_RATE with native units in Bytes/s, allowing Home Assistant to automatically display kB/s / MB/s when appropriate.
- Total usage is exposed as DATA_SIZE with native units in Bytes, allowing Home Assistant to automatically display MB / GB based on the value.
- 🔗 Device registry consistency: sensors are linked to the same client device entry (per MAC), improving the device page experience and entity grouping.
✅ Compatibility
- ✅ Fully compatible with existing
device_tracker.miwifi_*entities. - ✅ No breaking changes in tracker attributes; sensors are additive.
- ✅ Uses Home Assistant best practices (
device_class,state_class) to preserve statistics, history and UI formatting.
📘 How to Update
- Update the integration files to v3.5.0.
- Restart Home Assistant.
- Optional (recommended if you previously tested earlier versions):
- If you notice old units still displayed, check the entity settings (custom unit overrides) or remove the affected entities from the Entity Registry and restart again.
ℹ️ Información adicional
Example: new per-device entities
- Before: traffic/usage only available inside
device_trackerattributes. - Now: you can build dashboards/automations directly using sensors like:
sensor.servidor_down_speedsensor.servidor_total_usage
Notes
- Speeds and usage are exposed with stable native units; Home Assistant takes care of the readable scaling (MB/s, GB, etc.) in the UI.
💖 Support & Donations
If you find this integration useful and want to support continued development:
🧾 Summary of changes
| Area | Change |
|---|---|
| Sensors | Added per-device sensors for speeds, usage, signal, connection and timestamps |
| Units | Adopted HA-recommended DATA_RATE / DATA_SIZE for automatic human-readable scaling |
| Lifecycle | Auto-create sensors on new devices and clean them up during purges |
| Compatibility | Additive update, keeps existing tracker entities intact |
Asistente XiaoHack
Xiaohack V 3.3 | © Copyright 2024 | Users Online: 0 | Estado: Offline
