Skip to content

Commit

Permalink
Fix not able to set state and brightness at the same time for gq8b1uv.
Browse files Browse the repository at this point in the history
  • Loading branch information
Koenkk committed Feb 27, 2021
1 parent 48cc9d9 commit 45dacb6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
6 changes: 4 additions & 2 deletions converters/toZigbee.js
Original file line number Diff line number Diff line change
Expand Up @@ -2168,7 +2168,8 @@ const converters = {
tuya_dimmer_state: {
key: ['state'],
convertSet: async (entity, key, value, meta) => {
await tuya.sendDataPointBool(entity, tuya.dataPoints.state, value === 'ON');
// Always use same transid as tuya_dimmer_level (https://github.com/Koenkk/zigbee2mqtt/issues/6366)
await tuya.sendDataPointBool(entity, tuya.dataPoints.state, value === 'ON', 'setData', 1);
},
},
tuya_dimmer_level: {
Expand Down Expand Up @@ -2206,7 +2207,8 @@ const converters = {
throw new Error('Dimmer brightness is out of range 0..255');
}
}
await tuya.sendDataPointValue(entity, dp, newValue);
// Always use same transid as tuya_dimmer_state (https://github.com/Koenkk/zigbee2mqtt/issues/6366)
await tuya.sendDataPointValue(entity, dp, newValue, 'setData', 1);
},
},
tuya_switch_state: {
Expand Down
38 changes: 24 additions & 14 deletions lib/tuya.js
Original file line number Diff line number Diff line change
Expand Up @@ -386,19 +386,24 @@ const fanModes = {
3: 'auto',
};

async function sendDataPoint(entity, datatype, dp, data, cmd) {
if (sendDataPoint.transId === undefined) {
sendDataPoint.transId = 0;
} else {
sendDataPoint.transId++;
sendDataPoint.transId %= 256;
async function sendDataPoint(entity, datatype, dp, data, cmd, transid) {
if (transid === undefined) {
if (sendDataPoint.transId === undefined) {
sendDataPoint.transId = 0;
} else {
sendDataPoint.transId++;
sendDataPoint.transId %= 256;
}

transid = sendDataPoint.transId;
}

await entity.command(
'manuSpecificTuya',
cmd || 'setData',
{
status: 0,
transid: sendDataPoint.transId,
transid,
dp: dp,
datatype: datatype,
length_hi: (data.length >> 8) & 0xFF,
Expand All @@ -409,54 +414,59 @@ async function sendDataPoint(entity, datatype, dp, data, cmd) {
);
}

async function sendDataPointValue(entity, dp, value, cmd) {
async function sendDataPointValue(entity, dp, value, cmd, transid=undefined) {
await sendDataPoint(
entity,
dataTypes.value,
dp,
convertDecimalValueTo4ByteHexArray(value),
cmd,
transid,
);
}

async function sendDataPointBool(entity, dp, value, cmd) {
async function sendDataPointBool(entity, dp, value, cmd, transid=undefined) {
await sendDataPoint(
entity,
dataTypes.bool,
dp,
[value ? 1 : 0],
cmd,
transid,
);
}

async function sendDataPointEnum(entity, dp, value, cmd) {
async function sendDataPointEnum(entity, dp, value, cmd, transid=undefined) {
await sendDataPoint(
entity,
dataTypes.enum,
dp,
[value],
cmd,
transid,
);
}

async function sendDataPointRaw(entity, dp, value, cmd) {
async function sendDataPointRaw(entity, dp, value, cmd, transid=undefined) {
await sendDataPoint(
entity,
dataTypes.raw,
dp,
value,
cmd,
transid,
);
}

async function sendDataPointBitmap(entity, dp, value, cmd) {
async function sendDataPointBitmap(entity, dp, value, cmd, transid=undefined) {
await sendDataPoint(
entity,
dataTypes.bitmap,
dp,
value,
cmd)
;
cmd,
transid,
);
}

module.exports = {
Expand Down

0 comments on commit 45dacb6

Please sign in to comment.