Aqara H2 EU Light Switch untere Taste ansteuern

Hi, ich habe mir eben den Aqara H2 EUR Light Switch eingebaut und das Ganze über Matter. Das Relais schaltet alles Bestens aber wie bekomme ich in meiner Automation die untere Taste getriggert um diese ebenfalls zu verwenden? (fire event?).
Vielleicht hat hier irgendwer schon Erfahrungen?
Danke Marco

ok habs selbst gefunden:

trigger: state
entity_id:
  - event.wandschalter_schlafzimmer_aqara_taste_5
attribute: event_type
to: initial_press

Danke!

Hi Bolschi, selbiges Problem habe Ich auch. Nur über Zigbee. Kann Ich auch mit Zigbee den unteren Schalter ansteuerrn ?

Wo genau füge ich den Code ein?

Ich nutze dafür den Switch Manager, da kannst du die Tasten einzeln mit Aktionen belegen.

Hast du einen Link dazu?

Danke,

Ich habe es installiert. Beim eInrichten des Schalters stoße Ich allerdings auf folgendes Problem (siehe Bild).

Wenn Ich den Button drücke passiert nichts. Wo finde Ich das mqtt topic?

Auto Discover hast du aber vorher gedrückt?

Ansonsten findest du das topic, wie es im Screenshot beschrieben ist:
zigbee2mqtt/Dein Schalter/action

(Den Namen musst du natürlich an deinen anpassen)

Ja, Auto Discover gedrückt und dann den chalter gedrückt.

was genau ist den “action“ ? (Siehe Anhang)

Wäre das dann bei mir: “struebbel/Lichtschalter Strübbel hinten“ ?

struebbel/Lichtschalter Strübbel hinten/action

ah ergibt Sinn. Danke ! Ich werde es später testen :slight_smile:

legacy ist aber false/off, wie es auch in deinem Screenshot geschrieben steht?

Hey maxe, entschuldige die blöde nachfrage… Ich bin noch nicht so lange im HA Thema. Was ist Legacy und wo finde Ich das?

oder über die UI den Haken entfernen (sofern er gesetzt ist)

Danke, das hat geklappt :slight_smile:

Ich ziehe so langsam von Z2M zu ZHA um. Der Aqara H2 EUR Light Switch macht noch mit der unteren Taste Probleme bzw. bekomme ich diese nicht in ZHA rein. Es gibt keinen Trigger für Automationen etc. Daher meine Frage. Hat jemand den Aqara H2 EUR Light Switch (2 Tasten) in ZHA eingebunden und wie steuert ihr die zweite untere Taste an?

Schaue mal in den Entwicklungswerkzeugen → Ereignisse und abonniere das event zha_event
und betätige mal die Tasten. Wenn beim Tastendruck Events ankommen, kannst Du diese auch als Auslöser in Automationen verwenden.

Ansonsten hilft das vielleicht:

Gruß Osorkon

Klasse. Danke für den hilfreichen Tipp! Habe es getestet und da kommt tatsächlich kein event auf dem unteren Button des Aqara H2 EU Switches in HA an. Wollte mich eigentlich gänzlich von Z2M verabschieden um auf ZHA umzusteigen aber ich habe leider 6 dieser H2 EU Schalter verbaut weiterhin auch einige der Friends of HUE (Gira EnOcean Green Power) welche ebenfalls nicht in ZHA supportet werden. (persönlich kann ich nicht nachvollziehen warum die Geräte in Z2M unterstützt werden aber im hauseigenen System von HA nicht oder erst nach Jahren) Naja da bleibt mir nüscht anderes übrig als mich weiterhin von Z2M und dem MQTT Broker “knebeln” zu lassen. :slight_smile: Danke!

Ich habe sie mit diesem Quirk mit ZAH “Double,Hold,Release und single” funktionieren bei mir Problemlos.

in der configuration.yaml quirks aktivieren

