Solution pour bien intégrer l'interrupteur volet roulant connecté Zigbee 3.0 Wiser Odace blanc S520567W

Salut à tous,

J’ai acheter un interrupteur volet roulant connecté Zigbee 3.0 Wiser Odace blanc S520567W pour le tester avant d’acheter les 5 autres.
Il n’est pas encore supporté par zigbee2mqtt il a donc fallu créer un convertisseur externe :

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 = { zigbeeModel: ['NHPB/SHUTTER/1'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
model: 'S520567W', // Vendor model number, look on the device for a model number
vendor: 'Schneider Electric', // Vendor of the device (only used for documentation and startup logging)
description: 'Wiser Odace Volet roulant', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
fromZigbee: [fz.cover_position_tilt, fz.command_cover_close, fz.command_cover_open, fz.command_cover_stop], // We will add this later
toZigbee: [tz.cover_position_tilt, tz.cover_state], // Should be empty, unless device can be controlled (e.g. lights, switches).
exposes: [e.cover_position()], // Defines what this device exposes, used for e.g. Home Assistant discovery and in the frontend
meta: {coverInverted: true},
configure: async (device, coordinatorEndpoint, logger) => { const endpoint = device.getEndpoint(1) || device.getEndpoint(5); await reporting.bind(endpoint, coordinatorEndpoint, ['closuresWindowCovering']); await reporting.currentPositionLiftPercentage(endpoint); },
 };

module.exports = definition;

Une fois le convertisseur externe en place l’interupteur est bien reconnu :

A ce moment là on se dit c’est tout bon et en fait non… la remonté du pourcentage d’ouverture n’est pas bonne car le timer par default des interrupteurs est de 2 minutes. Il est impossible de le regler ce temps sans la passerelle wiser car la commande n’est pas connue.

J’ai donc pensé à renvoyer la prise puis je me suis dis on doit pouvoire contourner ce problème avec des automatisation dans home asssistant.
Voici mon bricolage pour pouvoir bien utiliser cet interrupteur :

On ferme le volet roulant la position doit être égale à 0 dans zigbee2mqtt
On ouvre le volet roulant et on note le chiffre de zigbee2mqtt quand il est ouvert à 100%
On crée une automatisation d’arret avec ce chiffre -1 :

- id: '1635764483678'
  alias: volet_roulant_stop_timer
  description: arret du timer à 26
  trigger:
  - platform: numeric_state
    entity_id: cover.0x804b50fffea67e71
    attribute: current_position
    above: '25'
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: zigbee2mqtt/0x804b50fffea67e71/set
      payload: '{"state": "STOP"}'
  mode: single

Et voilà le temps d’ouverture du volet roulant est maintenant le bon. Il ne reste plus qu’a créer un sensor pour avoir un pourcentage correct :

##Sensor pourcentage store salon
  - platform: template
    sensors:
      salon_percent:
        unit_of_measurement: "%"
        entity_id: cover.0x804b50fffea67e71
        value_template: "{{ (state_attr('cover.0x804b50fffea67e71', 'current_position') | multiply(100)/26) | round(0)}}"

Et hop ca fonctionne !

image

J’espère que c’est assez clair, peut être que ca en aidera certains :slight_smile:

7 « J'aime »

super boulot ca ! merci pour le partage !

Salut,
Tu n’a pas put utiliser les options time_close et time_open ?
Dispo depuis la version 1.18 de zigbee2mqtt si je dit pas de bêtise, tu chronomètre le temps de monté et le temps de descente puis, tu rajoute ça dans la conf.

Chez moi, par exemple (c’est pas un Schneider mais ça devrait fonctionner pareil), mon fichier configuration.yaml

devices:
  '0x086bd7fffefb55de':
    friendly_name: Store
    time_close: 45
    time_open: 50

Hello je ne connaissais pas ces commandes, je viens de les tester ça ne fonctionne pas chez moi…
Je pense que tant que la commande pour changer le timer de 120 secondes dans la prise ne sera pas connue il sera compliqué de récupérer le bon pourcentage… :cry:

1 « J'aime »

Top! Encore merci.

Tu pourrais me donner la conf de ta card?

Je peux te la donner, mais c’est une custom-card du thème minimalist

J’ai à date des Fibaro en Zwave pour mes volets roulants et je comptais prendre ce modèle pour mon futur logement.
Je vais garder ce topic en tête du coup, merci :slight_smile:
J’imagine, qu’on doit pouvoir ajouter aussi les S520522W (variateurs).

Merci beaucoup pour le partage.

Pour ma part aucune remontée de la position (utilisé avec des volets Bubendorff) du coup j’utilise deux script avec un timer, un peu sommaire mais ça fait le travail et me sauve la vie car mes boîtiers d’encastrement n’étaient pas assez profond pour mettre un micro-module.

Hello,

Du coup z2m a été mis a jour et l’intégration est beaucoup plus simple, il suffit d’un external converter ou l’on peut régler le temps en secondes de la montée/descente du store!

Voici le lien du github. Ils n’ont pas mis à jour la version corrigée du code, il suffit d’ajouter tzLocal.lift_duration dans tozigbee :

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 tzLocal = {
    lift_duration: {
        key: ['lift_duration'],
        convertSet: async (entity, key, value, meta) => {
            await entity.write(0x0102, {0xe000: {value, type: 0x21}}, {manufacturerCode: 0x105e});
            return {state: {lift_duration: value}};
        },
    }
}

const definition = {
    zigbeeModel: ['NHPB/SHUTTER/1'],
    model: 'S520567',
    vendor: 'Schneider Electric',
    description: 'Roller shutter',
    fromZigbee: [fz.cover_position_tilt],
    toZigbee: [tz.cover_position_tilt, tz.cover_state, tzLocal.lift_duration],
    exposes: [e.cover_position(), exposes.numeric('lift_duration', ea.STATE_SET).withUnit('seconds').withValueMin(0).withValueMax(300).withDescription('Duration of lift')],
    meta: {coverInverted: true},
    configure: async (device, coordinatorEndpoint, logger) => {
        const endpoint = device.getEndpoint(5);
        await reporting.bind(endpoint, coordinatorEndpoint, ['closuresWindowCovering']);
        await reporting.currentPositionLiftPercentage(endpoint);
    },
};

module.exports = definition;

Bonne intégration à tous !

Salut à tous !
J’ai installé l’interrupteur ces jours ci et il s’intègre maintenant facilement dans HA.
Malheureusement la gestion de la position ouvert/fermé ne fonctionne pas correctement et la durée d’action des commandes semble inadaptée.
Savez vous si on peut remédier à ça en touchant aux clusters ? Si oui comment ?

Merci de vos retours !

Salut,

Tu utilises zigbee2mqtt ? Si oui tu peux suivre mon post d’avant, il te permettra d’avoir accès à la durée d’action.

Salut, une idée pourquoi j’ai cette erreur en utilisant le converter et en voulant set le timer ?

zigbee2mqtt          | Zigbee2MQTT:info  2022-01-31 16:13:37: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"Publish 'set' 'lift_duration' to 'Volets Bureau de Francois' failed: 'Error: Write 0xd0cf5efffe4f7a36/5 closuresWindowCovering({\"57344\":{\"value\":19,\"type\":33}}, {\"sendWhen\":\"immediate\",\"timeout\":10000,\"disableResponse\":false,\"disableRecovery\":false,\"disableDefaultResponse\":true,\"direction\":0,\"srcEndpoint\":null,\"reservedBits\":0,\"manufacturerCode\":4190,\"transactionSequenceNumber\":null,\"writeUndiv\":false}) failed (no response received)'","meta":{"friendly_name":"Volets Bureau de Francois"},"type":"zigbee_publish_error"}'

