about summary refs log tree commit diff
path: root/pkgs/servers/home-assistant/custom-components
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/home-assistant/custom-components')
-rw-r--r--pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/awtrix/default.nix30
-rw-r--r--pkgs/servers/home-assistant/custom-components/default.nix10
-rw-r--r--pkgs/servers/home-assistant/custom-components/epex_spot/default.nix8
-rw-r--r--pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/localtuya/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix25
-rw-r--r--pkgs/servers/home-assistant/custom-components/miele/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/moonraker/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/ntfy/default.nix30
-rw-r--r--pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/smartir/default.nix24
-rw-r--r--pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/spook/default.nix38
-rw-r--r--pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch109
-rw-r--r--pkgs/servers/home-assistant/custom-components/tuya_local/default.nix34
-rw-r--r--pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix13
-rw-r--r--pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix20
-rw-r--r--pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix24
-rw-r--r--pkgs/servers/home-assistant/custom-components/yassi/default.nix6
21 files changed, 340 insertions, 57 deletions
diff --git a/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix b/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
index 1d2ae2228a5b2..9c35395d3e98e 100644
--- a/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/adaptive_lighting/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "basnijholt";
   domain = "adaptive_lighting";
-  version = "1.19.1";
+  version = "1.22.0";
 
   src = fetchFromGitHub {
     owner = "basnijholt";
     repo = "adaptive-lighting";
     rev = "refs/tags/${version}";
-    hash = "sha256-AZsloE1vNQ9o2pg878J6I5qYXyI4fqYEvr18SrTocWo=";
+    hash = "sha256-k5pCgPM5xjVfWjOcr0UDFzYl/8z7yUwgYdBmC3+2F5k=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/awtrix/default.nix b/pkgs/servers/home-assistant/custom-components/awtrix/default.nix
new file mode 100644
index 0000000000000..738dbbea5dbca
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/awtrix/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildHomeAssistantComponent
+, requests
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "10der";
+  domain = "awtrix";
+  version = "unstable-2024-05-26";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "homeassistant-custom_components-awtrix";
+    rev = "329d8eec28478574b9f34778f96b5768f30be2ab";
+    hash = "sha256-ucSaQWMS6ZwXHnw5Ct/STxpl1JjBRua3edrLvBAsdyw=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Home-assistant integration for awtrix";
+    homepage = "https://github.com/10der/homeassistant-custom_components-awtrix";
+    maintainers = with maintainers; [ pinpox ];
+    license = licenses.mit;
+  };
+}
+
diff --git a/pkgs/servers/home-assistant/custom-components/default.nix b/pkgs/servers/home-assistant/custom-components/default.nix
index acfcf038f20ef..3a1184016f3ef 100644
--- a/pkgs/servers/home-assistant/custom-components/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/default.nix
@@ -6,6 +6,8 @@
 
   auth-header = callPackage ./auth-header {};
 
+  awtrix = callPackage ./awtrix {};
+
   better_thermostat = callPackage ./better_thermostat {};
 
   emporia_vue = callPackage ./emporia_vue {};
@@ -26,12 +28,16 @@
 
   localtuya = callPackage ./localtuya {};
 
+  midea_ac_lan = callPackage ./midea_ac_lan {};
+
   midea-air-appliances-lan = callPackage ./midea-air-appliances-lan {};
 
   miele = callPackage ./miele {};
 
   moonraker = callPackage ./moonraker {};
 
+  ntfy = callPackage ./ntfy {};
+
   omnik_inverter = callPackage ./omnik_inverter {};
 
   prometheus_sensor = callPackage ./prometheus_sensor {};
@@ -42,6 +48,10 @@
 
   smartthinq-sensors = callPackage ./smartthinq-sensors {};
 
+  spook = callPackage ./spook {};
+
+  tuya_local = callPackage ./tuya_local {};
+
   waste_collection_schedule = callPackage ./waste_collection_schedule {};
 
   xiaomi_gateway3 = callPackage ./xiaomi_gateway3 {};
