Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
ce4fc9e
Improve ProxmoxVE config flow preparing bug fixing (#169682)
CoMPaTech May 4, 2026
2d8f369
Update Nest doorbell event to use standard DoorbellEventType.RING (#1…
allenporter May 4, 2026
179d370
Use uptime device_class for Uptime sensor (#169692)
karwosts May 3, 2026
2874282
Ignore location FORBIDDEN response for the Volvo integration (#169713)
thomasddn May 4, 2026
126058e
Bump bring-api to 1.1.2 (#169729)
tr4nt0r May 4, 2026
7c44a0b
Update frontend to 20260429.2 (#169748)
piitaya May 4, 2026
a3e1209
Bump version to 2026.5.0b1
balloob May 4, 2026
2d66ebe
Add trigger media_player.muted (#156736)
emontnemery May 5, 2026
4f78bbc
Use all_devices in ViCare diagnostics for completeness (#169429)
lackas May 4, 2026
4d575e6
Improve template reload (#169480)
emontnemery May 5, 2026
8e5bf2a
Fix async_unload teardown race in scripts (#169562)
arturpragacz May 5, 2026
c56c506
Add precipitation device class to WeatherFlow Cloud accumulation sens…
shbatm May 4, 2026
f828b16
Bump pylitterbot to 2025.4.0 (#169652)
natekspencer May 5, 2026
4dfa2b8
Limit power status binary sensor to non-LR5 devices (#169659)
natekspencer May 4, 2026
663f7e3
Add Celsius and Fahrenheit to Smartthings UNITS mapping (#169686)
kernelpanic85 May 4, 2026
8218ff0
Add missing initialization charging power status option to Volvo (#16…
thomasddn May 5, 2026
53905fb
Bump victron-ble-ha-parser to 0.7.0 (#169736)
rajlaud May 5, 2026
f6dec34
Bump pytrydan to 1.0.0 (#169742)
dgomes May 4, 2026
e15852f
Fix uptime template sensor (#169743)
Petro31 May 4, 2026
a7eaa51
Fix config flow validation in Nord Pool (#169751)
gjohansson-ST May 4, 2026
643ae08
Bump Insteon-panel to 0.6.2 (#169757)
ssyrell May 4, 2026
9d0e2df
bump sense-energy to 0.14.1 (#169761)
kbickar May 4, 2026
2945b51
Bump pyTibber to 0.37.3 (#169762)
Danielhiversen May 4, 2026
58e97e7
Update xknxproject to 3.9.0 (#169775)
farmio May 5, 2026
af4cb95
Add missing code for miele washing machine (#169795)
astrandb May 5, 2026
6cfedb5
Add Sensereo matter brand (#169836)
joostlek May 5, 2026
c12e1b5
Add Zunzunbee Zigbee brand (#169838)
joostlek May 5, 2026
c5e08b2
Return the requested format for OpenAI TTS (#169839)
Shulyaka May 5, 2026
9473213
Bump version to 2026.5.0b2
balloob May 5, 2026
0e8ecd1
Catch additional errors as potentially retryable errors during energy…
masterkoppa May 2, 2026
3050e79
Expose SET_SPEED for all fans via PercentSetting in Matter (#169696)
lboue May 6, 2026
c581eaa
Add trigger timer.time_remaining (#169763)
emontnemery May 6, 2026
8e41933
Record notification from legacy notify action in Mobile App (#169749)
tr4nt0r May 6, 2026
afad1e8
Improve mobile_app device tracker tests (#169724)
emontnemery May 4, 2026
4dd996b
Add trigger media_player.unmuted (#169797)
emontnemery May 5, 2026
ffae6ed
Validate yaml matches implementation in automation options_supported …
emontnemery May 5, 2026
1d3d714
Bump intents to 2026.5.5 (#169855)
synesthesiam May 5, 2026
4b24ca9
Bump serialx to 1.7.0 (#169867)
puddly May 5, 2026
2bfdb96
Improve trigger test helper docstrings (#169869)
emontnemery May 5, 2026
c139e99
Improve condition test helper docstrings (#169871)
emontnemery May 5, 2026
22a7daa
Add method _should_include to EntityTriggerBase (#169837)
emontnemery May 5, 2026
12e443c
Improve entity trigger tests (#169881)
emontnemery May 6, 2026
4f4f464
Add method _should_include to EntityConditionBase (#169884)
emontnemery May 6, 2026
7f186f4
Add media_player volume triggers (#169885)
emontnemery May 6, 2026
d177944
Fix Zinvolt select options (#169886)
joostlek May 6, 2026
65ca790
Bump satel_integra to 1.3.1 (#169889)
Tommatheussen May 6, 2026
eabaf3b
Add media_player muted conditions (#169892)
emontnemery May 6, 2026
f08cd01
Update frontend to 20260429.3 (#169893)
bramkragten May 6, 2026
9e955d8
Add media_player volume condition (#169897)
emontnemery May 6, 2026
eab9747
Exclude incompatible entities from humidity automations (#169898)
emontnemery May 6, 2026
3e26d0d
Exclude incompatible entities from temperature automations (#169901)
emontnemery May 6, 2026
d70ffcd
Bump version to 2026.5.0b3
frenck May 6, 2026
9da9f8f
Unload scripts and conditions created by template entities (#169366)
emontnemery May 6, 2026
0c5b02e
Exclude incompatible climate entities from climate automations (#169903)
emontnemery May 6, 2026
cc83ee8
Exclude incompatible water_heater entities from water_heater automati…
emontnemery May 6, 2026
8d53f7a
Exclude incompatible humidifier entities from humidifier automations …
emontnemery May 6, 2026
8c79d1e
Remove _get_tracked_value method from EntityConditionBase (#169906)
emontnemery May 6, 2026
32f65b2
Bump pyTibber to 0.37.4 (#169907)
Danielhiversen May 6, 2026
4cd0d9d
Bump version to 2026.5.0b4
frenck May 6, 2026
b193d95
Bump version to 2026.5.0
frenck May 6, 2026
b10582b
2026.5.0 (#169484)
frenck May 6, 2026
2d05931
Added wfsens as a occupancy source in wiz (#166799)
th3spis May 7, 2026
76b878b
Fix WiZ Light config flow timeout by properly closing UDP connections…
robwasripped May 8, 2026
aac49a5
Fix IntelliFire setup recovery (#169739)
jeeftor May 7, 2026
a4227ef
Fix hassio auth IndexError on Supervisor Unix socket requests (#169911)
agners May 6, 2026
348f614
Update gardena ble to 2.8.1 (#169914)
elupus May 6, 2026
6f87d02
Bump serialx to 1.7.1 (#169928)
puddly May 6, 2026
4e61581
Bump holidays to 0.96 (#169939)
gjohansson-ST May 6, 2026
f644448
Add support for options to todo triggers (#169947)
emontnemery May 6, 2026
6fabbb3
Bump pyTibber to 0.37.5 (#169981)
Danielhiversen May 7, 2026
03aa979
Bump python-duco-client to 0.4.0 (#169776)
ronaldvdmeer May 5, 2026
5dd0436
Bump python-duco-client to 0.4.1 (#169991)
ronaldvdmeer May 7, 2026
44b1fea
Proper handling of malformed data during FRITZ!Box Tools setup (#170030)
mib1185 May 7, 2026
e1ad765
Fix websocket certificate verification Bump axis to v70 (#170038)
Kane610 May 8, 2026
cc140be
Fix `is_closed` state for DynamicGarageDoor in Overkiz (#170052)
iMicknl May 8, 2026
7b749b9
Fix tilt controls for TiltOnlyVenetianBlind in Overkiz (#170055)
iMicknl May 8, 2026
89649df
Fix cover controls for UpDownBioclimaticPergola in Overkiz (#170058)
iMicknl May 8, 2026
85c1167
Bump pyOverkiz to 1.20.3 (#170060)
iMicknl May 7, 2026
3a902e1
Bump deebot-client to 18.3.0 (#170066)
edenhaus May 7, 2026
1677577
Set `is_closed` state to `None` when a cover state returns "unknown" …
iMicknl May 8, 2026
106f815
Fix sensors getting wrong unit from MeasuredValueType attribute in Ov…
iMicknl May 8, 2026
fb7504e
Fix Z-Wave discovery crash with unknown node firmware version (#170090)
TheJulianJES May 8, 2026
ba18cde
Bump ZHA to 1.3.1 (#170095)
TheJulianJES May 8, 2026
5f98d5a
Bump python-bsblan to 5.2.1 (#170100)
liudger May 8, 2026
4940a0a
Bump blebox_uniapi to v2.5.3 (#170115)
bkobus-bbx May 8, 2026
a23131e
Fix is_closed state for DynamicGate covers in Overkiz (#170130)
iMicknl May 8, 2026
18ea40c
Fix tilt support for UpDownVenetianBlind (rts:VenetianBlindRTSCompone…
iMicknl May 8, 2026
dd0cdc4
Bump version to 2026.5.1
frenck May 8, 2026
7d77383
2026.5.1 (#170146)
frenck May 8, 2026
b0c4513
Fix ValueError for non-numeric value in LG ThinQ (#166300)
LG-ThinQ-Integration May 14, 2026
7e405e9
Only use SmartThings switch for light if it should (#166424)
r2xj May 11, 2026
1344213
Fix non unique_id for Comelit (#169756)
chemelli74 May 14, 2026
308221c
Migrate ZBT-1 and ZBT-2 to use serial number for unique_id (#169879)
puddly May 13, 2026
b4d8ba6
Update afsapi to 1.0.1 (#170073)
wlcrs May 8, 2026
7c5ef09
Fix local API incorrectly marking devices as unavailable in Overkiz (…
iMicknl May 11, 2026
7ceaebb
Fix homematicip_cloud config entry setup crash after migration to 202…
lackas May 15, 2026
c4be57a
homematicip_cloud: fix HmIP-FLC lock state polarity (#170159)
lackas May 11, 2026
18597bb
Set serial port description from `description`, not `product` (#170160)
puddly May 11, 2026
0754252
Reinit API on stale session for Vodafone Station (#170190)
chemelli74 May 14, 2026
27c7d8d
Fix MQTT device discovery not using shared QoS and encoding options (…
jbouwh May 11, 2026
7be0617
Fix entities refresh for UptimeRobot (#170217)
chemelli74 May 10, 2026
a2f2ded
Add target flow level and mode end time sensors to Duco integration (…
ronaldvdmeer Apr 30, 2026
46c49da
Add system health platform for Duco integration (#169517)
ronaldvdmeer May 8, 2026
ed3a71f
Add API version to Duco diagnostics for support triage (#169802)
ronaldvdmeer May 5, 2026
bbe64d7
Bump python-duco-client to 0.4.2 (#170027)
ronaldvdmeer May 7, 2026
c33f174
Bump python-duco-client to 0.5.0 (#170065)
ronaldvdmeer May 7, 2026
23e19ea
Handle empty BSB-LAN heating circuits (#170249)
liudger May 11, 2026
ff36498
fix: Do not forget segments from state when a new config arrives (#17…
Hypfer May 10, 2026
6f5c2a8
Bump imgw-pib to 2.1.2 (#170274)
bieniu May 10, 2026
7a38a23
iaqualink: set system specific polling interval (#170279)
flz May 11, 2026
d1962b0
Bump renault-api to 0.5.8 (#170309)
thargy May 11, 2026
03e3c46
Fix hassio.backup_partial AttributeError when folders are specified (…
agners May 11, 2026
0761d61
Fix Shelly media player availability (#170319)
bieniu May 11, 2026
0f80a4b
Cancel previous Debouncer timer handle in _schedule_timer (#170339)
raman325 May 12, 2026
c3ec51c
Bump axis to v71 (#170347)
Kane610 May 11, 2026
8c95f4f
Fix duplicate doorbell events when entity becomes unavailable (#170354)
jbouwh May 12, 2026
f75cdae
Bump serialx to 1.7.2 (#170272)
PBrunot May 10, 2026
7458026
Bump serialx to 1.7.3 (#170368)
puddly May 12, 2026
20cec56
Bump pyintesishome to 1.8.7 (#170382)
jnimmo May 12, 2026
b35ac41
Apply unit_of_measurement to energy combined power sensor (#170404)
MindFreeze May 13, 2026
05862c6
Bump pymiele version to 0.6.2 (#170419)
astrandb May 12, 2026
3383e5b
Bump aioesphomeapi to 44.24.1 (#170428)
bdraco May 12, 2026
149c796
Fix fractional setpoints in Matter climate not rounded (#170442)
TheJulianJES May 15, 2026
e14eb9f
Fix influxdb reconfigure for v1 configuration (#170448)
RobBie1221 May 13, 2026
9ecb595
Bump aioharmony to 1.0.3 (#170459)
bdraco May 12, 2026
8bd1c07
Increase WebDAV client timeout from 10 to 30 seconds (#170476)
Croydon May 13, 2026
087cb77
Fix MQTT settings in device subentry device settings are not recalled…
jbouwh May 13, 2026
3ca5cf5
Add missing optional category strings in workday (#170505)
gjohansson-ST May 13, 2026
fffc9d0
Update frontend to 20260429.4 (#170567)
bramkragten May 14, 2026
a402702
Migrate Duco to python-duco-connectivity and remove temperature senso…
ronaldvdmeer May 10, 2026
3096bcf
Bump python-duco-connectivity to 0.4.0 (#170661)
ronaldvdmeer May 15, 2026
116b63c
Bump version to 2026.5.2
frenck May 15, 2026
1e47149
Fix hassfest warning
frenck May 15, 2026
4562023
2026.5.2 (#170840)
frenck May 15, 2026
0830988
Bump qbittorrent-api to 2026.5.1 (#170181)
lumatijev May 10, 2026
b26c2f3
Improve iaqualink 429 handling (#170231)
flz May 19, 2026
356e6a6
Fix Apple TV keyboard focus binary_sensor missing on cold start (#170…
kroehre May 19, 2026
47d8adc
Add tilt controls for UpDownSheerScreen in Overkiz (#170563)
dankarization May 16, 2026
3293ebc
Fix ValueError when turning on blebox light with brightness set to 0 …
bkobus-bbx May 18, 2026
249b543
Bump aiodns to 4.0.3 (#170865)
bdraco May 16, 2026
37d6449
Populate uid and recurrence_id in CalDAV calendar events (#170910)
frenck May 16, 2026
95cc9ae
Fix is_closed state for SlidingDiscreteGateWithPedestrianPosition cov…
iMicknl May 16, 2026
2f35ad2
Disable USB discovery for teleinfo (#170933)
puddly May 16, 2026
d366027
Fix utility meter next_reset shifting forward on entity rename (#170957)
frenck May 17, 2026
228ac01
Use correct state_class for utility meters with device classes that d…
frenck May 17, 2026
4a96880
Reduce GoodWe connect retries to avoid blocking startup (#170964)
frenck May 17, 2026
5e45f37
Fix is_closed state for DiscretePositionableGarageDoor in Overkiz (#1…
iMicknl May 18, 2026
070de13
Fix controls for OpenCloseGate4T (rts:GateOpenerRTS4TComponent) in Ov…
iMicknl May 18, 2026
2456753
Prevent Google Assistant entity sync from blocking startup (#170991)
frenck May 17, 2026
ea08479
Load template extensions by class to prevent import deadlock (#170995)
frenck May 17, 2026
0bc0745
Use asyncio.get_running_loop() in emulated_hue UPnP responder (#171000)
frenck May 17, 2026
771b016
Fix Netatmo valve KeyError when hvac_action state is unavailable in O…
frenck May 17, 2026
db8589b
Fix time trigger crash when using entity_id dict format without offse…
frenck May 17, 2026
17e1050
Fix threshold preview crash when hysteresis is not provided (#171009)
frenck May 17, 2026
5a76f3b
Fix Growatt mix device IndexError when chart data is empty (#171012)
frenck May 17, 2026
37478d3
Fix SleepIQ timer units: seconds should be minutes for core climate a…
frenck May 17, 2026
a314f7b
Fix Control4 climate crash when humidity is 'Undefined' (#171015)
frenck May 17, 2026
d39775a
Fix manual alarm panel crash on restore with invalid state (#171016)
frenck May 17, 2026
266767e
Handle Daikin connection errors gracefully in coordinator (#171017)
frenck May 17, 2026
8d66752
Fix shorthand template conditions in choose blocks crashing all autom…
frenck May 17, 2026
6b15f9a
Add additional overrides to cover entity in Overkiz (#171019)
iMicknl May 18, 2026
8e1a04d
Fix Verisure alarm crash when cloud rejects arm/disarm command (#171024)
frenck May 17, 2026
51589ec
Add stop command to Overkiz pergola horizontal awning covers (#171034)
frenck May 18, 2026
cd6c3c8
Fix WeatherFlow websocket crash when data payload is None (#171037)
frenck May 18, 2026
311e5a9
Bump pyIntesishome to 1.8.8 (#171041)
jnimmo May 18, 2026
ebc582c
Return media_content_id as string in forked_daapd (#171059)
frenck May 18, 2026
ee734de
Bump aioimmich to 0.14.1 (#171138)
mib1185 May 18, 2026
7ebaaf1
Fix controls for UpDownGarageDoor4T and additional 4T covers in Overk…
iMicknl May 19, 2026
e8295e1
Fix ZHA config entries using a URI without a port (#171164)
puddly May 19, 2026
1e90882
Fix is_closed state and position for DynamicPergola covers in Overkiz…
iMicknl May 18, 2026
dc9116a
Fix tilt and position support for VenetianBlind covers in Overkiz (#1…
iMicknl May 18, 2026
54aba11
Bump version to 2026.5.3
frenck May 19, 2026
0e09019
Fix blebox light temperature scaling (#170573)
bkobus-bbx May 14, 2026
c9ed57b
2026.5.3 (#171185)
frenck May 19, 2026
5d0fdfd
Apply web search citation stripping for GPT-5.x models in OpenAI conv…
frenck May 22, 2026
8c901cc
Bump aiolyric to 2.1.0 (#171007)
yonib05 May 18, 2026
614c700
Bump python-roborock to 5.12.0 (#171112)
Lash-L May 20, 2026
1737b50
Add missing Miele Dishwasher codes (#171175)
astrandb May 19, 2026
65a4c10
Bump aiolyric to 2.1.1, Update OAuth URL for lyric (#171181)
timmo001 May 19, 2026
9d88598
Fix ZHA blocking minor version downgrades (#171319)
TheJulianJES May 20, 2026
6596f95
Bump aiodns to 4.0.4 (#171420)
bdraco May 20, 2026
a7a2c1e
Bump renault-api to 0.5.9 (#171428)
epenet May 20, 2026
49d8dc8
Fix SmartThings crash when timestamp attribute is None (#171467)
frenck May 21, 2026
135f91c
Fix habitica ignoring zero values for interval and streak (#171468)
frenck May 21, 2026
8874653
Fix PowerView cover crash when shade position is unavailable (#171471)
frenck May 20, 2026
281d6e0
Fix Wyoming satellite crash when TTS is not configured (#171513)
frenck May 20, 2026
201c0c2
Fix string ref for tedee (#171548)
zweckj May 20, 2026
9c1cd80
Fix `media_image_hash` and validate the MIME type in the Shelly media…
bieniu May 20, 2026
267b3e2
Fix update error message key in solarlog (#171611)
dontinelli May 20, 2026
33c205d
Bump wled to 0.23.0 and remove backoff exception (#171622)
mik-laj May 20, 2026
410f00c
Bump renault-api to 0.5.10 (#171692)
epenet May 21, 2026
ef5da5e
Fix exception translation placeholder mismatches in comelit (#171748)
chemelli74 May 22, 2026
7e5b448
Add missing exception translation keys in alexa_devices (#171749)
chemelli74 May 22, 2026
d65f605
Fix ZBT-2 hardware page crash when entry data is missing VID (#171828)
frenck May 22, 2026
5fb8742
Fix Lutron Caseta battery sensor crash on unsupported devices (#171829)
frenck May 22, 2026
9352a00
Fix invalid MDI icon references (#171831)
frenck May 22, 2026
92d2047
Register Insteon modem device before platform setup (#171839)
frenck May 22, 2026
9827126
Fix OpenHome config flow crash when UDN is a list (#171841)
frenck May 22, 2026
5bb4280
Fix Hue device trigger crash for devices removed from bridge (#171844)
frenck May 22, 2026
eae6e79
Fix dead link in System Bridge service action (#171855)
tr4nt0r May 22, 2026
18f30bd
Bump version to 2026.5.4
frenck May 22, 2026
73c9edd
Ran gen_requirements_all
frenck May 22, 2026
0723d8d
2026.5.4 (#171859)
frenck May 22, 2026
4b04006
Add test fixture for Tuya smart kettle (dft4ebatvon3ha5s) (#172260)
netflash May 26, 2026
ba5855f
Added gift members sensor to Ghost integration (#171441)
mike182uk May 26, 2026
71b849c
Add Yoto integration (#171207)
piitaya May 26, 2026
6feeba1
Add get_color service for RGB extraction from images (#167403)
pantherale0 May 26, 2026
4bd829a
Replace archived tibdex/github-app-token with actions/create-github-a…
edenhaus May 26, 2026
9b67a24
Allow multiple headers in response in REST command (#165613)
jpbede May 26, 2026
5ecbfea
Add missing exception translation key in local_file (#172271)
maxmichels May 26, 2026
1c3a080
Remove stale ONVIF asyncio.CancelledError workaround for anyio #374 (…
mattias-arrelid May 26, 2026
2bc91e7
Filter unsupported soundbar devices for SamsungTV (#172126)
chemelli74 May 26, 2026
ba1ed66
Bump holidays to 0.97 (#172088)
gjohansson-ST May 26, 2026
7f0133e
Remove deprecated yaml import in vivotek (#172279)
mib1185 May 26, 2026
5bd92d4
Map ViCare hvac_action to compressor phase for cooling support (#171945)
lackas May 26, 2026
e2b71ce
Fix exception translation placeholder mismatches in PTDevices integra…
frogman85978 May 26, 2026
4864a41
Add per-button event entities for HomematicIP key-press devices (#171…
lackas May 26, 2026
16ef7f9
Fix automatic stop calling in continous move in onvif (#163173)
yoxcu May 26, 2026
97de25d
homematicip_cloud: migrate simple binary sensors to entity descriptio…
lackas May 26, 2026
b3199ba
Do not wake Reolink battery camera for privacy mode check (#171842)
starkillerOG May 26, 2026
9957071
Implement entity available for battery cameras (#171838)
starkillerOG May 26, 2026
3355581
Add disk_life_time to hassio system health info (#171770)
cogneato May 26, 2026
23ecc31
Add BLE proxy support to matter integration (#171384)
Apollon77 May 26, 2026
9db7b3d
Change selector and add translations in System Bridge send_keypress a…
tr4nt0r May 26, 2026
3487eaf
Bump teltasync to 0.3.1, add strict typing (#169665)
karlbeecken May 26, 2026
b312bd0
bump python-join-api to 0.1.1 (#171802)
nkgilley May 26, 2026
6a18e05
Make service response optional for Habitica integration (#171818)
tr4nt0r May 26, 2026
b6fa89c
iaqualink: complete test coverage, bump to silver (#168268)
flz May 26, 2026
0bb6113
Migrate more UniFi Protect entities to public API (#171785)
RaHehl May 26, 2026
0044c43
Fix flaky test_overflow_queue in history websocket tests (#171766)
bdraco May 26, 2026
7087cb2
Fix Loqed webhook cleanup across setup retries (#162453)
LordMike May 26, 2026
b4063aa
Refactor SFTP Storage integration to replace duplicate constants (#17…
maretodoric May 26, 2026
beeb8ac
Merge branch 'master' into dev
frenck May 26, 2026
af53865
Speed sensor in paj_gps (#171755)
skipperro May 26, 2026
81efe6d
Bump pyprusalink to 3.0.0 (#170480)
heikkih May 26, 2026
31f87b3
Remove name from workday (#169210)
gjohansson-ST May 26, 2026
e8d7df7
Add history events for Alexa Devices (#170905)
chemelli74 May 26, 2026
1070226
Switchbot Cloud: Debug make_device_data function too complex issue 05…
XiaoLing-git May 26, 2026
27b0ba1
Bump python-ecobee-api to 0.4.0 and handle MFA in ecobee config flow …
pike00 May 26, 2026
f6e8394
Homeegrams (#170932)
Taraman17 May 26, 2026
2f3f91e
Require Duco Connectivity API 2.1 for new setups (#170766)
ronaldvdmeer May 26, 2026
64bc689
add ovhcloud_ai_endpoints integration (#171402)
Crocmagnon May 26, 2026
4bd0117
Add room priority select entity to Lyric integration (#167942)
yonib05 May 26, 2026
978171b
Use reported units for the Qbus integration (#171588)
thomasddn May 26, 2026
99877d7
Replace duplicated `ATTR_LOCATION` with shared `homeassistant.const` …
Copilot May 26, 2026
66d4124
Add quality scale cert expiry (#170491)
HoffmanEl May 26, 2026
06c92cd
Add half lock for switchbot lock ultra (#168750)
zerzhang May 26, 2026
ffcab49
Improve Israel Rail departure sensor coverage (#171397)
mikomgk May 26, 2026
0b687df
Migrate opensensemap to UI configuration (#171066)
AlCalzone May 26, 2026
49c0452
Enable N806 (#171388)
joostlek May 26, 2026
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
8 changes: 4 additions & 4 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ jobs:
- name: Generate app token
id: token
# Pinned to a specific version of the action for security reasons
# v1.7.0
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
# v3.2.0
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1
with:
app_id: ${{ secrets.ISSUE_TRIAGE_APP_ID }} # zizmor: ignore[secrets-outside-env]
private_key: ${{ secrets.ISSUE_TRIAGE_APP_PEM }} # zizmor: ignore[secrets-outside-env]
app-id: ${{ secrets.ISSUE_TRIAGE_APP_ID }} # zizmor: ignore[secrets-outside-env]
private-key: ${{ secrets.ISSUE_TRIAGE_APP_PEM }} # zizmor: ignore[secrets-outside-env]

# The 90 day stale policy for issues
# Used for:
Expand Down
2 changes: 2 additions & 0 deletions .strict-typing
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@ homeassistant.components.otp.*
homeassistant.components.ouman_eh_800.*
homeassistant.components.overkiz.*
homeassistant.components.overseerr.*
homeassistant.components.ovhcloud_ai_endpoints.*
homeassistant.components.p1_monitor.*
homeassistant.components.paj_gps.*
homeassistant.components.panel_custom.*
Expand Down Expand Up @@ -565,6 +566,7 @@ homeassistant.components.technove.*
homeassistant.components.tedee.*
homeassistant.components.telegram_bot.*
homeassistant.components.teleinfo.*
homeassistant.components.teltonika.*
homeassistant.components.teslemetry.*
homeassistant.components.text.*
homeassistant.components.thethingsnetwork.*
Expand Down
6 changes: 6 additions & 0 deletions CODEOWNERS

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 27 additions & 1 deletion homeassistant/components/alexa_devices/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
"""Alexa Devices integration."""

import asyncio
import contextlib

from homeassistant.const import CONF_COUNTRY, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client, config_validation as cv
from homeassistant.helpers import aiohttp_client, config_validation as cv, httpx_client
from homeassistant.helpers.typing import ConfigType
from homeassistant.util.ssl import SSL_ALPN_HTTP11_HTTP2

from .const import _LOGGER, CONF_LOGIN_DATA, CONF_SITE, COUNTRY_DOMAINS, DOMAIN
from .coordinator import AmazonConfigEntry, AmazonDevicesCoordinator
Expand All @@ -12,6 +16,7 @@
PLATFORMS = [
Platform.BINARY_SENSOR,
Platform.BUTTON,
Platform.EVENT,
Platform.NOTIFY,
Platform.SENSOR,
Platform.SWITCH,
Expand All @@ -34,6 +39,27 @@ async def async_setup_entry(hass: HomeAssistant, entry: AmazonConfigEntry) -> bo

await coordinator.async_config_entry_first_refresh()

await coordinator.sync_history_state()

async def _on_http2_reauth_required() -> None:
entry.async_start_reauth(hass)

async def _cancel_http2() -> None:
http2_task.cancel()
with contextlib.suppress(asyncio.CancelledError):
await http2_task

alexa_httpx_client = httpx_client.get_async_client(
hass,
alpn_protocols=SSL_ALPN_HTTP11_HTTP2,
)

http2_task = await coordinator.api.start_http2_processing(
alexa_httpx_client, on_reauth_required=_on_http2_reauth_required
)

entry.async_on_unload(_cancel_http2)

entry.runtime_data = coordinator

await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
Expand Down
44 changes: 42 additions & 2 deletions homeassistant/components/alexa_devices/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
CannotConnect,
CannotRetrieveData,
)
from aioamazondevices.structures import AmazonDevice
from aioamazondevices.structures import AmazonDevice, AmazonVocalRecord
from aiohttp import ClientSession

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.debounce import Debouncer
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
Expand Down Expand Up @@ -73,6 +73,11 @@ def __init__(
if routine.domain == Platform.BUTTON
}

self._vocal_records: dict[str, AmazonVocalRecord] = {}

self.api.on_history_event.append(self.history_state_event_handler)
self.api.on_history_event.freeze()

async def _async_update_data(self) -> dict[str, AmazonDevice]:
"""Update device data."""
try:
Expand Down Expand Up @@ -149,3 +154,38 @@ async def _async_remove_routine_stale(
)
if entity_id:
entity_registry.async_remove(entity_id)

async def sync_history_state(self) -> None:
"""Sync history state."""
try:
self._vocal_records = await self.api.sync_history_state()
except CannotAuthenticate as e:
raise ConfigEntryAuthFailed(
translation_domain=DOMAIN,
translation_key="invalid_auth",
translation_placeholders={"error": repr(e)},
) from e
except CannotConnect as e:
raise ConfigEntryNotReady(
translation_domain=DOMAIN,
translation_key="cannot_connect_with_error",
translation_placeholders={"error": repr(e)},
) from e
except BaseException as e:
raise ConfigEntryNotReady(
translation_domain=DOMAIN,
translation_key="cannot_retrieve_data_with_error",
translation_placeholders={"error": repr(e)},
) from e

async def history_state_event_handler(
self, vocal_records: dict[str, AmazonVocalRecord]
) -> None:
"""Handle pushed vocal record events."""
self._vocal_records = {**self._vocal_records, **vocal_records}
self.async_update_listeners()

@property
def vocal_records(self) -> dict[str, AmazonVocalRecord]:
"""Vocal records of devices."""
return self._vocal_records
86 changes: 86 additions & 0 deletions homeassistant/components/alexa_devices/event.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
"""Support for events."""

from typing import Final

from homeassistant.components.event import EventEntity, EventEntityDescription
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback

from .const import _LOGGER
from .coordinator import AmazonConfigEntry, AmazonDevicesCoordinator
from .entity import AmazonEntity

# Coordinator is used to centralize the data updates
PARALLEL_UPDATES = 0

EVENTS: Final = {
EventEntityDescription(
key="voice_event",
translation_key="voice_event",
),
}

EVENT_TYPE = "triggered"


async def async_setup_entry(
hass: HomeAssistant,
entry: AmazonConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up Alexa Devices events based on a config entry."""
coordinator = entry.runtime_data

known_devices: set[str] = set()

def _check_device() -> None:
current_devices = set(coordinator.data)
new_devices = current_devices - known_devices
if new_devices:
known_devices.update(new_devices)
async_add_entities(
AlexaVoiceEvent(coordinator, serial_num, event_desc)
for event_desc in EVENTS
for serial_num in new_devices
)

_check_device()
entry.async_on_unload(coordinator.async_add_listener(_check_device))


class AlexaVoiceEvent(AmazonEntity, EventEntity):
"""Representation of an Alexa voice event."""

_attr_event_types = [EVENT_TYPE]
coordinator: AmazonDevicesCoordinator
_last_seen_timestamp: int | None = None

@callback
def _handle_coordinator_update(self) -> None:
"""Handle updated data from the coordinator."""

if not (
vocal_record := self.coordinator.vocal_records.get(
self.device.serial_number
)
):
_LOGGER.debug(
"No vocal record found for device %s [%s]",
self.device.account_name,
self.device.serial_number,
)
return

if vocal_record.timestamp == self._last_seen_timestamp:
return

self._last_seen_timestamp = vocal_record.timestamp
self._trigger_event(
EVENT_TYPE,
{
"intent": vocal_record.intent,
"voice_command": vocal_record.title,
"voice_reply": vocal_record.sub_title,
},
)
self.async_write_ha_state()
5 changes: 5 additions & 0 deletions homeassistant/components/alexa_devices/icons.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"entity": {
"event": {
"voice_event": {
"default": "mdi:chat-processing"
}
},
"sensor": {
"voc_index": {
"default": "mdi:molecule"
Expand Down
12 changes: 12 additions & 0 deletions homeassistant/components/alexa_devices/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,18 @@
}
},
"entity": {
"event": {
"voice_event": {
"name": "Voice event",
"state_attributes": {
"event_type": {
"state": {
"triggered": "Triggered"
}
}
}
}
},
"notify": {
"announce": {
"name": "Announce"
Expand Down
6 changes: 3 additions & 3 deletions homeassistant/components/anthropic/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,13 +230,13 @@ async def async_migrate_entry(hass: HomeAssistant, entry: AnthropicConfigEntry)

if entry.version == 2 and entry.minor_version == 3:
# Remove Temperature parameter
CONF_TEMPERATURE = "temperature"
temperature_key = "temperature"

for subentry in entry.subentries.values():
data = subentry.data.copy()
if CONF_TEMPERATURE not in data:
if temperature_key not in data:
continue
data.pop(CONF_TEMPERATURE, None)
data.pop(temperature_key, None)
hass.config_entries.async_update_subentry(entry, subentry, data=data)

hass.config_entries.async_update_entry(entry, minor_version=4)
Expand Down
28 changes: 14 additions & 14 deletions homeassistant/components/asuswrt/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@

_LOGGER = logging.getLogger(__name__)

_ENTITY_MIGRATION_ID = {
"sensor_connected_device": "Devices Connected",
"sensor_rx_bytes": "Download",
"sensor_tx_bytes": "Upload",
"sensor_rx_rates": "Download Speed",
"sensor_tx_rates": "Upload Speed",
"sensor_load_avg1": "Load Avg (1m)",
"sensor_load_avg5": "Load Avg (5m)",
"sensor_load_avg15": "Load Avg (15m)",
"2.4GHz": "2.4GHz Temperature",
"5.0GHz": "5GHz Temperature",
"CPU": "CPU Temperature",
}


class AsusWrtSensorDataHandler:
"""Data handler for AsusWrt sensor."""
Expand Down Expand Up @@ -187,20 +201,6 @@ def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:

def _migrate_entities_unique_id(self) -> None:
"""Migrate router entities to new unique id format."""
_ENTITY_MIGRATION_ID = {
"sensor_connected_device": "Devices Connected",
"sensor_rx_bytes": "Download",
"sensor_tx_bytes": "Upload",
"sensor_rx_rates": "Download Speed",
"sensor_tx_rates": "Upload Speed",
"sensor_load_avg1": "Load Avg (1m)",
"sensor_load_avg5": "Load Avg (5m)",
"sensor_load_avg15": "Load Avg (15m)",
"2.4GHz": "2.4GHz Temperature",
"5.0GHz": "5GHz Temperature",
"CPU": "CPU Temperature",
}

entity_reg = er.async_get(self.hass)
router_entries = er.async_entries_for_config_entry(
entity_reg, self._entry.entry_id
Expand Down
Loading
Loading