Добавляем в ZHA поддержку _TZE200_libht6ua и _TZE284_libht6ua

На руках 2 двигателя для рулонных штор. С виду они одинаковые, но по факту разные ревизии: _TZE200_libht6ua и _TZE284_libht6ua

В zigbee2mqtt вроде как поддержка есть, но у меня стоит ZHA и тут они хоть и добавляются, но без управления.

Решаем через quirks

/homeassistant/configuration.yaml

zha:
enable_quirks: true
custom_quirks_path: /config/custom_zha_quirks

/homeassistant/custom_zha_quirks/ts0601_libht6ua_cover.py

from zigpy.profiles import zha
from zigpy.zcl.clusters.general import Basic, Groups, Ota, Scenes, Time

from zhaquirks import Bus
from zhaquirks.const import (
DEVICE_TYPE,
ENDPOINTS,
INPUT_CLUSTERS,
MODELS_INFO,
OUTPUT_CLUSTERS,
PROFILE_ID,
)
from zhaquirks.tuya import (
TuyaManufacturerWindowCover,
TuyaManufCluster,
TuyaPowerConfigurationCluster,
TuyaWindowCover,
TuyaWindowCoverControl,
)

BATTERY_CHANGE = «battery_change»
TUYA_DP_TYPE_VALUE = 0x0200
ZEMISMART_BATTERY_ATTR = 0x0D

class TuyaManufacturerWindowCoverBattery(TuyaManufacturerWindowCover):
«»»Tuya cover manufacturer cluster with battery DP support.»»»

def handle_cluster_request(self, hdr, args, *, dst_addressing=None):
super().handle_cluster_request(hdr, args, dst_addressing=dst_addressing)

battery_attr = getattr(self.endpoint.device, «tuya_battery_attr», None)
if battery_attr is None or not args:
return

tuya_payload = args[0]
if hasattr(tuya_payload, «param»):
tuya_payload = tuya_payload.param

command_id = getattr(tuya_payload, «command_id», None)
data = getattr(tuya_payload, «data», None)

if (
command_id == TUYA_DP_TYPE_VALUE + battery_attr
and isinstance(data, (list, tuple))
and len(data) >= 5
):
self.endpoint.device.battery_bus.listener_event(
BATTERY_CHANGE,
data[4],
)

class TuyaWindowCoverBattery(TuyaWindowCover):
«»»Base Tuya cover with battery bus support.»»»

tuya_battery_attr = None

def __init__(self, *args, **kwargs):
self.battery_bus = Bus()
super().__init__(*args, **kwargs)

class TuyaMoesCover0601_libht6ua(TuyaWindowCoverBattery):
«»»Local quirk for TS0601 _TZE200_libht6ua roller blind motor.»»»

tuya_cover_inverted_by_default = True
tuya_battery_attr = ZEMISMART_BATTERY_ATTR

signature = {
MODELS_INFO: [
(«_TZE200_libht6ua», «TS0601»),
],
ENDPOINTS: {
1: {
PROFILE_ID: zha.PROFILE_ID,
DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
TuyaManufCluster.cluster_id,
],
OUTPUT_CLUSTERS: [
Ota.cluster_id,
Time.cluster_id,
],
}
},
}

replacement = {
ENDPOINTS: {
1: {
DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
TuyaManufacturerWindowCoverBattery,
TuyaWindowCoverControl,
TuyaPowerConfigurationCluster,
],
OUTPUT_CLUSTERS: [
Ota.cluster_id,
Time.cluster_id,
],
}
}
}

class TuyaMoesCover0601_libht6ua_v284(TuyaWindowCover):
«»»Local quirk for TS0601 _TZE284_libht6ua roller blind motor.»»»

tuya_cover_inverted_by_default = True

signature = {
MODELS_INFO: [
(«_TZE284_libht6ua», «TS0601»),
],
ENDPOINTS: {
1: {
PROFILE_ID: zha.PROFILE_ID,
DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
0xED00,
TuyaManufCluster.cluster_id,
],
OUTPUT_CLUSTERS: [
Ota.cluster_id,
Time.cluster_id,
],
}
},
}

replacement = {
ENDPOINTS: {
1: {
DEVICE_TYPE: zha.DeviceType.WINDOW_COVERING_DEVICE,
INPUT_CLUSTERS: [
Basic.cluster_id,
Groups.cluster_id,
Scenes.cluster_id,
TuyaManufacturerWindowCover,
TuyaWindowCoverControl,
],
OUTPUT_CLUSTERS: [
Ota.cluster_id,
Time.cluster_id,
],
}
}
}

