Intégration de multiprise LIDL Silvercrest

Bonjour,
J’ai essayé ta proposition, mais ça me met en croix tout ZHA. Du coup j’ai supprimé le fichier créé et tout est rentré dans l’ordre.

EDIT :

Ok, j’ai fait un petit test en local qui valide le chargement, il fallait ajuster le chemin de l’import.

"""TS011F plug."""

from zigpy.profiles import zha
from zigpy.zcl.clusters.general import (
    Basic,
    GreenPowerProxy,
    Groups,
    Identify,
    OnOff,
    Ota,
    Scenes,
    Time,
)

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODEL,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.tuya.ts011f_plug import Plug_3AC_4USB


class Lidl_Plug_3AC_4USB(Plug_3AC_4USB):
    """LIDL 3 outlet + 4 USB with restore power state support."""

    signature = {
        MODEL: "TS011F",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=260 device_type=266
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=1
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }
1 « J'aime »

@le_top Merci de ton implication.

Testé :

  • Suppression de la prise de ZHA,
  • Ajout de ton code,
  • Redémarrage de HA,
  • Appairage de la multiprise.

Résultat :

Trois boutons s’affichent mais ils ne sont pas indépendants. Quand on appuie sur 1 boutons, les autres font la même action.

Voici ce qu’affiche la signature de l’appareil Zigbee

{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4098, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": 260,
      "device_type": "0x010a",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006"
      ],
      "out_clusters": [
        "0x000a",
        "0x0019"
      ]
    },
    "2": {
      "profile_id": 260,
      "device_type": "0x010a",
      "in_clusters": [
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006"
      ],
      "out_clusters": []
    },
    "3": {
      "profile_id": 260,
      "device_type": "0x010a",
      "in_clusters": [
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006"
      ],
      "out_clusters": []
    },
    "242": {
      "profile_id": 41440,
      "device_type": "0x0061",
      "in_clusters": [],
      "out_clusters": [
        "0x0021"
      ]
    }
  },
  "manufacturer": "_TZ3000_vzopcetz",
  "model": "TS011F",
  "class": "lidl_tfs011f_plug.Lidl_Plug_3AC_4USB"

C’est un début ;-). On voit bien que le nouveau qurik est utilisé, non seulement par les endpoitns, mais qussi par la classe « lidl_tfs011f_plug.Lidl_Plug_3AC_4USB » .

La multiprise réagit aux trois clusters - soit parce que le « Endpoint » n’est pas vérifié soit parce qu’il y a vraiment 3 endpoints.

La question est maintenant, quelle magie s’opère avec Z2M.

A priori cela fonctionnait tout de suite sous Z2M. Soit. J’aurais gardé l’appairage, redémarré, actionné la multiprise, désappairé et réappairé supposant qu’éventuellement l’actionnement initial débloque les 3 endpoints correctement au prochain démarrage.

Sinon, il y a un attribut qui est défini sous Z2M qui rend les 3 endpoints indépendants, un truc dans un « registre spécifique de Tuya ».

En partant de ce quirk, il est possible d’ajouter les commandes « magiques » (une fois connu) pour aboutir au fonctionnement normal attendu.

Bonjour,
pour ceux qui sont sous deconz, est-ce qu’il y a une manip equivalente à un « Quirk » ZHA?
ou bien faut-il attendre une mise à jour du plug-in?

Merci

Bonjour, par curiosité,
pour faire ça, tu as deux clés gateway zigbee, et tu fais tourner ça sur la même instance Home-assistant, avec les 2 plug-in Z2M et ZHA?

Sous zigpy-deconz c’est du ZHA, sinon, je ne savais pas qu’il y avait un autre choix que Z2M ou ZHA.

Bonsoir,
La manip que tu donnes permet d’avoir cette fois ci un fonctionnement autonome de chaque bouton. Par contre, charque bouton éteint physiquement les 3 autres.
On l’aura un jour… On l’aura !!! :yum:

Le quirk c’est toujours lidl_tfs011f_plug.Lidl_Plug_3AC_4USB ou c’est passé sur zhaquirks.tuya.ts011f_plug.Plug_3AC_4USB ?

Puisque cela a fonctionné une fois, peut-être qu’un appairage/désappairage supplémentaire fixe l’extinction…

Dernier truc que je propose c’est de faire un scan_device.
Idéalement ce serait à faire sur une qui ne fonctionne pas, une qui fonctionne partiellement (comme le tiens), et un qui a été « rattrapé » pour comparer les valeurs des attributs de Tuya. J’ai collé mes valeurs plus haut, mais c’est la version précédente.

Après, on peut écrire des valeurs dans les attributs pour voir leur effet - toujours possible avec zha-toolkit en utilisant le service attr_write.

Une des réponses plus fait référence à une discussion ou la formule magique est « explicite »:

