diff options
Diffstat (limited to 'pkgs/servers/home-assistant')
-rw-r--r-- | pkgs/servers/home-assistant/0001-setup.py-relax-dependencies.patch | 48 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/component-packages.nix | 165 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/default.nix | 26 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/esphome.nix | 61 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/frontend.nix | 4 | ||||
-rwxr-xr-x | pkgs/servers/home-assistant/parse-requirements.py | 11 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/relax-dependencies.patch | 21 | ||||
-rw-r--r-- | pkgs/servers/home-assistant/test-timeout.patch | 13 | ||||
-rwxr-xr-x | pkgs/servers/home-assistant/update.sh | 34 |
9 files changed, 181 insertions, 202 deletions
diff --git a/pkgs/servers/home-assistant/0001-setup.py-relax-dependencies.patch b/pkgs/servers/home-assistant/0001-setup.py-relax-dependencies.patch deleted file mode 100644 index 0b9dd3e447d..00000000000 --- a/pkgs/servers/home-assistant/0001-setup.py-relax-dependencies.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 9d730514540929dc95a7313bdb385bab95d9a28c Mon Sep 17 00:00:00 2001 -From: Martin Weinelt <hexa@darmstadt.ccc.de> -Date: Wed, 20 May 2020 23:23:23 +0200 -Subject: [PATCH] setup.py: relax dependencies - ---- - setup.py | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/setup.py b/setup.py -index 1473fd1f5f..149af58b3a 100755 ---- a/setup.py -+++ b/setup.py -@@ -32,24 +32,24 @@ PROJECT_URLS = { - PACKAGES = find_packages(exclude=["tests", "tests.*"]) - - REQUIRES = [ -- "aiohttp==3.6.1", -+ "aiohttp>=3.6.1", - "astral==1.10.1", - "async_timeout==3.0.1", - "attrs==19.3.0", - "bcrypt==3.1.7", - "certifi>=2020.4.5.1", - "ciso8601==2.1.3", -- "importlib-metadata==1.6.0", -+ "importlib-metadata>=1.5.0", - "jinja2>=2.11.1", - "PyJWT==1.7.1", - # PyJWT has loose dependency. We want the latest one. -- "cryptography==2.9.2", -+ "cryptography>=2.9", - "pip>=8.0.3", - "python-slugify==4.0.0", -- "pytz>=2020.1", -- "pyyaml==5.3.1", -- "requests==2.23.0", -- "ruamel.yaml==0.15.100", -+ "pytz>=2019.03", -+ "pyyaml>=5.2", -+ "requests>=2.22", -+ "ruamel.yaml>=0.15.100", - "voluptuous==0.11.7", - "voluptuous-serialize==2.3.0", - ] --- -2.26.2 - diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix index aff2e9dc0cb..4290599cbf8 100644 --- a/pkgs/servers/home-assistant/component-packages.nix +++ b/pkgs/servers/home-assistant/component-packages.nix @@ -2,10 +2,12 @@ # Do not edit! { - version = "0.110.1"; + version = "0.114.2"; components = { "abode" = ps: with ps; [ ]; # missing inputs: abodepy + "accuweather" = ps: with ps; [ ]; # missing inputs: accuweather "acer_projector" = ps: with ps; [ pyserial]; + "acmeda" = ps: with ps; [ ]; # missing inputs: aiopulse "actiontec" = ps: with ps; [ ]; "adguard" = ps: with ps; [ ]; # missing inputs: adguardhome "ads" = ps: with ps; [ ]; # missing inputs: pyads @@ -16,7 +18,7 @@ "airvisual" = ps: with ps; [ pyairvisual]; "aladdin_connect" = ps: with ps; [ ]; # missing inputs: aladdin_connect "alarm_control_panel" = ps: with ps; [ ]; - "alarmdecoder" = ps: with ps; [ alarmdecoder]; + "alarmdecoder" = ps: with ps; [ ]; # missing inputs: adext "alert" = ps: with ps; [ ]; "alexa" = ps: with ps; [ aiohttp-cors]; "almond" = ps: with ps; [ aiohttp-cors]; # missing inputs: pyalmond @@ -27,14 +29,14 @@ "amcrest" = ps: with ps; [ ha-ffmpeg]; # missing inputs: amcrest "ampio" = ps: with ps; [ ]; # missing inputs: asmog "android_ip_webcam" = ps: with ps; [ ]; # missing inputs: pydroid-ipcam - "androidtv" = ps: with ps; [ ]; # missing inputs: adb-shell androidtv pure-python-adb + "androidtv" = ps: with ps; [ ]; # missing inputs: adb-shell[async] androidtv[async] pure-python-adb "anel_pwrctrl" = ps: with ps; [ ]; # missing inputs: anel_pwrctrl-homeassistant "anthemav" = ps: with ps; [ ]; # missing inputs: anthemav "apache_kafka" = ps: with ps; [ aiokafka]; "apcupsd" = ps: with ps; [ ]; # missing inputs: 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 netdisco pyatv zeroconf]; "apprise" = ps: with ps; [ apprise]; "aprs" = ps: with ps; [ ]; # missing inputs: aprslib geopy "aqualogic" = ps: with ps; [ ]; # missing inputs: aqualogic @@ -45,7 +47,7 @@ "arlo" = ps: with ps; [ ha-ffmpeg]; # missing inputs: pyarlo "arris_tg2492lg" = ps: with ps; [ ]; # missing inputs: arris-tg2492lg "aruba" = ps: with ps; [ pexpect]; - "arwn" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; + "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 "asuswrt" = ps: with ps; [ ]; # missing inputs: aioasuswrt @@ -56,14 +58,14 @@ "aurora" = ps: with ps; [ ]; "aurora_abb_powerone" = ps: with ps; [ ]; # missing inputs: aurorapy "auth" = ps: with ps; [ aiohttp-cors]; - "automatic" = ps: with ps; [ aiohttp-cors]; # missing inputs: aioautomatic - "automation" = ps: with ps; [ ]; + "automation" = ps: with ps; [ aiohttp-cors]; "avea" = ps: with ps; [ ]; # missing inputs: avea "avion" = ps: with ps; [ ]; # missing inputs: avion - "avri" = ps: with ps; [ ]; # missing inputs: avri-api + "avri" = ps: with ps; [ pycountry]; # missing inputs: avri-api "awair" = ps: with ps; [ ]; # missing inputs: python_awair "aws" = ps: with ps; [ ]; # missing inputs: aiobotocore - "axis" = ps: with ps; [ ]; # missing inputs: axis + "axis" = ps: with ps; [ aiohttp-cors paho-mqtt]; # missing inputs: axis + "azure_devops" = ps: with ps; [ ]; # missing inputs: aioazuredevops "azure_event_hub" = ps: with ps; [ ]; # missing inputs: azure-eventhub "azure_service_bus" = ps: with ps; [ azure-servicebus]; "baidu" = ps: with ps; [ ]; # missing inputs: baidu-aip @@ -90,9 +92,10 @@ "bmp280" = ps: with ps; [ ]; # missing inputs: RPi.GPIO adafruit-circuitpython-bmp280 "bmw_connected_drive" = ps: with ps; [ ]; # missing inputs: bimmer_connected "bom" = ps: with ps; [ ]; # missing inputs: bomradarloop + "bond" = ps: with ps; [ ]; # missing inputs: bond-api "braviatv" = ps: with ps; [ bravia-tv]; "broadlink" = ps: with ps; [ broadlink]; - "brother" = ps: with ps; [ ]; # missing inputs: brother + "brother" = ps: with ps; [ brother]; "brottsplatskartan" = ps: with ps; [ ]; # missing inputs: brottsplatskartan "browser" = ps: with ps; [ ]; "brunt" = ps: with ps; [ ]; # missing inputs: brunt @@ -104,9 +107,10 @@ "calendar" = ps: with ps; [ aiohttp-cors]; "camera" = ps: with ps; [ aiohttp-cors]; "canary" = ps: with ps; [ ha-ffmpeg]; # missing inputs: py-canary - "cast" = ps: with ps; [ PyChromecast]; + "cast" = ps: with ps; [ aiohttp-cors hass-nabucasa PyChromecast zeroconf]; "cert_expiry" = ps: with ps; [ ]; "channels" = ps: with ps; [ ]; # missing inputs: pychannels + "circuit" = ps: with ps; [ ]; # missing inputs: circuit-webhook "cisco_ios" = ps: with ps; [ pexpect]; "cisco_mobility_express" = ps: with ps; [ ]; # missing inputs: ciscomobilityexpress "cisco_webex_teams" = ps: with ps; [ ]; # missing inputs: webexteamssdk @@ -128,6 +132,7 @@ "concord232" = ps: with ps; [ ]; # missing inputs: concord232 "config" = ps: with ps; [ aiohttp-cors]; "configurator" = ps: with ps; [ ]; + "control4" = ps: with ps; [ ]; # missing inputs: pyControl4 "conversation" = ps: with ps; [ aiohttp-cors]; "coolmaster" = ps: with ps; [ ]; # missing inputs: pycoolmasternet "coronavirus" = ps: with ps; [ ]; # missing inputs: coronavirus @@ -143,21 +148,23 @@ "darksky" = ps: with ps; [ python-forecastio]; "datadog" = ps: with ps; [ datadog]; "ddwrt" = ps: with ps; [ ]; + "debugpy" = ps: with ps; [ debugpy]; "deconz" = ps: with ps; [ ]; # missing inputs: pydeconz "decora" = ps: with ps; [ bluepy]; # missing inputs: decora "decora_wifi" = ps: with ps; [ ]; # missing inputs: decora_wifi - "default_config" = ps: with ps; [ pynacl aiohttp-cors defusedxml distro hass-nabucasa netdisco sqlalchemy zeroconf]; # missing inputs: home-assistant-frontend + "default_config" = ps: with ps; [ pynacl aiohttp-cors defusedxml distro emoji hass-nabucasa netdisco sqlalchemy zeroconf]; # missing inputs: home-assistant-frontend "delijn" = ps: with ps; [ ]; # missing inputs: pydelijn "deluge" = ps: with ps; [ deluge-client]; "demo" = ps: with ps; [ aiohttp-cors]; "denon" = ps: with ps; [ ]; - "denonavr" = ps: with ps; [ denonavr]; + "denonavr" = ps: with ps; [ denonavr getmac]; "derivative" = ps: with ps; [ ]; "deutsche_bahn" = ps: with ps; [ ]; # missing inputs: schiene - "device_automation" = ps: with ps; [ aiohttp-cors]; + "device_automation" = ps: with ps; [ ]; "device_sun_light_trigger" = ps: with ps; [ ]; "device_tracker" = ps: with ps; [ ]; "devolo_home_control" = ps: with ps; [ ]; # missing inputs: devolo-home-control-api + "dexcom" = ps: with ps; [ ]; # missing inputs: pydexcom "dht" = ps: with ps; [ ]; # missing inputs: Adafruit-DHT "dialogflow" = ps: with ps; [ aiohttp-cors]; "digital_ocean" = ps: with ps; [ digital-ocean]; @@ -165,27 +172,27 @@ "directv" = ps: with ps; [ ]; # missing inputs: directv "discogs" = ps: with ps; [ discogs_client]; "discord" = ps: with ps; [ discordpy]; - "discovery" = ps: with ps; [ netdisco]; + "discovery" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; "dlib_face_detect" = ps: with ps; [ face_recognition]; "dlib_face_identify" = ps: with ps; [ face_recognition]; "dlink" = ps: with ps; [ ]; # missing inputs: pyW215 - "dlna_dmr" = ps: with ps; [ ]; # missing inputs: async-upnp-client + "dlna_dmr" = ps: with ps; [ async-upnp-client]; "dnsip" = ps: with ps; [ aiodns]; "dominos" = ps: with ps; [ aiohttp-cors]; # missing inputs: pizzapi "doods" = ps: with ps; [ pillow]; # missing inputs: pydoods - "doorbird" = ps: with ps; [ aiohttp-cors sqlalchemy]; # missing inputs: doorbirdpy home-assistant-frontend + "doorbird" = ps: with ps; [ aiohttp-cors]; # missing inputs: doorbirdpy "dovado" = ps: with ps; [ ]; # missing inputs: dovado "downloader" = ps: with ps; [ ]; "dsmr" = ps: with ps; [ ]; # missing inputs: dsmr_parser - "dsmr_reader" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; + "dsmr_reader" = ps: with ps; [ aiohttp-cors paho-mqtt]; "dte_energy_bridge" = ps: with ps; [ ]; "dublin_bus_transport" = ps: with ps; [ ]; "duckdns" = ps: with ps; [ ]; "dunehd" = ps: with ps; [ ]; # missing inputs: pdunehd - "dwd_weather_warnings" = ps: with ps; [ ]; + "dwd_weather_warnings" = ps: with ps; [ jsonpath xmltodict]; "dweet" = ps: with ps; [ ]; # missing inputs: dweepy "dynalite" = ps: with ps; [ ]; # missing inputs: dynalite_devices - "dyson" = ps: with ps; [ ]; # missing inputs: libpurecool + "dyson" = ps: with ps; [ aiohttp-cors zeroconf]; # missing inputs: libpurecool "ebox" = ps: with ps; [ ]; # missing inputs: pyebox "ebusd" = ps: with ps; [ ]; # missing inputs: ebusdpy "ecoal_boiler" = ps: with ps; [ ]; # missing inputs: ecoaliface @@ -208,7 +215,7 @@ "emoncms_history" = ps: with ps; [ ]; "emulated_hue" = ps: with ps; [ aiohttp-cors]; "emulated_roku" = ps: with ps; [ ]; # missing inputs: emulated_roku - "enigma2" = ps: with ps; [ ]; # missing inputs: openwebifpy + "enigma2" = ps: with ps; [ openwebifpy]; "enocean" = ps: with ps; [ ]; # missing inputs: enocean "enphase_envoy" = ps: with ps; [ ]; # missing inputs: envoy_reader "entur_public_transport" = ps: with ps; [ ]; # missing inputs: enturclient @@ -242,6 +249,7 @@ "filesize" = ps: with ps; [ ]; "filter" = ps: with ps; [ aiohttp-cors sqlalchemy]; "fints" = ps: with ps; [ fints]; + "firmata" = ps: with ps; [ ]; # missing inputs: pymata-express "fitbit" = ps: with ps; [ aiohttp-cors fitbit]; "fixer" = ps: with ps; [ ]; # missing inputs: fixerio "fleetgo" = ps: with ps; [ ]; # missing inputs: ritassist @@ -257,15 +265,14 @@ "folder_watcher" = ps: with ps; [ watchdog]; "foobot" = ps: with ps; [ ]; # missing inputs: foobot_async "forked_daapd" = ps: with ps; [ ]; # missing inputs: pyforked-daapd pylibrespot-java - "fortigate" = ps: with ps; [ ]; # missing inputs: pyfgt "fortios" = ps: with ps; [ ]; # missing inputs: fortiosapi "foscam" = ps: with ps; [ ]; # missing inputs: libpyfoscam "foursquare" = ps: with ps; [ aiohttp-cors]; "free_mobile" = ps: with ps; [ ]; # missing inputs: freesms - "freebox" = ps: with ps; [ ]; # missing inputs: aiofreepybox + "freebox" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; # missing inputs: aiofreepybox "freedns" = ps: with ps; [ ]; "fritz" = ps: with ps; [ fritzconnection]; - "fritzbox" = ps: with ps; [ ]; # missing inputs: pyfritzhome + "fritzbox" = ps: with ps; [ pyfritzhome]; "fritzbox_callmonitor" = ps: with ps; [ fritzconnection]; "fritzbox_netmonitor" = ps: with ps; [ fritzconnection]; "fronius" = ps: with ps; [ ]; # missing inputs: pyfronius @@ -276,7 +283,6 @@ "garmin_connect" = ps: with ps; [ ]; # missing inputs: garminconnect "gc100" = ps: with ps; [ ]; # missing inputs: python-gc100 "gdacs" = ps: with ps; [ ]; # missing inputs: aio_georss_gdacs - "gearbest" = ps: with ps; [ ]; # missing inputs: gearbest_parser "geizhals" = ps: with ps; [ ]; # missing inputs: geizhals "generic" = ps: with ps; [ ]; "generic_thermostat" = ps: with ps; [ ]; @@ -294,7 +300,7 @@ "glances" = ps: with ps; [ ]; # missing inputs: glances_api "gntp" = ps: with ps; [ ]; # missing inputs: gntp "goalfeed" = ps: with ps; [ ]; # missing inputs: pysher - "gogogate2" = ps: with ps; [ ]; # missing inputs: pygogogate2 + "gogogate2" = ps: with ps; [ ]; # missing inputs: gogogate2-api "google" = ps: with ps; [ google_api_python_client httplib2 oauth2client]; "google_assistant" = ps: with ps; [ aiohttp-cors]; "google_cloud" = ps: with ps; [ google_cloud_texttospeech]; @@ -315,11 +321,12 @@ "growatt_server" = ps: with ps; [ ]; # missing inputs: growattServer "gstreamer" = ps: with ps; [ ]; # missing inputs: gstreamer-player "gtfs" = ps: with ps; [ ]; # missing inputs: pygtfs + "guardian" = ps: with ps; [ ]; # missing inputs: aioguardian "habitica" = ps: with ps; [ ]; # missing inputs: habitipy "hangouts" = ps: with ps; [ ]; # missing inputs: hangups "harman_kardon_avr" = ps: with ps; [ ]; # missing inputs: hkavr "harmony" = ps: with ps; [ aioharmony]; - "hassio" = ps: with ps; [ aiohttp-cors]; + "hassio" = ps: with ps; [ aiohttp-cors]; # missing inputs: home-assistant-frontend "haveibeenpwned" = ps: with ps; [ ]; "hddtemp" = ps: with ps; [ ]; "hdmi_cec" = ps: with ps; [ ]; # missing inputs: pyCEC @@ -336,8 +343,8 @@ "hlk_sw16" = ps: with ps; [ ]; # missing inputs: hlk-sw16 "home_connect" = ps: with ps; [ aiohttp-cors]; # missing inputs: homeconnect "homeassistant" = ps: with ps; [ ]; - "homekit" = ps: with ps; [ HAP-python pyqrcode aiohttp-cors ha-ffmpeg]; # missing inputs: PyTurboJPEG base36 fnvhash - "homekit_controller" = ps: with ps; [ ]; # missing inputs: aiohomekit[IP] + "homekit" = ps: with ps; [ HAP-python pyqrcode aiohttp-cors ha-ffmpeg zeroconf]; # missing inputs: PyTurboJPEG base36 fnvhash + "homekit_controller" = ps: with ps; [ aiohttp-cors zeroconf]; # missing inputs: aiohomekit[IP] "homematic" = ps: with ps; [ pyhomematic]; "homematicip_cloud" = ps: with ps; [ ]; # missing inputs: homematicip "homeworks" = ps: with ps; [ ]; # missing inputs: pyhomeworks @@ -350,7 +357,9 @@ "huawei_lte" = ps: with ps; [ getmac stringcase]; # missing inputs: huawei-lte-api url-normalize "huawei_router" = ps: with ps; [ ]; "hue" = ps: with ps; [ aiohue]; + "humidifier" = ps: with ps; [ ]; "hunterdouglas_powerview" = ps: with ps; [ ]; # missing inputs: aiopvapi + "hvv_departures" = ps: with ps; [ ]; # missing inputs: pygti "hydrawise" = ps: with ps; [ ]; # missing inputs: hydrawiser "hyperion" = ps: with ps; [ ]; "ialarm" = ps: with ps; [ ]; # missing inputs: pyialarm @@ -366,13 +375,13 @@ "imap" = ps: with ps; [ ]; # missing inputs: aioimaplib "imap_email_content" = ps: with ps; [ ]; "incomfort" = ps: with ps; [ ]; # missing inputs: incomfort-client - "influxdb" = ps: with ps; [ influxdb]; + "influxdb" = ps: with ps; [ influxdb-client influxdb]; "input_boolean" = 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; [ ]; # missing inputs: insteonplm + "insteon" = ps: with ps; [ ]; # missing inputs: pyinsteon "integration" = ps: with ps; [ ]; "intent" = ps: with ps; [ aiohttp-cors]; "intent_script" = ps: with ps; [ ]; @@ -381,7 +390,7 @@ "iota" = ps: with ps; [ ]; # missing inputs: pyota "iperf3" = ps: with ps; [ ]; # missing inputs: iperf3 "ipma" = ps: with ps; [ ]; # missing inputs: pyipma - "ipp" = ps: with ps; [ ]; # missing inputs: pyipp + "ipp" = ps: with ps; [ pyipp]; "iqvia" = ps: with ps; [ numpy]; # missing inputs: pyiqvia "irish_rail_transport" = ps: with ps; [ ]; # missing inputs: pyirishrail "islamic_prayer_times" = ps: with ps; [ ]; # missing inputs: prayer_times_calculator @@ -422,7 +431,6 @@ "lightwave" = ps: with ps; [ ]; # missing inputs: lightwave "limitlessled" = ps: with ps; [ limitlessled]; "linksys_smart" = ps: with ps; [ ]; - "linky" = ps: with ps; [ ]; # missing inputs: pylinky "linode" = ps: with ps; [ linode-api]; "linux_battery" = ps: with ps; [ batinfo]; "lirc" = ps: with ps; [ ]; # missing inputs: python-lirc @@ -432,7 +440,6 @@ "local_ip" = ps: with ps; [ ]; "locative" = ps: with ps; [ aiohttp-cors]; "lock" = ps: with ps; [ ]; - "lockitron" = ps: with ps; [ ]; "logbook" = ps: with ps; [ aiohttp-cors sqlalchemy]; # missing inputs: home-assistant-frontend "logentries" = ps: with ps; [ ]; "logger" = ps: with ps; [ ]; @@ -452,7 +459,7 @@ "mailbox" = ps: with ps; [ aiohttp-cors]; "mailgun" = ps: with ps; [ aiohttp-cors]; # missing inputs: pymailgunner "manual" = ps: with ps; [ ]; - "manual_mqtt" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; + "manual_mqtt" = ps: with ps; [ aiohttp-cors paho-mqtt]; "map" = ps: with ps; [ aiohttp-cors]; # missing inputs: home-assistant-frontend "marytts" = ps: with ps; [ ]; # missing inputs: speak2mary "mastodon" = ps: with ps; [ ]; # missing inputs: Mastodon.py @@ -467,7 +474,7 @@ "meraki" = ps: with ps; [ aiohttp-cors]; "message_bird" = ps: with ps; [ ]; # missing inputs: messagebird "met" = ps: with ps; [ pymetno]; - "meteo_france" = ps: with ps; [ ]; # missing inputs: meteofrance vigilancemeteo + "meteo_france" = ps: with ps; [ ]; # missing inputs: meteofrance-api "meteoalarm" = ps: with ps; [ ]; # missing inputs: meteoalertapi "metoffice" = ps: with ps; [ ]; # missing inputs: datapoint "mfi" = ps: with ps; [ ]; # missing inputs: mficlient @@ -484,7 +491,7 @@ "minio" = ps: with ps; [ minio]; "mitemp_bt" = ps: with ps; [ ]; # missing inputs: mitemp_bt "mjpeg" = ps: with ps; [ ]; - "mobile_app" = ps: with ps; [ pynacl aiohttp-cors]; + "mobile_app" = ps: with ps; [ pynacl aiohttp-cors emoji hass-nabucasa]; "mochad" = ps: with ps; [ ]; # missing inputs: pymochad "modbus" = ps: with ps; [ ]; # missing inputs: pymodbus "modem_callerid" = ps: with ps; [ ]; # missing inputs: basicmodem @@ -493,17 +500,17 @@ "moon" = ps: with ps; [ ]; "mpchc" = ps: with ps; [ ]; "mpd" = ps: with ps; [ mpd2]; - "mqtt" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; - "mqtt_eventstream" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; - "mqtt_json" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; - "mqtt_room" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; - "mqtt_statestream" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; + "mqtt" = ps: with ps; [ aiohttp-cors paho-mqtt]; + "mqtt_eventstream" = ps: with ps; [ aiohttp-cors paho-mqtt]; + "mqtt_json" = ps: with ps; [ aiohttp-cors paho-mqtt]; + "mqtt_room" = ps: with ps; [ aiohttp-cors paho-mqtt]; + "mqtt_statestream" = ps: with ps; [ aiohttp-cors paho-mqtt]; "msteams" = ps: with ps; [ ]; # missing inputs: pymsteams "mvglive" = ps: with ps; [ PyMVGLive]; "mychevy" = ps: with ps; [ ]; # missing inputs: mychevy "mycroft" = ps: with ps; [ ]; # missing inputs: mycroftapi "myq" = ps: with ps; [ ]; # missing inputs: pymyq - "mysensors" = ps: with ps; [ ]; # missing inputs: pymysensors + "mysensors" = ps: with ps; [ aiohttp-cors paho-mqtt]; # missing inputs: pymysensors "mystrom" = ps: with ps; [ aiohttp-cors]; # missing inputs: python-mystrom "mythicbeastsdns" = ps: with ps; [ ]; # missing inputs: mbddns "n26" = ps: with ps; [ ]; # missing inputs: n26 @@ -515,7 +522,7 @@ "nello" = ps: with ps; [ ]; # missing inputs: pynello "ness_alarm" = ps: with ps; [ ]; # missing inputs: nessclient "nest" = ps: with ps; [ ]; # missing inputs: python-nest - "netatmo" = ps: with ps; [ aiohttp-cors pyatmo]; + "netatmo" = ps: with ps; [ aiohttp-cors hass-nabucasa pyatmo]; "netdata" = ps: with ps; [ ]; # missing inputs: netdata "netgear" = ps: with ps; [ ]; # missing inputs: pynetgear "netgear_lte" = ps: with ps; [ ]; # missing inputs: eternalegypt @@ -534,6 +541,7 @@ "noaa_tides" = ps: with ps; [ ]; # missing inputs: py_noaa "norway_air" = ps: with ps; [ pymetno]; "notify" = ps: with ps; [ ]; + "notify_events" = ps: with ps; [ ]; # missing inputs: notify-events "notion" = ps: with ps; [ ]; # missing inputs: aionotion "nsw_fuel_station" = ps: with ps; [ ]; # missing inputs: nsw-fuel-api-client "nsw_rural_fire_service_feed" = ps: with ps; [ ]; # missing inputs: aio_geojson_nsw_rfs_incidents @@ -547,7 +555,7 @@ "nzbget" = ps: with ps; [ ]; # missing inputs: pynzbgetapi "oasa_telematics" = ps: with ps; [ ]; # missing inputs: oasatelematics "obihai" = ps: with ps; [ ]; # missing inputs: pyobihai - "octoprint" = ps: with ps; [ ]; + "octoprint" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; "oem" = ps: with ps; [ ]; # missing inputs: oemthermostat "ohmconnect" = ps: with ps; [ defusedxml]; "ombi" = ps: with ps; [ ]; # missing inputs: pyombi @@ -576,8 +584,9 @@ "orvibo" = ps: with ps; [ ]; # missing inputs: orvibo "osramlightify" = ps: with ps; [ ]; # missing inputs: lightify "otp" = ps: with ps; [ pyotp]; - "owntracks" = ps: with ps; [ pynacl aiohttp-cors]; - "ozw" = ps: with ps; [ ]; # missing inputs: python-openzwave-mqtt + "ovo_energy" = ps: with ps; [ ]; # missing inputs: ovoenergy + "owntracks" = ps: with ps; [ pynacl aiohttp-cors hass-nabucasa paho-mqtt]; + "ozw" = ps: with ps; [ aiohttp-cors paho-mqtt]; # missing inputs: python-openzwave-mqtt "panasonic_bluray" = ps: with ps; [ ]; # missing inputs: panacotta "panasonic_viera" = ps: with ps; [ ]; # missing inputs: panasonic_viera "pandora" = ps: with ps; [ pexpect]; @@ -597,12 +606,13 @@ "pioneer" = ps: with ps; [ ]; "pjlink" = ps: with ps; [ ]; # missing inputs: pypjlink2 "plaato" = ps: with ps; [ aiohttp-cors]; - "plant" = ps: with ps; [ ]; - "plex" = ps: with ps; [ aiohttp-cors plexapi plexauth plexwebsocket]; - "plugwise" = ps: with ps; [ ]; # missing inputs: haanna + "plant" = ps: with ps; [ sqlalchemy]; + "plex" = ps: with ps; [ aiohttp-cors plexapi plexauth plexwebsocket pysonos]; + "plugwise" = ps: with ps; [ ]; # missing inputs: Plugwise_Smile "plum_lightpad" = ps: with ps; [ ]; # missing inputs: plumlightpad "pocketcasts" = ps: with ps; [ ]; # missing inputs: pocketcasts "point" = ps: with ps; [ aiohttp-cors]; # missing inputs: pypoint + "poolsense" = ps: with ps; [ ]; # missing inputs: poolsense "powerwall" = ps: with ps; [ ]; # missing inputs: tesla-powerwall "prezzibenzina" = ps: with ps; [ ]; # missing inputs: prezzibenzina-py "proliphix" = ps: with ps; [ ]; # missing inputs: proliphix @@ -618,7 +628,7 @@ "pushbullet" = ps: with ps; [ pushbullet]; "pushover" = ps: with ps; [ pushover-complete]; "pushsafer" = ps: with ps; [ ]; - "pvoutput" = ps: with ps; [ ]; + "pvoutput" = ps: with ps; [ jsonpath xmltodict]; "pvpc_hourly_pricing" = ps: with ps; [ ]; # missing inputs: aiopvpc "pyload" = ps: with ps; [ ]; "python_script" = ps: with ps; [ restrictedpython]; @@ -629,7 +639,7 @@ "quantum_gateway" = ps: with ps; [ ]; # missing inputs: quantum-gateway "qvr_pro" = ps: with ps; [ ]; # missing inputs: pyqvrpro "qwikswitch" = ps: with ps; [ ]; # missing inputs: pyqwikswitch - "rachio" = ps: with ps; [ aiohttp-cors]; # missing inputs: rachiopy + "rachio" = ps: with ps; [ aiohttp-cors hass-nabucasa]; # missing inputs: rachiopy "radarr" = ps: with ps; [ ]; "radiotherm" = ps: with ps; [ ]; # missing inputs: radiotherm "rainbird" = ps: with ps; [ ]; # missing inputs: pyrainbird @@ -654,11 +664,11 @@ "rfxtrx" = ps: with ps; [ ]; # missing inputs: pyRFXtrx "ring" = ps: with ps; [ ha-ffmpeg]; # missing inputs: ring_doorbell "ripple" = ps: with ps; [ ]; # missing inputs: python-ripple-api - "rmvtransport" = ps: with ps; [ ]; # missing inputs: PyRMVtransport + "rmvtransport" = ps: with ps; [ PyRMVtransport]; "rocketchat" = ps: with ps; [ ]; # missing inputs: rocketchat-API "roku" = ps: with ps; [ ]; # missing inputs: rokuecp "roomba" = ps: with ps; [ ]; # missing inputs: roombapy - "route53" = ps: with ps; [ boto3]; # missing inputs: ipify + "route53" = ps: with ps; [ boto3]; "rova" = ps: with ps; [ ]; # missing inputs: rova "rpi_camera" = ps: with ps; [ ]; "rpi_gpio" = ps: with ps; [ ]; # missing inputs: RPi.GPIO @@ -669,7 +679,7 @@ "rtorrent" = ps: with ps; [ ]; "russound_rio" = ps: with ps; [ ]; # missing inputs: russound_rio "russound_rnet" = ps: with ps; [ ]; # missing inputs: russound - "sabnzbd" = ps: with ps; [ ]; # missing inputs: pysabnzbd + "sabnzbd" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; # missing inputs: pysabnzbd "safe_mode" = ps: with ps; [ aiohttp-cors hass-nabucasa]; # missing inputs: home-assistant-frontend "saj" = ps: with ps; [ ]; # missing inputs: pysaj "salt" = ps: with ps; [ ]; # missing inputs: saltbox @@ -677,7 +687,7 @@ "satel_integra" = ps: with ps; [ ]; # missing inputs: satel_integra "scene" = ps: with ps; [ ]; "schluter" = ps: with ps; [ ]; # missing inputs: py-schluter - "scrape" = ps: with ps; [ beautifulsoup4]; + "scrape" = ps: with ps; [ beautifulsoup4 jsonpath xmltodict]; "script" = ps: with ps; [ ]; "scsgate" = ps: with ps; [ ]; # missing inputs: scsgate "search" = ps: with ps; [ aiohttp-cors]; @@ -706,22 +716,22 @@ "simulated" = ps: with ps; [ ]; "sinch" = ps: with ps; [ ]; # missing inputs: clx-sdk-xms "sisyphus" = ps: with ps; [ ]; # missing inputs: sisyphus-control - "sky_hub" = ps: with ps; [ ]; + "sky_hub" = ps: with ps; [ ]; # missing inputs: pyskyqhub "skybeacon" = ps: with ps; [ ]; # missing inputs: pygatt[GATTTOOL] "skybell" = ps: with ps; [ ]; # missing inputs: skybellpy "slack" = ps: with ps; [ ]; # missing inputs: slackclient "sleepiq" = ps: with ps; [ ]; # missing inputs: sleepyq "slide" = ps: with ps; [ ]; # missing inputs: goslide-api "sma" = ps: with ps; [ ]; # missing inputs: pysma - "smappee" = ps: with ps; [ ]; # missing inputs: smappy + "smappee" = ps: with ps; [ aiohttp-cors]; # missing inputs: pysmappee "smarthab" = ps: with ps; [ ]; # missing inputs: smarthab - "smartthings" = ps: with ps; [ aiohttp-cors]; # missing inputs: pysmartapp pysmartthings + "smartthings" = ps: with ps; [ aiohttp-cors hass-nabucasa]; # missing inputs: pysmartapp pysmartthings "smarty" = ps: with ps; [ ]; # missing inputs: pysmarty "smhi" = ps: with ps; [ ]; # missing inputs: smhi-pkg "sms" = ps: with ps; [ ]; # missing inputs: python-gammu "smtp" = ps: with ps; [ ]; "snapcast" = ps: with ps; [ snapcast]; - "snips" = ps: with ps; [ aiohttp-cors hbmqtt paho-mqtt]; + "snips" = ps: with ps; [ aiohttp-cors paho-mqtt]; "snmp" = ps: with ps; [ pysnmp]; "sochain" = ps: with ps; [ ]; # missing inputs: python-sochain-api "socialblade" = ps: with ps; [ ]; # missing inputs: socialbladeclient @@ -732,11 +742,11 @@ "soma" = ps: with ps; [ ]; # missing inputs: pysoma "somfy" = ps: with ps; [ aiohttp-cors]; # missing inputs: pymfy "somfy_mylink" = ps: with ps; [ ]; # missing inputs: somfy-mylink-synergy - "sonarr" = ps: with ps; [ ]; + "sonarr" = ps: with ps; [ ]; # missing inputs: sonarr "songpal" = ps: with ps; [ ]; # missing inputs: python-songpal "sonos" = ps: with ps; [ pysonos]; "sony_projector" = ps: with ps; [ ]; # missing inputs: pysdcp - "soundtouch" = ps: with ps; [ libsoundtouch]; + "soundtouch" = ps: with ps; [ aiohttp-cors libsoundtouch zeroconf]; "spaceapi" = ps: with ps; [ aiohttp-cors]; "spc" = ps: with ps; [ ]; # missing inputs: pyspcwebgw "speedtestdotnet" = ps: with ps; [ speedtest-cli]; @@ -746,11 +756,11 @@ "spotify" = ps: with ps; [ aiohttp-cors spotipy]; "sql" = ps: with ps; [ sqlalchemy]; "squeezebox" = ps: with ps; [ ]; # missing inputs: pysqueezebox - "ssdp" = ps: with ps; [ defusedxml netdisco]; + "ssdp" = ps: with ps; [ aiohttp-cors defusedxml netdisco zeroconf]; "starline" = ps: with ps; [ ]; # missing inputs: starline "starlingbank" = ps: with ps; [ ]; # missing inputs: starlingbank "startca" = ps: with ps; [ xmltodict]; - "statistics" = ps: with ps; [ ]; + "statistics" = ps: with ps; [ sqlalchemy]; "statsd" = ps: with ps; [ statsd]; "steam_online" = ps: with ps; [ ]; # missing inputs: steamodd "stiebel_eltron" = ps: with ps; [ ]; # missing inputs: pymodbus pystiebeleltron @@ -770,7 +780,7 @@ "switchbot" = ps: with ps; [ ]; # missing inputs: PySwitchbot "switcher_kis" = ps: with ps; [ ]; # missing inputs: aioswitcher "switchmate" = ps: with ps; [ ]; # missing inputs: pySwitchmate - "syncthru" = ps: with ps; [ ]; # missing inputs: pysyncthru + "syncthru" = ps: with ps; [ ]; # missing inputs: pysyncthru url-normalize "synology" = ps: with ps; [ ]; # missing inputs: py-synology "synology_chat" = ps: with ps; [ ]; "synology_dsm" = ps: with ps; [ ]; # missing inputs: python-synology @@ -795,7 +805,7 @@ "telnet" = ps: with ps; [ ]; "temper" = ps: with ps; [ ]; # missing inputs: temperusb "template" = ps: with ps; [ ]; - "tensorflow" = ps: with ps; [ numpy pillow protobuf tensorflow]; + "tensorflow" = ps: with ps; [ numpy pillow protobuf]; # missing inputs: pycocotools tensorflow tf-models-official tf-slim "tesla" = ps: with ps; [ ]; # missing inputs: teslajsonpy "tfiac" = ps: with ps; [ ]; # missing inputs: pytfiac "thermoworks_smoke" = ps: with ps; [ stringcase]; # missing inputs: thermoworks_smoke @@ -814,11 +824,11 @@ "todoist" = ps: with ps; [ todoist]; "tof" = ps: with ps; [ ]; # missing inputs: RPi.GPIO VL53L1X2 "tomato" = ps: with ps; [ ]; - "toon" = ps: with ps; [ ]; # missing inputs: toonapilib + "toon" = ps: with ps; [ aiohttp-cors hass-nabucasa]; # missing inputs: toonapi "torque" = ps: with ps; [ aiohttp-cors]; "totalconnect" = ps: with ps; [ ]; # missing inputs: total_connect_client "touchline" = ps: with ps; [ ]; # missing inputs: pytouchline - "tplink" = ps: with ps; [ ]; # missing inputs: pyHS100 + "tplink" = ps: with ps; [ pyhs100]; "tplink_lte" = ps: with ps; [ ]; # missing inputs: tp-connected "traccar" = ps: with ps; [ aiohttp-cors stringcase]; # missing inputs: pytraccar "trackr" = ps: with ps; [ ]; # missing inputs: pytrackr @@ -849,13 +859,13 @@ "upc_connect" = ps: with ps; [ ]; # missing inputs: connect-box "upcloud" = ps: with ps; [ ]; # missing inputs: upcloud-api "updater" = ps: with ps; [ distro]; - "upnp" = ps: with ps; [ ]; # missing inputs: async-upnp-client + "upnp" = ps: with ps; [ async-upnp-client]; "uptime" = ps: with ps; [ ]; "uptimerobot" = ps: with ps; [ ]; # missing inputs: pyuptimerobot "uscis" = ps: with ps; [ ]; # missing inputs: uscisstatus "usgs_earthquakes_feed" = ps: with ps; [ ]; # missing inputs: geojson_client "utility_meter" = ps: with ps; [ ]; - "uvc" = ps: with ps; [ ]; # missing inputs: uvcclient + "uvc" = ps: with ps; [ uvcclient]; "vacuum" = ps: with ps; [ ]; "vallox" = ps: with ps; [ ]; # missing inputs: vallox-websocket-api "vasttrafik" = ps: with ps; [ ]; # missing inputs: vtjp @@ -876,7 +886,7 @@ "vlc_telnet" = ps: with ps; [ ]; # missing inputs: python-telnet-vlc "voicerss" = ps: with ps; [ ]; "volkszaehler" = ps: with ps; [ ]; # missing inputs: volkszaehler - "volumio" = ps: with ps; [ ]; + "volumio" = ps: with ps; [ ]; # missing inputs: pyvolumio "volvooncall" = ps: with ps; [ ]; # missing inputs: volvooncall "vultr" = ps: with ps; [ vultr]; "w800rf32" = ps: with ps; [ ]; # missing inputs: pyW800rf32 @@ -898,20 +908,20 @@ "wirelesstag" = ps: with ps; [ ]; # missing inputs: wirelesstagpy "withings" = ps: with ps; [ aiohttp-cors]; # missing inputs: withings-api "wled" = ps: with ps; [ ]; # missing inputs: wled + "wolflink" = ps: with ps; [ ]; # missing inputs: wolf_smartset "workday" = ps: with ps; [ holidays]; "worldclock" = ps: with ps; [ ]; "worldtidesinfo" = ps: with ps; [ ]; "worxlandroid" = ps: with ps; [ ]; "wsdot" = ps: with ps; [ ]; "wunderground" = ps: with ps; [ ]; - "wunderlist" = ps: with ps; [ ]; # missing inputs: wunderpy2 - "wwlln" = ps: with ps; [ ]; # missing inputs: aiowwlln "x10" = ps: with ps; [ ]; + "xbee" = ps: with ps; [ ]; # missing inputs: xbee-helper "xbox_live" = ps: with ps; [ ]; # missing inputs: xboxapi "xeoma" = ps: with ps; [ ]; # missing inputs: pyxeoma "xfinity" = ps: with ps; [ ]; # missing inputs: xfinity-gateway "xiaomi" = ps: with ps; [ ha-ffmpeg]; - "xiaomi_aqara" = ps: with ps; [ ]; # missing inputs: PyXiaomiGateway + "xiaomi_aqara" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; # missing inputs: PyXiaomiGateway "xiaomi_miio" = ps: with ps; [ construct python-miio]; "xiaomi_tv" = ps: with ps; [ ]; # missing inputs: pymitv "xmpp" = ps: with ps; [ slixmpp]; @@ -919,9 +929,9 @@ "yale_smart_alarm" = ps: with ps; [ ]; # missing inputs: yalesmartalarmclient "yamaha" = ps: with ps; [ rxv]; "yamaha_musiccast" = ps: with ps; [ ]; # missing inputs: pymusiccast - "yandex_transport" = ps: with ps; [ ]; # missing inputs: ya_ma + "yandex_transport" = ps: with ps; [ ]; # missing inputs: aioymaps "yandextts" = ps: with ps; [ ]; - "yeelight" = ps: with ps; [ ]; # missing inputs: yeelight + "yeelight" = ps: with ps; [ aiohttp-cors netdisco zeroconf]; # missing inputs: yeelight "yeelightsunflower" = ps: with ps; [ ]; # missing inputs: yeelightsunflower "yessssms" = ps: with ps; [ ]; # missing inputs: YesssSMS "yi" = ps: with ps; [ aioftp ha-ffmpeg]; @@ -932,9 +942,8 @@ "zeroconf" = ps: with ps; [ aiohttp-cors zeroconf]; "zerproc" = ps: with ps; [ ]; # missing inputs: pyzerproc "zestimate" = ps: with ps; [ xmltodict]; - "zha" = ps: with ps; [ pyserial zha-quirks zigpy-deconz]; # missing inputs: bellows zigpy-cc zigpy-xbee zigpy-zigate zigpy + "zha" = ps: with ps; [ bellows pyserial zha-quirks zigpy-cc zigpy-deconz zigpy-xbee zigpy-zigate zigpy]; "zhong_hong" = ps: with ps; [ ]; # missing inputs: zhong_hong_hvac - "zigbee" = ps: with ps; [ ]; # missing inputs: xbee-helper "ziggo_mediabox_xl" = ps: with ps; [ ]; # missing inputs: ziggo-mediabox-xl "zone" = ps: with ps; [ ]; "zoneminder" = ps: with ps; [ zm-py]; diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix index 2d6d7347455..f0a664dd635 100644 --- a/pkgs/servers/home-assistant/default.nix +++ b/pkgs/servers/home-assistant/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, fetchFromGitHub, fetchpatch, python3, protobuf3_6 +{ stdenv, nixosTests, lib, fetchurl, fetchFromGitHub, fetchpatch, python3, protobuf3_6 # Look up dependencies of specified components in component-packages.nix , extraComponents ? [ ] @@ -22,10 +22,15 @@ let defaultOverrides = [ # Override the version of some packages pinned in Home Assistant's setup.py - # used by check_config script - # can be unpinned once https://github.com/home-assistant/home-assistant/issues/11917 is resolved - (mkOverride "colorlog" "4.0.2" - "3cf31b25cbc8f86ec01fef582ef3b840950dea414084ed19ab922c8b493f9b42") + # required by the sun/moon plugins + # https://github.com/home-assistant/core/issues/36636 + (mkOverride "astral" "1.10.1" + "d2a67243c4503131c856cafb1b1276de52a86e5b8a1d507b7e08bee51cb67bf1") + + # We have 3.x in nixpkgs which is incompatible with home-assistant atm: + # https://github.com/home-assistant/core/blob/dev/requirements_all.txt + (mkOverride "pyowm" "2.10.0" + "1xvcv3sbcn9na8cwz21nnjlixysfk5lymnf65d1nqkbgacc1mm4g") # required by aioesphomeapi (self: super: { @@ -67,7 +72,7 @@ let extraBuildInputs = extraPackages py.pkgs; # Don't forget to run parse-requirements.py after updating - hassVersion = "0.110.1"; + hassVersion = "0.114.2"; in with py.pkgs; buildPythonApplication rec { pname = "homeassistant"; @@ -76,7 +81,7 @@ in with py.pkgs; buildPythonApplication rec { disabled = pythonOlder "3.5"; patches = [ - ./0001-setup.py-relax-dependencies.patch + ./relax-dependencies.patch ]; inherit availableComponents; @@ -86,7 +91,7 @@ in with py.pkgs; buildPythonApplication rec { owner = "home-assistant"; repo = "core"; rev = version; - sha256 = "1495kl997mvk9k11lk1ahv5w0yc0185qmxwa1h51j6d0zyqwz749"; + sha256 = "0llyf3icdgb9mh7x02309m35hxhinzsbd6i31mmb9fjfzp0d27q9"; }; propagatedBuildInputs = [ @@ -123,12 +128,15 @@ in with py.pkgs; buildPythonApplication rec { passthru = { inherit (py.pkgs) hass-frontend; + tests = { + inherit (nixosTests) home-assistant; + }; }; meta = with lib; { homepage = "https://home-assistant.io/"; description = "Open-source home automation platform running on Python 3"; license = licenses.asl20; - maintainers = with maintainers; [ dotlambda globin mic92 ]; + maintainers = with maintainers; [ dotlambda globin mic92 hexa ]; }; } diff --git a/pkgs/servers/home-assistant/esphome.nix b/pkgs/servers/home-assistant/esphome.nix deleted file mode 100644 index 2dc023df5a2..00000000000 --- a/pkgs/servers/home-assistant/esphome.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ lib, python3, platformio, esptool, git, protobuf3_10, fetchpatch }: - -let - python = python3.override { - packageOverrides = self: super: { - protobuf = super.protobuf.override { - protobuf = protobuf3_10; - }; - pyyaml = super.pyyaml.overridePythonAttrs (oldAttrs: rec { - version = "5.1.2"; - src = oldAttrs.src.override { - inherit version; - sha256 = "1r5faspz73477hlbjgilw05xsms0glmsa371yqdd26znqsvg1b81"; - }; - }); - }; - }; - -in python.pkgs.buildPythonApplication rec { - pname = "esphome"; - version = "1.14.3"; - - src = python.pkgs.fetchPypi { - inherit pname version; - sha256 = "0xnsl000c5a2li9qw9anrzzq437qn1n4hcfc24i4rfq37awzmig7"; - }; - - ESPHOME_USE_SUBPROCESS = ""; - - propagatedBuildInputs = with python.pkgs; [ - voluptuous pyyaml paho-mqtt colorlog - tornado protobuf tzlocal pyserial ifaddr - protobuf - ]; - - # remove all version pinning (E.g tornado==5.1.1 -> tornado) - postPatch = '' - sed -i -e "s/==[0-9.]*//" setup.py - ''; - - makeWrapperArgs = [ - # platformio is used in esphomeyaml/platformio_api.py - # esptool is used in esphomeyaml/__main__.py - # git is used in esphomeyaml/writer.py - "--prefix PATH : ${lib.makeBinPath [ platformio esptool git ]}" - "--set ESPHOME_USE_SUBPROCESS ''" - ]; - - # Platformio will try to access the network - # Instead, run the executable - checkPhase = '' - $out/bin/esphome --help > /dev/null - ''; - - meta = with lib; { - description = "Make creating custom firmwares for ESP32/ESP8266 super easy"; - homepage = "https://esphome.io/"; - license = licenses.mit; - maintainers = with maintainers; [ dotlambda globin ]; - }; -} diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix index 3481a2d1bd9..5c7227dc4e0 100644 --- a/pkgs/servers/home-assistant/frontend.nix +++ b/pkgs/servers/home-assistant/frontend.nix @@ -4,11 +4,11 @@ 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 = "20200519.1"; + version = "20200811.0"; src = fetchPypi { inherit pname version; - sha256 = "149v56q5anzdfxf0dw1h39vdmcigx732a7abqjfb0xny5484iq8w"; + sha256 = "0nrvfr4mw7h9py27hkak201jsfrvyxlgswfnda1l7k9ns9y4lpj8"; }; # no Python tests implemented diff --git a/pkgs/servers/home-assistant/parse-requirements.py b/pkgs/servers/home-assistant/parse-requirements.py index f802485d6c6..3c6d0c4bcab 100755 --- a/pkgs/servers/home-assistant/parse-requirements.py +++ b/pkgs/servers/home-assistant/parse-requirements.py @@ -24,7 +24,7 @@ import sys import tarfile import tempfile from io import BytesIO -from typing import Dict, Optional +from typing import Dict, Optional, Set, Any from urllib.request import urlopen COMPONENT_PREFIX = "homeassistant.components" @@ -79,11 +79,14 @@ def parse_components(version: str = "master"): # Recursively get the requirements of a component and its dependencies -def get_reqs(components, component): +def get_reqs(components: Dict[str, Dict[str, Any]], component: str, processed: Set[str]) -> Set[str]: requirements = set(components[component].get("requirements", [])) deps = components[component].get("dependencies", []) + deps.extend(components[component].get("after_dependencies", [])) + processed.add(component) for dependency in deps: - requirements.update(get_reqs(components, dependency)) + if dependency not in processed: + requirements.update(get_reqs(components, dependency, processed)) return requirements @@ -143,7 +146,7 @@ def main() -> None: for component in sorted(components.keys()): attr_paths = [] missing_reqs = [] - reqs = sorted(get_reqs(components, component)) + reqs = sorted(get_reqs(components, component, set())) for req in reqs: # Some requirements are specified by url, e.g. https://example.org/foobar#xyz==1.0.0 # Therefore, if there's a "#" in the line, only take the part after it diff --git a/pkgs/servers/home-assistant/relax-dependencies.patch b/pkgs/servers/home-assistant/relax-dependencies.patch new file mode 100644 index 00000000000..d06a37352f6 --- /dev/null +++ b/pkgs/servers/home-assistant/relax-dependencies.patch @@ -0,0 +1,21 @@ +diff --git a/setup.py b/setup.py +index 81f8727ed6..12200e0b9f 100755 +--- a/setup.py ++++ b/setup.py +@@ -43,13 +43,13 @@ REQUIRES = [ + "jinja2>=2.11.1", + "PyJWT==1.7.1", + # PyJWT has loose dependency. We want the latest one. +- "cryptography==2.9.2", ++ "cryptography>=2.9.2", + "pip>=8.0.3", + "python-slugify==4.0.1", + "pytz>=2020.1", + "pyyaml==5.3.1", +- "requests==2.24.0", +- "ruamel.yaml==0.15.100", ++ "requests>=2.23.0", ++ "ruamel.yaml>=0.15.100", + "voluptuous==0.11.7", + "voluptuous-serialize==2.4.0", + "yarl==1.4.2", diff --git a/pkgs/servers/home-assistant/test-timeout.patch b/pkgs/servers/home-assistant/test-timeout.patch new file mode 100644 index 00000000000..01b0edae1d7 --- /dev/null +++ b/pkgs/servers/home-assistant/test-timeout.patch @@ -0,0 +1,13 @@ +diff --git a/tests/test_core.py b/tests/test_core.py +index a63f42af61..04b333868b 100644 +--- a/tests/test_core.py ++++ b/tests/test_core.py +@@ -1432,7 +1432,7 @@ async def test_chained_logging_hits_log_timeout(hass, caplog): + async def _task_chain_2(): + nonlocal created + created += 1 +- if created > 10: ++ if created > 1000: + return + hass.async_create_task(_task_chain_1()) + diff --git a/pkgs/servers/home-assistant/update.sh b/pkgs/servers/home-assistant/update.sh new file mode 100755 index 00000000000..11189cf3577 --- /dev/null +++ b/pkgs/servers/home-assistant/update.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env nix-shell +#!nix-shell -p nix -p jq -p curl -p bash -p git -p nix-update -i bash + +set -eux + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$DIR" + +CURRENT_VERSION=$(nix eval --raw '(with import ../../.. {}; home-assistant.version)') +TARGET_VERSION=$(curl https://api.github.com/repos/home-assistant/core/releases/latest | jq -r '.name') +MANIFEST=$(curl https://raw.githubusercontent.com/home-assistant/core/${TARGET_VERSION}/homeassistant/components/frontend/manifest.json) +FRONTEND_VERSION=$(echo $MANIFEST | jq -r '.requirements[] | select(startswith("home-assistant-frontend")) | sub(".*==(?<vers>.*)"; .vers)') + +if [[ "$CURRENT_VERSION" == "$TARGET_VERSION" ]]; then + echo "home-assistant is up-to-date: ${CURRENT_VERSION}" + exit 0 +fi + + +sed -i -e "s/version =.*/version = \"${TARGET_VERSION}\";/" \ + component-packages.nix + +sed -i -e "s/hassVersion =.*/hassVersion = \"${TARGET_VERSION}\";/" \ + default.nix + +./parse-requirements.py +( + cd ../../.. + nix-update --version "$FRONTEND_VERSION" home-assistant.hass-frontend + nix-update --version "$TARGET_VERSION" --build home-assistant +) + +git add ./component-packages.nix ./default.nix ./frontend.nix +git commit -m "homeassistant: ${CURRENT_VERSION} -> ${TARGET_VERSION}" |