nodejs-poolcontroller 7.6.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/.eslintrc.json +36 -45
  2. package/.github/ISSUE_TEMPLATE/1-bug-report.yml +84 -0
  3. package/.github/ISSUE_TEMPLATE/2-docs.md +12 -0
  4. package/.github/ISSUE_TEMPLATE/3-proposal.md +28 -0
  5. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  6. package/CONTRIBUTING.md +74 -74
  7. package/Changelog +242 -215
  8. package/Dockerfile +17 -17
  9. package/Gruntfile.js +40 -40
  10. package/LICENSE +661 -661
  11. package/README.md +195 -191
  12. package/anslq25/MessagesMock.ts +218 -0
  13. package/anslq25/boards/MockBoardFactory.ts +50 -0
  14. package/anslq25/boards/MockEasyTouchBoard.ts +696 -0
  15. package/anslq25/boards/MockSystemBoard.ts +217 -0
  16. package/anslq25/chemistry/MockChlorinator.ts +75 -0
  17. package/anslq25/pumps/MockPump.ts +84 -0
  18. package/app.ts +10 -14
  19. package/config/Config.ts +26 -8
  20. package/config/VersionCheck.ts +8 -4
  21. package/controller/Constants.ts +59 -25
  22. package/controller/Equipment.ts +2667 -2459
  23. package/controller/Errors.ts +181 -180
  24. package/controller/Lockouts.ts +534 -436
  25. package/controller/State.ts +596 -77
  26. package/controller/boards/AquaLinkBoard.ts +1003 -0
  27. package/controller/boards/BoardFactory.ts +53 -45
  28. package/controller/boards/EasyTouchBoard.ts +3079 -2653
  29. package/controller/boards/IntelliCenterBoard.ts +3821 -4230
  30. package/controller/boards/IntelliComBoard.ts +69 -63
  31. package/controller/boards/IntelliTouchBoard.ts +384 -241
  32. package/controller/boards/NixieBoard.ts +1871 -1675
  33. package/controller/boards/SunTouchBoard.ts +393 -0
  34. package/controller/boards/SystemBoard.ts +5244 -4697
  35. package/controller/comms/Comms.ts +905 -541
  36. package/controller/comms/ScreenLogic.ts +1663 -0
  37. package/controller/comms/messages/Messages.ts +382 -54
  38. package/controller/comms/messages/config/ChlorinatorMessage.ts +8 -4
  39. package/controller/comms/messages/config/CircuitGroupMessage.ts +5 -2
  40. package/controller/comms/messages/config/CircuitMessage.ts +82 -13
  41. package/controller/comms/messages/config/ConfigMessage.ts +3 -1
  42. package/controller/comms/messages/config/CoverMessage.ts +2 -1
  43. package/controller/comms/messages/config/CustomNameMessage.ts +31 -30
  44. package/controller/comms/messages/config/EquipmentMessage.ts +5 -1
  45. package/controller/comms/messages/config/ExternalMessage.ts +33 -3
  46. package/controller/comms/messages/config/FeatureMessage.ts +2 -1
  47. package/controller/comms/messages/config/GeneralMessage.ts +2 -1
  48. package/controller/comms/messages/config/HeaterMessage.ts +145 -11
  49. package/controller/comms/messages/config/IntellichemMessage.ts +2 -1
  50. package/controller/comms/messages/config/OptionsMessage.ts +16 -27
  51. package/controller/comms/messages/config/PumpMessage.ts +62 -47
  52. package/controller/comms/messages/config/RemoteMessage.ts +80 -13
  53. package/controller/comms/messages/config/ScheduleMessage.ts +390 -347
  54. package/controller/comms/messages/config/SecurityMessage.ts +2 -1
  55. package/controller/comms/messages/config/ValveMessage.ts +44 -27
  56. package/controller/comms/messages/status/ChlorinatorStateMessage.ts +44 -91
  57. package/controller/comms/messages/status/EquipmentStateMessage.ts +139 -30
  58. package/controller/comms/messages/status/HeaterStateMessage.ts +135 -86
  59. package/controller/comms/messages/status/IntelliChemStateMessage.ts +448 -445
  60. package/controller/comms/messages/status/IntelliValveStateMessage.ts +36 -35
  61. package/controller/comms/messages/status/PumpStateMessage.ts +92 -2
  62. package/controller/comms/messages/status/VersionMessage.ts +2 -1
  63. package/controller/nixie/Nixie.ts +173 -162
  64. package/controller/nixie/NixieEquipment.ts +104 -103
  65. package/controller/nixie/bodies/Body.ts +120 -120
  66. package/controller/nixie/bodies/Filter.ts +135 -135
  67. package/controller/nixie/chemistry/ChemController.ts +2682 -2498
  68. package/controller/nixie/chemistry/ChemDoser.ts +806 -0
  69. package/controller/nixie/chemistry/Chlorinator.ts +367 -314
  70. package/controller/nixie/circuits/Circuit.ts +402 -248
  71. package/controller/nixie/heaters/Heater.ts +815 -649
  72. package/controller/nixie/pumps/Pump.ts +934 -661
  73. package/controller/nixie/schedules/Schedule.ts +319 -257
  74. package/controller/nixie/valves/Valve.ts +170 -170
  75. package/defaultConfig.json +346 -286
  76. package/logger/DataLogger.ts +448 -448
  77. package/logger/Logger.ts +38 -9
  78. package/package.json +60 -56
  79. package/tsconfig.json +25 -25
  80. package/web/Server.ts +275 -117
  81. package/web/bindings/aqualinkD.json +560 -0
  82. package/web/bindings/homeassistant.json +437 -0
  83. package/web/bindings/influxDB.json +1066 -1021
  84. package/web/bindings/mqtt.json +721 -654
  85. package/web/bindings/mqttAlt.json +746 -684
  86. package/web/bindings/rulesManager.json +54 -54
  87. package/web/bindings/smartThings-Hubitat.json +31 -31
  88. package/web/bindings/valveRelays.json +20 -20
  89. package/web/bindings/vera.json +25 -25
  90. package/web/interfaces/baseInterface.ts +188 -136
  91. package/web/interfaces/httpInterface.ts +148 -124
  92. package/web/interfaces/influxInterface.ts +283 -245
  93. package/web/interfaces/mqttInterface.ts +695 -475
  94. package/web/interfaces/ruleInterface.ts +87 -0
  95. package/web/services/config/Config.ts +177 -49
  96. package/web/services/config/ConfigSocket.ts +2 -1
  97. package/web/services/state/State.ts +154 -3
  98. package/web/services/state/StateSocket.ts +69 -18
  99. package/web/services/utilities/Utilities.ts +232 -42
  100. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -52
  101. package/config copy.json +0 -300
  102. package/issue_template.md +0 -52
