Ajout switch tuya 4 boutons TS004F

Bonsoir,

Je viens de recevoir 2 switch tuya 4 boutons ref: TS0044 d’apparence identique.

https://fr.aliexpress.com/item/1005002240470536.html?spm=a2g0s.9042311.0.0.17db6c37OjFBBC

Un des 2 est bien reconnu et fonctionne très bien avec la config suivante : [TS0044] Interrupteur intelligent 4 boutons avec piles correspondant au JSON suivant:

{
    "ieee": "84:71:27:ff:fe:d0:91:8c",
    "nwk": 60550,
    "status": 2,
    "lqi": "151",
    "rssi": "-75",
    "last_seen": "1619037498.3489065",
    "node_descriptor": "02:40:80:02:10:52:52:00:00:2c:52:00:00",
    "endpoints": [
        {
            "id": 1,
            "status": 1,
            "device_type": 6,
            "profile_id": 260,
            "manufacturer": "_TZ3000_vp6clf9d",
            "model": "TS0044",
            "output_clusters": [
                {
                    "id": 10,
                    "name": "Time",
                    "attributes": []
                },
                {
                    "id": 25,
                    "name": "Ota",
                    "attributes": []
                }
            ],
            "input_clusters": [
                {
                    "id": 0,
                    "name": "Basic",
                    "attributes": [
                        {
                            "id": 4,
                            "name": "manufacturer",
                            "value": "_TZ3000_vp6clf9d"
                        },
                        {
                            "id": 5,
                            "name": "model",
                            "value": "TS0044"
                        }
                    ]
                },
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": [
                        {
                            "id": 33,
                            "name": "battery_percentage_remaining",
                            "value": 200
                        }
                    ]
                },
                {
                    "id": 6,
                    "name": "TS004X_cluster",
                    "attributes": []
                }
            ]
        },
        {
            "id": 2,
            "status": 1,
            "device_type": 6,
            "profile_id": 260,
            "manufacturer": null,
            "model": null,
            "output_clusters": [],
            "input_clusters": [
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "TS004X_cluster",
                    "attributes": []
                }
            ]
        },
        {
            "id": 3,
            "status": 1,
            "device_type": 6,
            "profile_id": 260,
            "manufacturer": null,
            "model": null,
            "output_clusters": [],
            "input_clusters": [
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "TS004X_cluster",
                    "attributes": []
                }
            ]
        },
        {
            "id": 4,
            "status": 1,
            "device_type": 6,
            "profile_id": 260,
            "manufacturer": null,
            "model": null,
            "output_clusters": [],
            "input_clusters": [
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "TS004X_cluster",
                    "attributes": []
                }
            ]
        }
    ],
    "signature": {
        "manufacturer": "_TZ3000_vp6clf9d",
        "model": "TS0044",
        "node_desc": {
            "byte1": 2,
            "byte2": 64,
            "mac_capability_flags": 128,
            "manufacturer_code": 4098,
            "maximum_buffer_size": 82,
            "maximum_incoming_transfer_size": 82,
            "server_mask": 11264,
            "maximum_outgoing_transfer_size": 82,
            "descriptor_capability_field": 0
        },
        "endpoints": {
            "1": {
                "profile_id": 260,
                "device_type": 6,
                "input_clusters": [
                    0,
                    1,
                    6
                ],
                "output_clusters": [
                    10,
                    25
                ]
            },
            "2": {
                "profile_id": 260,
                "device_type": 6,
                "input_clusters": [
                    1,
                    6
                ],
                "output_clusters": []
            },
            "3": {
                "profile_id": 260,
                "device_type": 6,
                "input_clusters": [
                    1,
                    6
                ],
                "output_clusters": []
            },
            "4": {
                "profile_id": 260,
                "device_type": 6,
                "input_clusters": [
                    1,
                    6
                ],
                "output_clusters": []
            }
        }
    },
    "class": "zhaquirks.tuya.ts0044"
}

J’en avais déjà 2 autres qui fonctionnent très bien avec la meme config.

Par contre le deuxième est inclus mais reconnu en tant que TS004F de type DIMMER_SWITCH et ne fonctionne pas avec la config TS0044.