Je n’ai pas testé l’exécution, mais si tout va bien, ce qui suit devrait réaliser « la formule magique » à l’appairage et redémarrage de HA. Il y a aussi une partie écriture à la formule magique qui ne semble pas nécessaire dans le cas présent.

"""TS011F plug."""

import asyncio

from zigpy.profiles import zha
from zigpy.zcl.clusters.general import (
    Basic,
    GreenPowerProxy,
    Groups,
    Identify,
    OnOff,
    Ota,
    Scenes,
    Time,
)

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODEL,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.tuya.ts011f_plug import Plug_3AC_4USB


class Lidl_Plug_3AC_4USB(Plug_3AC_4USB):
    """LIDL 3 outlet + 4 USB with restore power state support."""

    def __init__(self, *args, **kwargs):
        """Initialize with task."""
        super().__init__(*args, **kwargs)

        self._init_task = asyncio.create_task(self.init())

    async def init(self):
        """Initialize device so that all endpoints become available."""
        basic_cluster = self.endpoints[1].in_clusters[0]

        # The magic spell is needed only once.
        # TODO: Improve by doing this only once (successfully).

        # Magic spell - part 1
        attr_to_read = [4, 0, 1, 5, 7, 0xFFFE]
        await basic_cluster.read_attributes(attr_to_read)

        # Magic spell - part 2 (skipped - does not seem to be needed)
        # attr_to_write={0xffde:13}
        # basic_cluster.write_attributes(attr_to_write, tries=3)

    signature = {
        MODEL: "TS011F",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=260 device_type=266
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=1
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }

Ça fonctionne nickel en version dev de z2m, donc cela devrait venir assez vite dans une prochaine mise à jour je pense !

1 « J'aime »

J’ai ajouté la formule magique de tuya dans zha-toolkit cela permet de l’appliquer à d’autres appareils aussi sans quirk (mais avec zha-toolkit).

En deux mots: installer zha-toolkit, aller dans « Outils de Développement » > « Services » . Choisir « 🧰 ZHA Toolkit Service: execute », Puis sélectionner comme commande « tuya_magic », cocher IEEE et choisir votre multiprise, puis exécuter.

1 « J'aime »

« Miraculeusement » le quirk que j’ai proposé semble fonctionner « trop bien » puisque la technique fonctionne aussi pour d’autres appareils.

[Device Support Request] LIDL Plug USB HG06338-FR _TZ3000_vzopcetz/TS011F · Issue #1428 · zigpy/zha-device-handlers · GitHub .

1 « J'aime »

Pour faire, ça, j’ai désactivé ZHA et installé z2m edge, avec une seule et unique clé, puis j’ai restauré mon backup afin de récup mon ancienne config. J’avais en effet pris le soin d’activer une prise sur les 3 pour un peu forcer la détection lors de mon retour sur zha

J’ai refait toute la manip de @le_top et ici aussi tout marche au poil!

J’ai supprimé la prise dans ZHA, réappairée et elle était de nouveau reconnue comme "simple switch’.

J’ai donc créé le dossier zha_quirks avec les nouveaux paramètres, j’ai obtenu une visibilité sur les 3 switches qui ne fonctionnaient que d’une seule unité.

J’ai par la suite utilisé ZHA toolkit, et hop, ça a marché directement, simple et efficace (quand on le sait :stuck_out_tongue: )

Un grand merci, même si je ne comprends pas toutes les manips, elles marchent et finalement, c’est un peu ça qu’on veut, nous utilisateurs :slight_smile:

Merci pour le test, c’est une super nouvelle.

Le quirk qu tu as essayé est sûrement cette version: https://raw.githubusercontent.com/zigpy/zha-device-handlers/1e53551c3698a6a8cde222042d8fdd3be7ef0072/zhaquirks/lidl/ts011f_plug.py qu’il vaut mieux utiliser en attendant que ce code soit réorganisé et validé suite à ces modifications.

Snion, oui zha–oolkit c’est simple et efficace (même si j’y suis pour qqchse), et cela peut servir à d’autres manipulations aussi.

C’est en bonne voie pour un quirk « officiel »

2 « J'aime »

@le_top
Je crois que tu portes bien ton pseudo ici !!!
Mille fois merci. Tout fonctionne comme l’écris @chiboule .
Les 3 boutons s’affichent bien et sont indépendants.

Je découvre ton zha-toolkit et je dois dire que je n’avais pas vu qu’il existait… C’est un travail au top !! :wink:

1 « J'aime »

Salut à tous.
J’ai ajouté le quirks, et sa fonctionne à merveille !
Je n’ai juste pas le onOff qui commande le général.

Merci pour le travail fournis :muscle:

Bonjour, j’ai testé Zha toolkit. Mais une fois la commande exécutée je ne constate aucun changement. J’ai loupé une étape ?

Alors j’ai que une entité qui agit maintenant que sur une prise. Les deux autres ne se sont pas créés.
Vous avez une piste à me suggérer?
Merci