@@ -0,0 +1,218 @@
1
+ import { Inbound, Message, Outbound, Protocol } from "../controller/comms/messages/Messages";
2
+ import { ControllerType } from "../controller/Constants";
3
+ import { sys } from "../controller/Equipment";
4
+ import { logger } from "../logger/Logger";
5
+ import { MockSystemBoard } from "./boards/MockSystemBoard";
6
+ import { mockChlor } from "./chemistry/MockChlorinator";
7
+ import { mockPump, MockPump } from "./pumps/MockPump";
8
+
9
+
10
+ export class MessagesMock {
11
+ constructor() { }
12
+
13
+ public static process(msg: Inbound) {
14
+ switch (msg. protocol) {
15
+ case Protocol.Broadcast: {
16
+ switch (sys.controllerType) {
17
+ case ControllerType.IntelliCenter:
18
+ switch (msg.action) {
19
+ /* case xyz:
20
+ */
21
+ default:
22
+ logger.info(`An unprocessed message was received ${msg.toPacket()}`)
23
+ break;
24
+
25
+ }
26
+ default:
27
+ {
28
+
29
+ switch (msg.action) {
30
+ /* SET COMMANDS */
31
+ case 133: // set date/time
32
+ case 134: // set circuit
33
+ case 136: // set heat/temperature
34
+ case 138: // set custom names
35
+ case 139: // set circuit names/functions
36
+ case 144: // set heat pump status
37
+ case 145: // set schedule
38
+ case 146: // set intellichem
39
+ case 147: // set intellichem
40
+ case 150: // set intellflo spa side controllers
41
+ case 152: // set pump config
42
+ case 155: // set pump config extended
43
+ case 153: // set intellichlor
44
+ case 157: // set valve
45
+ case 158: // set high speed circuits
46
+ case 160: // set is4/is10 high speed circuits
47
+ case 161: // set quicktouch remote
48
+ case 162: // set solar/heat pump config
49
+ case 131: // set delay
50
+ case 163: // set delay
51
+ case 167: // set light group
52
+ case 168: // set settings
53
+ sys.anslq25Board.system.sendAck(msg);
54
+ break;
55
+ /* GET COMMANDS */
56
+ case 194: // get controller status
57
+ break;
58
+ case 197: // get date time
59
+ sys.anslq25Board.system.processDateTimeAsync(msg);
60
+ break;
61
+ case 198: // get circuit state
62
+ break;
63
+ case 200: // get heat/status
64
+ sys.anslq25Board.heaters.processHeatModesAsync(msg);
65
+ break;
66
+ case 202: // get custom names
67
+ sys.anslq25Board.system.processCustomNameAsync(msg);
68
+ break;
69
+ case 203: //get circuit functions
70
+ sys.anslq25Board.circuits.processCircuitAsync(msg);
71
+ break;
72
+ case 208: // get heat pump status
73
+ break;
74
+ case 209: // get schedule
75
+ sys.anslq25Board.schedules.processScheduleAsync(msg);
76
+ break;
77
+
78
+ case 210: // get intellichem
79
+ case 211: // get intellichem
80
+ logger.error(`mock packet ${msg.action} not programmed yet.`)
81
+ break;
82
+ case 214: // get intelliflo spa side
83
+ sys.anslq25Board.remotes.processSpaCommandRemoteAsync(msg);
84
+ break;
85
+ case 215: // get pump status
86
+ break;
87
+ case 216: // get pump config
88
+ sys.anslq25Board.pumps.processPumpConfigAsync(msg);
89
+ break
90
+ case 217: // get intellichlor
91
+ case 219: // get pump config
92
+ logger.error(`mock packet ${msg.action} not programmed yet.`)
93
+ break;
94
+ case 221: // get valve
95
+ sys.anslq25Board.valves.processValveAssignmentsAsync(msg);
96
+ break;
97
+ case 222: // get high speed circuits
98
+ sys.anslq25Board.pumps.processHighSpeedCircuitsAsync(msg);
99
+ break;
100
+ case 224: // get is4/is10
101
+ sys.anslq25Board.remotes.processIS4IS10RemoteAsync(msg);
102
+ break;
103
+ case 225: //get quicktouch
104
+ sys.anslq25Board.remotes.processQuickTouchRemoteAsync(msg);
105
+ break;
106
+ case 226: // get solar/heat pump
107
+ sys.anslq25Board.heaters.processHeaterConfigAsync(msg);
108
+ break;
109
+ case 227: // get delays
110
+ sys.anslq25Board.valves.processValveOptionsAsync(msg);
111
+ break;
112
+ case 231: // get light groups
113
+ sys.anslq25Board.circuits.processLightGroupAsync(msg);
114
+ break;
115
+ case 239: // get unknown
116
+ break;
117
+ case 232: // get settings
118
+ sys.anslq25Board.system.processSettingsAsync(msg);
119
+ break;
120
+ case 253: // get sw version
121
+ logger.info(`Mock EasyTouch OCP - Packet ${msg.toShortPacket()} request not programmed yet.`)
122
+ break;
123
+ case 1: // Ack
124
+ case 2: // Shared IntelliCenter/IntelliTouch
125
+ case 5:
126
+ case 8:
127
+ case 96: // EquipmentStateMessage.process(this);
128
+ case 10: // CustomNameMessage.process(this);
129
+ case 11: // CircuitMessage.processTouch(this);
130
+ case 25: // ChlorinatorMessage.processTouch(this);
131
+ case 153: // ExternalMessage.processTouchChlorinator(this);
132
+ case 17:
133
+ case 145: // ScheduleMessage.process(this);
134
+ case 18: // IntellichemMessage.process(this);
135
+ break;
136
+ case 24:
137
+ case 27:
138
+
139
+ break;
140
+ case 152:
141
+ case 155: // PumpMessage.process(this);
142
+ case 30:
143
+ // switch (sys.controllerType) {
144
+ // case ControllerType.Unknown:
145
+ // break;
146
+ // case ControllerType.SunTouch:
147
+ // ScheduleMessage.processSunTouch(this);
148
+ // break;
149
+ // default:
150
+ // OptionsMessage.process(this);
151
+ // break;
152
+ // }
153
+ case 22:
154
+ case 32:
155
+ case 33: // RemoteMessage.process(this);
156
+ case 29:
157
+ case 35: // ValveMessage.process(this);
158
+ case 39:
159
+ case 167: // CircuitMessage.processTouch(this);
160
+ case 40:
161
+ case 168: // OptionsMessage.process(this);
162
+ case 41: // CircuitGroupMessage.process(this);
163
+ case 197: // EquipmentStateMessage.process(this); // Date/Time request
164
+ case 252: // EquipmentMessage.process(this);
165
+ case 9:
166
+ case 16:
167
+ case 34:
168
+ case 137:
169
+ case 144:
170
+ case 162: // HeaterMessage.process(this);
171
+ case 114:
172
+ case 115: // HeaterStateMessage.process(this);
173
+ case 147: // IntellichemMessage.process(this);
174
+ logger.info(`Mock EasyTouch OCP - Packet ${msg.toShortPacket()} should be coming to the OCP, not from it.`);
175
+ break;
176
+ default:
177
+ logger.info(`No mock EasyTouch response for ${msg.toShortPacket()} `);
178
+ }
179
+ }
180
+ }
181
+ break;
182
+ }
183
+ /*
184
+ case Protocol.IntelliValve:
185
+ IntelliValveStateMessage.process(outboundMsg);
186
+ break;
187
+ case Protocol.IntelliChem:
188
+ IntelliChemStateMessage.process(outboundMsg);
189
+ break; */
190
+ // case Protocol.Pump:
191
+ // if ((msg.source >= 96 && msg.source <= 111) || (msg.dest >= 96 && msg.dest <= 111))
192
+ // mockPump.process(msg);
193
+ // else
194
+ // MockSystemBoard.convertOutbound(msg);
195
+ /* case Protocol.Heater:
196
+ HeaterStateMessage.process(outboundMsg);
197
+ break;*/
198
+ case Protocol.Chlorinator:
199
+ mockChlor.process(msg);
200
+ /*
201
+ case Protocol.Hayward:
202
+ PumpStateMessage.processHayward(msg);
203
+ break; */
204
+ default:
205
+ logger.debug(`Unprocessed Message ${msg.toPacket()}`)
206
+ // return new Outbound(Protocol.Broadcast, 0, 0, 0, []);
207
+ }
208
+ }
209
+
210
+ // public static processOutbound(outboundMsg: Outbound) {
211
+ // // outbound mock messages will be sent here instead of to the comms port
212
+ // let inbound = Message.convertOutboundToInbound(outboundMsg);
213
+ // let newOut = MessagesMock.processInbound(inbound);
214
+ // return newOut;
215
+
216
+ // }
217
+ }
218
+ export var messagesMock = new MessagesMock();
@@ -0,0 +1,50 @@
1
+ /* nodejs-poolController. An application to control pool equipment.
2
+ Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2022.
3
+ Russell Goldin, tagyoureit. russ.goldin@gmail.com
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as
7
+ published by the Free Software Foundation, either version 3 of the
8
+ License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ // import { MockIntelliCenterBoard } from './MockIntelliCenterBoard';
19
+ // import { MockIntelliTouchBoard } from './MockIntelliTouchBoard';
20
+ // import { MockIntelliComBoard } from './MockIntelliComBoard';
21
+ import { MockEasyTouch } from './MockEasyTouchBoard';
22
+ import { MockSystemBoard } from './MockSystemBoard';
23
+ import { ControllerType } from '../../controller/Constants';
24
+ import { PoolSystem } from 'controller/Equipment';
25
+ // import { MockAquaLinkBoard } from './MockAquaLinkBoard';
26
+ // import { MockSunTouchBoard } from "./MockSunTouchBoard";
27
+
28
+
29
+ export class MockBoardFactory {
30
+ // Factory create the system board from the controller type. Resist storing
31
+ // the pool system as this can cause a leak. The PoolSystem object already has a reference to this.
32
+ public static fromControllerType(ct: ControllerType, system: PoolSystem) {
33
+ switch (ct) {
34
+ // case ControllerType.IntelliCenter:
35
+ // return new MockIntelliCenterBoard(system);
36
+ // case ControllerType.IntelliTouch:
37
+ // return new MockIntelliTouchBoard(system);
38
+ // case ControllerType.IntelliCom:
39
+ // return new MockIntelliComBoard(system);
40
+ case ControllerType.EasyTouch:
41
+ return new MockEasyTouch(system);
42
+ // case ControllerType.AquaLink:
43
+ // return new MockAquaLinkBoard(system);
44
+ // case ControllerType.SunTouch:
45
+ // return new MockSunTouchBoard(system);
46
+ }
47
+ return new MockSystemBoard(system);
48
+ }
49
+
50
+ }