Bonjour, un nouveau qui vient du monde ... d'enki!

Ok merci. En fait, j’y pense maintenant, pour vérifier la compatibilité, en plus du pi2 j’ai un ordi portable lenovo T430, il est sous windows, mais je n’ai rien dessus et je veux de toute façon le passer sous linux, donc je pourrais installer une linux débian et mettre HA dessus, avec le dongle ça devrait fonctionner ?

Oui sans soucis. Le mieux est de partir sur Debian 11 maintenant, elle est officiellement supporté sur la version béta et le sera sur la stable semaine prochaine. Ca fonctionne quand même sans être en béta, juste un warning qui s’affiche

Bonjour
je désirerais apporter ma pierre à l’édifice, puis que c’est un sujet auquel j’ai déjà réfléchi.
moi je voulais utiliser des capteurs, IR, et Détection porte de la marque SHELLY.
c’est du matériel qui semble fiable, et il a de bonnes fonctionnalités.
Je pense que oui c’est raisonnable de créer un système hybride, et c’est aussi fiable que les systèmes propriétaires.
C’est juste que sans wifi rien ne fonctionne !!

Moi j’ai une question en retour : avez vous pensé à des solutions sécurisées pour avoir accès à l’état des capteurs ou bien pouvoir la mettre en marche / l’arrêter via le smartphone?

Bonjour, je viens d’associer un détecteur d’ouverture LDSENK08 (protocole Zigbee via ZHA) mais il n’y a pas de prise en charge de la détection de vibration, ni son réglage de sensibilité. L’ouverture/fermeture est bien gérée par HA. Une vibration est détectée comme une ouverture et au bout de 20s comme une fermeture. Je vais jeter un coup d’œil au code

Salut à toi,

Ayant le même souci sur le détecteur LDSENK08, j’ai plongé dans le monde de ZHA et des Quirks.
Avec le code ci-dessous j’arrive bien à séparer les vibrations de l’ouverture qui sont mêlés dans le status renvoyé par le capteur. Je vais essayer de compléter avec le réglage de la sensibilité et de faire une pull request pour intégrer ça à ZHA.

Capture d’écran du 2023-02-27 19-05-06

Le quirk pour l’instant :

"""Device handler for ADEO Lexman LDSENK08 smart door window sensor with vibration"""
import logging

from typing import Any, List, Optional, Union

from zigpy.profiles import zha
from zigpy.quirks import CustomDevice, CustomCluster
import zigpy.types as t
from zigpy.zcl.clusters.general import (
    Basic,
    Identify,
    Ota,
    PollControl,
    PowerConfiguration,
)
from zigpy.zcl.clusters.homeautomation import Diagnostic
from zigpy.zcl.clusters.security import IasZone
from zigpy.zcl import foundation

from zhaquirks import Bus, LocalDataCluster
from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
    ZONE_STATUS,
    ZONE_TYPE,
    ON,
    OFF,
)

_LOGGER = logging.getLogger(__name__)

class IasMultiZoneCluster(CustomCluster, IasZone):
    """Multi Zone Cluster."""
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Standard_CIE}

    def handle_cluster_request(
        self,
        hdr: foundation.ZCLHeader,
        args: List[Any],
        *,
        dst_addressing: Optional[
            Union[t.Addressing.Group, t.Addressing.IEEE, t.Addressing.NWK]
        ] = None,
    ):
        """Handle a cluster command received on this cluster."""
        if hdr.command_id == 0:
            #If we have bit 2, it's a vibration
            if (args[0] & 2) > 0:
                self.endpoint.device.ias_bus.listener_event("vibration_event", ON)
            else:
                self.endpoint.device.ias_bus.listener_event("vibration_event", OFF)
            #If we have bit 1, it's open
            if (args[0] & 1) > 0:
                self.endpoint.device.ias_bus.listener_event("contact_event", ON)
            else:
                self.endpoint.device.ias_bus.listener_event("contact_event", OFF)
        super().handle_cluster_request(hdr, args, dst_addressing=dst_addressing)


class VibrationCluster(LocalDataCluster, IasZone):
    """Vibration Sensor."""
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Vibration_Movement_Sensor}

    def __init__(self, *args, **kwargs):
        """Init."""
        super().__init__(*args, **kwargs)
        self.endpoint.device.ias_bus.add_listener(self)

    def vibration_event(self, value):
        """Vibration event."""
        self._update_attribute(ZONE_STATUS, value)

class ContactCluster(LocalDataCluster, IasZone):
    """Open/close Sensor."""
    _CONSTANT_ATTRIBUTES = {ZONE_TYPE: IasZone.ZoneType.Contact_Switch}

    def __init__(self, *args, **kwargs):
        """Init."""
        super().__init__(*args, **kwargs)
        self.endpoint.device.ias_bus.add_listener(self)

    def contact_event(self, value):
        """Contact event."""
        self._update_attribute(ZONE_STATUS, value)

class AdeoLdsenk08(CustomDevice):
    """Adeo contact and vibration sensor controller."""

    def __init__(self, *args, **kwargs):
        """Init device."""
        self.ias_bus = Bus()
        super().__init__(*args, **kwargs)

    signature = {
        #  <SimpleDescriptor endpoint=1 profile=260 device_type=1026
        #  device_version=1
        #  input_clusters=[0, 1, 3, 32, 1280, 2821]
        #  output_clusters=[25]>
        MODELS_INFO: [("ADEO", "LDSENK08")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,  # 260
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,  # 2048
                INPUT_CLUSTERS: [
                    Basic.cluster_id,  # 0
                    PowerConfiguration.cluster_id,  # 1
                    Identify.cluster_id,  # 3
                    PollControl.cluster_id,  # 32
                    IasZone.cluster_id,  # 1280
                    Diagnostic.cluster_id  # 2821
                ],
                OUTPUT_CLUSTERS: [
                    Ota.cluster_id  # 25
                ],
            }
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,  # 0
                    PowerConfiguration.cluster_id,  # 1
                    Identify.cluster_id,  # 3
                    PollControl.cluster_id,  # 32
                    IasMultiZoneCluster,  # 1280
                    Diagnostic.cluster_id  # 2821
                ],
                OUTPUT_CLUSTERS: [
                    Ota.cluster_id  # 25
                ],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
                INPUT_CLUSTERS: [
                    VibrationCluster,  # 1280
                ],
                OUTPUT_CLUSTERS: [],
            },
            3: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
                INPUT_CLUSTERS: [
                    ContactCluster,  # 1280
                ],
                OUTPUT_CLUSTERS: [],
            },
        },
    }

T’as réussi à faire quelque chose?

Salut,
Pour la sensibilité j’ai pu la modifier en écrivant l’attribut dans Gérer l’appareil Zigbee, paramètre current_zone_sensitivity_level. En testant, visiblement ça va de 1 à 5 (5 étant la sensibilité la plus élevée et celle par défaut). Il faut appuyer sur le bouton du capteur en même temps que l’écriture ou la lecture pour le réveiller.

Mais apparemment ce n’est pas possible d’intégrer ça directement dans l’interface ZHA. J’ai ouvert une issue (github. com/zigpy/zha-device-handlers/issues/2249) et il faut que je trouve un peu de temps pour intégrer les remarques et des tests pour faire une PR pour intégrer nativement le capteur dans ZHA (au moins la partie séparation capteur vibration/capteur ouverture).