Koenkk / Koenkk/zigbee2mqtt

[External Converter]: TLSR82xx from Allesin

Open
#32,644 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

external converter
Dominant language
TypeScript
Stars
15.7k
Forks
2k
Avg merge
18h 55m
Merged PRs (30d)
35

Description

Link

https://www.amazon.com/dp/B0F8V7Z7SH

Database entry

{"id":28,"type":"EndDevice","ieeeAddr":"0x10a562fffe50908e","nwkAddr":16939,"manufId":4417,"manufName":"Aubor","powerSource":"Mains (single phase)","modelId":"TLSR82xx","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":514,"inClusterList":[0,1,3,4,6,258,4096,64599],"outClusterList":[3,6,25],"clusters":{"genBasic":{"attributes":{"modelId":"TLSR82xx","manufacturerName":"Aubor","powerSource":1,"zclVersion":3,"appVersion":0,"stackVersion":2,"hwVersion":0}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":100,"batteryVoltage":0}},"genOnOff":{"attributes":{"onOff":0}},"closuresWindowCovering":{"attributes":{"windowCoveringMode":0,"currentPositionLiftPercentage":0}}},"binds":[{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0x08b95ffffeb2f7d1","endpointID":1},{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x08b95ffffeb2f7d1","endpointID":1}],"configuredReportings":[{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":10},{"cluster":6,"attrId":0,"minRepIntval":0,"maxRepIntval":65000,"repChange":1}],"meta":{}}},"appVersion":0,"stackVersion":2,"hwVersion":0,"zclVersion":3,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{},"lastSeen":1784829431347}

Zigbee2MQTT version

2.12.1 (unknown)

External converter
import * as m from 'zigbee-herdsman-converters/lib/modernExtend';

const customBatteryFix = () => {
    const baseBattery = m.battery();
    return {
        ...baseBattery,
        fromZigbee: [{
            cluster: 'genPowerCfg',
            type: ['attributeReport', 'readResponse'],
            convert: (model, msg, publish, options, meta) => {
                if (msg.data.hasOwnProperty('batteryPercentageRemaining')) {
                    let battery = msg.data['batteryPercentageRemaining'];
                    battery = Math.min(battery * 2, 100); 
                    return {battery: battery};
                }
            },
        }],
    };
};

export default {
    zigbeeModel: ['TLSR82xx'],
    model: 'Allesin_Roller_Shade',
    vendor: 'Allesin',
    description: 'Zigbee roller shade',
    extend: [customBatteryFix(), m.windowCovering({ controls: ['lift'] })]
};
What does/doesn't work with the external definition?
What works:
  • Window Covering Control: Open, close, and precise position control via the lift attribute work perfectly.
  • Battery Reporting: The device natively reports the batteryPercentageRemaining attribute in raw half-percent steps (ZCL spec). Using a custom modernExtend wrapper to multiply the value by 2 correctly exposes the true 0–100% battery capacity.
What doesn't work:
  • Standard m.battery() extension without the multiplier results in the battery percentage displaying at exactly half value (e.g., a full battery reads as 50%). The provided code resolves this issue.
Notes

software_build_id: undefined
date_code: undefined
endpoints:

{"1":{"clusters":{"input":["genBasic","genPowerCfg","genIdentify","genGroups","genOnOff","closuresWindowCovering","touchlink","manuSpecificAmazonWWAH"],"output":["genIdentify","genOnOff","genOta"]}}}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the supplied external converter for the TLSR82xx model, especially the custom genPowerCfg battery conversion and the window-covering extension. Compare its behavior with the standard m.battery() handling and verify that the device reports accurate battery percentage alongside open, close, and lift-position controls.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
embedded-iot
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
57/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.