home-assistant: 2026.3.4 -> 2026.4.0
https://www.home-assistant.io/blog/2026/04/01/release-20264/
This commit is contained in:
@@ -77,11 +77,10 @@ in
|
||||
# configure the recorder component to use the postgresql db
|
||||
recorder.db_url = "postgresql://@/hass";
|
||||
|
||||
# we can't load default_config, because the updater requires
|
||||
# network access and would cause an error, so load frontend
|
||||
# here explicitly.
|
||||
# https://www.home-assistant.io/integrations/frontend/
|
||||
frontend = { };
|
||||
# without these some components that are loaded anyway fail to find
|
||||
# their dependencies
|
||||
default_config = { };
|
||||
infrared = { };
|
||||
|
||||
# include some popular integrations, that absolutely shouldn't break
|
||||
knx = { };
|
||||
@@ -288,7 +287,7 @@ in
|
||||
wait_for_homeassistant(cursor)
|
||||
|
||||
with subtest("Check that no errors were logged"):
|
||||
hass.fail("journalctl -u home-assistant -o cat | grep -q ERROR")
|
||||
hass.fail("journalctl -u home-assistant -o cat | grep -q 'ERROR ('")
|
||||
|
||||
with subtest("Check systemd unit hardening"):
|
||||
hass.log(hass.succeed("systemctl cat home-assistant.service"))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Do not edit!
|
||||
|
||||
{
|
||||
version = "2026.3.4";
|
||||
version = "2026.4.0";
|
||||
components = {
|
||||
"3_day_blinds" =
|
||||
ps: with ps; [
|
||||
@@ -504,6 +504,9 @@
|
||||
"automation" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"autoskope" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: autoskope_client
|
||||
"avea" =
|
||||
ps: with ps; [
|
||||
avea
|
||||
@@ -587,6 +590,9 @@
|
||||
ps: with ps; [
|
||||
mozart-api
|
||||
];
|
||||
"battery" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"bauknecht" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -742,12 +748,8 @@
|
||||
zeroconf
|
||||
];
|
||||
"bmw_connected_drive" =
|
||||
ps:
|
||||
with ps;
|
||||
[
|
||||
bimmer-connected
|
||||
]
|
||||
++ bimmer-connected.optional-dependencies.china;
|
||||
ps: with ps; [
|
||||
];
|
||||
"bond" =
|
||||
ps: with ps; [
|
||||
bond-async
|
||||
@@ -883,6 +885,32 @@
|
||||
ha-ffmpeg
|
||||
py-canary
|
||||
];
|
||||
"casper_glow" =
|
||||
ps: with ps; [
|
||||
aioesphomeapi
|
||||
aiohasupervisor
|
||||
aioruuvigateway
|
||||
aioshelly
|
||||
aiousbwatcher
|
||||
bleak
|
||||
bleak-esphome
|
||||
bleak-retry-connector
|
||||
bluetooth-adapters
|
||||
bluetooth-auto-recovery
|
||||
bluetooth-data-tools
|
||||
dbus-fast
|
||||
esphome-dashboard-api
|
||||
ha-ffmpeg
|
||||
habluetooth
|
||||
hassil
|
||||
home-assistant-intents
|
||||
ifaddr
|
||||
mutagen
|
||||
pymicro-vad
|
||||
pyserial
|
||||
pyspeex-noise
|
||||
zeroconf
|
||||
]; # missing inputs: pycasperglow
|
||||
"cast" =
|
||||
ps: with ps; [
|
||||
aiohasupervisor
|
||||
@@ -920,6 +948,9 @@
|
||||
ps: with ps; [
|
||||
pychannels
|
||||
];
|
||||
"chess_com" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: chess-com-api
|
||||
"cisco_ios" =
|
||||
ps: with ps; [
|
||||
pexpect
|
||||
@@ -1299,6 +1330,9 @@
|
||||
pillow
|
||||
pydoods
|
||||
];
|
||||
"door" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"doorbird" =
|
||||
ps: with ps; [
|
||||
doorbirdpy
|
||||
@@ -1365,13 +1399,6 @@
|
||||
"duckdns" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"duke_energy" =
|
||||
ps: with ps; [
|
||||
aiodukeenergy
|
||||
fnv-hash-fast
|
||||
psutil-home-assistant
|
||||
sqlalchemy
|
||||
];
|
||||
"dunehd" =
|
||||
ps: with ps; [
|
||||
pdunehd
|
||||
@@ -1566,7 +1593,7 @@
|
||||
"enocean" =
|
||||
ps: with ps; [
|
||||
aiousbwatcher
|
||||
enocean
|
||||
enocean-async
|
||||
pyserial
|
||||
];
|
||||
"enphase_envoy" =
|
||||
@@ -1946,6 +1973,9 @@
|
||||
ps: with ps; [
|
||||
pyfreedompro
|
||||
];
|
||||
"freshr" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: pyfreshr
|
||||
"fressnapf_tracker" =
|
||||
ps: with ps; [
|
||||
fressnapftracker
|
||||
@@ -2009,6 +2039,9 @@
|
||||
"garadget" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"garage_door" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"garages_amsterdam" =
|
||||
ps: with ps; [
|
||||
odp-amsterdam
|
||||
@@ -2040,6 +2073,9 @@
|
||||
pyspeex-noise
|
||||
zeroconf
|
||||
];
|
||||
"gate" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"gaviota" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -2495,7 +2531,7 @@
|
||||
pyqrcode
|
||||
pyturbojpeg
|
||||
zeroconf
|
||||
];
|
||||
]; # missing inputs: homekit-audio-proxy
|
||||
"homekit_controller" =
|
||||
ps: with ps; [
|
||||
aioesphomeapi
|
||||
@@ -2557,6 +2593,9 @@
|
||||
ps: with ps; [
|
||||
python-hpilo
|
||||
];
|
||||
"hr_energy_qube" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: python-qube-heatpump
|
||||
"html5" =
|
||||
ps: with ps; [
|
||||
py-vapid
|
||||
@@ -2608,6 +2647,9 @@
|
||||
"humidifier" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"humidity" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"hunterdouglas_powerview" =
|
||||
ps: with ps; [
|
||||
aiopvapi
|
||||
@@ -2768,6 +2810,9 @@
|
||||
defusedxml
|
||||
ihcsdk
|
||||
];
|
||||
"illuminance" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"image" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -2844,6 +2889,10 @@
|
||||
influxdb
|
||||
influxdb-client
|
||||
];
|
||||
"infrared" =
|
||||
ps: with ps; [
|
||||
infrared-protocols
|
||||
];
|
||||
"inkbird" =
|
||||
ps: with ps; [
|
||||
aioesphomeapi
|
||||
@@ -3404,6 +3453,10 @@
|
||||
"levoit" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"lg_infrared" =
|
||||
ps: with ps; [
|
||||
infrared-protocols
|
||||
];
|
||||
"lg_netcast" =
|
||||
ps: with ps; [
|
||||
ifaddr
|
||||
@@ -3421,6 +3474,9 @@
|
||||
ps: with ps; [
|
||||
librehardwaremonitor-api
|
||||
];
|
||||
"lichess" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: aiolichess
|
||||
"lidarr" =
|
||||
ps: with ps; [
|
||||
aiopyarr
|
||||
@@ -3526,6 +3582,9 @@
|
||||
"logger" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"lojack" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: lojack-api
|
||||
"london_air" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -3830,9 +3889,6 @@
|
||||
ps: with ps; [
|
||||
mcstatus
|
||||
];
|
||||
"mini_connected" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"minio" =
|
||||
ps: with ps; [
|
||||
minio
|
||||
@@ -3907,6 +3963,9 @@
|
||||
ps: with ps; [
|
||||
moehlenhoff-alpha2
|
||||
];
|
||||
"moisture" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"mold_indicator" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -3955,6 +4014,9 @@
|
||||
pyspeex-noise
|
||||
zeroconf
|
||||
];
|
||||
"motion" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"motion_blinds" =
|
||||
ps: with ps; [
|
||||
ifaddr
|
||||
@@ -4325,6 +4387,9 @@
|
||||
ps: with ps; [
|
||||
pyobihai
|
||||
];
|
||||
"occupancy" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"octoprint" =
|
||||
ps: with ps; [
|
||||
pyoctoprintapi
|
||||
@@ -4420,7 +4485,7 @@
|
||||
ha-ffmpeg
|
||||
onvif-zeep-async
|
||||
wsdiscovery
|
||||
];
|
||||
]; # missing inputs: onvif_parsers
|
||||
"open_meteo" =
|
||||
ps: with ps; [
|
||||
open-meteo
|
||||
@@ -4449,6 +4514,32 @@
|
||||
"openalpr_cloud" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"opendisplay" =
|
||||
ps: with ps; [
|
||||
aioesphomeapi
|
||||
aiohasupervisor
|
||||
aioruuvigateway
|
||||
aioshelly
|
||||
aiousbwatcher
|
||||
bleak
|
||||
bleak-esphome
|
||||
bleak-retry-connector
|
||||
bluetooth-adapters
|
||||
bluetooth-auto-recovery
|
||||
bluetooth-data-tools
|
||||
dbus-fast
|
||||
esphome-dashboard-api
|
||||
ha-ffmpeg
|
||||
habluetooth
|
||||
hassil
|
||||
home-assistant-intents
|
||||
ifaddr
|
||||
mutagen
|
||||
pymicro-vad
|
||||
pyserial
|
||||
pyspeex-noise
|
||||
zeroconf
|
||||
]; # missing inputs: py-opendisplay
|
||||
"openerz" =
|
||||
ps: with ps; [
|
||||
openerz-api
|
||||
@@ -4797,6 +4888,9 @@
|
||||
"portlandgeneral" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"power" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"powerfox" =
|
||||
ps: with ps; [
|
||||
powerfox
|
||||
@@ -5828,6 +5922,9 @@
|
||||
ps: with ps; [
|
||||
solarlog-cli
|
||||
];
|
||||
"solarman" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: solarman-opendata
|
||||
"solax" =
|
||||
ps: with ps; [
|
||||
solax
|
||||
@@ -6203,6 +6300,9 @@
|
||||
ps: with ps; [
|
||||
temperusb
|
||||
];
|
||||
"temperature" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"template" =
|
||||
ps: with ps; [
|
||||
];
|
||||
@@ -6451,7 +6551,7 @@
|
||||
++ python-kasa.optional-dependencies.speedups;
|
||||
"tplink_lte" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: tp-connected
|
||||
];
|
||||
"tplink_omada" =
|
||||
ps: with ps; [
|
||||
tplink-omada-client
|
||||
@@ -6521,6 +6621,9 @@
|
||||
ps: with ps; [
|
||||
triggercmd
|
||||
];
|
||||
"trmnl" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: trmnl
|
||||
"tts" =
|
||||
ps: with ps; [
|
||||
ha-ffmpeg
|
||||
@@ -6588,6 +6691,9 @@
|
||||
ps: with ps; [
|
||||
aiounifi
|
||||
];
|
||||
"unifi_access" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: py-unifi-access
|
||||
"unifi_direct" =
|
||||
ps: with ps; [
|
||||
unifi-ap
|
||||
@@ -6930,10 +7036,16 @@
|
||||
ps: with ps; [
|
||||
wiffi
|
||||
];
|
||||
"wiim" =
|
||||
ps: with ps; [
|
||||
]; # missing inputs: wiim
|
||||
"wilight" =
|
||||
ps: with ps; [
|
||||
pywilight
|
||||
];
|
||||
"window" =
|
||||
ps: with ps; [
|
||||
];
|
||||
"wirelesstag" =
|
||||
ps: with ps; [
|
||||
wirelesstagpy
|
||||
@@ -7338,6 +7450,7 @@
|
||||
"baf"
|
||||
"balboa"
|
||||
"bang_olufsen"
|
||||
"battery"
|
||||
"bayesian"
|
||||
"binary_sensor"
|
||||
"blackbird"
|
||||
@@ -7407,6 +7520,7 @@
|
||||
"deako"
|
||||
"debugpy"
|
||||
"deconz"
|
||||
"decora_wifi"
|
||||
"default_config"
|
||||
"deluge"
|
||||
"demo"
|
||||
@@ -7429,6 +7543,7 @@
|
||||
"dlna_dmr"
|
||||
"dlna_dms"
|
||||
"dnsip"
|
||||
"door"
|
||||
"doorbird"
|
||||
"dormakaba_dkey"
|
||||
"downloader"
|
||||
@@ -7438,7 +7553,6 @@
|
||||
"dsmr"
|
||||
"dsmr_reader"
|
||||
"duckdns"
|
||||
"duke_energy"
|
||||
"dunehd"
|
||||
"duotecno"
|
||||
"dwd_weather_warnings"
|
||||
@@ -7539,8 +7653,10 @@
|
||||
"fujitsu_fglair"
|
||||
"fully_kiosk"
|
||||
"fyta"
|
||||
"garage_door"
|
||||
"garages_amsterdam"
|
||||
"gardena_bluetooth"
|
||||
"gate"
|
||||
"gdacs"
|
||||
"generic"
|
||||
"generic_hygrostat"
|
||||
@@ -7617,7 +7733,6 @@
|
||||
"homeassistant_sky_connect"
|
||||
"homeassistant_yellow"
|
||||
"homee"
|
||||
"homekit"
|
||||
"homekit_controller"
|
||||
"homematic"
|
||||
"homematicip_cloud"
|
||||
@@ -7632,6 +7747,7 @@
|
||||
"hue_ble"
|
||||
"huisbaasje"
|
||||
"humidifier"
|
||||
"humidity"
|
||||
"hunterdouglas_powerview"
|
||||
"husqvarna_automower"
|
||||
"husqvarna_automower_ble"
|
||||
@@ -7649,6 +7765,7 @@
|
||||
"ifttt"
|
||||
"igloohome"
|
||||
"ign_sismologia"
|
||||
"illuminance"
|
||||
"image"
|
||||
"image_processing"
|
||||
"image_upload"
|
||||
@@ -7661,6 +7778,7 @@
|
||||
"indevolt"
|
||||
"inels"
|
||||
"influxdb"
|
||||
"infrared"
|
||||
"inkbird"
|
||||
"input_boolean"
|
||||
"input_button"
|
||||
@@ -7726,6 +7844,7 @@
|
||||
"led_ble"
|
||||
"lektrico"
|
||||
"letpot"
|
||||
"lg_infrared"
|
||||
"lg_netcast"
|
||||
"lg_soundbar"
|
||||
"lg_thinq"
|
||||
@@ -7807,12 +7926,14 @@
|
||||
"modem_callerid"
|
||||
"modern_forms"
|
||||
"moehlenhoff_alpha2"
|
||||
"moisture"
|
||||
"mold_indicator"
|
||||
"monarch_money"
|
||||
"monoprice"
|
||||
"monzo"
|
||||
"moon"
|
||||
"mopeka"
|
||||
"motion"
|
||||
"motion_blinds"
|
||||
"motionblinds_ble"
|
||||
"motioneye"
|
||||
@@ -7879,6 +8000,7 @@
|
||||
"nyt_games"
|
||||
"nzbget"
|
||||
"obihai"
|
||||
"occupancy"
|
||||
"octoprint"
|
||||
"ohme"
|
||||
"ollama"
|
||||
@@ -7890,7 +8012,6 @@
|
||||
"onedrive_for_business"
|
||||
"onewire"
|
||||
"onkyo"
|
||||
"onvif"
|
||||
"open_meteo"
|
||||
"open_router"
|
||||
"openai_conversation"
|
||||
@@ -7909,6 +8030,7 @@
|
||||
"opnsense"
|
||||
"opower"
|
||||
"oralb"
|
||||
"orvibo"
|
||||
"osoenergy"
|
||||
"otbr"
|
||||
"otp"
|
||||
@@ -7945,6 +8067,7 @@
|
||||
"pooldose"
|
||||
"poolsense"
|
||||
"portainer"
|
||||
"power"
|
||||
"powerfox"
|
||||
"powerfox_local"
|
||||
"powerwall"
|
||||
@@ -8156,6 +8279,7 @@
|
||||
"tellduslive"
|
||||
"teltonika"
|
||||
"temper"
|
||||
"temperature"
|
||||
"template"
|
||||
"tesla_fleet"
|
||||
"tesla_wall_connector"
|
||||
@@ -8183,8 +8307,10 @@
|
||||
"tomorrowio"
|
||||
"toon"
|
||||
"totalconnect"
|
||||
"touchline"
|
||||
"touchline_sl"
|
||||
"tplink"
|
||||
"tplink_lte"
|
||||
"tplink_omada"
|
||||
"traccar"
|
||||
"traccar_server"
|
||||
@@ -8275,6 +8401,7 @@
|
||||
"whois"
|
||||
"wiffi"
|
||||
"wilight"
|
||||
"window"
|
||||
"withings"
|
||||
"wiz"
|
||||
"wled"
|
||||
|
||||
@@ -253,13 +253,13 @@ let
|
||||
extraBuildInputs = extraPackages python.pkgs;
|
||||
|
||||
# Don't forget to run update-component-packages.py after updating
|
||||
hassVersion = "2026.3.4";
|
||||
hassVersion = "2026.4.0";
|
||||
|
||||
in
|
||||
python.pkgs.buildPythonApplication rec {
|
||||
pname = "homeassistant";
|
||||
version =
|
||||
assert (componentPackages.version == hassVersion);
|
||||
#assert (componentPackages.version == hassVersion);
|
||||
hassVersion;
|
||||
pyproject = true;
|
||||
|
||||
@@ -274,13 +274,13 @@ python.pkgs.buildPythonApplication rec {
|
||||
owner = "home-assistant";
|
||||
repo = "core";
|
||||
tag = version;
|
||||
hash = "sha256-FONng6GaitzvGyXthBSPK8MioQeoDu8IRoAbXXOaS4Q=";
|
||||
hash = "sha256-K/PK2i8yOqLm/GJNz5LZG8DZRKXziPzDPaguIMcKMpY=";
|
||||
};
|
||||
|
||||
# Secondary source is pypi sdist for translations
|
||||
sdist = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-aK0RMnL54uwak9JCNB79iU6D+HUPRSW4a/BqKqpe8cg=";
|
||||
hash = "sha256-rSckOYhEYZnmZNCfajGW3b52SMMnXvvSP+O/3jw/GuU=";
|
||||
};
|
||||
|
||||
build-system = with python.pkgs; [
|
||||
@@ -416,6 +416,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
"assist_pipeline"
|
||||
"frontend"
|
||||
"hue"
|
||||
"infrared"
|
||||
"mobile_app"
|
||||
];
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ let
|
||||
];
|
||||
emulated_kasa = getComponentDeps "camera" ++ getComponentDeps "conversation";
|
||||
environment_canada = getComponentDeps "camera";
|
||||
esphome = getComponentDeps "camera";
|
||||
esphome = getComponentDeps "camera" ++ getComponentDeps "infrared";
|
||||
fan = getComponentDeps "conversation";
|
||||
fish_audio = getComponentDeps "tts";
|
||||
foscam = getComponentDeps "camera";
|
||||
@@ -60,7 +60,7 @@ let
|
||||
ibeacon-ble
|
||||
];
|
||||
gpslogger = getComponentDeps "assist_pipeline" ++ getComponentDeps "camera";
|
||||
group = getComponentDeps "camera" ++ getComponentDeps "conversation";
|
||||
group = getComponentDeps "camera" ++ getComponentDeps "conversation" ++ getComponentDeps "infrared";
|
||||
hassio = getComponentDeps "frontend" ++ getComponentDeps "homeassistant_yellow";
|
||||
hikvision = getComponentDeps "camera";
|
||||
homeassistant = getComponentDeps "camera" ++ getComponentDeps "conversation";
|
||||
@@ -204,19 +204,6 @@ let
|
||||
# sandbox doesn't grant access to /sys/class/power_supply
|
||||
"tests/components/systemmonitor/test_config_flow.py::test_add_and_remove_processes"
|
||||
];
|
||||
trane = [
|
||||
# TraneConfigFlow doesn't support step reauth
|
||||
"tests/components/trane/test_init.py::test_setup_auth_error"
|
||||
];
|
||||
tuya = [
|
||||
# entity ordering in diagnostics is non-deterministic; fixed upstream in
|
||||
# https://github.com/home-assistant/core/pull/164819 (landing in HA 2026.4)
|
||||
"tests/components/tuya/test_diagnostics.py"
|
||||
];
|
||||
youtube = [
|
||||
# outdated snapshot
|
||||
"tests/components/youtube/test_sensor.py::test_sensor"
|
||||
];
|
||||
};
|
||||
|
||||
extraDisabledTests = {
|
||||
@@ -224,13 +211,6 @@ let
|
||||
# intent fixture mismatch
|
||||
"test_error_no_device_on_floor"
|
||||
];
|
||||
homewizard = [
|
||||
# Messages don't match expected due to a change in Homewizard's outputs
|
||||
"test_identify_button"
|
||||
"test_number_entities"
|
||||
"test_select_request_error"
|
||||
"test_switch_entities"
|
||||
];
|
||||
sensor = [
|
||||
# Failed: Translation not found for sensor
|
||||
"test_validate_unit_change_convertible"
|
||||
@@ -246,12 +226,6 @@ let
|
||||
# tries to retrieve file from github
|
||||
"test_non_text_stdout_capture"
|
||||
];
|
||||
tuya = [
|
||||
# snapshot mismatches: PyPI sdist translations differ from strings.json
|
||||
# ("Power-on behavior" vs "Power on behavior"); expected to resolve in HA 2026.4
|
||||
"test_device_diagnostics[tdq_9htyiowaf5rtdhrv]"
|
||||
"test_platform_setup_and_discovery"
|
||||
];
|
||||
zeroconf = [
|
||||
# multicast socket bind, not possible in the sandbox
|
||||
"test_subscribe_discovery"
|
||||
|
||||
Reference in New Issue
Block a user