Pour l’instant j’arrive seulement à utiliser les 4 boutons en simple clic avec les commandes suivantes:
1::6::cmd::0 (valeur 0 pour le bouton 1 et valeur 1 pour le bouton 4)
1::8::cmd::1 (valeur 0 pour le bouton 3 et valeur 1 pour le bouton 2)
et 2 boutons en long press avec celles ci:
1::8::cmd::0 (valeur 3 après un long press sur bouton 2 ou 3, sinon valeur 2)
Donc exploitable en l’état, mais à moitié … je ne sais pas si il peut faire plus

Si il était possible de l’ajouter au plug-in zigbee, voila les données brutes:

{
    "ieee": "60:a4:23:ff:fe:80:35:f7",
    "nwk": 51991,
    "status": 2,
    "lqi": "255",
    "rssi": "-57",
    "last_seen": "1619036228.1137798",
    "node_descriptor": "02:40:80:02:10:52:52:00:00:2c:52:00:00",
    "endpoints": [
        {
            "id": 1,
            "status": 1,
            "device_type": 260,
            "profile_id": 260,
            "manufacturer": "_TZ3000_xabckq1v",
            "model": "TS004F",
            "output_clusters": [
                {
                    "id": 25,
                    "name": "Ota",
                    "attributes": []
                },
                {
                    "id": 10,
                    "name": "Time",
                    "attributes": []
                },
                {
                    "id": 3,
                    "name": "Identify",
                    "attributes": []
                },
                {
                    "id": 4,
                    "name": "Groups",
                    "attributes": []
                },
                {
                    "id": 5,
                    "name": "Scenes",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "On\/Off",
                    "attributes": []
                },
                {
                    "id": 8,
                    "name": "Level control",
                    "attributes": []
                },
                {
                    "id": 4096,
                    "name": "LightLink",
                    "attributes": []
                }
            ],
            "input_clusters": [
                {
                    "id": 0,
                    "name": "Basic",
                    "attributes": [
                        {
                            "id": 4,
                            "name": "manufacturer",
                            "value": "_TZ3000_xabckq1v"
                        },
                        {
                            "id": 5,
                            "name": "model",
                            "value": "TS004F"
                        }
                    ]
                },
                {
                    "id": 1,
                    "name": "Power Configuration",
                    "attributes": [
                        {
                            "id": 32,
                            "name": "battery_voltage",
                            "value": 30
                        }
                    ]
                },
                {
                    "id": 3,
                    "name": "Identify",
                    "attributes": []
                },
                {
                    "id": 4,
                    "name": "Groups",
                    "attributes": []
                },
                {
                    "id": 6,
                    "name": "On\/Off",
                    "attributes": []
                },
                {
                    "id": 4096,
                    "name": "LightLink",
                    "attributes": []
                }
            ]
        }
    ],
    "signature": {
        "manufacturer": "_TZ3000_xabckq1v",
        "model": "TS004F",
        "node_desc": {
            "byte1": 2,
            "byte2": 64,
            "mac_capability_flags": 128,
            "manufacturer_code": 4098,
            "maximum_buffer_size": 82,
            "maximum_incoming_transfer_size": 82,
            "server_mask": 11264,
            "maximum_outgoing_transfer_size": 82,
            "descriptor_capability_field": 0
        },
        "endpoints": {
            "1": {
                "profile_id": 260,
                "device_type": 260,
                "input_clusters": [
                    0,
                    1,
                    3,
                    4,
                    6,
                    4096
                ],
                "output_clusters": [
                    25,
                    10,
                    3,
                    4,
                    5,
                    6,
                    8,
                    4096
                ]
            }
        }
    },
    "class": "zigpy.device"
}

L’mage est identique au TS0044 mais je la remet:
TS0044

Voilà, merci et bonne soirée

1 « J'aime »

Bonjour,
Merci pour le retour la configuration sera disponible dans la beta de demain (par contre je doute que le module fasse plus en gros ils ont fait ce changement pour pouvoir faire du binding je pense)

Bonsoir Loic,

Merci de la réponse.
J’ai démonté les switchs, et c’est bien une nouvelle version: v1.1.1 pour les TS0044 et v1.2.1 pour le TS004F.

