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 utils = require('zigbee-herdsman-converters/lib/utils'); const e = exposes.presets; const ea = exposes.access; let tzCover = { key: ['position', 'state'], options: [exposes.options.invert_cover()], convertSet: async (entity, key, value, meta) => { console.log('entity', entity); console.log('value', value); if (typeof value !== 'number') { value = value.toLowerCase(); if(value === "stop"){ await entity.command( 'genLevelCtrl', 'stop', {}, utils.getOptions(meta.mapped, entity)); return; } const lookup = {'open': 100, 'close': 0}; utils.validateValue(value, Object.keys(lookup)); value = lookup[value]; } const invert = utils.getMetaValue(entity, meta.mapped, 'coverInverted', 'allEqual', false) ? !meta.options.invert_cover : meta.options.invert_cover; const position = invert ? 100 - value : value; await entity.command( 'genLevelCtrl', 'moveToLevelWithOnOff', {level: utils.mapNumberRange(Number(position), 0, 100, 0, 255).toString(), transtime: 0}, utils.getOptions(meta.mapped, entity), ); return {state: {position: value}, readAfterWriteTime: 0}; }, convertGet: async (entity, key, meta) => { await entity.read('genLevelCtrl', ['currentLevel']); }, }; const definition = { fingerprint: [ {ieeeAddr: "0x000"} ], model: 'Store', vendor: 'Profalux', description: 'Store profalux', // Description of the device, copy from vendor site. (only used for documentation and startup logging) fromZigbee: [fz.cover_position_via_brightness, fz.cover_state_via_onoff], toZigbee: [tzCover], exposes: [e.cover_position().setAccess('state', ea.ALL)], }; module.exports = definition;