diff options
Diffstat (limited to 'pkgs/servers/home-assistant')
-rw-r--r-- | pkgs/servers/home-assistant/component-packages.nix | 106 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/default.nix | 97 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/frontend.nix | 10 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/patches/tests-ignore-OSErrors-in-hass-fixture.patch | 27 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/tests.nix | 8 |
5 files changed, 116 insertions, 132 deletions
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix index 7a325693a0f..714087eb2e6 100644 --- a/pkgs/servers/home-assistant/component-packages.nix +++ b/pkgs/servers/home-assistant/component-packages.nix @@ -2,14 +2,14 @@ # Do not edit! { - version = "2021.12.10"; + version = "2022.2.9"; components = { "abode" = ps: with ps; [ abodepy ]; "accuweather" = ps: with ps; [ accuweather ]; "acer_projector" = ps: with ps; [ pyserial ]; "acmeda" = ps: with ps; [ aiopulse ]; "actiontec" = ps: with ps; [ ]; - "adax" = ps: with ps; [ adax ]; + "adax" = ps: with ps; [ adax-local adax ]; "adguard" = ps: with ps; [ adguardhome ]; "ads" = ps: with ps; [ pyads ]; "advantage_air" = ps: with ps; [ advantage-air ]; @@ -45,27 +45,28 @@ "apcupsd" = ps: with ps; [ apcaccess ]; "api" = ps: with ps; [ aiohttp-cors ]; "apns" = ps: with ps; [ ]; # missing inputs: apns2 - "apple_tv" = ps: with ps; [ pyatv ]; + "apple_tv" = ps: with ps; [ aiohttp-cors ifaddr pyatv zeroconf ]; "apprise" = ps: with ps; [ apprise ]; "aprs" = ps: with ps; [ aprslib geopy ]; "aqualogic" = ps: with ps; [ aqualogic ]; "aquostv" = ps: with ps; [ ]; # missing inputs: sharp_aquos_rc "arcam_fmj" = ps: with ps; [ arcam-fmj ]; - "arduino" = ps: with ps; [ ]; # missing inputs: PyMata "arest" = ps: with ps; [ ]; "arlo" = ps: with ps; [ ha-ffmpeg pyarlo ]; "arris_tg2492lg" = ps: with ps; [ ]; # missing inputs: arris-tg2492lg "aruba" = ps: with ps; [ pexpect ]; "arwn" = ps: with ps; [ aiohttp-cors paho-mqtt ]; - "asterisk_cdr" = ps: with ps; [ ]; # missing inputs: asterisk_mbox - "asterisk_mbox" = ps: with ps; [ ]; # missing inputs: asterisk_mbox + "aseko_pool_live" = ps: with ps; [ aioaseko ]; + "asterisk_cdr" = ps: with ps; [ asterisk-mbox ]; + "asterisk_mbox" = ps: with ps; [ asterisk-mbox ]; "asuswrt" = ps: with ps; [ aioasuswrt ]; "atag" = ps: with ps; [ pyatag ]; "aten_pe" = ps: with ps; [ atenpdu ]; "atome" = ps: with ps; [ pyatome ]; "august" = ps: with ps; [ yalexs ]; "aurora" = ps: with ps; [ auroranoaa ]; - "aurora_abb_powerone" = ps: with ps; [ ]; # missing inputs: aurorapy + "aurora_abb_powerone" = ps: with ps; [ aurorapy ]; + "aussie_broadband" = ps: with ps; [ pyaussiebb ]; "auth" = ps: with ps; [ aiohttp-cors ]; "automation" = ps: with ps; [ aiohttp-cors ]; "avea" = ps: with ps; [ avea ]; @@ -82,7 +83,7 @@ "bbb_gpio" = ps: with ps; [ ]; # missing inputs: Adafruit_BBIO "bbox" = ps: with ps; [ ]; # missing inputs: pybbox "beewi_smartclim" = ps: with ps; [ ]; # missing inputs: beewi_smartclim - "bh1750" = ps: with ps; [ smbus-cffi ]; # missing inputs: i2csense + "bh1750" = ps: with ps; [ i2csense smbus-cffi ]; "binary_sensor" = ps: with ps; [ ]; "bitcoin" = ps: with ps; [ blockchain ]; "bizkaibus" = ps: with ps; [ bizkaibus ]; @@ -97,7 +98,7 @@ "bluesound" = ps: with ps; [ xmltodict ]; "bluetooth_le_tracker" = ps: with ps; [ pygatt ]; "bluetooth_tracker" = ps: with ps; [ bt-proximity pybluez ]; - "bme280" = ps: with ps; [ smbus-cffi ]; # missing inputs: bme280spi i2csense + "bme280" = ps: with ps; [ bme280spi i2csense smbus-cffi ]; "bme680" = ps: with ps; [ bme680 smbus-cffi ]; "bmp280" = ps: with ps; [ ]; # missing inputs: RPi.GPIO adafruit-circuitpython-bmp280 "bmw_connected_drive" = ps: with ps; [ bimmer-connected ]; @@ -121,7 +122,7 @@ "cast" = ps: with ps; [ pyturbojpeg aiohttp-cors hass-nabucasa ifaddr mutagen plexapi plexauth plexwebsocket PyChromecast zeroconf ]; "cert_expiry" = ps: with ps; [ ]; "channels" = ps: with ps; [ pychannels ]; - "circuit" = ps: with ps; [ ]; # missing inputs: circuit-webhook + "circuit" = ps: with ps; [ circuit-webhook ]; "cisco_ios" = ps: with ps; [ pexpect ]; "cisco_mobility_express" = ps: with ps; [ ciscomobilityexpress ]; "cisco_webex_teams" = ps: with ps; [ webexteamssdk ]; @@ -181,6 +182,7 @@ "dexcom" = ps: with ps; [ pydexcom ]; "dhcp" = ps: with ps; [ aiodiscover scapy ]; "dht" = ps: with ps; [ ]; # missing inputs: RPi.GPIO adafruit-circuitpython-dht + "diagnostics" = ps: with ps; [ aiohttp-cors ]; "dialogflow" = ps: with ps; [ aiohttp-cors ]; "digital_ocean" = ps: with ps; [ digital-ocean ]; "digitalloggers" = ps: with ps; [ ]; # missing inputs: dlipower @@ -206,7 +208,7 @@ "dunehd" = ps: with ps; [ pdunehd ]; "dwd_weather_warnings" = ps: with ps; [ dwdwfsapi ]; "dweet" = ps: with ps; [ ]; # missing inputs: dweepy - "dynalite" = ps: with ps; [ ]; # missing inputs: dynalite_devices + "dynalite" = ps: with ps; [ dynalite-devices ]; "eafm" = ps: with ps; [ aioeafm ]; "ebox" = ps: with ps; [ ]; # missing inputs: pyebox "ebusd" = ps: with ps; [ ]; # missing inputs: ebusdpy @@ -223,6 +225,7 @@ "elgato" = ps: with ps; [ elgato ]; "eliqonline" = ps: with ps; [ eliqonline ]; "elkm1" = ps: with ps; [ elkm1-lib ]; + "elmax" = ps: with ps; [ elmax-api ]; "elv" = ps: with ps; [ pypca ]; "emby" = ps: with ps; [ pyemby ]; "emoncms" = ps: with ps; [ ]; @@ -282,7 +285,7 @@ "flume" = ps: with ps; [ pyflume ]; "flunearyou" = ps: with ps; [ pyflunearyou ]; "flux" = ps: with ps; [ ]; - "flux_led" = ps: with ps; [ flux-led ]; + "flux_led" = ps: with ps; [ aiohttp-cors flux-led ifaddr ]; "folder" = ps: with ps; [ ]; "folder_watcher" = ps: with ps; [ watchdog ]; "foobot" = ps: with ps; [ foobot-async ]; @@ -309,7 +312,7 @@ "generic" = ps: with ps; [ ]; "generic_hygrostat" = ps: with ps; [ ]; "generic_thermostat" = ps: with ps; [ sqlalchemy ]; - "geniushub" = ps: with ps; [ ]; # missing inputs: geniushub-client + "geniushub" = ps: with ps; [ geniushub-client ]; "geo_json_events" = ps: with ps; [ geojson-client ]; "geo_location" = ps: with ps; [ ]; "geo_rss_events" = ps: with ps; [ georss-generic-client ]; @@ -325,6 +328,7 @@ "goalfeed" = ps: with ps; [ ]; # missing inputs: pysher "goalzero" = ps: with ps; [ goalzero ]; "gogogate2" = ps: with ps; [ ismartgate ]; + "goodwe" = ps: with ps; [ goodwe ]; "google" = ps: with ps; [ google-api-python-client httplib2 oauth2client ]; "google_assistant" = ps: with ps; [ pyturbojpeg aiohttp-cors ]; "google_cloud" = ps: with ps; [ google-cloud-texttospeech ]; @@ -371,13 +375,14 @@ "homekit_controller" = ps: with ps; [ aiohomekit aiohttp-cors ifaddr zeroconf ]; "homematic" = ps: with ps; [ pyhomematic ]; "homematicip_cloud" = ps: with ps; [ homematicip ]; + "homewizard" = ps: with ps; [ aiohwenergy ]; "homeworks" = ps: with ps; [ pyhomeworks ]; "honeywell" = ps: with ps; [ somecomfort ]; "horizon" = ps: with ps; [ ]; # missing inputs: horimote "hp_ilo" = ps: with ps; [ python-hpilo ]; "html5" = ps: with ps; [ aiohttp-cors pywebpush ]; "http" = ps: with ps; [ aiohttp-cors ]; - "htu21d" = ps: with ps; [ smbus-cffi ]; # missing inputs: i2csense + "htu21d" = ps: with ps; [ i2csense smbus-cffi ]; "huawei_lte" = ps: with ps; [ huawei-lte-api stringcase url-normalize ]; "hue" = ps: with ps; [ aiohue ]; "huisbaasje" = ps: with ps; [ huisbaasje-client ]; @@ -402,12 +407,14 @@ "incomfort" = ps: with ps; [ incomfort-client ]; "influxdb" = ps: with ps; [ influxdb-client influxdb ]; "input_boolean" = ps: with ps; [ ]; + "input_button" = ps: with ps; [ ]; "input_datetime" = ps: with ps; [ ]; "input_number" = ps: with ps; [ ]; "input_select" = ps: with ps; [ ]; "input_text" = ps: with ps; [ ]; "insteon" = ps: with ps; [ pyinsteon ]; "integration" = ps: with ps; [ ]; + "intellifire" = ps: with ps; [ intellifire4py ]; "intent" = ps: with ps; [ aiohttp-cors ]; "intent_script" = ps: with ps; [ ]; "intesishome" = ps: with ps; [ pyintesishome ]; @@ -452,12 +459,12 @@ "launch_library" = ps: with ps; [ pylaunches ]; "lcn" = ps: with ps; [ pypck ]; "lg_netcast" = ps: with ps; [ pylgnetcast ]; - "lg_soundbar" = ps: with ps; [ ]; # missing inputs: temescal + "lg_soundbar" = ps: with ps; [ temescal ]; "life360" = ps: with ps; [ life360 ]; "lifx" = ps: with ps; [ aiolifx aiolifx-effects ]; "lifx_cloud" = ps: with ps; [ ]; "light" = ps: with ps; [ ]; - "lightwave" = ps: with ps; [ ]; # missing inputs: lightwave + "lightwave" = ps: with ps; [ lightwave ]; "limitlessled" = ps: with ps; [ limitlessled ]; "linksys_smart" = ps: with ps; [ ]; "linode" = ps: with ps; [ linode-api ]; @@ -482,7 +489,7 @@ "luftdaten" = ps: with ps; [ luftdaten ]; "lupusec" = ps: with ps; [ lupupy ]; "lutron" = ps: with ps; [ pylutron ]; - "lutron_caseta" = ps: with ps; [ aiolip pylutron-caseta ]; + "lutron_caseta" = ps: with ps; [ pylutron-caseta ]; "lw12wifi" = ps: with ps; [ ]; # missing inputs: lw12 "lyric" = ps: with ps; [ aiohttp-cors aiolyric ]; "magicseaweed" = ps: with ps; [ ]; # missing inputs: magicseaweed @@ -562,7 +569,7 @@ "nest" = ps: with ps; [ aiohttp-cors google-nest-sdm ha-ffmpeg python-nest ]; "netatmo" = ps: with ps; [ pyturbojpeg aiohttp-cors hass-nabucasa pyatmo ]; "netdata" = ps: with ps; [ netdata ]; - "netgear" = ps: with ps; [ ]; # missing inputs: pynetgear + "netgear" = ps: with ps; [ pynetgear ]; "netgear_lte" = ps: with ps; [ eternalegypt ]; "netio" = ps: with ps; [ aiohttp-cors ]; # missing inputs: pynetio "network" = ps: with ps; [ aiohttp-cors ifaddr ]; @@ -574,6 +581,7 @@ "nightscout" = ps: with ps; [ py-nightscout ]; "niko_home_control" = ps: with ps; [ niko-home-control ]; "nilu" = ps: with ps; [ niluclient ]; + "nina" = ps: with ps; [ pynina ]; "nissan_leaf" = ps: with ps; [ pycarwings2 ]; "nmap_tracker" = ps: with ps; [ aiohttp-cors getmac ifaddr netmap ]; # missing inputs: mac-vendor-lookup "nmbs" = ps: with ps; [ ]; # missing inputs: pyrail @@ -601,15 +609,17 @@ "ombi" = ps: with ps; [ pyombi ]; "omnilogic" = ps: with ps; [ omnilogic ]; "onboarding" = ps: with ps; [ aiohttp-cors home-assistant-frontend pillow sqlalchemy ]; + "oncue" = ps: with ps; [ aiooncue ]; "ondilo_ico" = ps: with ps; [ aiohttp-cors ondilo ]; - "onewire" = ps: with ps; [ ]; # missing inputs: pi1wire pyownet + "onewire" = ps: with ps; [ pi1wire pyownet ]; "onkyo" = ps: with ps; [ onkyo-eiscp ]; - "onvif" = ps: with ps; [ ha-ffmpeg ]; # missing inputs: WSDiscovery onvif-zeep-async + "onvif" = ps: with ps; [ wsdiscovery ha-ffmpeg onvif-zeep-async ]; + "open_meteo" = ps: with ps; [ open-meteo ]; "openalpr_cloud" = ps: with ps; [ ]; "openalpr_local" = ps: with ps; [ ]; "opencv" = ps: with ps; [ numpy ]; # missing inputs: opencv-python-headless "openerz" = ps: with ps; [ openerz-api ]; - "openevse" = ps: with ps; [ ]; # missing inputs: openevsewifi + "openevse" = ps: with ps; [ openevsewifi ]; "openexchangerates" = ps: with ps; [ ]; "opengarage" = ps: with ps; [ open-garage ]; "openhardwaremonitor" = ps: with ps; [ ]; @@ -626,6 +636,7 @@ "orvibo" = ps: with ps; [ orvibo ]; "osramlightify" = ps: with ps; [ ]; # missing inputs: lightify "otp" = ps: with ps; [ pyotp ]; + "overkiz" = ps: with ps; [ pyoverkiz ]; "ovo_energy" = ps: with ps; [ ovoenergy ]; "owntracks" = ps: with ps; [ pynacl pyturbojpeg aiohttp-cors hass-nabucasa paho-mqtt ]; "ozw" = ps: with ps; [ aiohttp-cors paho-mqtt python-openzwave-mqtt ]; @@ -673,7 +684,7 @@ "pushbullet" = ps: with ps; [ pushbullet ]; "pushover" = ps: with ps; [ pushover-complete ]; "pushsafer" = ps: with ps; [ ]; - "pvoutput" = ps: with ps; [ jsonpath xmltodict ]; + "pvoutput" = ps: with ps; [ pvo ]; "pvpc_hourly_pricing" = ps: with ps; [ aiopvpc ]; "pyload" = ps: with ps; [ ]; "python_script" = ps: with ps; [ restrictedpython ]; @@ -682,7 +693,7 @@ "qnap" = ps: with ps; [ ]; # missing inputs: qnapstats "qrcode" = ps: with ps; [ pillow ]; # missing inputs: pyzbar "quantum_gateway" = ps: with ps; [ quantum-gateway ]; - "qvr_pro" = ps: with ps; [ ]; # missing inputs: pyqvrpro + "qvr_pro" = ps: with ps; [ pyqvrpro ]; "qwikswitch" = ps: with ps; [ ]; # missing inputs: pyqwikswitch "rachio" = ps: with ps; [ pyturbojpeg aiohttp-cors hass-nabucasa rachiopy ]; "radarr" = ps: with ps; [ ]; @@ -729,6 +740,7 @@ "rpi_rf" = ps: with ps; [ ]; # missing inputs: RPi.GPIO rpi-rf "rss_feed_template" = ps: with ps; [ aiohttp-cors ]; "rtorrent" = ps: with ps; [ ]; + "rtsp_to_webrtc" = ps: with ps; [ pyturbojpeg aiohttp-cors rtsp-to-webrtc ]; "ruckus_unleashed" = ps: with ps; [ pyruckus ]; "russound_rio" = ps: with ps; [ ]; # missing inputs: russound_rio "russound_rnet" = ps: with ps; [ ]; # missing inputs: russound @@ -749,6 +761,7 @@ "sendgrid" = ps: with ps; [ sendgrid ]; "sense" = ps: with ps; [ sense-energy ]; "sensehat" = ps: with ps; [ ]; # missing inputs: sense-hat + "senseme" = ps: with ps; [ aiosenseme ]; "sensibo" = ps: with ps; [ ]; # missing inputs: pysensibo "sensor" = ps: with ps; [ sqlalchemy ]; "sentry" = ps: with ps; [ sentry-sdk ]; @@ -803,7 +816,7 @@ "somfy_mylink" = ps: with ps; [ somfy-mylink-synergy ]; "sonarr" = ps: with ps; [ sonarr ]; "songpal" = ps: with ps; [ python-songpal ]; - "sonos" = ps: with ps; [ aiohttp-cors async-upnp-client ifaddr plexapi plexauth plexwebsocket soco zeroconf ]; + "sonos" = ps: with ps; [ aiohttp-cors async-upnp-client ifaddr plexapi plexauth plexwebsocket soco spotipy zeroconf ]; "sony_projector" = ps: with ps; [ pysdcp ]; "soundtouch" = ps: with ps; [ aiohttp-cors ifaddr libsoundtouch zeroconf ]; "spaceapi" = ps: with ps; [ aiohttp-cors ]; @@ -822,9 +835,10 @@ "statistics" = ps: with ps; [ sqlalchemy ]; "statsd" = ps: with ps; [ statsd ]; "steam_online" = ps: with ps; [ ]; # missing inputs: steamodd + "steamist" = ps: with ps; [ aiohttp-cors aiosteamist discovery30303 ifaddr ]; "stiebel_eltron" = ps: with ps; [ pymodbus ]; # missing inputs: pystiebeleltron "stookalert" = ps: with ps; [ ]; # missing inputs: stookalert - "stream" = ps: with ps; [ aiohttp-cors ha-av ]; + "stream" = ps: with ps; [ pyturbojpeg aiohttp-cors av ]; "streamlabswater" = ps: with ps; [ streamlabswater ]; "stt" = ps: with ps; [ aiohttp-cors ]; "subaru" = ps: with ps; [ subarulink ]; @@ -848,11 +862,10 @@ "syslog" = ps: with ps; [ ]; "system_bridge" = ps: with ps; [ aiohttp-cors ifaddr systembridge zeroconf ]; "system_health" = ps: with ps; [ aiohttp-cors ]; - "system_log" = ps: with ps; [ aiohttp-cors ]; + "system_log" = ps: with ps; [ ]; "systemmonitor" = ps: with ps; [ psutil ]; "tado" = ps: with ps; [ python-tado ]; "tag" = ps: with ps; [ ]; - "tahoma" = ps: with ps; [ tahoma-api ]; "tailscale" = ps: with ps; [ tailscale ]; "tank_utility" = ps: with ps; [ ]; # missing inputs: tank_utility "tankerkoenig" = ps: with ps; [ pytankerkoenig ]; @@ -877,7 +890,7 @@ "thinkingcleaner" = ps: with ps; [ ]; # missing inputs: pythinkingcleaner "thomson" = ps: with ps; [ ]; "threshold" = ps: with ps; [ ]; - "tibber" = ps: with ps; [ pytibber ]; + "tibber" = ps: with ps; [ pytibber sqlalchemy ]; "tikteck" = ps: with ps; [ ]; # missing inputs: tikteck "tile" = ps: with ps; [ pytile ]; "time_date" = ps: with ps; [ ]; @@ -910,7 +923,7 @@ "twilio" = ps: with ps; [ aiohttp-cors twilio ]; "twilio_call" = ps: with ps; [ aiohttp-cors twilio ]; "twilio_sms" = ps: with ps; [ aiohttp-cors twilio ]; - "twinkly" = ps: with ps; [ twinkly-client ]; + "twinkly" = ps: with ps; [ ttls ]; "twitch" = ps: with ps; [ python-twitch-client ]; "twitter" = ps: with ps; [ twitterapi ]; "ubus" = ps: with ps; [ openwrt-ubus-rpc ]; @@ -919,6 +932,7 @@ "unifi" = ps: with ps; [ aiounifi ]; "unifi_direct" = ps: with ps; [ pexpect ]; "unifiled" = ps: with ps; [ unifiled ]; + "unifiprotect" = ps: with ps; [ aiohttp-cors ]; # missing inputs: pyunifiprotect unifi-discovery "universal" = ps: with ps; [ ]; "upb" = ps: with ps; [ upb-lib ]; "upc_connect" = ps: with ps; [ connect-box ]; @@ -935,7 +949,7 @@ "vacuum" = ps: with ps; [ ]; "vallox" = ps: with ps; [ ]; # missing inputs: vallox-websocket-api "vasttrafik" = ps: with ps; [ ]; # missing inputs: vtjp - "velbus" = ps: with ps; [ velbus-aio ]; + "velbus" = ps: with ps; [ aiohttp-cors pyserial pyudev velbus-aio ]; "velux" = ps: with ps; [ pyvlx ]; "venstar" = ps: with ps; [ venstarcolortouch ]; "vera" = ps: with ps; [ pyvera ]; @@ -967,11 +981,11 @@ "waze_travel_time" = ps: with ps; [ wazeroutecalculator ]; "weather" = ps: with ps; [ ]; "webhook" = ps: with ps; [ aiohttp-cors ]; - "webostv" = ps: with ps; [ aiopylgtv ]; + "webostv" = ps: with ps; [ aiowebostv sqlalchemy ]; "websocket_api" = ps: with ps; [ aiohttp-cors ]; "wemo" = ps: with ps; [ pywemo ]; "whirlpool" = ps: with ps; [ whirlpool-sixth-sense ]; - "whois" = ps: with ps; [ python-whois ]; + "whois" = ps: with ps; [ whois ]; "wiffi" = ps: with ps; [ wiffi ]; "wilight" = ps: with ps; [ pywilight ]; "wirelesstag" = ps: with ps; [ ]; # missing inputs: wirelesstagpy @@ -1052,10 +1066,13 @@ "aprs" "arcam_fmj" "arlo" + "aseko_pool_live" "asuswrt" "atag" "august" "aurora" + "aurora_abb_powerone" + "aussie_broadband" "auth" "automation" "awair" @@ -1103,6 +1120,7 @@ "coronavirus" "counter" "cover" + "cpuspeed" "crownstone" "daikin" "darksky" @@ -1120,21 +1138,25 @@ "devolo_home_network" "dexcom" "dhcp" + "diagnostics" "dialogflow" "directv" "discovery" "dlna_dmr" + "dnsip" "doorbird" "dsmr" "dte_energy_bridge" "duckdns" "dunehd" + "dynalite" "eafm" "ecobee" "econet" "efergy" "elgato" "elkm1" + "elmax" "emonitor" "emulated_hue" "emulated_kasa" @@ -1162,6 +1184,7 @@ "fireservicerota" "firmata" "fjaraskupan" + "flic" "flick_electric" "flipr" "flo" @@ -1194,9 +1217,11 @@ "geonetnz_quakes" "geonetnz_volcano" "gios" + "github" "glances" "goalzero" "gogogate2" + "goodwe" "google" "google_assistant" "google_domains" @@ -1229,6 +1254,7 @@ "homekit_controller" "homematic" "homematicip_cloud" + "homewizard" "honeywell" "html5" "http" @@ -1249,12 +1275,14 @@ "imap_email_content" "influxdb" "input_boolean" + "input_button" "input_datetime" "input_number" "input_select" "input_text" "insteon" "integration" + "intellifire" "intent" "intent_script" "ios" @@ -1277,6 +1305,7 @@ "kraken" "kulersky" "lastfm" + "launch_library" "lcn" "light" "litterrobot" @@ -1340,9 +1369,11 @@ "ness_alarm" "nest" "netatmo" + "netgear" "network" "nexia" "nightscout" + "nina" "no_ip" "notify" "notion" @@ -1355,7 +1386,11 @@ "octoprint" "omnilogic" "onboarding" + "oncue" "ondilo_ico" + "onewire" + "onvif" + "open_meteo" "openalpr_cloud" "openalpr_local" "openerz" @@ -1365,6 +1400,7 @@ "openuv" "openweathermap" "opnsense" + "overkiz" "ovo_energy" "owntracks" "ozw" @@ -1389,6 +1425,7 @@ "proximity" "push" "pushbullet" + "pvoutput" "pvpc_hourly_pricing" "python_script" "qld_bushfire" @@ -1417,6 +1454,7 @@ "roon" "rpi_power" "rss_feed_template" + "rtsp_to_webrtc" "ruckus_unleashed" "safe_mode" "samsungtv" @@ -1427,6 +1465,7 @@ "season" "select" "sense" + "senseme" "sensor" "sentry" "seventeentrack" @@ -1453,6 +1492,7 @@ "snips" "solaredge" "solarlog" + "solax" "soma" "somfy" "somfy_mylink" @@ -1473,6 +1513,7 @@ "startca" "statistics" "statsd" + "steamist" "stream" "stt" "subaru" @@ -1560,6 +1601,7 @@ "websocket_api" "wemo" "whirlpool" + "whois" "wiffi" "wilight" "wled" diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix index e26c38bc87f..920343de67b 100644 --- a/pkgs/servers/home-assistant/default.nix +++ b/pkgs/servers/home-assistant/default.nix @@ -15,6 +15,9 @@ # Additional packages to add to propagatedBuildInputs , extraPackages ? ps: [] +# Write out info about included extraComponents and extraPackages +, writeText + # Override Python packages using # self: super: { pkg = super.pkg.overridePythonAttrs (oldAttrs: { ... }); } # Applied after defaultOverrides @@ -25,19 +28,6 @@ let defaultOverrides = [ - # aiounify 29 breaks integration tests - (self: super: { - aiounifi = super.aiounifi.overridePythonAttrs (oldAttrs: rec { - version = "28"; - src = fetchFromGitHub { - owner = "Kane610"; - repo = "aiounifi"; - rev = "v${version}"; - sha256 = "1r86pk80sa1la2s7c6v9svh5cpkci6jcw1xziz0h09jdvv5j5iff"; - }; - }); - }) - # Override the version of some packages pinned in Home Assistant's setup.py and requirements_all.txt (mkOverride "python-slugify" "4.0.1" "69a517766e00c1268e5bbfc0d010a0a8508de0b18d30ad5a1ff357f8ae724270") @@ -54,36 +44,6 @@ let }); }) - # Pinned due to API changes in iaqualink>=2.0, remove after - # https://github.com/home-assistant/core/pull/48137 was merged - (self: super: { - iaqualink = super.iaqualink.overridePythonAttrs (oldAttrs: rec { - version = "0.3.90"; - src = fetchFromGitHub { - owner = "flz"; - repo = "iaqualink-py"; - rev = "v${version}"; - sha256 = "0c8ckbbr1n8gx5k63ymgyfkbz3d0rbdvghg8fqdvbg4nrigrs5v0"; - }; - checkInputs = oldAttrs.checkInputs ++ [ python3.pkgs.asynctest ]; - }); - }) - - # Pinned due to API changes in influxdb-client>1.21.0 - (self: super: { - influxdb-client = super.influxdb-client.overridePythonAttrs (oldAttrs: rec { - version = "1.21.0"; - src = fetchFromGitHub { - owner = "influxdata"; - repo = "influxdb-client-python"; - rev = "v${version}"; - sha256 = "081pwd3aa7kbgxqcl1hfi2ny4iapnxkcp9ypsfslr69d0khvfc4s"; - }; - }); - }) - - (mkOverride "jinja2" "3.0.3" "1mvwr02s86zck5wsmd9wjxxb9iaqr17hdi5xza9vkwv8rmrv46v1") - # Pinned due to API changes in pyruckus>0.12 (self: super: { pyruckus = super.pyruckus.overridePythonAttrs (oldAttrs: rec { @@ -97,25 +57,22 @@ let }); }) - # Pinned due to API changes in eebrightbox>=0.0.5 + # Pinned due to API changes in 0.1.0 + (mkOverride "poolsense" "0.0.8" "09y4fq0gdvgkfsykpxnvmfv92dpbknnq5v82spz43ak6hjnhgcyp") + + # Pinned due to API changes >0.3.5.3 (self: super: { - eebrightbox = super.eebrightbox.overridePythonAttrs (oldAttrs: rec { - version = "0.0.4"; + pyatag = super.pyatag.overridePythonAttrs (oldAttrs: rec { + version = "0.3.5.3"; src = fetchFromGitHub { - owner = "krygal"; - repo = "eebrightbox"; + owner = "MatsNl"; + repo = "pyatag"; rev = version; - sha256 = "0d8mmpwgrd7gymw5263r1v2wjv6dx6w6pq13d62fkfm4h2hya4a4"; + sha256 = "00ly4injmgrj34p0lyx7cz2crgnfcijmzc0540gf7hpwha0marf6"; }; }); }) - # Pinned due to API changes in 0.1.0 - (mkOverride "poolsense" "0.0.8" "09y4fq0gdvgkfsykpxnvmfv92dpbknnq5v82spz43ak6hjnhgcyp") - - # Requirements for recorder not found: ['sqlalchemy==1.4.27']. - (mkOverride "sqlalchemy" "1.4.27" "031jbd0svrvwr3n52iibp9mkwsj9wicnck45yd26da5kmsfkas6p") - # Pinned due to API changes in 0.4.0 (self: super: { vilfo-api-client = super.vilfo-api-client.overridePythonAttrs (oldAttrs: rec { @@ -148,9 +105,9 @@ let }) ]; - mkOverride = attrname: version: sha256: + mkOverride = attrName: version: sha256: self: super: { - ${attrname} = super.${attrname}.overridePythonAttrs (oldAttrs: { + ${attrName} = super.${attrName}.overridePythonAttrs (oldAttrs: { inherit version; src = oldAttrs.src.override { inherit version sha256; @@ -176,15 +133,20 @@ let # Ensure that we are using a consistent package set extraBuildInputs = extraPackages python.pkgs; + # Create info about included packages and components + extraComponentsFile = writeText "home-assistant-components" (lib.concatStringsSep "\n" extraComponents); + extraPackagesFile = writeText "home-assistant-packages" (lib.concatMapStringsSep "\n" (pkg: pkg.pname) extraBuildInputs); + # Don't forget to run parse-requirements.py after updating - hassVersion = "2021.12.10"; + hassVersion = "2022.2.9"; in python.pkgs.buildPythonApplication rec { pname = "homeassistant"; version = assert (componentPackages.version == hassVersion); hassVersion; + format = "pyproject"; # check REQUIRED_PYTHON_VER in homeassistant/const.py - disabled = python.pythonOlder "3.8"; + disabled = python.pythonOlder "3.9"; # don't try and fail to strip 6600+ python files, it takes minutes! dontStrip = true; @@ -194,7 +156,7 @@ in python.pkgs.buildPythonApplication rec { owner = "home-assistant"; repo = "core"; rev = version; - hash = "sha256:0nyddcjy4diq5bakpb76frax44i0jraj2vvpfxrj50h9l5pdwsaf"; + hash = "sha256-So/MAKyFVa1TchrVE4ego1fRbgOXCoXR3w/rJLFSBqI="; }; # leave this in, so users don't have to constantly update their downstream patch handling @@ -203,7 +165,6 @@ in python.pkgs.buildPythonApplication rec { src = ./patches/ffmpeg-path.patch; ffmpeg = "${lib.getBin ffmpeg}/bin/ffmpeg"; }) - ./patches/tests-ignore-OSErrors-in-hass-fixture.patch ]; postPatch = let @@ -223,9 +184,9 @@ in python.pkgs.buildPythonApplication rec { in '' sed -r -i \ ${lib.concatStringsSep "\n" (map (package: - ''-e 's@${package}[<>=]+.*@${package}",@g' \'' + ''-e 's@${package}[<>=]+.*@${package}@g' \'' ) relaxedConstraints)} - setup.py + setup.cfg substituteInPlace tests/test_config.py --replace '"/usr"' '"/build/media"' ''; @@ -256,8 +217,6 @@ in python.pkgs.buildPythonApplication rec { yarl # Not in setup.py, but used in homeassistant/util/package.py setuptools - ] ++ lib.optionals (pythonOlder "3.9") [ - backports-zoneinfo ] ++ componentBuildInputs ++ extraBuildInputs; makeWrapperArgs = lib.optional skipPip "--add-flags --skip-pip"; @@ -280,6 +239,9 @@ in python.pkgs.buildPythonApplication rec { respx stdlib-list tqdm + # required by tests/pylint + astroid + pylint # required by tests/auth/mfa_modules pyotp ] ++ lib.concatMap (component: getPackages component python.pkgs) [ @@ -328,6 +290,11 @@ in python.pkgs.buildPythonApplication rec { export PATH=${inetutils}/bin:$PATH ''; + postInstall = '' + cp -v ${extraComponentsFile} $out/extra_components + cp -v ${extraPackagesFile} $out/extra_packages + ''; + passthru = { inherit availableComponents diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix index cdb60172fa8..2aabb0d9312 100644 --- a/pkgs/servers/home-assistant/frontend.nix +++ b/pkgs/servers/home-assistant/frontend.nix @@ -4,11 +4,15 @@ buildPythonPackage rec { # the frontend version corresponding to a specific home-assistant version can be found here # https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/frontend/manifest.json pname = "home-assistant-frontend"; - version = "20211229.1"; + version = "20220203.1"; + format = "wheel"; src = fetchPypi { - inherit pname version; - sha256 = "sha256-glVjJ9iOmhAIGD65PHQu9l7Wc/lr5XRya2mi20/UVgs="; + inherit version format; + pname = "home_assistant_frontend"; + dist = "py3"; + python = "py3"; + sha256 = "sha256-6+TzBhHo9+eo6Hlk8RF+BAt4O0i759iAN+dKAPDmTNY="; }; # there is nothing to strip in this package diff --git a/pkgs/servers/home-assistant/patches/tests-ignore-OSErrors-in-hass-fixture.patch b/pkgs/servers/home-assistant/patches/tests-ignore-OSErrors-in-hass-fixture.patch deleted file mode 100644 index add0ea1d552..00000000000 --- a/pkgs/servers/home-assistant/patches/tests-ignore-OSErrors-in-hass-fixture.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 3e3f5c37252a33ea1e71c39f2ca0f13940c261ad Mon Sep 17 00:00:00 2001 -From: Martin Weinelt <hexa@darmstadt.ccc.de> -Date: Sat, 17 Jul 2021 16:11:23 +0200 -Subject: [PATCH] tests: ignore OSErrors in hass fixture - -The nix sandbox will cause OSErrors due to limitations imposed on -network interaction. This change makes it so we forgive these cases. ---- - tests/conftest.py | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tests/conftest.py b/tests/conftest.py -index 1f5ffc80d0..b284727a0f 100644 ---- a/tests/conftest.py -+++ b/tests/conftest.py -@@ -168,6 +168,8 @@ def hass(loop, load_registries, hass_storage, request): - continue - if isinstance(ex, ServiceNotFound): - continue -+ if isinstance(ex, OSError): -+ continue - raise ex - - --- -2.32.0 - diff --git a/pkgs/servers/home-assistant/tests.nix b/pkgs/servers/home-assistant/tests.nix index 8e552ed15e0..31dbe64725c 100644 --- a/pkgs/servers/home-assistant/tests.nix +++ b/pkgs/servers/home-assistant/tests.nix @@ -13,6 +13,7 @@ let google_translate = [ mutagen ]; nest = [ ha-av ]; onboarding = [ pymetno rpi-bad-power ]; + version = [ aioaseko ]; voicerss = [ mutagen ]; yandextts = [ mutagen ]; zha = [ pydeconz ]; @@ -50,17 +51,14 @@ in lib.listToAttrs (map (component: lib.nameValuePair component ( ++ extraPytestFlagsArray.${component} or [ ] ++ [ "tests/components/${component}" ]; - preCheck = old.preCheck + lib.optionalString (component != "network") '' + preCheck = old.preCheck + lib.optionalString (builtins.elem component [ "emulated_hue" "songpal" "system_log" ]) '' patch -p1 < ${./patches/tests-mock-source-ip.patch} ''; meta = old.meta // { broken = lib.elem component [ "airtouch4" - "glances" - "ridwell" - "venstar" - "yamaha_musiccast" + "dnsip" ]; # upstream only tests on Linux, so do we. platforms = lib.platforms.linux; |