Interruptor ZemiSmart TB25-ZB (ZM-L03E-Z) não funciona de forma independente no Zigbee2MQTT

Olá Pessoal, Tudo bem?

Comprei esse produto aqui logo abaixo:

Adicionei ele no Zigbee2MQTT, e o mesmo deveria ser reconhecido como tb25-zb, mas foi reconhecido como ZM-L03E-Z.

Ao ser adicionado, ele possui 3 entidades:

state left
state center
state right (que é a tomada)

Ao pressionar os botões fisicamente, tudo funciona, e o status no HA e Zigbee2mQTT também funcionam.

Porém ao pressionar os botões pelo home assistant, ou direto no zigbee2mqtt ele não funciona de forma independente…ou seja, ao ligar um botão pelo HA ou Zigbee2mqtt, todos ligam, ao desligar, todos desligam, left, center e right.

Alguém sabe como resolver?

1 Like

Ninguém mais passou por esse caso?

Estou com o mesmo problema. Alguém tem alguma luz?

Ele se comporta de forma parecida no ZHA. Ao ligar/desligar 1 entidade pelo HA a ação ê realizada nas 3. Outro detalhe é que os 2 botões e a tomada foram reconhecidos como lampas.

1 Like

Olá Pessoal, Tudo bem?

Fiquei até tarde ontem, e apesar de não ter nenhuma experiência com isso, eu mesmo consegui criar um external converter pra esse T25ZB…

Segue em anexo…

1 - Antes de usar ele, tente primeiro parear o seu dispositivo…
2 - Ao parear…Veja se ele vai aparecer com o nome _vjhcenzo,
3A - Se aparecer, exclui o aparelho novamente do zigbee2mqtt, joga o arquivo pra dentro do HA na pasta \config\zigbee2mqtt

3B - ***Se aparecer com outro nome, renomeie o arquivo substituindo o _vjhcenzo pelo o que aparecer, e dentro do arquivo, também faça essa troca, e salve na pasta \config\zigbee2mqtt…com o final .js

4 - Anote o nome do arquivo completo.

5 - Independente do caso, estando com arquivo dentro da pasta \config\zigbee2mqtt Exclua o aparelho no Zigbee2MQTT, valide as configurações, e reinicie o HA para carregar esse arquivo.

6 - Eu estou usando a versão estável mais atual do Zigbee2mqtt, que dispensa fazer apontamento do external converter dentro do ajustes do plugin, então…no FrontEnd do Zigbee2mQTT, basta ir em Configurações, Configurações, Conversor Externo ou External Converter…

7 - Coloque exatamente o nome do arquivo que você havia colado ou criado dentro de \config\zigbee2mqtt, clique em submit, reinicie o Zigbee2MQTT

8 - E faça um novo pareamento.

POR AQUI, TUDO FUNCIONOU…

OBS, coloquei uma linha do power_on_behavior, para testar, pra ele iniciar desligado ao subir a energia, mas estava cansado d+ para fazer mais testes e remover depois…kkkkk, deixei por lá mesmo…e como sou preguiçoso e sem experiência com isso, eu deixei algumas informações com o nome da moes no concat, já que foi da li que usei de parâmetro para usar as sintaxes…quem quiser corrigir isso, sintam-se a vontade.

Fiz aqui, e tudo funcionou perfeitamente…

Segue o código dele:

const fz = require(‘zigbee-herdsman-converters/converters/fromZigbee’);
const tz = require(‘zigbee-herdsman-converters/converters/toZigbee’);
const exposes = require(‘zigbee-herdsman-converters/lib/exposes’);
const reporting = require(‘zigbee-herdsman-converters/lib/reporting’);
const extend = require(‘zigbee-herdsman-converters/lib/extend’);
const e = exposes.presets;
const ea = exposes.access;

const definition = {
fingerprint: [
{
modelID: ‘TS0003’,
manufacturerName: ‘_TZ3000_vjhcenzo’
}
],
model: ‘ZM-L03E-Z’,
vendor: ‘Zemismart’,
description: ‘Smart light switch - 3 gang with neutral wire’,
toZigbee: extend.switch().toZigbee.concat([tz.moes_power_on_behavior]),
fromZigbee: extend.switch().fromZigbee.concat([fz.moes_power_on_behavior]),
exposes: [
e.switch().withEndpoint(‘left’),
e.switch().withEndpoint(‘center’),
e.switch().withEndpoint(‘right’),
exposes.enum(‘power_on_behavior’, ea.ALL, [‘on’, ‘off’, ‘previous’]),
],
endpoint: () => {
return {‘left’: 1, ‘center’: 2, ‘right’: 3};
},
meta: {multiEndpoint: true},
configure: async (device, coordinatorEndpoint) => {
const firstEndpoint = device.getEndpoint(1);
await firstEndpoint.read(‘genBasic’, [‘manufacturerName’, ‘zclVersion’, ‘appVersion’, ‘modelId’, ‘powerSource’, 0xfffe]);
await reporting.bind(firstEndpoint, coordinatorEndpoint, [‘genOnOff’]);

const secondEndpoint = device.getEndpoint(2);
await reporting.bind(secondEndpoint, coordinatorEndpoint, ['genOnOff']);
await reporting.onOff(secondEndpoint);

const thirdEndpoint = device.getEndpoint(3);
await reporting.bind(thirdEndpoint, coordinatorEndpoint, ['genOnOff']);
await reporting.onOff(thirdEndpoint);

}
};

module.exports = definition;

1 Like

Eu subi o código para zigbee2mqtt e ele já foi aprovado na branch dev, quem quiser atualizar e utilizar essa versão, já está funcionando.

Segundo o Koenkk deve subir para a produção com a imagem e tudo mais no dia 01/06.

    fingerprint: [{modelID: 'TS0003', manufacturerName: '_TZ3000_vjhcenzo'}],
    model: 'TB25',
    vendor: 'Zemismart',
    description: 'Smart light switch and socket - 2 gang with neutral wire',
1 Like

Será que é possível fazer a mesma correção no ZHA, talvez com um quirk?
Alguém sabe como?

Eu encontrei esse site:

https://pythonlang.dev/repo/zigpy-zha-device-handlers/

Não tive chance de verificar como seria feito, mas imagino ser possível usar a mesma ideia que o didism2 usou…

Se alguém tiver uma solução feita pro zha, agradeço muito!!

1 Like

Encontrei um modelo do quirk, mas tbm não sei nem por onde começar

“”“tuya TS000X Switches.”“”

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

from zhaquirks.const import (
DEVICE_TYPE,
ENDPOINTS,
INPUT_CLUSTERS,
MODELS_INFO,
OUTPUT_CLUSTERS,
PROFILE_ID,
)
from zhaquirks.tuya import (
TuyaZBE000Cluster,
TuyaZBExternalSwitchTypeCluster,
TuyaZBOnOffAttributeCluster,
)

class Switch_3G_ZTB25(CustomDevice):
“”“Tuya 3 gang switch module with restore power state support.”“”

signature = {
    MODELS_INFO: [("_TZ3000_vjhcenzo", "TS0003")],
    ENDPOINTS: {
        # <SimpleDescriptor endpoint=1 profile=260 device_type=256
        # device_version=1
        # input_clusters=[0, 3, 4, 5, 6, 57344, 57345]
        # output_clusters=[10, 25]>
        1: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                OnOff.cluster_id,
                TuyaZBE000Cluster.cluster_id,
                TuyaZBExternalSwitchTypeCluster.cluster_id,
            ],
            OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
        },
        # <SimpleDescriptor endpoint=2 profile=260 device_type=256
        # device_version=1
        # input_clusters=[4, 5, 6, 57345]
        # output_clusters=[]>
        2: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
            INPUT_CLUSTERS: [
                Groups.cluster_id,
                Scenes.cluster_id,
                OnOff.cluster_id,
                TuyaZBExternalSwitchTypeCluster.cluster_id,
            ],
            OUTPUT_CLUSTERS: [],
        },
        # <SimpleDescriptor endpoint=3 profile=260 device_type=256
        # device_version=1
        # input_clusters=[4, 5, 6, 57345]
        # output_clusters=[]>
        3: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
            INPUT_CLUSTERS: [
                Groups.cluster_id,
                Scenes.cluster_id,
                OnOff.cluster_id,
                TuyaZBExternalSwitchTypeCluster.cluster_id,
            ],
            OUTPUT_CLUSTERS: [],
        },
        # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
        # device_version=0
        # input_clusters=[]
        # output_clusters=[33]>
        242: {
            PROFILE_ID: 41440,
            DEVICE_TYPE: 97,
            INPUT_CLUSTERS: [],
            OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
        },
    },
}
replacement = {
    ENDPOINTS: {
        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,
                TuyaZBOnOffAttributeCluster,
                TuyaZBE000Cluster,
                TuyaZBExternalSwitchTypeCluster,
            ],
            OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
        },
        2: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
            INPUT_CLUSTERS: [
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                TuyaZBOnOffAttributeCluster,
                TuyaZBExternalSwitchTypeCluster,
            ],
            OUTPUT_CLUSTERS: [],
        },
        3: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
            INPUT_CLUSTERS: [
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                TuyaZBOnOffAttributeCluster,
                TuyaZBExternalSwitchTypeCluster,
            ],
            OUTPUT_CLUSTERS: [],
        },
        242: {
            PROFILE_ID: 41440,
            DEVICE_TYPE: 97,
            INPUT_CLUSTERS: [],
            OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
        },
    },
}

Adquiri um interruptor de 4 botões fabricante Meakiss e estou com o mesmo problema. Sou iniciante e não sei como fazer para criar este conversor externo.

Descobri que para alguns dispositivos Tuya, precisa fazer o que eles chamam de Magic Spell, usei como exemplo uma tomada da lidl que encontrei no git e funcionou.
zha-device-handlers/ts011f_plug.py at dev · zigpy/zha-device-handlers · GitHub

vou passar o meu arquivo aqui, nao sei se fiz da melhor forma, mas funcionou e provavelmente a solução deve ser semelhantes para outros dispositivos Tuya com esse problema.
1º adicionas as seguintes linhas no seu configuration.yaml
zha:
enable_quirks: true
custom_quirks_path: /config/zha_quirks

2º adiciona o arquivo Zemismart_ZTB25.py a pasta /config/zha_quirks
3º Remove o dispositivo (se ja tiver pareado)
4º reinicia o HA
5º adiciona o dispositivo novamente.

Estava com problema em um dispositivo de dois canais, que provavelmente teve seu firmware atualizado e o z2m não estava funcionando individualmente por canal. Quando acionava um, o outro tambem era acionado.

Abri uma issue no github do zigbee2mqtt e o desenvolvedor respondeu rapidamente, corrigindo o problema e disponibilizando inicialmente no zigbee2mqtt edge.

Instalei o edge, copiei o yaml do ajuste de um parando outro, parei o serviço do oficial e iniciei o edge. Pareei o dispositivo e estava funcionando perfeitamente.

Provavelmente para este modelo já deve ter uma solução pronta ou à caminho. Fica a dica para tentarem.

Olá pessoal tudo bem ?
Comprei esse dispositivo e ainda esta com problemas de quando aciono pelo HA ele aciona todos.
Tentei fazer o procedimento informado e parou de o Z2MQTT, pois dava erro na inicialização dele.
Alguém sabe informar se tem outro procedimento para ser feito ?

Bom pessoal, aquele conversor externo que eu havia criado ali, funcionava até a última versão do zigbee2mqtt…

Parace que a forma de fazer conversores externos no Zigbee2MQTT mudou na última versão, e não está funcionando esse código.

Dito isso, esse equipamento, está sendo reconhecido de forma nativa no meu Z2M, porém qualquer botão que eu pressione no Zemismart TB25 TZ3000 aparece a mensagem “has no endpoint”…

Confesso, que estou começando a ficar com uma lista de dispositivos como peso de papel em casa, por causa dessas atualizações.

Estou com esse mesmo problema aqui, o dispositivo aparece no Zigbee2MQTT mas qualquer um dos botões dá esse erro “has no endpoint”.
Tinha um grupo criado no z2mqtt com estes 2 endpoints e o mais estranho é que o switch do grupo continua funcionando para ligar/desligar ambos. Espero que lancem uma versão atualizada logo pra corrigir esse problema.

1 Like

Já testou recentemente com ZHA?

Hoje acabei retornando para versão anterior do zigbee2mqtt. Voltou à funcionar diretinho. Vou esperar outra versão para testar. Nunca tinha visto isso de um dispositivo que já estava sendo reconhecido dar problema numa atualização do zigbee2mqtt.

Foi o que fiz também…e voltou a funcionar, esperar saltar algumas versões pra acompanhar.

1 Like

Vocês chegaram a abrir alguma issue no github do z2m? Tive um problema similar e responderam muito rápido.