La puce zigbee est aussi différente.

Ce qui est bizarre c’est que la notice est bien identique à celle du TS0044 et fait bien mention des doubles clics et long press.

Pour l’instant je l’utilise en sélecteur de mode et les simple clics suffisent, mais les doubles clics sont bien pratiques pour d’autres usages.
Dommage cette modification de leur part.
En tout cas je teste la configuration demain.

Encore merci et bonne soirée.

Bonjour Steph79 et Loic,

je viens de recevoir le scene switch 4 boutons. J’ai une clé EFR32MG13 et le plugin zigbee.
Je n’arrive pas à intégrer le switch (appui long 10s sur le bouton 3 jusqu’aux clignotement), est encore une nouvelle version ?

Du coup ma question est comment « debuggez » vous l’équipement pour en déduire un JSON ? Je voudrais contribuer et ne trouve pas la marche à suivre.

Merci à vous.

Bonjour

C’est dommage qu’on ne puisse pas gérer le double click ça serait pratique, parce l’appui long est un peu long et ne marche que sur 2 boutons.
Sur les double clicks si aucun info ne remonte en debug c’est qu’on pourra jamais rien avoir, c’est ça?

Bonjour,

A priori c’est ça, si le switch n’envoi aucune trame, alors il n’y a rien à faire.
Ce qui est vraiment dommage, c’est qu’on ait 2 switchs totalement différents dans le fonctionnement avec la même ref, le même nom et le même packaging.

Du coup, aucun moyen de savoir lequel on commande chez un vendeur.

Ok merci
Mais je me demande s’il ne faut pas la passerelle tuya pour activer la fonctionnalité par l’application.
Sinon je ne comprends pas pourquoi ils indiquent qu’il y a une fonctionnalité double clic si ça n’envoie pas de trame.
Si ce n’est pas ça, quelque chose m’échappe…
Ou alors c’est la clé conbee qui ne détecte pas la trame?

Peut être effectivement.
Ou peut être que certaines trames zigbee ne peuvent être vues que par la passerelle tuya…
Mais je suis également sur conbee II et je n’ai pas de passerelle tuya, donc pas moyen de tester plus.

bonjour,
je viens d’acheter ce bouton egalement.
Il ne fonctionne pas sous deconz, il est reconnu comme un « dimmer switch » et aucune commande n’est disponible.
Dans « Phoscon app » il apparait dans la catégorie « Lights » avec
Vendor _TZ3000_xabckq1v
Model TS004F

Quelqu’un a réussi a le faire fonctionner ?

Ils attendent justement quelqu’un pour tester le code https://github.com/dresden-elektronik/deconz-rest-plugin/issues/4810

Ou alors ils ont zappé un truc ^^, le dernier message semble dire que c’était bon.

j’ai l’impression qu’il faut compiler une version particulière.
J’ai conbee 2.11.05 / 09/05/2021 firmware 26680700 => ca ne fonctionne pas.

en fait « easybeat » n’utilise pas la même version du bouton en question, sa version étant bien pris en charge d’office par deconz…

ha oui, c’est pour ca que c’est bloqué alors.
Et oui faut compiler soit même le code pour tester, et en plus éditer un fichier json.

Ca avance ! :slight_smile:
c’est dans la v2.12.0-beta (v2.12.0-beta Milestone · GitHub)

Je suis passé sur la version beta 2.12.00 et mis le firmware beta egalement 266E0700 => ca ne fonctionne toujours pas :frowning:

Bonjour à Tous,

j’ai trouvé la solution ici:

J’ai fait le post de Aiditz Vladimir Muromskiy et ça marche !!!

Les commandes actions sont les suivantes:
1_single
2_single
3_single
4_single
3_hold
4_hold

Soit 6 possibilités différentes…

Si certains ne comprennent pas trop comment faire, je peux faire un petit résumé des commandes.

Bonjour,
Oui je veux bien parce que je ne comprends pas bien comment faire?
merci!

1/ stopper le service avec la commande:

sudo systemctl stop zigbee2mqtt

2/ ouvrir le fichier configuration.yawl avec la commande:

nano /opt/zigbee2mqtt/data/configuration.yaml