nvm, il y a bien une erreur mais c’est pris en compte :slight_smile:

Bonjour,

J’ai créé un compte juste pour remercier @KKox !
Je débute complètement et le pilotage des volets était dans l’expression de besoins de madame.

Grâce à vous, j’ai pu valider le PoC domotique :smiley:

(bon, je ne comprends pas encore tout ce que je fais…)

Merci encore!

1 « J'aime »

Bonjour !
Je n’utilisais pas Zigbee2mqtt, du coup je me suis lancé.

J’ai donc réappairé mes différents appareils.
Avec l’intégration de base Sonoff / HA j’arrivais à contrôler le volet mais avec des réglages par défaut qui donnaient des résultats surprenants (ouverture à moitié, fermeture trop longue…).
Malheureusement avec zigbee2mqtt, l’appareil est bien reconnu, mais impossible de le contrôler… dans un premier temps.
Peut-être fallait-il lui laisser un délai pour intégrer la configuration… en tout cas ça fonctionne maintenant !
Merci beaucoup, et merci aussi pour m’avoir incité à découvrir zigbee2mqtt qui semble une solution très intéressante.

1 « J'aime »

Bonjour,

Je débute sur home assistance et je ne comprend pas ou est le fichier tozigbee, pour régler la temporisation.

Le code que j’ai mis contient déjà la correction :wink:

bonjour,
après recherche sur le site de zigbee2mqtt, j’ai compris mon erreur
l’extension de mon fichier était en .json et non en .js
j’ai bien le lift duration

par contre le réglage est pour la monté et la descente ?
ou on peut faire indifféremment ?

Oui c’est le même pour la montée et descente

j’aurais une dernière, est ce que le modèle NU350830W de la gamme unica aussi de chez schneider, fonctionne de la même manière ?

Bonjour, pourquoi Home Assistant ne prend pas en charge nativement le système wiser ? C’est bien dommage… :frowning: