Commit Graph

223 Commits

Author SHA1 Message Date
Li Shuzhen
8a59021445 fix: action errors and warnings (#1802)
* feat: ignore license in validate-hacs action

* feat: add brand icon

* style: format multi_lang.json

* feat: update to action/checkout@v5
2026-09-24 12:07:01 +08:00
Li Ji
89352d372a fix: drop non-UTF-8 cloud mips message instead of crashing mqtt loop (#1750)
MipsCloudClient._on_mips_message decodes the push payload with a bare
payload.decode('utf-8'). Some cloud pushes carry payloads that are not
valid UTF-8, which raises UnicodeDecodeError inside paho's on_message,
aborts the read loop and silently drops the message. Lost device
online/offline pushes can leave a device stuck unavailable until the
config entry is reloaded manually.

Catch UnicodeDecodeError, log the topic and the payload hex for
diagnosis, and skip the message so that one malformed push cannot
break message processing.

Related to #1749
2026-09-24 10:54:13 +08:00
Johan Claesson
6653f0d8b0 feat(multi_lang): add English and Swedish translations for viomi.vacuum.v18 (#1747)
Signed-off-by: Johan Claesson <81742448+Johan-Claesson@users.noreply.github.com>
2026-09-24 10:22:33 +08:00
Shiroki Satsuki
02ff2cd83c feat: humidifier mode name mapping (#1658) 2026-09-24 08:17:03 +08:00
Brandon
cd450162e4 fix: add state_class for co2-density sensor (#1631)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
Add co2-density property mapping to SPEC_PROP_TRANS_MAP to enable
statistics recording for CO2 sensors.

Changes:
- Import CONCENTRATION_PARTS_PER_MILLION from homeassistant.const
- Add co2-density mapping with:
  - device_class: SensorDeviceClass.CO2
  - state_class: SensorStateClass.MEASUREMENT
  - unit_of_measurement: CONCENTRATION_PARTS_PER_MILLION (ppm)

This ensures CO2 sensors (like those from CGDN1 device) have proper
device classification and Home Assistant can record long-term statistics.

Fixes #1630
2026-09-23 16:47:56 +08:00
Necroneco
dd341eeb24 fix: migrate the unique_id of the service entities (#1778)
The description of the service was appended to the unique_id of the service
entities without a migration step, so the entities registered before that
change were replaced by new ones. The entity_id of the new entity is
different, which silently breaks every automation, script and dashboard
referring to the old one.

Look up the entities that are still registered under the old unique_id when
the entry is set up, and rewrite it in place. The entity_id is left
untouched, so nothing referring to it has to be updated.

The lookup is keyed on the unique_id only and scoped to the config entry, and
nothing is written when the current unique_id is already registered, so it is
idempotent and cannot replace an entity that is in use. An entity that cannot
be migrated is reported and skipped, the others are still migrated.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:55:07 +08:00
Necroneco
48b0248892 fix: use a valid entity_id with the platform domain (#1777)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
Home Assistant reports the entity_id set by the integration as invalid when
its domain is not the platform domain, or when the object_id contains
characters that are not allowed, e.g. a MIoT-Spec-V2 description in Chinese
or a description that is empty once slugified. Both are deprecated and stop
working in 2027.5.0 and 2027.2.0.

Derive the platform domain from the Home Assistant entity base class that
each entity mixes in, and slugify the object_id.

The unique_id keeps using the integration domain and the raw description, so
it stays byte for byte identical for the entities that are already
registered. The entity_id of an already registered entity is owned by the
entity registry and is not changed either, and a newly registered entity gets
the same entity_id as before, since the registry was already slugifying the
object_id it was given.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: LiShuzhen <SusanPhevos@gmail.com>
2026-09-23 15:48:13 +08:00
Li Shuzhen
77c4c09823 fix: resolve hassfest validation errors and warnings (#1800) 2026-09-23 15:42:04 +08:00
Li Shuzhen
e22c900de1 fix: value precision (#1623) 2026-09-23 14:29:08 +08:00
Li Shuzhen
1a5f890cbe fix: tls verify mijia cloud mqtt broker hostname (#1774)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2026-08-18 17:48:40 +08:00
skyboooox
f290ff17d8 Fix sensor state class and units (#1595)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2026-01-28 15:31:27 +08:00
WoodenLoony
d4f31e8270 Update multi_lang.json (#1604)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2026-01-27 15:28:15 +08:00
Li Shuzhen
001af5384a docs: update changelog and version to v0.4.7 (#1599)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2026-01-07 10:45:07 +08:00
Li Shuzhen
c8d48625e9 Fix specs (#1567)
* fix: the playing-state property's access field of xiaomi.wifispeaker.lx04 and xiaomi.wifispeaker.lx06 (#1566)

* fix: the playing-state property's access field of xiaomi.wifispeaker.x08c

* feat: remove xiaomi.router.rd03 from UNSUPPORTED_MODELS and add era.airp.cwb03 into it

* fix: xiaomi.airc.h09h00 humidity-range unit (#1589)

* fix: add k0918.toothbrush.t700 into UNSUPPORTED_MODELS (#1585)

* fix: the playing-state property's access field of xiaomi.wifispeaker.l04m (#1596)
2026-01-07 10:04:42 +08:00
Mümin Köykıran
d4ac7a935e Feat/add turkish language (#1593)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
* feat: add Turkish device translations to multi_lang.json

Added comprehensive Turkish (tr) translations for all 13 MIoT device specifications
in multi_lang.json to complete Turkish language support.

Changes:
- Added Turkish translations for all device properties, services, events, and actions
- Covers 13 device types: bath-heater, electronic-valve, fan, gateway, lock,
  plant-monitor, switch, thermostat, and vacuum
- Used proper Turkish characters (ç, ğ, ı, ö, ş, ü, İ)
- Maintained technical term consistency (Gateway→Ağ Geçidi, WiFi, IP, etc.)
- Followed formal Turkish (siz form) for professional user experience

Technical details:
- 135 lines added to multi_lang.json
- Turkish translations placed alphabetically after Russian (ru)
- JSON syntax validated successfully
- All translations follow same structure as existing languages (de, en, es, fr, ja, ru, zh-Hans, zh-Hant)

This completes the Turkish language support started in #1468, enabling Turkish-speaking
users to see device names and properties in their native language.

Users will need to update conversion rules via Integration CONFIGURE page in
Home Assistant for translations to take effect.

* feat: add comprehensive Turkish translations for vacuum devices

Added Turkish translations for 5 vacuum device models to multi_lang.json:
- Viomi V5 Pro (viomi-v38, viomi-v5): Full translation including map management
- Narwa vacuum models (narwa-001, narwa-ax11): Core features and map support
- Roidmi V60 (roidmi-v60): Complete vacuum functionality

Key translations added:
- Map management (Harita Yönetimi): Map list, active map, map name, map ID
- Battery and charging status
- Cleaning modes and suction power levels
- Consumables lifetime tracking
- Advanced settings (carpet mode, edge cleaning, obstacle detection)

This resolves Chinese text appearing in vacuum device interfaces by providing
local Turkish translations that override cloud-provided Chinese defaults.

Total vacuum devices with Turkish support: 6 models
File size: 617 lines (expanded from 442 lines)

* fix: sort multi_lang.json entries alphabetically

Sort all device URN entries in multi_lang.json to pass check-rule-format test.
Entries are now in alphabetical order as required by the test suite.

This fixes the failing GitHub Actions check-rule-format test.
2026-01-06 10:16:54 +08:00
Necroneco
ae047758de feat: add unit days to xiaomi.toothbrush.p001 (#1588)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2026-01-04 14:08:02 +08:00
Li Shuzhen
b40d357230 fix: update mesh offline state (#1579)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-12-31 09:58:29 +08:00
Li Shuzhen
f4d591b4d3 perf: remove unused device info (#1574)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-12-26 08:42:23 +08:00
Li Shuzhen
75390a3d83 docs: update changelog and version to v0.4.6 (#1565)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-12-18 09:37:27 +08:00
Li Shuzhen
86a739b503 feat: add tv-box device as media player entity (#1562) 2025-12-18 09:04:59 +08:00
Li Shuzhen
084694c9e7 fix: string property access of daikin air-fresher and air-conditioner (#1561) 2025-12-16 14:01:43 +08:00
Li Shuzhen
593d7d3c0a fix: retry to get cloud device list until successfully fetching device online state when the network resumes (#1555)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-12-16 08:29:16 +08:00
Li Shuzhen
77cebb2e15 Fix specs (#1553)
* fix: daikin.aircondition.k2 property format (#1364)

* fix: daikin.airfresh.k33 property format (#1364)

* feat: xiaomi.wifispeaker.x08e is not converted to the media player entity (#1533)

* docs: FAQ local mode in README
2025-12-16 08:28:37 +08:00
Li Shuzhen
3925e12863 fix: playing state of media player entity (#1552) 2025-12-16 08:28:16 +08:00
Li Shuzhen
500ed76971 fix: subscribe error catch (#1551) 2025-12-16 08:27:30 +08:00
Li Shuzhen
30ce1b4970 perf: cloud mqtt broker host constant value (#1530)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-12-04 12:19:21 +08:00
Li Shuzhen
d5c5e387c2 docs: update changelog and version to v0.4.5 (#1521)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-11-25 10:04:22 +08:00
Li Shuzhen
e6750bb746 feat: format value, then evaluate by expression, and set precision at last (#1516) 2025-11-25 09:31:40 +08:00
Li Shuzhen
1b87381f43 Fix specs (#1517)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
* fix: xiaomi.waterpuri.s1200g filter property unit (#1489)

* fix: xiaomi.aircondition.c24 power consumption device class (#1243)

* fix: cuco.plug.cp7pd power consumption and power value precision (#1502)

* fix: lxzn.valve.02 electricity property unit (#1514)
2025-11-24 17:11:38 +08:00
Li Shuzhen
33ee65cf75 fix: ignore mdns REMOVED package (#1296)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-11-17 11:15:10 +08:00
Quint Stoffers
f95c71c2ad fix: xiaomi.derh.lite temperature precision (#1505)
* fix: xiaomi.derh.lite temperature precision

Add value-range step of 0.1 for dehumidifier temperature property to preserve decimal precision.

The xiaomi.derh.lite dehumidifier was reporting temperature as integer instead of float due to the default value-range step of 1. This fix changes the step to 0.1 to allow one decimal place precision (e.g., 22.5°C instead of 23°C).

Similar to the fix for cgllc.airm.cgd1st air monitor in commit 580ff87.

* chore: sort dehumidifier entry
2025-11-17 10:48:53 +08:00
Li Shuzhen
7abc20dcb5 docs: update changelog and version to v0.4.4 (#1497)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-11-11 09:12:55 +08:00
Li Shuzhen
3e33804477 Fix specs (#1496)
* fix: roidmi.vacuum.v60 duplicated service name for vacuum entity

* fix: cykj.hood.jyj22 spec urn version 4 (#1477)

* fix: lumi.motion.bmgl01 siid=2 piid=2 value-list (#1444)

* fix: ykcn.valve.cbcs power property value unit (#1488)

* fix: ainice.sensor_occupy.3b siid=2 piid=5,11,14,17 device_class (#1495)

* fix: qdhkl.airc.a42 hvac mode (#1483)
2025-11-11 08:56:33 +08:00
Mümin Köykıran
551b5cc938 feat: add Turkish language support (#1468)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
* feat: add Turkish language support

Added comprehensive Turkish (tr) language translations for Xiaomi Home Integration.

Changes:
- Added custom_components/xiaomi_home/translations/tr.json with complete UI translations
- Added custom_components/xiaomi_home/miot/i18n/tr.json with MIoT-specific translations
- All placeholders, markdown formatting, and special characters preserved
- Validated against English source files for structural integrity

Technical details:
- Followed Home Assistant language code standards (ISO 639-1: tr)
- Maintained formal Turkish (siz form) for professional user experience
- Preserved all technical terms (OAuth2, MIoT-Spec-V2, MQTT, etc.)
- JSON structure validated and all keys match English version

* feat: add Turkish translations to bool_trans.yaml

Added Turkish boolean value translations for:
- default: true/false values
- contact_state: contact/no contact states
- motion_state: motion detected states
- open_close: open/close states
- yes_no: yes/no values

* docs: update README to reflect Turkish language support

Updated multiple language support section:
- Changed from 8 to 13 supported languages
- Added Turkish (tr) to the language code list
- Updated language list to include all currently supported languages:
  Italian, Dutch, Portuguese, Brazilian Portuguese, and Turkish

* fix: correct language dictionary sorting and update documentation

- Sort INTEGRATION_LANGUAGES dictionary alphabetically (tr after ru)
- Update CLAUDE.md to reflect 13 supported languages instead of 8
- Fixes test_miot_data_sort() test requirement
- No functional changes, documentation and code style improvements only

* docs: update Chinese README to reflect 13 supported languages

- Changed from 8 to 13 languages in Chinese documentation
- Added Turkish, Italian, Dutch, Portuguese, Brazilian Portuguese
- Updated language code list to include: it, nl, pt, pt-BR, tr
- Changed translation source note from "machine translation"
  to "machine translation or community contributions"
- Maintains consistency with English README.md
2025-11-10 09:50:02 +08:00
Li Shuzhen
f49e76937c fix: climate entity swing mode setting (#1486)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-11-07 10:19:31 +08:00
Li Shuzhen
a1a216aea6 fix: float value precision (#1485) 2025-11-07 10:19:01 +08:00
vshijiav
1ec325c9c7 fix: stop MQTT internal loop immediately when main loop is closed (#1484) 2025-11-07 10:18:25 +08:00
Li Shuzhen
c04fa542a3 docs: update changelog and version to v0.4.3 (#1453)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-10-14 08:33:36 +08:00
Li Shuzhen
fbddaf80a7 fix: pylint 4.0.0 (#1455)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-10-13 17:11:30 +08:00
Li Shuzhen
a11c3e2fda Fix specs (#1394)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
* fix: xiaomi.airc.rr0r00 swing mode (#1386)

* fix: hyd.airer.lyjpro current-position (#1376)

* feat: add an alongside button entity for xiaomi.wifispeaker.l05b play action (#1372)

* fix: ignore the unsupported property 2.3 of 759413.aircondition.iez (#1391)

* fix: ignore unsupported properties of xiaomi.wifispeaker.l15a

* feat: zhimi.fan.za1 fan mode description in zh_Hans (#1424)

* fix: roidmi.vacuum.v60 siid=2 aiid=3 out field format (#1437)
2025-10-11 11:33:07 +08:00
Li Shuzhen
739998211e feat: remove VacuumEntityFeature.BATTERY from the vacuum entity (#1433)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-10-10 16:31:02 +08:00
Li Shuzhen
ec833b6539 feat: subscribe the proxy gateway child device up messages even though the device is offline (#1393)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
* feat: subscribe the proxy gateway child device up messages even though the device is offline (#1313)

* feat: do not subscribe proxy gateway child device online/offline state message
2025-09-02 17:22:40 +08:00
Li Shuzhen
f2200ba003 fix: contact-state value format (#1387)
Some checks failed
Tests / check-rule-format (push) Has been cancelled
Validate / validate-hassfest (push) Has been cancelled
Validate / validate-hacs (push) Has been cancelled
Validate / validate-lint (push) Has been cancelled
Validate / validate-setup (push) Has been cancelled
2025-08-29 17:36:25 +08:00
Li Shuzhen
073cdf2dcb fix: integer value step (#1388) 2025-08-29 17:35:46 +08:00
Li Shuzhen
0f65635342 docs: update changelog and version to v0.4.2 (#1368) 2025-08-20 09:15:31 +08:00
Li Shuzhen
947169f18d Fix specs (#1367)
* fix: xiaomi.fan.p70 fan level

* fix: xiaomi.fan.p76 fan level

* fix: ignore hmpace.motion.v6nfc

* fix: xiaomi.airc.rr0r00 humidity-range

* fix: xiaomi.airc.h43h00 humidity-range

* fix: zhimi.humidifier.ca4 water level
2025-08-19 17:49:27 +08:00
Li Shuzhen
65a7a6d22a fix: correct the property value format after expression calculation (#1366) 2025-08-19 14:36:30 +08:00
Li Shuzhen
c29f7eecbd fix: delete all unsupported MIoT-Spec-V2 instances of Narwa vacuum (#1355) 2025-08-19 14:12:35 +08:00
Brandon Chen
58c671483e fix: add RETURN_HOME functionality for new vacuum cleaner model (#1344) 2025-08-19 10:15:01 +08:00
Li Shuzhen
7c97b85f02 docs: update changelog and version to v0.4.1 (#1336) 2025-08-04 09:44:12 +08:00