Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:homeassitant [05-01-2026 22:10] – [Température / humidité] edmc73 | linux:homeassitant [07-07-2026 19:44] (Version actuelle) – [Neato] edmc73 | ||
|---|---|---|---|
| Ligne 40: | Ligne 40: | ||
| < | < | ||
| - | {% set raw_value = states(' | + | {% set raw_value = states(' |
| {% set entity_value = raw_value | int %} | {% set entity_value = raw_value | int %} | ||
| {% if entity_value <= 14 %} | {% if entity_value <= 14 %} | ||
| Ligne 52: | Ligne 52: | ||
| {% endif %} | {% endif %} | ||
| <div style=" | <div style=" | ||
| - | Trajet< | + | Trajet |
| - | <span style=" | + | <span style=" |
| </ | </ | ||
| </ | </ | ||
| + | |||
| ===== UPS USB ===== | ===== UPS USB ===== | ||
| Ligne 90: | Ligne 91: | ||
| ==== Prises connectées ==== | ==== Prises connectées ==== | ||
| * IKEA (+ consommation) 10€ -> https:// | * IKEA (+ consommation) 10€ -> https:// | ||
| - | * NOUS (compact) + consommation -> https:// | + | * NOUS (compact) + consommation |
| ==== Capteurs ==== | ==== Capteurs ==== | ||
| Ligne 102: | Ligne 103: | ||
| * Détecteur de présence humaine (différent de mouvement) | * Détecteur de présence humaine (différent de mouvement) | ||
| * Sonoff 12€ -> https:// | * Sonoff 12€ -> https:// | ||
| + | |||
| + | |||
| + | ===== intégration à Google Home ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ===== Neato ===== | ||
| + | |||
| + | Reprendre le controle sur son robot aspirateur -> https:// | ||
| + | |||
| + | ===== ZHA Device Handlers ===== | ||
| + | |||
| + | Les gestionnaires de périphériques ZHA sont des implémentations personnalisées de particularités pour Zigpy , la bibliothèque qui fournit la prise en charge Zigbee pour le composant ZHA dans Home Assistant. | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ça m'a sauvé la vie pour mon module **Sone Smart One Variateur Zigbee 200W – Micromodule Dimmer Éclairage TRIAC 39×39×18 mm, Compatible Tuya Smart Life, Alexa, Google Home, Home Assistant (Zigbee2MQTT)** | ||
| + | |||
| + | Il suffit de rajouter ça dans le fichier de configuration.yaml | ||
| + | < | ||
| + | zha: | ||
| + | custom_quirks_path: | ||
| + | </ | ||
| + | |||
| + | De créer le répertoire ''/ | ||
| + | |||
| + | <code python file ts110e.py> | ||
| + | """ | ||
| + | |||
| + | from typing import Any, Final, Union | ||
| + | |||
| + | from zigpy.profiles import zgp, zha | ||
| + | import zigpy.types as t | ||
| + | from zigpy.zcl import foundation | ||
| + | from zigpy.zcl.clusters.general import ( | ||
| + | Basic, | ||
| + | GreenPowerProxy, | ||
| + | Groups, | ||
| + | LevelControl, | ||
| + | OnOff, | ||
| + | Ota, | ||
| + | Scenes, | ||
| + | Time, | ||
| + | ) | ||
| + | from zigpy.zcl.foundation import ZCLAttributeDef | ||
| + | |||
| + | from zhaquirks.const import ( | ||
| + | DEVICE_TYPE, | ||
| + | ENDPOINTS, | ||
| + | INPUT_CLUSTERS, | ||
| + | MODELS_INFO, | ||
| + | OUTPUT_CLUSTERS, | ||
| + | PROFILE_ID, | ||
| + | ) | ||
| + | from zhaquirks.tuya import ( | ||
| + | NoManufacturerCluster, | ||
| + | TuyaDimmerSwitch, | ||
| + | TuyaZBExternalSwitchTypeCluster, | ||
| + | ) | ||
| + | |||
| + | TUYA_LEVEL_ATTRIBUTE = 0xF000 | ||
| + | TUYA_BULB_TYPE_ATTRIBUTE = 0xFC02 | ||
| + | TUYA_MIN_LEVEL_ATTRIBUTE = 0xFC03 | ||
| + | TUYA_MAX_LEVEL_ATTRIBUTE = 0xFC04 | ||
| + | TUYA_CUSTOM_LEVEL_COMMAND = 0x00F0 | ||
| + | |||
| + | |||
| + | class TuyaLevelPayload(t.Struct): | ||
| + | """ | ||
| + | |||
| + | level: t.uint16_t | ||
| + | transtime: t.uint16_t | ||
| + | |||
| + | |||
| + | class TuyaBulbType(t.enum8): | ||
| + | """ | ||
| + | |||
| + | LED = 0x00 | ||
| + | INCANDESCENT = 0x01 | ||
| + | HALOGEN = 0x02 | ||
| + | |||
| + | |||
| + | class F000LevelControlCluster(NoManufacturerCluster, | ||
| + | """ | ||
| + | |||
| + | class ServerCommandDefs(LevelControl.ServerCommandDefs): | ||
| + | """ | ||
| + | |||
| + | moveToLevelTuya = foundation.ZCLCommandDef( | ||
| + | id=TUYA_CUSTOM_LEVEL_COMMAND, | ||
| + | schema={" | ||
| + | is_manufacturer_specific=False, | ||
| + | ) | ||
| + | |||
| + | class AttributeDefs(LevelControl.AttributeDefs): | ||
| + | """ | ||
| + | |||
| + | manufacturer_current_level: | ||
| + | id=TUYA_LEVEL_ATTRIBUTE, | ||
| + | ) | ||
| + | bulb_type: Final = ZCLAttributeDef( | ||
| + | id=TUYA_BULB_TYPE_ATTRIBUTE, | ||
| + | ) | ||
| + | manufacturer_min_level: | ||
| + | id=TUYA_MIN_LEVEL_ATTRIBUTE, | ||
| + | ) | ||
| + | manufacturer_max_level: | ||
| + | id=TUYA_MAX_LEVEL_ATTRIBUTE, | ||
| + | ) | ||
| + | |||
| + | def _update_attribute(self, | ||
| + | if attrid == TUYA_LEVEL_ATTRIBUTE: | ||
| + | self.debug(" | ||
| + | value = (value + 4 - 10) * 254 // (1000 - 10) | ||
| + | attrid = 0x0000 | ||
| + | super()._update_attribute(attrid, | ||
| + | |||
| + | async def command( | ||
| + | self, | ||
| + | command_id: Union[foundation.GeneralCommand, | ||
| + | *args, | ||
| + | manufacturer: | ||
| + | expect_reply: | ||
| + | tsn: Union[int, t.uint8_t] | None = None, | ||
| + | **kwargs: Any, | ||
| + | ): | ||
| + | if command_id in (0x0000, 0x0001, 0x0004): | ||
| + | if kwargs and " | ||
| + | level = kwargs[" | ||
| + | elif args: | ||
| + | level = args[0] | ||
| + | else: | ||
| + | level = 0 | ||
| + | brightness = level * (1000 - 10) // 254 + 10 | ||
| + | self.debug(" | ||
| + | return await super().command( | ||
| + | TUYA_CUSTOM_LEVEL_COMMAND, | ||
| + | TuyaLevelPayload(level=brightness, | ||
| + | manufacturer=manufacturer, | ||
| + | expect_reply=expect_reply, | ||
| + | tsn=tsn, | ||
| + | ) | ||
| + | return super().command( | ||
| + | command_id, *args, manufacturer, | ||
| + | ) | ||
| + | |||
| + | |||
| + | class DimmerSwitchWithNeutral1Gang(TuyaDimmerSwitch): | ||
| + | """ | ||
| + | |||
| + | signature = { | ||
| + | MODELS_INFO: | ||
| + | ENDPOINTS: { | ||
| + | 1: { | ||
| + | PROFILE_ID: zha.PROFILE_ID, | ||
| + | DEVICE_TYPE: | ||
| + | INPUT_CLUSTERS: | ||
| + | Basic.cluster_id, | ||
| + | 0x0003, | ||
| + | Groups.cluster_id, | ||
| + | Scenes.cluster_id, | ||
| + | OnOff.cluster_id, | ||
| + | LevelControl.cluster_id, | ||
| + | 0x1000, | ||
| + | TuyaZBExternalSwitchTypeCluster.cluster_id, | ||
| + | ], | ||
| + | OUTPUT_CLUSTERS: | ||
| + | }, | ||
| + | 242: { | ||
| + | PROFILE_ID: zgp.PROFILE_ID, | ||
| + | DEVICE_TYPE: | ||
| + | INPUT_CLUSTERS: | ||
| + | OUTPUT_CLUSTERS: | ||
| + | }, | ||
| + | }, | ||
| + | } | ||
| + | replacement = { | ||
| + | ENDPOINTS: { | ||
| + | 1: { | ||
| + | PROFILE_ID: zha.PROFILE_ID, | ||
| + | DEVICE_TYPE: | ||
| + | INPUT_CLUSTERS: | ||
| + | Basic.cluster_id, | ||
| + | 0x0003, | ||
| + | Groups.cluster_id, | ||
| + | Scenes.cluster_id, | ||
| + | OnOff.cluster_id, | ||
| + | F000LevelControlCluster, | ||
| + | 0x1000, | ||
| + | TuyaZBExternalSwitchTypeCluster, | ||
| + | ], | ||
| + | OUTPUT_CLUSTERS: | ||
| + | }, | ||
| + | 242: { | ||
| + | PROFILE_ID: zgp.PROFILE_ID, | ||
| + | DEVICE_TYPE: | ||
| + | INPUT_CLUSTERS: | ||
| + | OUTPUT_CLUSTERS: | ||
| + | }, | ||
| + | }, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Redémarrer Home Assistant, supprimer le module et le reintégrer. | ||