Skip to content

Commit

Permalink
fix: IKEA FYRTUR and friends on fwVer >= 24 have wrong checkinInterva…
Browse files Browse the repository at this point in the history
…l after OTA (#5838)

When doing an OTA update to 24.4.11 FYRTUR (and presumable other blinds as it's the same firmware) start spamming the network:

```
debug 2023-06-03 16:09:38: Received Zigbee message from 'cover/livingroom/side_front_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:38: Received Zigbee message from 'cover/livingroom/side_back_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:39: Received Zigbee message from 'cover/livingroom/side_front_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:39: Received Zigbee message from 'cover/livingroom/side_back_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:40: Received Zigbee message from 'cover/livingroom/side_front_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:40: Received Zigbee message from 'cover/livingroom/side_back_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
debug 2023-06-03 16:09:41: Received Zigbee message from 'cover/livingroom/side_front_window', type 'commandCheckIn', cluster 'genPollCtrl', data '{}' from endpoint 1 with groupID 0
```

For some reason the genPollCtrl.checkinInterval is set to `4`, the default after a full reset and (re)join seems to be `172800`, we simple set this in `configure()` so people do not need to reset their upgraded blinds.
  • Loading branch information
sjorge authored Jun 4, 2023
1 parent 302153c commit 17a92fa
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/devices/ikea.js
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,14 @@ module.exports = [
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
await reporting.batteryPercentageRemaining(endpoint);
await reporting.currentPositionLiftPercentage(endpoint);

// NOTE: Firmware 24.4.11 introduce genPollCtrl
// after OTA update the checkinInterval is 4 which spams the network a lot
// removing + factory resetting has it set to 172800, we set the same value here
// so people do not need to update.
if (device && device.softwareBuildID && device.softwareBuildID.split('.')[0] >= 24) {
await endpoint.write('genPollCtrl', {'checkinInterval': 172800});
}
},
exposes: [e.cover_position(), e.battery().withAccess(ea.STATE_GET)],
},
Expand All @@ -907,6 +915,14 @@ module.exports = [
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
await reporting.batteryPercentageRemaining(endpoint);
await reporting.currentPositionLiftPercentage(endpoint);

// NOTE: Firmware 24.4.11 introduce genPollCtrl
// after OTA update the checkinInterval is 4 which spams the network a lot
// removing + factory resetting has it set to 172800, we set the same value here
// so people do not need to update.
if (device && device.softwareBuildID && device.softwareBuildID.split('.')[0] >= 24) {
await endpoint.write('genPollCtrl', {'checkinInterval': 172800});
}
},
exposes: [e.cover_position(), e.battery().withAccess(ea.STATE_GET)],
},
Expand All @@ -923,6 +939,14 @@ module.exports = [
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
await reporting.batteryPercentageRemaining(endpoint);
await reporting.currentPositionLiftPercentage(endpoint);

// NOTE: Firmware 24.4.11 introduce genPollCtrl
// after OTA update the checkinInterval is 4 which spams the network a lot
// removing + factory resetting has it set to 172800, we set the same value here
// so people do not need to update.
if (device && device.softwareBuildID && device.softwareBuildID.split('.')[0] >= 24) {
await endpoint.write('genPollCtrl', {'checkinInterval': 172800});
}
},
exposes: [e.cover_position(), e.battery().withAccess(ea.STATE_GET)],
},
Expand All @@ -940,6 +964,14 @@ module.exports = [
await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
await reporting.batteryPercentageRemaining(endpoint);
await reporting.currentPositionLiftPercentage(endpoint);

// NOTE: Firmware 24.4.11 introduce genPollCtrl
// after OTA update the checkinInterval is 4 which spams the network a lot
// removing + factory resetting has it set to 172800, we set the same value here
// so people do not need to update.
if (device && device.softwareBuildID && device.softwareBuildID.split('.')[0] >= 24) {
await endpoint.write('genPollCtrl', {'checkinInterval': 172800});
}
},
exposes: [e.cover_position(), e.battery()],
},
Expand Down

0 comments on commit 17a92fa

Please sign in to comment.