|
169 | 169 | zigbee-mqtt-import = pkgs.callPackage "${cfg-meta.paths.pkg}/zigbee-mqtt-import/default.nix" { }; |
170 | 170 | linux-3-finger-drag = pkgs.callPackage "${cfg-meta.paths.pkg}/linux-3-finger-drag/default.nix" { }; |
171 | 171 |
|
| 172 | + # Workaround for NAS-WR01ZE bit-31 firmware bug (zwave-js/zwave-js#2692). |
| 173 | + # The device randomly sets bit 31 in 4-byte meter report mantissa, |
| 174 | + # causing values near -21,474,836 instead of small positive numbers. |
| 175 | + # We mask off the MSB when the parsed meter value is implausibly negative. |
| 176 | + # Pin zwave-js-ui to 11.16.0 (ahead of our nixpkgs pin) for: |
| 177 | + # - zwave-js 15.22.1: targetValue optimistic update fix |
| 178 | + # - zwave-js 15.22.5: pollValue delay fix |
172 | 179 | # Workaround for NAS-WR01ZE bit-31 firmware bug (zwave-js/zwave-js#2692). |
173 | 180 | # The device randomly sets bit 31 in 4-byte meter report mantissa, |
174 | 181 | # causing values near -21,474,836 instead of small positive numbers. |
175 | 182 | # We mask off the MSB when the parsed meter value is implausibly negative. |
176 | 183 | zwave-js-ui = |
177 | 184 | let |
| 185 | + pinnedVersion = "11.16.0"; |
| 186 | + pinnedSrc = super.fetchFromGitHub { |
| 187 | + owner = "zwave-js"; |
| 188 | + repo = "zwave-js-ui"; |
| 189 | + tag = "v${pinnedVersion}"; |
| 190 | + hash = "sha256-6pPC500ZQmtCC3ATiWD79DTh5cagdqLoDwTHivHgfWg="; |
| 191 | + }; |
178 | 192 | bit31Fix = "if (value < -1e6) { const _p = data.subarray(offset + 1); const _prec = (_p[0] & 224) >>> 5; const _sz = _p[0] & 7; if (_sz === 4) value = (((_p[1] & 0x7F) << 24) | (_p[2] << 16) | (_p[3] << 8) | _p[4]) / Math.pow(10, _prec); }"; |
179 | 193 | meterCCPath = "lib/node_modules/zwave-js-ui/node_modules/@zwave-js/cc/build"; |
180 | 194 | in |
181 | 195 | super.zwave-js-ui.overrideAttrs (old: { |
| 196 | + version = pinnedVersion; |
| 197 | + src = pinnedSrc; |
| 198 | + npmDeps = super.fetchNpmDeps { |
| 199 | + src = pinnedSrc; |
| 200 | + hash = "sha256-Qeh5sk2aLWrsmMShE26jz7nzWg6YWcPeUNhTg3u411I="; |
| 201 | + }; |
182 | 202 | postInstall = (old.postInstall or "") + '' |
183 | 203 | substituteInPlace "$out/${meterCCPath}/cjs/cc/MeterCC.js" \ |
184 | 204 | --replace-fail \ |
|
0 commit comments