diff --git a/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix b/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
index e655a0d788d9d..85bef161595e0 100644
--- a/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/epex_spot/default.nix
@@ -7,23 +7,19 @@
 buildHomeAssistantComponent rec {
   owner = "mampfes";
   domain = "epex_spot";
-  version = "2.3.5";
+  version = "2.3.7";
 
   src = fetchFromGitHub {
     owner = "mampfes";
     repo = "ha_epex_spot";
     rev = "refs/tags/${version}";
-    hash = "sha256-WmPsFfQm8ChEr41XVgKi2BGwta5aKH9GDz4iIfTAPK4=";
+    hash = "sha256-8cxEOCzlQbS3HbQMBo7/rZb/GfpJvOWayLttEaEENYs=";
   };
 
   propagatedBuildInputs = [
     beautifulsoup4
   ];
 
-  postPatch = ''
-    substituteInPlace custom_components/epex_spot/manifest.json --replace-fail 'bs4' 'beautifulsoup4'
-  '';
-
   #skip phases without activity
   dontConfigure = true;
   doCheck = false;
diff --git a/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix b/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
index f6dcd994719b4..a317c83fddbaf 100644
--- a/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/homematicip_local/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "danielperna84";
   domain = "homematicip_local";
-  version = "1.60.1";
+  version = "1.63.0";
 
   src = fetchFromGitHub {
     owner = "danielperna84";
     repo = "custom_homematic";
     rev = "refs/tags/${version}";
-    hash = "sha256-EJj9zmDdJ+T7yrANmRJuLRCSwvGLy2CkIBsO9H3LIs4=";
+    hash = "sha256-DK+zkNidHF/41qMQLxmYjgcybbC8fomfSmViL+pN/1Y=";
   };
 
   dependencies = [
diff --git a/pkgs/servers/home-assistant/custom-components/localtuya/default.nix b/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
index 3e3c17a33cdfa..eb76a791b33a7 100644
--- a/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/localtuya/default.nix
@@ -17,7 +17,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/rospogrigio/localtuya/releases/tag/${version}";
-    description = "A Home Assistant custom Integration for local handling of Tuya-based devices";
+    description = "Home Assistant custom Integration for local handling of Tuya-based devices";
     homepage = "https://github.com/rospogrigio/localtuya";
     maintainers = with maintainers; [ rhoriguchi ];
     license = licenses.gpl3Only;
diff --git a/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix b/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix
new file mode 100644
index 0000000000000..7123389e8bc19
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/midea_ac_lan/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildHomeAssistantComponent
+, fetchFromGitHub
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "georgezhao2010";
+  domain = "midea_ac_lan";
+  version = "0.3.22";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = domain;
+    rev = "v${version}";
+    hash = "sha256-xTnbA4GztHOE61QObEJbzUSdbuSrhbcJ280DUDdM+n4=";
+  };
+
+  meta = with lib; {
+    description = "Auto-configure and then control your Midea M-Smart devices (Air conditioner, Fan, Water heater, Washer, etc) via local area network";
+    homepage = "https://github.com/georgezhao2010/midea_ac_lan/";
+    changelog = "https://github.com/georgezhao2010/midea_ac_lan/releases/tag/v${version}";
+    maintainers = with maintainers; [ k900 ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/miele/default.nix b/pkgs/servers/home-assistant/custom-components/miele/default.nix
index 3ebdc6283c035..408530620548d 100644
--- a/pkgs/servers/home-assistant/custom-components/miele/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/miele/default.nix
@@ -27,7 +27,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/astrandb/miele/releases/tag/v${version}";
-    description = "A modern integration for Miele devices in Home Assistant";
+    description = "Modern integration for Miele devices in Home Assistant";
     homepage = "https://github.com/astrandb/miele";
     maintainers = with maintainers; [jamiemagee];
     license = licenses.mit;
diff --git a/pkgs/servers/home-assistant/custom-components/moonraker/default.nix b/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
index efe0654d01cbe..a134f8ff4f140 100644
--- a/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/moonraker/default.nix
@@ -7,13 +7,13 @@
 buildHomeAssistantComponent rec {
   owner = "marcolivierarsenault";
   domain = "moonraker";
-  version = "1.2.0";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
     owner = "marcolivierarsenault";
     repo = "moonraker-home-assistant";
     rev = "refs/tags/${version}";
-    hash = "sha256-oFHV9+5byWCOUxUhOvGHNilCZaoOp2xxb33nF8+CYjE=";
+    hash = "sha256-utxCHXVpP4FQT2poVuS4cMZGgn7yO89lUw5KhIHRXKQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/ntfy/default.nix b/pkgs/servers/home-assistant/custom-components/ntfy/default.nix
new file mode 100644
index 0000000000000..43920dbaef9e8
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/ntfy/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildHomeAssistantComponent
+, requests
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "hbrennhaeuser";
+  domain = "ntfy";
+  version = "1.1.0-pre.2";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "homeassistant_integration_ntfy";
+    rev = "v${version}";
+    hash = "sha256-OGCAJsAsnUjwaLR8lCBdU+ghVOGFF0mT73t5JtcngUA=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  meta = with lib; {
+    description = "Send notifications with ntfy.sh and selfhosted ntfy-servers";
+    homepage = "https://github.com/hbrennhaeuser/homeassistant_integration_ntfy";
+    maintainers = with maintainers; [ koral ];
+    license = licenses.gpl3;
+  };
+}
+
diff --git a/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix b/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
index a0a33f644bac9..38dd56feb0000 100644
--- a/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/omnik_inverter/default.nix
@@ -24,7 +24,7 @@ buildHomeAssistantComponent rec {
 
   meta = with lib; {
     changelog = "https://github.com/robbinjanssen/home-assistant-omnik-inverter/releases/tag/v${version}";
-    description = "The Omnik Inverter integration will scrape data from an Omnik inverter connected to your local network";
+    description = "Omnik Inverter integration will scrape data from an Omnik inverter connected to your local network";
     homepage = "https://github.com/robbinjanssen/home-assistant-omnik-inverter";
     maintainers = with maintainers; [ _9R ];
     license = licenses.mit;
diff --git a/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
index 2368d85552b25..769e01bff5b2d 100644
--- a/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
@@ -6,13 +6,13 @@
 buildHomeAssistantComponent rec {
   owner = "mweinelt";
   domain = "prometheus_sensor";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "mweinelt";
     repo = "ha-prometheus-sensor";
     rev = "refs/tags/${version}";
-    hash = "sha256-10COLFXvmpm8ONLyx5c0yiQdtuP0SC2NKq/ZYHro9II=";
+    hash = "sha256-xfLAfTBgJjrRU1EFcbRvzUSq4m+dd6izaxP9DMisz/0=";
   };
 
   dontBuild = true;
diff --git a/pkgs/servers/home-assistant/custom-components/smartir/default.nix b/pkgs/servers/home-assistant/custom-components/smartir/default.nix
index 5dc9eb2473d72..876579639b647 100644
--- a/pkgs/servers/home-assistant/custom-components/smartir/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/smartir/default.nix
@@ -1,8 +1,11 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, aiofiles
-, broadlink
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  fetchpatch,
+  aiofiles,
+  broadlink,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
@@ -17,6 +20,15 @@ buildHomeAssistantComponent rec {
     hash = "sha256-E6TM761cuaeQzlbjA+oZ+wt5HTJAfkF2J3i4P1Wbuic=";
   };
 
+  patches = [
+    # Replace distutils.version.StrictVersion with packaging.version.Version
+    # https://github.com/smartHomeHub/SmartIR/pull/1250
+    (fetchpatch {
+      url = "https://github.com/smartHomeHub/SmartIR/commit/1ed8ef23a8f7b9dcae75721eeab8d5f79013b851.patch";
+      hash = "sha256-IhdnTDtUa7mS+Vw/+BqfqWIKK4hbshbVgJNjfKjgAvI=";
+    })
+  ];
+
   propagatedBuildInputs = [
     aiofiles
     broadlink
@@ -28,6 +40,8 @@ buildHomeAssistantComponent rec {
     cp -r codes $out/custom_components/smartir/
   '';
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/smartHomeHub/SmartIR/releases/tag/v${version}";
     description = "Integration for Home Assistant to control climate, TV and fan devices via IR/RF controllers (Broadlink, Xiaomi, MQTT, LOOKin, ESPHome)";
diff --git a/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix b/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
index 3ebb482939dcb..4e118bb3e24e9 100644
--- a/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/smartthinq-sensors/default.nix
@@ -9,13 +9,13 @@
 buildHomeAssistantComponent rec {
   owner = "ollo69";
   domain = "smartthinq_sensors";
-  version = "0.39.0";
+  version = "0.39.2";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "ha-smartthinq-sensors";
     rev = "v${version}";
-    hash = "sha256-mt5/XHDAUeoMUA1jWdCNXTUgZBQkqabL5Y4MxwxcweY=";
+    hash = "sha256-tLq4sqeKmjEDDaowA8ouH/mI7jQfq49kkt/a8+40rhQ=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/servers/home-assistant/custom-components/spook/default.nix b/pkgs/servers/home-assistant/custom-components/spook/default.nix
new file mode 100644
index 0000000000000..280f7b9491b2a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/spook/default.nix
@@ -0,0 +1,38 @@
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  pillow,
+  fnv-hash-fast,
+  psutil-home-assistant,
+  sqlalchemy,
+}:
+buildHomeAssistantComponent rec {
+  owner = "frenck";
+  domain = "spook";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = domain;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ChHsevryWuim8BEFqXVkCOW9fGMrt5vol+B2SreMUws=";
+  };
+
+  patches = [./remove-sub-integration-symlink-hack.patch];
+
+  dependencies = [
+    pillow
+    fnv-hash-fast
+    psutil-home-assistant
+    sqlalchemy
+  ];
+
+  meta = {
+    changelog = "https://github.com/frenck/spook/releases/tag/v${version}";
+    description = "Toolbox for Home Assistant";
+    homepage = "https://spook.boo/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [kkoniuszy];
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch
new file mode 100644
index 0000000000000..4756e4a2c389a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/spook/remove-sub-integration-symlink-hack.patch
@@ -0,0 +1,109 @@
+diff --git a/custom_components/spook/__init__.py b/custom_components/spook/__init__.py
+index 213fb2c..c7dc299 100644
+--- a/custom_components/spook/__init__.py
++++ b/custom_components/spook/__init__.py
+@@ -23,8 +23,6 @@ from .templating import SpookTemplateFunctionManager
+ from .util import (
+     async_ensure_template_environments_exists,
+     async_forward_setup_entry,
+-    link_sub_integrations,
+-    unlink_sub_integrations,
+ )
+
+ if TYPE_CHECKING:
+@@ -34,48 +32,6 @@ if TYPE_CHECKING:
+
+ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
+     """Set up from a config entry."""
+-    # Symlink all sub integrations from Spook to the parent integrations folder
+-    # if one is missing, we have to restart Home Assistant.
+-    # This is a workaround for the fact that Home Assistant doesn't support
+-    # sub integrations.
+-    if await hass.async_add_executor_job(link_sub_integrations, hass):
+-        LOGGER.debug("Newly symlinked sub integrations, restarting Home Assistant")
+-
+-        @callback
+-        def _restart(_: Event | None = None) -> None:
+-            """Restart Home Assistant."""
+-            hass.data["homeassistant_stop"] = asyncio.create_task(
+-                hass.async_stop(RESTART_EXIT_CODE),
+-            )
+-
+-        # User asked to restart Home Assistant in the config flow.
+-        if hass.data.get(DOMAIN) == "Boo!":
+-            _restart()
+-            return False
+-
+-        # Should be OK to restart. Better to do it before anything else started.
+-        if hass.state == CoreState.starting:
+-            _restart()
+-            return False
+-
+-        # If all other fails, but we are not running yet... wait for it.
+-        if hass.state == CoreState.not_running:
+-            # Listen to both... just in case.
+-            hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, _restart)
+-            hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, _restart)
+-            return False
+-
+-        LOGGER.info(
+-            "Home Assistant needs to be restarted in for Spook to complete setting up",
+-        )
+-        ir.async_create_issue(
+-            hass=hass,
+-            domain=DOMAIN,
+-            issue_id="restart_required",
+-            is_fixable=True,
+-            severity=ir.IssueSeverity.WARNING,
+-            translation_key="restart_required",
+-        )
+
+     # Ensure template environments exists
+     async_ensure_template_environments_exists(hass)
+@@ -120,4 +76,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
+
+ async def async_remove_entry(hass: HomeAssistant, _: ConfigEntry) -> None:
+     """Remove a config entry."""
+-    await hass.async_add_executor_job(unlink_sub_integrations, hass)
+diff --git a/custom_components/spook/util.py b/custom_components/spook/util.py
+index 32e9bd2..845d463 100644
+--- a/custom_components/spook/util.py
++++ b/custom_components/spook/util.py
+@@ -104,37 +104,6 @@ async def async_forward_platform_entry_setups_to_ectoplasm(
+     )
+
+
+-def link_sub_integrations(hass: HomeAssistant) -> bool:
+-    """Link Spook sub integrations."""
+-    LOGGER.debug("Linking up Spook sub integrations")
+-
+-    changes = False
+-    for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
+-        LOGGER.debug("Linking Spook sub integration: %s", manifest.parent.name)
+-        dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
+-        if not dest.exists():
+-            src = (
+-                Path(hass.config.config_dir)
+-                / "custom_components"
+-                / DOMAIN
+-                / "integrations"
+-                / manifest.parent.name
+-            )
+-            dest.symlink_to(src)
+-            changes = True
+-    return changes
+-
+-
+-def unlink_sub_integrations(hass: HomeAssistant) -> None:
+-    """Unlink Spook sub integrations."""
+-    LOGGER.debug("Unlinking Spook sub integrations")
+-    for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
+-        LOGGER.debug("Unlinking Spook sub integration: %s", manifest.parent.name)
+-        dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
+-        if dest.exists():
+-            dest.unlink()
+-
+-
+ @callback
+ def async_ensure_template_environments_exists(hass: HomeAssistant) -> None:
+     """Ensure default template environments exist.
diff --git a/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix b/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix
new file mode 100644
index 0000000000000..7d72209c57b0a
--- /dev/null
+++ b/pkgs/servers/home-assistant/custom-components/tuya_local/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildHomeAssistantComponent
+, fetchFromGitHub
+
+# dependencies
+, tinytuya
+, tuya-device-sharing-sdk
+}:
+
+buildHomeAssistantComponent rec {
+  owner = "make-all";
+  domain = "tuya_local";
+  version = "2024.6.0";
+
+  src = fetchFromGitHub {
+    inherit owner;
+    repo = "tuya-local";
+    rev = "refs/tags/${version}";
+    hash = "sha256-OLR/KFoXKqL7r7S97VpyoVHdbLfOyWU50aK6c0QhqyE=";
+  };
+
+  dependencies = [
+    tinytuya
+    tuya-device-sharing-sdk
+  ];
+
+  meta = with lib; {
+    description = "Local support for Tuya devices in Home Assistant";
+    homepage = "https://github.com/make-all/tuya-local";
+    changelog = "https://github.com/make-all/tuya-local/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pathob ];
+  };
+}
diff --git a/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix b/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
index 513d593ce51d3..cdbd2c2067bfb 100644
--- a/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/waste_collection_schedule/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildHomeAssistantComponent
 , fetchFromGitHub
-, fetchpatch
 , beautifulsoup4
 , icalendar
 , icalevents
@@ -12,23 +11,15 @@
 buildHomeAssistantComponent rec {
   owner = "mampfes";
   domain = "waste_collection_schedule";
-  version = "1.44.0";
+  version = "1.48.0";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "hacs_${domain}";
     rev = "refs/tags/${version}";
-    hash = "sha256-G1x7HtgdtK+IaPAfxT+7xsDJi5FnXN4Pg3q7T5Xr8lA=";
+    hash = "sha256-4JtPhErAqHO06c8tEmwmWsot1Kz1wz2QuiUGdrgU8II=";
   };
 
-  patches = [
-    # Corrects a dependency on beautifulsoup4
-    (fetchpatch {
-      url = "https://github.com/mampfes/hacs_waste_collection_schedule/pull/1515.patch";
-      hash = "sha256-dvmicKTjolEcCrKRtZfpN0M/9RQCEQkFk+M6E+qCqfQ=";
-    })
-  ];
-
   propagatedBuildInputs = [
     beautifulsoup4
     icalendar
diff --git a/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix b/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
index fd453e0d321c0..40899c8926ea9 100644
--- a/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/xiaomi_gateway3/default.nix
@@ -1,27 +1,29 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, zigpy
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  zigpy,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
   owner = "AlexxIT";
   domain = "xiaomi_gateway3";
-  version = "4.0.3";
+  version = "4.0.5";
 
   src = fetchFromGitHub {
     owner = "AlexxIT";
     repo = "XiaomiGateway3";
     rev = "v${version}";
-    hash = "sha256-YGaVQaz3A0yM8AIC02CvMKWMJ3tW3OADYgKY8ViIt5U=";
+    hash = "sha256-C8aY23e6iWANbhCRQYNHx+3fomVO+7qdxj+qfv+K3JM=";
   };
 
-  propagatedBuildInputs = [
-    zigpy
-  ];
+  propagatedBuildInputs = [ zigpy ];
 
   dontBuild = true;
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/AlexxIT/XiaomiGateway3/releases/tag/v{version}";
     description = "Home Assistant custom component for control Xiaomi Multimode Gateway (aka Gateway 3), Xiaomi Multimode Gateway 2, Aqara Hub E1 on default firmwares over LAN";
diff --git a/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix b/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
index 0c64655d76df5..83f03c7a9cb32 100644
--- a/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/xiaomi_miot/default.nix
@@ -1,22 +1,24 @@
-{ lib
-, buildHomeAssistantComponent
-, fetchFromGitHub
-, hap-python
-, micloud
-, pyqrcode
-, python-miio
+{
+  lib,
+  buildHomeAssistantComponent,
+  fetchFromGitHub,
+  hap-python,
+  micloud,
+  pyqrcode,
+  python-miio,
+  nix-update-script,
 }:
 
 buildHomeAssistantComponent rec {
   owner = "al-one";
   domain = "xiaomi_miot";
-  version = "0.7.17";
+  version = "0.7.18";
 
   src = fetchFromGitHub {
     owner = "al-one";
     repo = "hass-xiaomi-miot";
     rev = "v${version}";
-    hash = "sha256-IpL4e2mKCdtNu8NtI+xpx4FPW/uj1M5Rk6DswXmSJBk=";
+    hash = "sha256-/Zn2jEjwkCHiz48nVjKEPcCpPVajLaZ81DCTNpx1vbk=";
   };
 
   propagatedBuildInputs = [
@@ -28,9 +30,11 @@ buildHomeAssistantComponent rec {
 
   dontBuild = true;
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
     changelog = "https://github.com/al-one/hass-xiaomi-miot/releases/tag/${version}";
-    description = "Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices.";
+    description = "Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices";
     homepage = "https://github.com/al-one/hass-xiaomi-miot";
     maintainers = with maintainers; [ azuwis ];
     license = licenses.asl20;
diff --git a/pkgs/servers/home-assistant/custom-components/yassi/default.nix b/pkgs/servers/home-assistant/custom-components/yassi/default.nix
index 266d926b086b7..39d8cd5145b52 100644
--- a/pkgs/servers/home-assistant/custom-components/yassi/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/yassi/default.nix
@@ -7,19 +7,19 @@
 buildHomeAssistantComponent rec {
   owner = "samuelspagl";
   domain = "samsung_soundbar";
-  version = "0.4.0b2";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     inherit owner;
     repo = "ha_samsung_soundbar";
     rev = version;
-    hash = "sha256-htAUCQe8mpk+GFwxXkPVnWS0m3mZd2hUt+f4qES+W4U=";
+    hash = "sha256-pkwkXI05zDMEXPoE90YJBxoPYlzmSHH/BLExq0J1JrQ=";
   };
 
   propagatedBuildInputs = [ pysmartthings ];
 
   meta = with lib; {
-    description = "A HomeAssistant integration for Samsung Soundbars";
+    description = "HomeAssistant integration for Samsung Soundbars";
     homepage = "https://ha-samsung-soundbar.vercel.app/";
     changelog = "https://github.com/samuelspagl/ha_samsung_soundbar/releases/tag/${version}";
     maintainers = with maintainers; [ k900 ];