zha:
enable_quirks: true
custom_quirks_path: /config/zha_quirks/

folgenden quirk in

/homeassistant/zha_quirks/switch_h2_1.py

speichern

"""Aqara H2 (EU) rocker switch quirks. Also see opple_switch.py for similar switches."""

from zigpy import types
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster
from zigpy.quirks.v2 import QuirkBuilder
from zigpy.zcl.clusters.general import AnalogInput, Identify
from zigpy.zcl.foundation import BaseAttributeDefs, DataTypeId, ZCLAttributeDef

from zhaquirks.const import (
    BUTTON_1,
    BUTTON_2,
    BUTTON_3,
    BUTTON_4,
    COMMAND,
    COMMAND_DOUBLE,
    COMMAND_HOLD,
    COMMAND_RELEASE,
    COMMAND_SINGLE,
    ZHA_SEND_EVENT,
)
from zhaquirks.xiaomi import XiaomiAqaraE1Cluster
from zhaquirks.xiaomi.aqara.opple_remote import (
    COMMAND_1_DOUBLE,
    COMMAND_1_HOLD,
    COMMAND_1_RELEASE,
    COMMAND_1_SINGLE,
    COMMAND_2_DOUBLE,
    COMMAND_2_HOLD,
    COMMAND_2_RELEASE,
    COMMAND_2_SINGLE,
    COMMAND_4_DOUBLE,
    COMMAND_4_HOLD,
    COMMAND_4_RELEASE,
    COMMAND_4_SINGLE,
    COMMAND_5_DOUBLE,
    COMMAND_5_HOLD,
    COMMAND_5_RELEASE,
    COMMAND_5_SINGLE,
)
from zhaquirks.xiaomi.aqara.opple_switch import MultistateInputCluster


class AqaraOperationMode(types.enum8):
    """Aqara operation mode attribute values."""

    Decoupled = 0x00
    Relay = 0x01


class AqaraPowerOnMode(types.enum8):
    """Aqara power on mode attribute values."""

    On = 0x00
    Previous = 0x01
    Off = 0x02
    Inverted = 0x03


class PowerMeasurementCluster(CustomCluster, AnalogInput):
    """Custom cluster for power measurement."""

    PRESENT_VALUE_ATTRIBUTE = 0x0055

    async def bind(self):
        """Bind cluster."""
        result = await super().bind()
        await self.configure_reporting(
            self.PRESENT_VALUE_ATTRIBUTE,
            0,
            600,
            1,
        )
        return result

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)
        if attrid == self.PRESENT_VALUE_ATTRIBUTE:
            self.listener_event(
                ZHA_SEND_EVENT,
                {
                    "type": "power_measurement",
                    "value": value,
                },
            )


class AqaraManuSpecificCluster(XiaomiAqaraE1Cluster):
    """Manufacturer-specific cluster for Lumi features."""

    class AttributeDefs(BaseAttributeDefs):
        """Attribute definitions for Aqara switch."""

        power_on_mode = ZCLAttributeDef(
            id=0x0517,
            type=AqaraPowerOnMode,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )

        operation_mode = ZCLAttributeDef(
            id=0x0200,
            type=AqaraOperationMode,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )

        # Estos tres son uint8 (0/1) aunque conceptualmente sean booleanos.
        led_indicator = ZCLAttributeDef(
            id=0x0203,
            type=types.uint8_t,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )

        flip_led_indicator = ZCLAttributeDef(
            id=0x00F0,
            type=types.uint8_t,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )

        lock_relay = ZCLAttributeDef(
            id=0x0285,
            type=types.uint8_t,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )

        # Realmente entero (1/2), no booleano
        multi_click = ZCLAttributeDef(
            id=0x0286,
            type=types.uint8_t,
            zcl_type=DataTypeId.uint8,
            access="rw",
            is_manufacturer_specific=True,
        )


