Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
254 commits
Select commit Hold shift + click to select a range
d8c93d5
Bump intents to 2025.7.30 (#149678)
synesthesiam Jul 30, 2025
3da3cf7
Bump ZHA to 0.0.64 (#149683)
puddly Jul 30, 2025
29daf13
Fix `KeyError` in friends coordinator (#149684)
tr4nt0r Jul 30, 2025
aa29415
Fix ContextVar deprecation warning in homeassistant_hardware integrat…
Copilot Jul 31, 2025
7eb7c66
Explicitly pass config_entry to miele coordinator (#149691)
astrandb Jul 30, 2025
59eace6
Add translations for all fields in template integration (#149692)
Petro31 Jul 30, 2025
1deae3e
Bump reolink-aio to 0.14.5 (#149700)
starkillerOG Jul 30, 2025
918ec78
Add missing translations for miele dishwasher (#149702)
astrandb Jul 30, 2025
d390681
Fix inconsistent use of the term 'target' and a typo in MQTT transla…
jbouwh Jul 30, 2025
21e3b8d
Fix typo in backup log message (#149705)
rsiv Jul 30, 2025
537d09c
Fix Miele induction hob empty state (#149706)
aturri Jul 30, 2025
041c417
Fix bug when interpreting miele action response (#149710)
astrandb Jul 30, 2025
68c4309
Fix ESPHome unnecessary probing on DHCP discovery (#149713)
bdraco Jul 30, 2025
ab9eebd
Bump aioesphomeapi to 37.1.6 (#149715)
bdraco Jul 30, 2025
bd0a3f5
Bump aioesphomeapi to 37.2.0 (#149732)
bdraco Jul 31, 2025
f5f63b9
Make _EventDeviceRegistryUpdatedData_Remove JSON serializable (#149734)
emontnemery Jul 31, 2025
3ccb7de
Nitpick default translations for template integration (#149740)
Petro31 Jul 31, 2025
3fc6ebd
Fix unique_id in config validation for legacy weather platform (#149742)
Petro31 Jul 31, 2025
fc04e0b
Update frontend to 20250731.0 (#149757)
bramkragten Jul 31, 2025
22214e8
Fix kitchen_sink option flow (#149760)
emontnemery Jul 31, 2025
15cb48b
Bump version to 2025.8.0b1
bramkragten Jul 31, 2025
38d0ebb
Add diagnostics to UISP AirOS (#149631)
CoMPaTech Aug 1, 2025
70e54fd
Improve test of FlowHandler.add_suggested_values_to_schema (#149759)
emontnemery Jul 31, 2025
1662d36
Fix `add_suggested_values_to_schema` when the schema has sections (#1…
karwosts Jul 31, 2025
9435b0a
Fix flaky velbus test (#149743)
emontnemery Aug 1, 2025
073589a
Deprecate DeviceEntry.suggested_area (#149730)
emontnemery Aug 1, 2025
b521b1e
Make device suggested_area only influence new devices (#149758)
emontnemery Aug 1, 2025
c59fbde
Fix ZHA ContextVar deprecation by passing config_entry (#149748)
Copilot Jul 31, 2025
a095631
Bump aioesphomeapi to 37.2.2 (#149755)
bdraco Jul 31, 2025
6857e87
Bump pylitterbot to 2024.2.3 (#149763)
natekspencer Jul 31, 2025
c8069a3
Bump motionblinds to 0.6.30 (#149764)
starkillerOG Jul 31, 2025
6b93f6d
Hide configuration URL when Uptime Kuma is installed locally (#149781)
tr4nt0r Jul 31, 2025
b60b1fc
Bump VoIP utils to 0.3.4 (#149786)
jaminh Aug 1, 2025
9649fbc
Fix tuya light supported color modes (#149793)
epenet Aug 1, 2025
35d0c25
Fix descriptions for template number fields (#149804)
NoRi2909 Aug 1, 2025
6877fda
Add scopes in config flow auth request for Volvo integration (#149813)
thomasddn Aug 2, 2025
214940d
Add translation for `absolute_humidity` device class to `template` (#…
NoRi2909 Aug 1, 2025
7e5cf17
Add translation for `absolute_humidity` device class to `random` (#14…
NoRi2909 Aug 1, 2025
3a8d962
Add translation for `absolute_humidity` device class to `mqtt` (#149818)
NoRi2909 Aug 1, 2025
6a17a12
Update reference for `volatile_organic_compounds_parts` in `template`…
NoRi2909 Aug 1, 2025
1d383e8
Fix initialisation of Apps and Radios list for Squeezebox (#149834)
peteS-UK Aug 2, 2025
8d0ceff
Fix Z-Wave config entry state conditions in listen task (#149841)
MartinHjelmare Aug 2, 2025
c459ceb
Update `denonavr` to `1.1.2` (#149842)
ol-iver Aug 2, 2025
138c191
Fix Miele hob translation keys (#149865)
aturri Aug 2, 2025
c268e57
Bump python-open-router to 0.3.1 (#149873)
joostlek Aug 3, 2025
89f6cfe
Fix Z-Wave handling of driver ready event (#149879)
MartinHjelmare Aug 3, 2025
47a7ed4
Bump `imgw_pib` to version 1.5.2 (#149892)
bieniu Aug 3, 2025
0270524
Bump yalexs-ble to 3.1.2 (#149917)
bdraco Aug 4, 2025
5e8cd19
Bump aiodiscover to 2.7.1 (#149920)
bdraco Aug 4, 2025
b789c11
Bump dbus-fast to 2.44.3 (#149921)
bdraco Aug 4, 2025
9ef7c6c
Bump ZHA to 0.0.65 (#149922)
puddly Aug 4, 2025
2b7a434
Bump version to 2025.8.0b2
bramkragten Aug 4, 2025
e48820b
Matter pump setpoint CurrentLevel limit (#149689)
lboue Aug 5, 2025
49c23de
Update sensor icons in Volvo integration (#149811)
CFenner Aug 4, 2025
636c1b7
Add translation strings for unsupported OS version (#149837)
mdegat01 Aug 4, 2025
90fc7d3
Bump python-airos to 0.2.4 (#149885)
CoMPaTech Aug 4, 2025
0dac635
Bump aiomealie to 0.10.1 (#149890)
andrew-codechimp Aug 3, 2025
82d153a
Fix options for error sensor in Husqvarna Automower (#149901)
Thomas55555 Aug 3, 2025
53769da
Bump yt-dlp to 2025.07.21 (#149916)
andreimoraru Aug 4, 2025
79ef51f
Fix credit sensor when there are no vehicles in Teslemetry (#149925)
Bre77 Aug 4, 2025
3b1bb41
Airthings ContextVar warning (#149930)
LaStrada Aug 4, 2025
aa700c3
Pass config entry to hue coordinator (#149941)
joostlek Aug 4, 2025
a2722f0
Pass config entry to Mill coordinator (#149942)
joostlek Aug 4, 2025
d50b940
Pass config entry to Simplisafe coordinator (#149943)
joostlek Aug 4, 2025
ab5aac4
Pass config entry to Kraken coordinator (#149944)
joostlek Aug 4, 2025
6cb48da
Pass config entry to Meteo France coordinator (#149945)
joostlek Aug 4, 2025
a5a45ce
Pass config entry to Smarttub coordinator (#149946)
joostlek Aug 4, 2025
4e3309b
Pass config entry to Snoo coordinator (#149947)
joostlek Aug 4, 2025
dfc16d9
Pass config entry to Broadlink coordinator (#149949)
joostlek Aug 4, 2025
4b0b268
Fix DeviceEntry.suggested_area deprecation warning (#149951)
emontnemery Aug 4, 2025
f832a28
Pass config entry to Unifi coordinator (#149952)
joostlek Aug 4, 2025
e0e4fc8
Pass config entry to AsusWRT coordinator (#149953)
joostlek Aug 4, 2025
0c0604e
Pass config entry to Fronius coordinator (#149954)
joostlek Aug 4, 2025
b163f2b
Pass config entry to SMS coordinator (#149955)
joostlek Aug 4, 2025
641621d
Bump hass-nabucasa from 0.110.0 to 0.110.1 (#149956)
ludeeus Aug 4, 2025
a06557e
Pass config entry to Remote Calendar coordinator (#149958)
joostlek Aug 4, 2025
778fe96
Fix optimistic covers (#149962)
Petro31 Aug 4, 2025
4596c16
Direct migrations with Z-Wave JS UI to docs (#149966)
MartinHjelmare Aug 4, 2025
03bd133
Rename Tuya fixture files (#149927)
epenet Aug 4, 2025
896062d
Fix Tuya fan speeds with numeric values (#149971)
epenet Aug 5, 2025
d810b4c
Bump zwave-js-server-python to 0.67.1 (#149972)
MartinHjelmare Aug 4, 2025
7a99661
Bump hass-nabucasa from 0.110.1 to 0.111.0 (#149977)
ludeeus Aug 4, 2025
164e587
Bump deebot-client to 13.6.0 (#149983)
edenhaus Aug 5, 2025
67ecea0
Create battery_level deprecation repair for template vacuum platform …
Petro31 Aug 4, 2025
74c2549
Bump icalendar from 6.1.0 to 6.3.1 for CalDav (#149990)
grzesjam Aug 5, 2025
d20302f
Update knx-frontend to 2025.8.4.154919 (#149991)
farmio Aug 5, 2025
faf0ded
Bump aioautomower to 2.1.2 (#150003)
Thomas55555 Aug 5, 2025
8f5bd51
Bump wyoming to 1.7.2 (#150007)
synesthesiam Aug 4, 2025
094fe43
Fix Z-Wave duplicate provisioned device (#150008)
MartinHjelmare Aug 5, 2025
8082739
Bump version to 2025.8.0b3
frenck Aug 5, 2025
55301a5
Fix PG&E and Duquesne Light Company in Opower (#149658)
tronikos Aug 6, 2025
a548e13
Deprecate MQTT vacuum battery feature and remove it as default featur…
jbouwh Aug 6, 2025
52984f2
Add missing translations for unhealthy Supervisor issues (#150036)
agners Aug 6, 2025
83ccdb3
Ignore vacuum entities that properly deprecate battery (#150043)
joostlek Aug 5, 2025
e5f776f
Improve downloader service (#150046)
MartinHjelmare Aug 5, 2025
7e16973
Default to zero quantity on new todo items in Mealie (#150047)
andrew-codechimp Aug 5, 2025
9d806ae
Update frontend to 20250805.0 (#150049)
bramkragten Aug 5, 2025
20e78a1
Change AI task strings (#150051)
joostlek Aug 5, 2025
e5b0a36
Bump reolink-aio to 0.14.6 (#150055)
starkillerOG Aug 5, 2025
80e3655
Fix template sensor uom string (#150057)
karwosts Aug 5, 2025
c8d54fc
Remove matter vacuum battery level attribute (#150061)
MartinHjelmare Aug 5, 2025
baa2d75
Bump axis to v65 (#150065)
Kane610 Aug 5, 2025
b370b7a
Bump soco to 0.30.11 (#150072)
PeteRager Aug 5, 2025
00baecd
Bump yalexs to 8.11.1 (#150073)
bdraco Aug 5, 2025
b6b4227
Bump habluetooth to 4.0.2 (#150078)
bdraco Aug 6, 2025
f3a50c1
Bump pyswitchbot to 0.68.3 (#150080)
zerzhang Aug 6, 2025
0a72f31
Bump ZHA to 0.0.66 (#150081)
puddly Aug 6, 2025
a9998b4
Bump hass-nabucasa from 0.111.0 to 0.111.1 (#150082)
ludeeus Aug 6, 2025
4e21ef5
Update knx-frontend to 2025.8.6.52906 (#150085)
philippwaller Aug 6, 2025
d2586ca
Remove tuya vacuum battery level attribute (#150086)
epenet Aug 6, 2025
47946d0
Add Tuya debug logging for new devices (#150091)
epenet Aug 6, 2025
fa587ce
Fix hassio tests by only mocking supervisor id (#150093)
edenhaus Aug 6, 2025
75200a9
Reduce Reolink fimware polling from 12h to 24h (#150095)
starkillerOG Aug 6, 2025
1693299
Enable disabled Anthropic config entries after entry migration (#150098)
joostlek Aug 6, 2025
9820956
Enable disabled OpenAI config entries after entry migration (#150099)
joostlek Aug 6, 2025
855e8b0
Bump version to 2025.8.0b4
frenck Aug 6, 2025
94bade0
Fix zero-argument functions with as_function (#150062)
depoll Aug 6, 2025
d18f627
Fix update coordinator ContextVar log for custom integrations (#150100)
MartinHjelmare Aug 6, 2025
0478f43
Bump holidays to 0.78 (#150103)
gjohansson-ST Aug 6, 2025
2cf5bad
Enable disabled Ollama config entries after entry migration (#150105)
joostlek Aug 6, 2025
c4c14be
Update frontend to 20250806.0 (#150106)
bramkragten Aug 6, 2025
ad8ff75
Bump version to 2025.8.0b5
frenck Aug 6, 2025
6243517
Improve miele climate test coverage (#149859)
astrandb Aug 3, 2025
dd9bd50
Deprecate Roborock battery feature (#150126)
luca-angemi Aug 6, 2025
d791d66
Bump version to 2025.8.0
frenck Aug 6, 2025
f074d81
2025.8.0 (#150115)
frenck Aug 6, 2025
3191280
Make Tuya complex type handling explicit (#149677)
epenet Aug 4, 2025
ee32992
Fix Enigma2 startup hang (#149756)
BlackBadPinguin Aug 7, 2025
efcffd1
Fix dialog enhancement switch for Sonos Arc Ultra (#150116)
PeteRager Aug 8, 2025
8edc5f0
Bump ZHA to 0.0.67 (#150132)
puddly Aug 6, 2025
6f4d405
Bump airOS to 0.2.6 improving device class matching more devices (#15…
CoMPaTech Aug 8, 2025
42a3bef
Handle HusqvarnaWSClientError (#150145)
Thomas55555 Aug 8, 2025
2223bdb
Fix Progettihwsw config flow (#150149)
gaspa85 Aug 8, 2025
c653bff
Bump imgw_pib to version 1.5.3 (#150178)
bieniu Aug 7, 2025
7951e82
Fix description of `button.press` action (#150181)
NoRi2909 Aug 7, 2025
4765d9d
Migrate unique_id only if monitor_id is present in Uptime Kuma (#150197)
tr4nt0r Aug 8, 2025
beca01e
Silence vacuum battery deprecation for built in integrations (#150204)
MartinHjelmare Aug 7, 2025
bc70aee
Bump ZHA to 0.0.68 (#150208)
puddly Aug 8, 2025
23619fb
Bump hass-nabucasa from 0.111.1 to 0.111.2 (#150209)
ludeeus Aug 7, 2025
8d821d9
Fix JSON serialization for ZHA diagnostics download (#150210)
puddly Aug 8, 2025
3ef332e
Ignore MQTT vacuum battery warning (#150211)
MartinHjelmare Aug 7, 2025
8afe3fe
Handle Unifi Protect BadRequest exception during API key creation (#1…
RaHehl Aug 8, 2025
90c03f4
Fix Tibber coordinator ContextVar warning (#150229)
MartinHjelmare Aug 7, 2025
a2931ef
Fix handing for zero volume error in Squeezebox (#150265)
peteS-UK Aug 8, 2025
6601995
Fix error on startup when no Apps or Radio plugins are installed for …
peteS-UK Aug 8, 2025
762c179
Volvo: fix missing charging power options (#150272)
thomasddn Aug 8, 2025
0c31ec9
Constraint num2words to 0.5.14 (#150276)
edenhaus Aug 8, 2025
a1731cd
Volvo: fix distance to empty battery (#150278)
thomasddn Aug 8, 2025
3d39fb0
Add GPT-5 support (#150281)
Shulyaka Aug 8, 2025
39f41fe
Volvo: Skip unsupported API fields (#150285)
thomasddn Aug 9, 2025
91b10fb
Remove misleading "the" from Launch Library configuration (#150288)
NoRi2909 Aug 8, 2025
fde548b
Set suggested display precision on Volvo energy/fuel consumption sens…
steinmn Aug 9, 2025
a885493
Bump airOS to 0.2.7 supporting firmware 8.7.11 (#150298)
CoMPaTech Aug 9, 2025
0c74e22
Update knx-frontend to 2025.8.9.63154 (#150323)
philippwaller Aug 9, 2025
3158aa8
Update pystiebeleltron to 0.2.3 (#150339)
ThyMYthOS Aug 11, 2025
6f5d72f
Update frontend to 20250811.0 (#150404)
bramkragten Aug 11, 2025
5fdd04b
Handle empty electricity RAW sensors in Tuya (#150406)
epenet Aug 11, 2025
dc5d159
Lower Z-Wave firmware check delay (#150411)
MartinHjelmare Aug 11, 2025
7ed14f0
Bump version to 2025.8.1
frenck Aug 11, 2025
1aeced0
Fix issue with Tuya suggested unit (#150414)
epenet Aug 11, 2025
1e87f0c
Revert "Update pystiebeleltron to 0.2.3 (#150339)"
frenck Aug 11, 2025
dc8aaac
2025.8.1 (#150412)
frenck Aug 11, 2025
8d49cb1
Add pymodbus to package constraints (#150420)
epenet Aug 15, 2025
391c9a6
Fix enphase_envoy non existing via device warning at first config. (#…
catsmanac Aug 12, 2025
b5bd61b
Handle non-streaming TTS case correctly (#150218)
synesthesiam Aug 11, 2025
e22e7f1
Pi_hole - Account for auth succeeding when it shouldn't (#150413)
HarvsG Aug 13, 2025
8b2fce9
Bump habiticalib to version 0.4.2 (#150417)
tr4nt0r Aug 11, 2025
2ad470d
Fix optimistic set to false for template entities (#150421)
Petro31 Aug 15, 2025
ffbb7a2
Fix error of the Powerfox integration in combination with the new Pow…
DavidCraftDev Aug 12, 2025
c58a188
Bump python-snoo to 0.7.0 (#150434)
kevin-david Aug 11, 2025
bd1b814
Fix brightness command not sent when in white color mode (#150439)
wedsa5 Aug 12, 2025
2725abf
Bump cookidoo-api to 0.14.0 (#150450)
miaucl Aug 12, 2025
fed6f19
Fix YoLink valve state when device running in class A mode (#150456)
matrixd2 Aug 12, 2025
3d4d57f
Additional Fix error on startup when no Apps or Radio plugins are ins…
peteS-UK Aug 12, 2025
b0ab3cd
Fix re-auth flow for Volvo integration (#150478)
thomasddn Aug 15, 2025
8f94657
Improve Z-Wave manual config flow step description (#150479)
MartinHjelmare Aug 12, 2025
d9ebda4
Add missing boost2 code for Miele hobs (#150481)
astrandb Aug 12, 2025
82390f6
Bump airOS to 0.2.8 (#150504)
CoMPaTech Aug 12, 2025
56b4c55
Bump aiowebostv to 0.7.5 (#150514)
thecode Aug 12, 2025
82907e5
Bump bleak-retry-connector to 4.0.1 (#150515)
bdraco Aug 12, 2025
4213427
Bump aiodhcpwatcher to 1.2.1 (#150519)
bdraco Aug 12, 2025
776726a
Bump python-snoo to 0.8.1 (#150530)
Lash-L Aug 13, 2025
312d8aa
Bump uv to 0.8.9 (#150542)
edenhaus Aug 13, 2025
5a49007
Bump python-snoo to 0.8.2 (#150569)
Lash-L Aug 13, 2025
1643d5d
Change Snoo to use MQTT instead of PubNub (#150570)
Lash-L Aug 13, 2025
2c1407f
Make sure we update the api version in philips_js discovery (#150604)
elupus Aug 14, 2025
87a2d3e
Bump pymiele to 0.5.3 (#150216)
astrandb Aug 7, 2025
1a0b61c
Bump pymiele to 0.5.4 (#150605)
astrandb Aug 13, 2025
0b337c7
Bump airOS to 0.2.11 (#150627)
CoMPaTech Aug 14, 2025
837472c
Bump uiprotect to 7.21.1 (#150657)
bdraco Aug 14, 2025
83226ed
Bump onvif-zeep-async to 4.0.3 (#150663)
bdraco Aug 15, 2025
0647222
Bump python-snoo to 0.8.3 (#150670)
Lash-L Aug 15, 2025
22e19e7
Fix missing labels for subdiv in workday (#150684)
gjohansson-ST Aug 15, 2025
c551a13
Improve handling decode errors in rest (#150699)
gjohansson-ST Aug 15, 2025
0bcc0f3
Bump version to 2025.8.2
frenck Aug 15, 2025
d7320f0
2025.8.2 (#150718)
frenck Aug 15, 2025
c30d778
Bump to zcc-helper==3.6 (#150608)
markhannon Aug 19, 2025
4e52826
fix(amberelectric): add request timeouts (#150613)
JP-Ellis Aug 20, 2025
932c5cc
Bump renault-api to 0.4.0 (#150624)
epenet Aug 19, 2025
3dd091d
Update hassfest package exceptions (#150744)
cdce8p Aug 16, 2025
122af46
Bump boschshcpy to 0.2.107 (#150754)
tschamm Aug 16, 2025
199b7e8
Fix for bosch_shc: 'device_registry.async_get_or_create' referencing …
tschamm Aug 17, 2025
332996c
Fix volume step error in Squeezebox media player (#150760)
peteS-UK Aug 17, 2025
27b32c5
Show charging power as 0 when not charging for the Volvo integration …
thomasddn Aug 19, 2025
38aba81
Pin gql to 3.5.3 (#150800)
joostlek Aug 17, 2025
81377be
Bump opower to 0.15.2 (#150809)
tronikos Aug 17, 2025
1ca6c4b
Include device data in Withings diagnostics (#150816)
joostlek Aug 18, 2025
92b988a
Abort Nanoleaf discovery flows with user flow (#150818)
joostlek Aug 18, 2025
4b2a149
Bump yt-dlp to 2025.08.11 (#150821)
joostlek Aug 18, 2025
7639e12
Initialize the coordinator's data to include data.options. (#150839)
LG-ThinQ-Integration Aug 21, 2025
fe71b54
Handle Z-Wave RssiErrorReceived (#150846)
MartinHjelmare Aug 18, 2025
59d7313
Use correct unit and class for the Imeon inverter sensors (#150847)
Imeon-Energy Aug 19, 2025
9457710
Bump holidays to 0.79 (#150857)
gjohansson-ST Aug 18, 2025
a3f5c3f
Bump aiorussound to 4.8.1 (#150858)
noahhusby Aug 19, 2025
d169822
Add missing unsupported reasons to list (#150866)
agners Aug 19, 2025
cb8669c
Fix icloud service calls (#150881)
epenet Aug 19, 2025
6383f93
Bump pysmartthings to 3.2.9 (#150892)
joostlek Aug 20, 2025
0cd28e7
Fix PWA theme color to match darker blue color scheme in 2025.8 (#150…
balloob Aug 19, 2025
9414356
Bump bleak-retry-connector to 4.0.2 (#150899)
bdraco Aug 19, 2025
e4329ab
update pyatmo to v9.2.3 (#150900)
cgtobi Aug 20, 2025
1bd5aa0
Fix structured output object selector conversion for OpenAI (#150916)
balloob Aug 19, 2025
bb96602
Matter valve Open command doesn't support TargetLevel=0 (#150922)
kepstin Aug 21, 2025
2e7821d
Bump ESPHome minimum stable BLE version to 2025.8.0 (#150924)
bdraco Aug 20, 2025
9194ddd
Bump imgw-pib to version 1.5.4 (#150930)
bieniu Aug 20, 2025
add75e0
Fix update retry for Imeon inverter integration (#150936)
Imeon-Energy Aug 21, 2025
2f4e29b
Bump python-mystrom to 2.5.0 (#150947)
elsi06 Aug 21, 2025
2dad6fa
Ask user for Z-Wave RF region if country is missing (#150959)
MartinHjelmare Aug 21, 2025
edc1989
Bump onvif-zeep-async to 4.0.4 (#150969)
bdraco Aug 21, 2025
71b2d46
Except ujson from license check (#150980)
emontnemery Aug 21, 2025
82f94de
Enable country site autodetection in Alexa Devices (#150989)
chemelli74 Aug 21, 2025
61a50e7
Update frontend to 20250811.1 (#151005)
bramkragten Aug 21, 2025
bb4f8ad
Bump version to 2025.8.3
balloob Aug 21, 2025
3b1b095
2025.8.3 (#151008)
balloob Aug 21, 2025
c2c561b
Don't use custom bypass in SIA (#132628)
etnoy Aug 27, 2025
d4bc066
Bump bleak-retry-connector to 4.4.1 (#151217)
bdraco Aug 27, 2025
d72cc45
Bump aioautomower to 2.2.0 (#151207)
Thomas55555 Aug 27, 2025
0bb16be
Make event entity dependend on websocket in Husqvarna Automower (#151…
Thomas55555 Aug 27, 2025
50a2eba
Add platform patching in `init_integration` fixture in copilot-instru…
yuxincs Aug 27, 2025
6e45713
Ask for PIN in Husqvarna Automower BLE integration (#135440)
alistair23 Aug 27, 2025
10bf1cb
Add DeviceInfo to Velux entities (#149575)
wollew Aug 27, 2025
8b10128
Fix CCM15 temperature set always changes the ac_mode to cool (#134719)
MosheL Aug 27, 2025
2abb914
Update husqvarna_automower_ble bluetooth discovery checks (#151225)
emontnemery Aug 27, 2025
bfd4f85
Fix husqvarna_automower_ble activity mapping (#151228)
emontnemery Aug 27, 2025
85f3f18
Fix stale comment in device registry (#151227)
emontnemery Aug 27, 2025
3a48c95
Fix stale comment in entity registry (#151226)
emontnemery Aug 27, 2025
fc1c0d2
Add online status to Tuya debug log (#151222)
epenet Aug 27, 2025
1759bfb
Merge branch 'master' into dev
frenck Aug 27, 2025
43a1a67
Add object_id to modern template syntax (#150489)
Petro31 Aug 27, 2025
e894a03
Person: Use the home zone lat/lon coordinates when detected home by a…
Hypfer Aug 27, 2025
0d29b2d
Add MQTT alarm control panel subentry support (#150395)
jbouwh Aug 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -1073,7 +1073,11 @@ async def test_flow_connection_error(hass, mock_api_error):

### Entity Testing Patterns
```python
@pytest.mark.parametrize("init_integration", [Platform.SENSOR], indirect=True)
@pytest.fixture
def platforms() -> list[Platform]:
"""Overridden fixture to specify platforms to test."""
return [Platform.SENSOR] # Or another specific platform as needed.

@pytest.mark.usefixtures("entity_registry_enabled_by_default", "init_integration")
async def test_entities(
hass: HomeAssistant,
Expand Down Expand Up @@ -1120,16 +1124,25 @@ def mock_device_api() -> Generator[MagicMock]:
)
yield api

@pytest.fixture
def platforms() -> list[Platform]:
"""Fixture to specify platforms to test."""
return PLATFORMS

@pytest.fixture
async def init_integration(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_device_api: MagicMock,
platforms: list[Platform],
) -> MockConfigEntry:
"""Set up the integration for testing."""
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()

with patch("homeassistant.components.my_integration.PLATFORMS", platforms):
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()

return mock_config_entry
```

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/bluetooth/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"quality_scale": "internal",
"requirements": [
"bleak==1.0.1",
"bleak-retry-connector==4.3.0",
"bleak-retry-connector==4.4.1",
"bluetooth-adapters==2.0.0",
"bluetooth-auto-recovery==1.5.2",
"bluetooth-data-tools==1.28.2",
Expand Down
13 changes: 8 additions & 5 deletions homeassistant/components/ccm15/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import logging
from typing import Any

from ccm15 import CCM15DeviceState
from ccm15 import CCM15DeviceState, CCM15SlaveDevice

from homeassistant.components.climate import (
ATTR_HVAC_MODE,
FAN_AUTO,
FAN_HIGH,
FAN_LOW,
Expand Down Expand Up @@ -88,7 +89,7 @@ def __init__(
)

@property
def data(self) -> CCM15DeviceState | None:
def data(self) -> CCM15SlaveDevice | None:
"""Return device data."""
return self.coordinator.get_ac_data(self._ac_index)

Expand Down Expand Up @@ -144,15 +145,17 @@ def extra_state_attributes(self) -> dict[str, Any]:
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the target temperature."""
if (temperature := kwargs.get(ATTR_TEMPERATURE)) is not None:
await self.coordinator.async_set_temperature(self._ac_index, temperature)
await self.coordinator.async_set_temperature(
self._ac_index, self.data, temperature, kwargs.get(ATTR_HVAC_MODE)
)

async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the hvac mode."""
await self.coordinator.async_set_hvac_mode(self._ac_index, hvac_mode)
await self.coordinator.async_set_hvac_mode(self._ac_index, self.data, hvac_mode)

async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set the fan mode."""
await self.coordinator.async_set_fan_mode(self._ac_index, fan_mode)
await self.coordinator.async_set_fan_mode(self._ac_index, self.data, fan_mode)

async def async_turn_off(self) -> None:
"""Turn off."""
Expand Down
35 changes: 25 additions & 10 deletions homeassistant/components/ccm15/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ async def _fetch_data(self) -> CCM15DeviceState:
"""Get the current status of all AC devices."""
return await self._ccm15.get_status_async()

async def async_set_state(self, ac_index: int, state: str, value: int) -> None:
async def async_set_state(self, ac_index: int, data) -> None:
"""Set new target states."""
if await self._ccm15.async_set_state(ac_index, state, value):
if await self._ccm15.async_set_state(ac_index, data):
await self.async_request_refresh()

def get_ac_data(self, ac_index: int) -> CCM15SlaveDevice | None:
Expand All @@ -67,17 +67,32 @@ def get_ac_data(self, ac_index: int) -> CCM15SlaveDevice | None:
return None
return self.data.devices[ac_index]

async def async_set_hvac_mode(self, ac_index, hvac_mode: HVACMode) -> None:
"""Set the hvac mode."""
async def async_set_hvac_mode(
self, ac_index: int, data: CCM15SlaveDevice, hvac_mode: HVACMode
) -> None:
"""Set the HVAC mode."""
_LOGGER.debug("Set Hvac[%s]='%s'", ac_index, str(hvac_mode))
await self.async_set_state(ac_index, "mode", CONST_STATE_CMD_MAP[hvac_mode])
data.ac_mode = CONST_STATE_CMD_MAP[hvac_mode]
await self.async_set_state(ac_index, data)

async def async_set_fan_mode(self, ac_index, fan_mode: str) -> None:
async def async_set_fan_mode(
self, ac_index: int, data: CCM15SlaveDevice, fan_mode: str
) -> None:
"""Set the fan mode."""
_LOGGER.debug("Set Fan[%s]='%s'", ac_index, fan_mode)
await self.async_set_state(ac_index, "fan", CONST_FAN_CMD_MAP[fan_mode])

async def async_set_temperature(self, ac_index, temp) -> None:
data.fan_mode = CONST_FAN_CMD_MAP[fan_mode]
await self.async_set_state(ac_index, data)

async def async_set_temperature(
self,
ac_index: int,
data: CCM15SlaveDevice,
temp: int,
hvac_mode: HVACMode | None,
) -> None:
"""Set the target temperature mode."""
_LOGGER.debug("Set Temp[%s]='%s'", ac_index, temp)
await self.async_set_state(ac_index, "temp", temp)
data.temperature_setpoint = temp
if hvac_mode is not None:
data.ac_mode = CONST_STATE_CMD_MAP[hvac_mode]
await self.async_set_state(ac_index, data)
2 changes: 1 addition & 1 deletion homeassistant/components/ccm15/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/ccm15",
"iot_class": "local_polling",
"requirements": ["py-ccm15==0.0.9"]
"requirements": ["py_ccm15==0.1.2"]
}
10 changes: 8 additions & 2 deletions homeassistant/components/husqvarna_automower/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def __init__(
self.new_areas_callbacks: list[Callable[[str, set[int]], None]] = []
self.pong: datetime | None = None
self.websocket_alive: bool = False
self.websocket_callbacks: list[Callable[[bool], None]] = []
self._watchdog_task: asyncio.Task | None = None

@override
Expand Down Expand Up @@ -198,12 +199,17 @@ def _should_poll(self) -> bool:
)

async def _pong_watchdog(self) -> None:
"""Watchdog to check for pong messages."""
_LOGGER.debug("Watchdog started")
try:
while True:
_LOGGER.debug("Sending ping")
self.websocket_alive = await self.api.send_empty_message()
_LOGGER.debug("Ping result: %s", self.websocket_alive)
is_alive = await self.api.send_empty_message()
_LOGGER.debug("Ping result: %s", is_alive)
if self.websocket_alive != is_alive:
self.websocket_alive = is_alive
for ws_callback in self.websocket_callbacks:
ws_callback(is_alive)

await asyncio.sleep(PING_INTERVAL)
_LOGGER.debug("Websocket alive %s", self.websocket_alive)
Expand Down
18 changes: 18 additions & 0 deletions homeassistant/components/husqvarna_automower/event.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Creates the event entities for supported mowers."""

from collections.abc import Callable
import logging

from aioautomower.model import SingleMessageData

Expand All @@ -18,6 +19,7 @@
from .coordinator import AutomowerDataUpdateCoordinator
from .entity import AutomowerBaseEntity

_LOGGER = logging.getLogger(__name__)
PARALLEL_UPDATES = 1

ATTR_SEVERITY = "severity"
Expand Down Expand Up @@ -80,6 +82,12 @@ def __init__(
"""Initialize Automower message event entity."""
super().__init__(mower_id, coordinator)
self._attr_unique_id = f"{mower_id}_message"
self.websocket_alive: bool = coordinator.websocket_alive

@property
def available(self) -> bool:
"""Return True if the entity is available."""
return self.websocket_alive and self.mower_id in self.coordinator.data

@callback
def _handle(self, msg: SingleMessageData) -> None:
Expand All @@ -102,7 +110,17 @@ async def async_added_to_hass(self) -> None:
"""Register callback when entity is added to hass."""
await super().async_added_to_hass()
self.coordinator.api.register_single_message_callback(self._handle)
self.coordinator.websocket_callbacks.append(self._handle_websocket_update)

async def async_will_remove_from_hass(self) -> None:
"""Unregister WebSocket callback when entity is removed."""
self.coordinator.api.unregister_single_message_callback(self._handle)
self.coordinator.websocket_callbacks.remove(self._handle_websocket_update)

def _handle_websocket_update(self, is_alive: bool) -> None:
"""Handle websocket status changes."""
if self.websocket_alive == is_alive:
return
self.websocket_alive = is_alive
_LOGGER.debug("WebSocket status changed to %s, updating entity state", is_alive)
self.async_write_ha_state()
2 changes: 1 addition & 1 deletion homeassistant/components/husqvarna_automower/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
"iot_class": "cloud_push",
"loggers": ["aioautomower"],
"quality_scale": "silver",
"requirements": ["aioautomower==2.1.2"]
"requirements": ["aioautomower==2.2.0"]
}
20 changes: 16 additions & 4 deletions homeassistant/components/husqvarna_automower_ble/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@

from homeassistant.components import bluetooth
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ADDRESS, CONF_CLIENT_ID, Platform
from homeassistant.const import CONF_ADDRESS, CONF_CLIENT_ID, CONF_PIN, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady

from .const import LOGGER
from .const import DOMAIN, LOGGER
from .coordinator import HusqvarnaCoordinator

type HusqvarnaConfigEntry = ConfigEntry[HusqvarnaCoordinator]
Expand All @@ -26,10 +26,18 @@

async def async_setup_entry(hass: HomeAssistant, entry: HusqvarnaConfigEntry) -> bool:
"""Set up Husqvarna Autoconnect Bluetooth from a config entry."""
if CONF_PIN not in entry.data:
raise ConfigEntryAuthFailed(
translation_domain=DOMAIN,
translation_key="pin_required",
translation_placeholders={"domain_name": "Husqvarna Automower BLE"},
)

address = entry.data[CONF_ADDRESS]
pin = int(entry.data[CONF_PIN])
channel_id = entry.data[CONF_CLIENT_ID]

mower = Mower(channel_id, address)
mower = Mower(channel_id, address, pin)

await close_stale_connections_by_address(address)

Expand All @@ -39,6 +47,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: HusqvarnaConfigEntry) ->
hass, address, connectable=True
) or await get_device(address)
response_result = await mower.connect(device)
if response_result == ResponseResult.INVALID_PIN:
raise ConfigEntryAuthFailed(
f"Unable to connect to device {address} due to wrong PIN"
)
if response_result != ResponseResult.OK:
raise ConfigEntryNotReady(
f"Unable to connect to device {address}, mower returned {response_result}"
Expand Down
Loading
Loading