Перезагружаем Home Assistant и видим, что у нас появились кнопки для управления шторами. Если не появились, то на странице устройства нажимаем Перенастроить.

Скачать установочные файлы APPX/MSIX приложений без Microsoft Store

https://store.rg-adguard.net/ или https://msft-store.tplant.com.au/

Указываем ссылку. В первом сайте (варианте) в выпадающем списке выбираем Retail. Во втором сайте (варианте) оставляем как Production. Ищем. Качаем. Ставим. Если установили не последнюю версию и при этом есть Microsoft Store на рабочем компе, то спокойно обновляемся стандартным механизмом.

Драйвер Rapid Storage Technology (DriverVMD)

Драйвер Rapid Storage Technology (DriverVMD) — что делать, если при установке Windows 11 не видно диск

Иногда при установке Windows 11 вы можете столкнуться с ситуацией, когда установщик не обнаруживает жесткий диск. Это достаточно частая проблема, особенно на современных компьютерах с NVMe-SSD и контроллерами, использующими режим VMD/RAID/Intel RST.

В таких случаях может помочь установка специального драйвера — DriverVMD (часто связанный с технологией Intel Rapid Storage Technology). Ниже — пошагово, что делать.

Что такое VMD / Intel RST / Rapid Storage Technology

VMD (Volume Management Device) — функциональность некоторых чипсетов Intel, позволяющая обрабатывать NVMe-устройства через контроллеры Intel, интегрированные в системную плату.
Intel Rapid Storage Technology (RST) — технология управления накопителями от Intel, позволяющая объединять диски, обеспечивать режимы RAID, ускорять работу дисков через кеширование.
Когда материнская плата / BIOS / UEFI настроены на режим, требующий драйвера RST/VMD, стандартный драйвер Windows может не распознать диск, пока не будет установлен нужный драйвер.

Как найти и установить DriverVMD

  • Скачать драйвер. Обратите внимание: скачивайте только из надежных источников — проверяйте целостность и отсутствие вредоносного кода.)
  • Распаковать архив. После скачивания распакуйте архив в удобную папку на флешке или другом устройстве.
  • Указать драйвер во время установки Windows. Запустите установку Windows 11 как обычно. Когда дойдёте до шага выбора диска, и если ни один диск не отображается — нажмите кнопку «Загрузить драйвер» / “Load driver”. Укажите путь к распакованной папке с драйвером.
    После этого Windows должна обнаружить диск (или разделы) и продолжить установку.
  • После установки. После установки ОС проверьте, что устройство диска корректно определяется в «Диспетчере устройств» и что нет жёлтых восклицательных знаков. Если есть — установите дополнительные компоненты RST, например из пакета Intel Rapid Storage Technology.

Предостережения и рекомендации

  • Убедитесь, что версия драйвера совместима с вашей платформой (чипсет, BIOS/UEFI, модель платы).
  • Всегда скачивайте драйверы с официальных сайтов Intel или производителя материнской платы, если возможно.
  • Во время установки не используйте случайные / неподтверждённые архивы без проверки.
  • Перед манипуляциями с дисками и разделами делайте резервную копию данных (если они уже есть).

http://yavasilek.ru/wp-content/uploads/DriverVMD.rar

Очистка файлов в папке (+пустые папки)

Папка загрузки постоянно растет, но я решил для себя забирать от туда важные документы, а то что осталось — подчищать автоматом.
Для этого определил для себя 40 дней, а всё что старше — удаляю.
PS скрипт
—————-
$Path = "C:\Users\yavasilek\Downloads" #путь к папке
$Days = 45 #сколько дней
$cutoff = (Get-Date).AddDays(-$Days)

# 1) Удаляем файлы старше $Days (включая скрытые/системные)
Get-ChildItem -Path $Path -Recurse -File -Force |
Where-Object { $_.LastWriteTime -lt $cutoff } |
Remove-Item -Force -ErrorAction SilentlyContinue

# 2) Многократно подчищаем пустые каталоги, идя от самых глубоких
Get-ChildItem -Path $Path -Recurse -Directory -Force |
Sort-Object { $_.FullName.Split('\').Count } -Descending |
ForEach-Object {
if (-not (Get-ChildItem -LiteralPath $_.FullName -Force)) {
Remove-Item -LiteralPath $_.FullName -Force -ErrorAction SilentlyContinue
}
}

—————-
Сохраняем в файл cleanup_downloads.ps1
Далее в планировщике создаем задачу на запуск в нужное время программы powershell с аргументом -ExecutionPolicy Bypass -File «c:\Users\yavasilek\Documents\cleanup_downloads.ps1»
Пусть к скрипту указываем свой