# Modelo doble (H2 doble relé)
(
    QuirkBuilder("Aqara", "lumi.switch.agl010")
    .adds_endpoint(1, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(2, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(4, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(5, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(21, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds(Identify, endpoint_id=1)
    .replaces(MultistateInputCluster, endpoint_id=1)
    .replaces(MultistateInputCluster, endpoint_id=2)
    .replaces(MultistateInputCluster, endpoint_id=4)
    .replaces(MultistateInputCluster, endpoint_id=5)
    .replaces(AqaraManuSpecificCluster, endpoint_id=1)
    .replaces(AqaraManuSpecificCluster, endpoint_id=2)
    .replaces(AqaraManuSpecificCluster, endpoint_id=4)
    .replaces(AqaraManuSpecificCluster, endpoint_id=5)
    .replaces(PowerMeasurementCluster, endpoint_id=21)
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.led_indicator.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="led_indicator",
        fallback_name="LED indicator",
        off_value=0,
        on_value=1,
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.flip_led_indicator.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="flip_led_indicator",
        fallback_name="Flip LED indicator",
        off_value=0,
        on_value=1,
    )
    .enum(
        AqaraManuSpecificCluster.AttributeDefs.power_on_mode.name,
        AqaraPowerOnMode,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="power_on_mode",
        fallback_name="Power on mode",
    )
    .enum(
        AqaraManuSpecificCluster.AttributeDefs.operation_mode.name,
        AqaraOperationMode,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="operation_mode_left",
        fallback_name="Operation mode left",
        unique_id_suffix="left",
    )
    .enum(
        AqaraManuSpecificCluster.AttributeDefs.operation_mode.name,
        AqaraOperationMode,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=2,
        translation_key="operation_mode_right",
        fallback_name="Operation mode right",
        unique_id_suffix="right",
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.lock_relay.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="lock_relay_left",
        fallback_name="Lock relay left",
        unique_id_suffix="left",
        off_value=0,
        on_value=1,
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.lock_relay.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=2,
        translation_key="lock_relay_right",
        fallback_name="Lock relay right",
        unique_id_suffix="right",
        off_value=0,
        on_value=1,
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.multi_click.name,
        AqaraManuSpecificCluster.cluster_id,
        off_value=1,
        on_value=2,
        endpoint_id=4,
        translation_key="multi_click_left",
        fallback_name="Multi click left",
        unique_id_suffix="left",
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.multi_click.name,
        AqaraManuSpecificCluster.cluster_id,
        off_value=1,
        on_value=2,
        endpoint_id=5,
        translation_key="multi_click_right",
        fallback_name="Multi click right",
        unique_id_suffix="right",
    )
    .device_automation_triggers(
        {
            (COMMAND_HOLD, BUTTON_1): {COMMAND: COMMAND_1_HOLD},
            (COMMAND_SINGLE, BUTTON_1): {COMMAND: COMMAND_1_SINGLE},
            (COMMAND_DOUBLE, BUTTON_1): {COMMAND: COMMAND_1_DOUBLE},
            (COMMAND_RELEASE, BUTTON_1): {COMMAND: COMMAND_1_RELEASE},
            (COMMAND_HOLD, BUTTON_2): {COMMAND: COMMAND_2_HOLD},
            (COMMAND_SINGLE, BUTTON_2): {COMMAND: COMMAND_2_SINGLE},
            (COMMAND_DOUBLE, BUTTON_2): {COMMAND: COMMAND_2_DOUBLE},
            (COMMAND_RELEASE, BUTTON_2): {COMMAND: COMMAND_2_RELEASE},
            (COMMAND_HOLD, BUTTON_3): {COMMAND: COMMAND_4_HOLD},
            (COMMAND_SINGLE, BUTTON_3): {COMMAND: COMMAND_4_SINGLE},
            (COMMAND_DOUBLE, BUTTON_3): {COMMAND: COMMAND_4_DOUBLE},
            (COMMAND_RELEASE, BUTTON_3): {COMMAND: COMMAND_4_RELEASE},
            (COMMAND_HOLD, BUTTON_4): {COMMAND: COMMAND_5_HOLD},
            (COMMAND_SINGLE, BUTTON_4): {COMMAND: COMMAND_5_SINGLE},
            (COMMAND_DOUBLE, BUTTON_4): {COMMAND: COMMAND_5_DOUBLE},
            (COMMAND_RELEASE, BUTTON_4): {COMMAND: COMMAND_5_RELEASE},
        }
    )
    .add_to_registry()
)

# Modelo simple (H2 simple relé) que comparte comportamiento con agl004
(
    QuirkBuilder("Aqara", "lumi.switch.agl009")
    .applies_to("Aqara", "lumi.switch.agl004")  # fabricante y modelo
    .adds_endpoint(1, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(4, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds_endpoint(21, device_type=zha.DeviceType.ON_OFF_SWITCH)
    .adds(Identify, endpoint_id=1)
    .replaces(MultistateInputCluster, endpoint_id=1)
    .replaces(MultistateInputCluster, endpoint_id=4)
    .replaces(AqaraManuSpecificCluster, endpoint_id=1)
    .replaces(AqaraManuSpecificCluster, endpoint_id=4)
    .replaces(PowerMeasurementCluster, endpoint_id=21)
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.led_indicator.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="led_indicator",
        fallback_name="LED indicator",
        off_value=0,
        on_value=1,
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.flip_led_indicator.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="flip_led_indicator",
        fallback_name="Flip LED indicator",
        off_value=0,
        on_value=1,
    )
    .enum(
        AqaraManuSpecificCluster.AttributeDefs.power_on_mode.name,
        AqaraPowerOnMode,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="power_on_mode",
        fallback_name="Power on mode",
    )
    .enum(
        AqaraManuSpecificCluster.AttributeDefs.operation_mode.name,
        AqaraOperationMode,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="operation_mode",
        fallback_name="Operation mode",
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.lock_relay.name,
        AqaraManuSpecificCluster.cluster_id,
        endpoint_id=1,
        translation_key="lock_relay",
        fallback_name="Lock relay",
        off_value=0,
        on_value=1,
    )
    .switch(
        AqaraManuSpecificCluster.AttributeDefs.multi_click.name,
        AqaraManuSpecificCluster.cluster_id,
        off_value=1,
        on_value=2,
        endpoint_id=4,
        translation_key="multi_click",
        fallback_name="Multi click",
    )
    .device_automation_triggers(
        {
            (COMMAND_HOLD, BUTTON_1): {COMMAND: COMMAND_1_HOLD},
            (COMMAND_SINGLE, BUTTON_1): {COMMAND: COMMAND_1_SINGLE},
            (COMMAND_DOUBLE, BUTTON_1): {COMMAND: COMMAND_1_DOUBLE},
            (COMMAND_RELEASE, BUTTON_1): {COMMAND: COMMAND_1_RELEASE},
            (COMMAND_HOLD, BUTTON_2): {COMMAND: COMMAND_4_HOLD},
            (COMMAND_SINGLE, BUTTON_2): {COMMAND: COMMAND_4_SINGLE},
            (COMMAND_DOUBLE, BUTTON_2): {COMMAND: COMMAND_4_DOUBLE},
            (COMMAND_RELEASE, BUTTON_2): {COMMAND: COMMAND_4_RELEASE},
        }
    )
    .add_to_registry()
)

Hallo, ich bin noch Anfänger und habe eine grundsätzliche Frage zu dem Schalter.
Ich kann damit einen “dummen” normalen Lichtschalter mit diesen ersetzen und die ggf dumme Lampe wird dadurch smart, lässt sich schalten oder auch eine smarte Lampe bleibt auf Dauerstrom. Die anderen tasten sind noch Gimmicks?