3/ ajouter juste avant la lignes ‹ devices › les 2 lignes suivantes:

external_converters:

  • TS004F.js

enregistrer et fermer

4/ créer le fichier suivant (sur la même racine que le configuration.yawl) avec la commande

nano /opt/zigbee2mqtt/data/TS004F.js

et copier:

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 bind = async (endpoint, target, clusters) => {
for (const cluster of clusters) {
await endpoint.bind(cluster, target);
}
};

/*
Buttons numbers:
-------
| 1 | 3 |
|-------|
| 2 | 4 |
-------
*/

const leftButtonsConverter = {
cluster: ‹ genOnOff ›,
type: [‹ commandOn ›, ‹ commandOff ›, ‹ commandToggle ›],
convert: (model, msg, publish, options, meta) => {
if (msg.type === ‹ commandOn ›) {
return { action: ‹ 1_single › };
}

    if (msg.type === 'commandOff') {
        return { action: '2_single' };
    }
},

};

const rightButtonsConverter = {
cluster: ‹ genLevelCtrl ›,
type: [‹ commandStep ›, ‹ commandMove ›, ‹ commandStop ›],
convert: (model, msg, publish, options, meta) => {
if (msg.type === ‹ commandStep ›) {
if (msg.data.stepmode === 0) {
return { action: ‹ 3_single › };
}
else if (msg.data.stepmode === 1) {
return { action: ‹ 4_single › };
}
}
else if (msg.type === ‹ commandMove ›) {
if (msg.data.movemode === 0) {
return { action: ‹ 3_hold › };
}
else if (msg.data.movemode === 1) {
return { action: ‹ 4_hold › };
}
}
else if (msg.type === ‹ commandStop ›) {
// No data available to determine which button was released
return { action: ‹ release › };
}

    // No 'double' events are fired
},

};

const definition = {
zigbeeModel: [‹ TS004F ›],
model: ‹ TS004F ›,
vendor: ‹ TuYa ›,
description: ‹ Wireless switch with 4 buttons ›,
whiteLabel: [{vendor: ‹ _TZ3000_xabckq1v ›, model: ‹ TS004F ›}],

// Exposed commands are similar to the Tuya TS0044 switch
exposes: [
    e.battery(),
    e.action([
        '1_single', 
        '2_single', 
        '3_single', '3_hold',
        '4_single', '4_hold'
        
        /*
        '1_single', '1_double', '1_hold',
        '2_single', '2_double', '2_hold',
        '3_single', '3_double', '3_hold',
        '4_single', '4_double', '4_hold'
        */
    ])
],

fingerprint: [
    {
        modelID: 'TS004F',
        manufacturerName: '_TZ3000_xabckq1v'
    },
],
fromZigbee: [
    fz.battery,
    leftButtonsConverter,
    rightButtonsConverter,
],
toZigbee: [
],
meta: {
    configureKey: 1,
},
configure: async (device, coordinatorEndpoint, logger) => {
    const endpoint = device.getEndpoint(1);
    await bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
    
    await bind(endpoint, coordinatorEndpoint, ['genPowerCfg']);
    const payload = [{
        attribute: 'batteryPercentageRemaining',
        minimumReportInterval: 0,
        maximumReportInterval: 3600,
        reportableChange: 1,
    }, {
        attribute: 'batteryVoltage',
        minimumReportInterval: 0,
        maximumReportInterval: 3600,
        reportableChange: 1,
    }];
    await endpoint.configureReporting('genPowerCfg', payload);
},

};

module.exports = definition;

Enregistrer et fermer le fichier.

5/ relancer le service avec la commande:

sudo systemctl start zigbee2mqtt

Puis, lancer la synchronisation du switch en appuyant 10" sur le bouton en bas à gauche.
Et normalement, il est reconnu.
Voila !

Le texte à copier est sur le lien un peu plus haut (sur mon premier log), ici:

1 « J'aime »

merci mais en fait j’avais mal lu, je croyais qu’il y avait une solution pour le double clic.

toujours pas compatible deconz mais il y a encore des modifs qui arrivent : https://github.com/dresden-elektronik/deconz-rest-plugin/pull/5004