You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
9. IntelliBrite light sequencing delay detection: OCP/ICP "gray-out" state now propagates to dashPanel via inbound A184 channel 0x94AF decode. Circuit button dims and disables clicks during theme sequencing.
18
18
10. v3 light group Swim/Set/Sync commands: dashPanel triggers via v3 A184 protocol (channel 0x58A3, target 0x8AB1) instead of v1 rapid-toggle sequencing. Group and member circuits show disabled state until OCP confirms completion.
19
19
11. Automatic lat/lon resolution from zip code: heliotrope sunrise/sunset calculations now fall back to a bundled US zip code coordinate table when latitude/longitude are not explicitly configured or provided via environment variables.
20
-
21
-
### New Features (continued)
22
20
12. Alert notification management: full PUT `/config/alerts` endpoint for all 7 alert categories (circuits, pumps, ultratemp, chlorinator, intellichem, hybrid, connected gas) with Select All / Select None support. dashPanel pnlAlerts config UI with per-category accordion, checkbox list, and real-time selected/total counts.
23
21
13. ICP→dashPanel alert sync: alert notification changes made on ICP now propagate to dashPanel in real-time via A168 cat=13 piggyback handler in the v3 early-return guard (same pattern as ISSUE-073 body capacity).
24
22
14. v3 delay configuration: freeze cycle time, valve delay, and cooldown delay now decoded from A30 cat=0 sub=0 and writable via A168. dashPanel Delays panel binds `valveDelay` for ICv3 (was `pumpDelay`). Cancel delay endpoint added (`PUT /state/cancelDelay`).
20. dashPanel freeze protection UI: green indicator for freeze cycle, blue for manual override, subtitle text ("Freeze Cycle" / "Manual Override"), enhanced banner with per-body override detail.
31
29
32
30
### Bug Fixes
33
-
10. IntelliCenter v3 circuit/light group eggTimer offset regression: outbound A168 cat=6 now sends 45-byte payload with eggTimer at bytes 40-41 (was incorrectly at 38-39). Inbound ExternalMessage.processGroupSettings also reads v3 offset. Added processEggTimer protection guard against OCP overwriting valid local values with 0.
12. JXi burner-on status: use bitmask check instead of equality for reliable detection.
36
-
13. JXi/LXi heater: default RS485 address to 0x68/0x38.
37
-
14. EquipmentStateMessage: header byte check to disambiguate IntelliCenter from IntelliTouch i9+3 (#1179).
38
-
15. IntelliCenterBoard: process 3rd power center expansion modules correctly (#1171).
39
-
16. Chlorinator ID fallback when `useChlorinator` is true in `setORPAsync`. Thanks to @johnny2678 — [PR #1178](https://github.com/tagyoureit/nodejs-poolController/pull/1178).
40
-
17. Hayward remote control handler: fix no-op catch (#1182).
20. Schedule calculation crash when heliotrope invalid: `calcAdjustedTimes` now guards against undefined `dt` and missing lat/lon; `calcSchedule` null-checks `endTime` before calling `.getTime()`.
44
-
21. Schedule `nsod` (tomorrow start-of-day) was calculated as yesterday due to copy-paste typo (`addHours(-24)` → `addHours(24)`).
45
-
22. Alert bitmask mixed endianness: 4-byte selectors (IntelliChem, Hybrid) use little-endian while 1-2 byte selectors use big-endian. Encode (`maskToBytes`), decode (`extractAlertMask`), and piggyback decode (`applyAlertNotificationFromExternal`) all branch on byte count.
46
-
23. A168 cat=11 security role write: fixed phantom duplicate creation from incorrect byte[2] and trailing bytes.
47
-
24. dashPanel Save Remote response wrapper not unwrapped — `dataBind` crash on `type.desc` fixed.
48
-
25. dashPanel freeze state race condition: body socket event fires before A204 byte[47] decode completes. Controller `state/all` handler now updates body labels and indicators atomically from the authoritative snapshot data.
31
+
21. IntelliCenter v3 circuit/light group eggTimer offset regression: outbound A168 cat=6 now sends 45-byte payload with eggTimer at bytes 40-41 (was incorrectly at 38-39). Inbound ExternalMessage.processGroupSettings also reads v3 offset. Added processEggTimer protection guard against OCP overwriting valid local values with 0.
23. JXi burner-on status: use bitmask check instead of equality for reliable detection.
34
+
24. JXi/LXi heater: default RS485 address to 0x68/0x38.
35
+
25. EquipmentStateMessage: header byte check to disambiguate IntelliCenter from IntelliTouch i9+3 (#1179).
36
+
26. IntelliCenterBoard: process 3rd power center expansion modules correctly (#1171).
37
+
27. Chlorinator ID fallback when `useChlorinator` is true in `setORPAsync`. Thanks to @johnny2678 — [PR #1178](https://github.com/tagyoureit/nodejs-poolController/pull/1178).
38
+
28. Hayward remote control handler: fix no-op catch (#1182).
31. Schedule calculation crash when heliotrope invalid: `calcAdjustedTimes` now guards against undefined `dt` and missing lat/lon; `calcSchedule` null-checks `endTime` before calling `.getTime()`.
42
+
32. Schedule `nsod` (tomorrow start-of-day) was calculated as yesterday due to copy-paste typo (`addHours(-24)` → `addHours(24)`).
43
+
33. Alert bitmask mixed endianness: 4-byte selectors (IntelliChem, Hybrid) use little-endian while 1-2 byte selectors use big-endian. Encode (`maskToBytes`), decode (`extractAlertMask`), and piggyback decode (`applyAlertNotificationFromExternal`) all branch on byte count.
44
+
34. A168 cat=11 security role write: fixed phantom duplicate creation from incorrect byte[2] and trailing bytes.
45
+
35. dashPanel Save Remote response wrapper not unwrapped — `dataBind` crash on `type.desc` fixed.
46
+
36. dashPanel freeze state race condition: body socket event fires before A204 byte[47] decode completes. Controller `state/all` handler now updates body labels and indicators atomically from the authoritative snapshot data.
Copy file name to clipboardExpand all lines: README.md
+29-8Lines changed: 29 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,9 +26,9 @@
26
26
> **In the wild:** featured in the [TroubleFreePool IntelliCenter walk-through guide](https://www.troublefreepool.com/threads/pentair-intellicenter-pool-control-dashboard-instructional-guide.218514/) (thanks @MyAZPool). Actively maintained — questions welcome in [GitHub Discussions](https://github.com/tagyoureit/nodejs-poolController/discussions).
27
27
28
28
```diff
29
-
+ Running IntelliCenter v3.008+? It's fully supported as of 9.0.
29
+
+ Running IntelliCenter v3.008+? Fully supported as of 9.0, with security,
30
+
+ heater, and chemistry improvements in 9.1.
30
31
+ If anything looks off, please open a discussion with a replay capture.
31
-
+ See discussion #1171 for ongoing v3 updates.
32
32
```
33
33
34
34
## What is njsPC?
@@ -47,18 +47,38 @@ njsPC is a Node.js service that talks to your pool controller over RS-485 (or Sc
|**Chlorinators**| IntelliChlor, Aqua-Rite, OEM brands (physical and virtual) | Dual chlorinators supported via REM. Virtual chlorinator added in 9.1|
52
52
|**Lights**| IntelliBrite, MagicStream, Jandy WaterColors, Hayward ColorLogic, Pooltone (Florida Sunseeker), plus legacy SAM / SAL / Color Wheel / Photon Gen ||
53
-
|**Chemistry**| IntelliChem (OCP-pairedand standalone), Relay Equipment Manager (REM) | Atlas Scientific pH / ORP / EC probes, flow, pressure, temperature via REM |
53
+
|**Chemistry**| IntelliChem (OCP-paired, standalone, and virtual), Relay Equipment Manager (REM) | Atlas Scientific pH / ORP / EC probes, flow, pressure, temperature via REM. Virtual IntelliChem added in 9.1|
54
54
|**Covers**| IntelliCenter cover configuration & control | Live-state feedback is limited on ICv3 |
|**Valves**| Standard intake/return with diverted status | Intellivalve planned |
57
57
|**Home Automation**| HomeKit/Siri (Homebridge), Home Assistant (via MQTT), Hubitat, SmartThings, MQTT, InfluxDB, ISY, Vera, Alexa | See [Home Automation Bindings](#home-automation-bindings)|
58
58
59
-
## What's new in 9.0
59
+
## What's new in 9.1
60
60
61
-
9.0 focuses on IntelliCenter v3.008 firmware compatibility and finishes the v3 work started in 8.4.1.
61
+
9.1 adds IntelliCenter security, Jandy JXi/LXi heater support, virtual chemistry equipment, and a batch of v3.008 refinements.
62
+
63
+
1.**IntelliCenter security** — full PIN-based role management (up to 9 roles, 22-section granular permissions) with session timeout, server-side write protection, and dashPanel integration (guest mode, lock icon, per-widget gating).
64
+
2.**Jandy JXi / LXi heater protocol** — RS-485 support with fault message handling, bitmask burner-on detection, and correct default addresses ([discussion #1128](https://github.com/tagyoureit/nodejs-poolController/discussions/1128)).
65
+
3.**Virtual IntelliChem** — alarm sync and API routes for testing chemistry without hardware.
66
+
4.**Virtual chlorinator** — full emulation of chlorinator protocol responses.
67
+
5.**Alert notification management** — PUT `/config/alerts` endpoint for all 7 alert categories with dashPanel accordion UI and ICP→dashPanel real-time sync.
68
+
6.**v3 light sequencing** — IntelliBrite gray-out state propagates to dashPanel during theme changes; light group Swim/Set/Sync uses v3 A184 protocol.
69
+
7.**Freeze protection** — manual override detection (per-body bitmask), smart body toggle, and dashPanel freeze/override indicators.
70
+
8.**v3 delay configuration** — freeze cycle time, valve delay, and cooldown delay decoded and writable; cancel delay endpoint added.
10.**Zip-to-coordinates fallback** — heliotrope sunrise/sunset calculations now resolve lat/lon from zip code when not explicitly configured.
73
+
11. Configurable single mixing period for chemistry controllers — thanks to @johnny2678 ([PR #1181](https://github.com/tagyoureit/nodejs-poolController/pull/1181)).
74
+
12. IntelliCenter/IntelliTouch i9+3 disambiguation fix ([#1179](https://github.com/tagyoureit/nodejs-poolController/issues/1179)), 3rd power center expansion fix ([#1171](https://github.com/tagyoureit/nodejs-poolController/issues/1171)), chlorinator ID fallback fix — thanks to @johnny2678 ([PR #1178](https://github.com/tagyoureit/nodejs-poolController/pull/1178)).
75
+
76
+
See the full [Changelog](https://github.com/tagyoureit/nodejs-poolController/blob/master/Changelog) for all 37 items in 9.1.
77
+
78
+
<details>
79
+
<summary>What was new in 9.0</summary>
80
+
81
+
9.0 focused on IntelliCenter v3.008 firmware compatibility and finished the v3 work started in 8.4.1.
62
82
63
83
1. IntelliCenter v3.008 chlorinator support, including live-edit changes coming back from the panel.
64
84
2. Faster state updates on v3 — circuit, feature, and body changes made at the panel now appear in dashPanel within seconds.
@@ -68,8 +88,9 @@ njsPC is a Node.js service that talks to your pool controller over RS-485 (or Sc
68
88
6. Firmware change detection — njsPC reloads its configuration automatically when the OCP firmware version changes.
69
89
7. Virtual equipment management with new REST endpoints.
70
90
8. Regal (Century) Modbus pump added, with collision detection and NACK/fault handling on Go/Stop commands — thanks to @celestinjr ([PR #1169](https://github.com/tagyoureit/nodejs-poolController/pull/1169)).
91
+
</details>
71
92
72
-
For previous releases (8.4.x, 8.3, 8.1, 8.0, 7.x and earlier), see the [Changelog](https://github.com/tagyoureit/nodejs-poolController/blob/master/Changelog).
93
+
For earlier releases (8.4.x, 8.3, 8.1, 8.0, 7.x and before), see the [Changelog](https://github.com/tagyoureit/nodejs-poolController/blob/master/Changelog).
0 commit comments