nodejs-poolcontroller 7.6.1 → 7.7.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 (91) hide show
  1. package/.eslintrc.json +44 -44
  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 +220 -215
  8. package/Dockerfile +17 -17
  9. package/Gruntfile.js +40 -40
  10. package/LICENSE +661 -661
  11. package/README.md +191 -191
  12. package/app.ts +1 -1
  13. package/config/Config.ts +14 -0
  14. package/config/VersionCheck.ts +2 -2
  15. package/controller/Constants.ts +2 -1
  16. package/controller/Equipment.ts +2484 -2459
  17. package/controller/Errors.ts +180 -180
  18. package/controller/Lockouts.ts +502 -436
  19. package/controller/State.ts +106 -30
  20. package/controller/boards/AquaLinkBoard.ts +1000 -0
  21. package/controller/boards/BoardFactory.ts +49 -45
  22. package/controller/boards/EasyTouchBoard.ts +2859 -2653
  23. package/controller/boards/IntelliCenterBoard.ts +4198 -4230
  24. package/controller/boards/IntelliComBoard.ts +63 -63
  25. package/controller/boards/IntelliTouchBoard.ts +273 -241
  26. package/controller/boards/NixieBoard.ts +1728 -1675
  27. package/controller/boards/SystemBoard.ts +4925 -4697
  28. package/controller/comms/Comms.ts +442 -479
  29. package/controller/comms/messages/Messages.ts +171 -25
  30. package/controller/comms/messages/config/ChlorinatorMessage.ts +5 -2
  31. package/controller/comms/messages/config/CircuitGroupMessage.ts +0 -0
  32. package/controller/comms/messages/config/CircuitMessage.ts +1 -0
  33. package/controller/comms/messages/config/ConfigMessage.ts +0 -0
  34. package/controller/comms/messages/config/CoverMessage.ts +0 -0
  35. package/controller/comms/messages/config/CustomNameMessage.ts +30 -30
  36. package/controller/comms/messages/config/EquipmentMessage.ts +0 -0
  37. package/controller/comms/messages/config/ExternalMessage.ts +0 -0
  38. package/controller/comms/messages/config/FeatureMessage.ts +0 -0
  39. package/controller/comms/messages/config/GeneralMessage.ts +0 -0
  40. package/controller/comms/messages/config/HeaterMessage.ts +142 -10
  41. package/controller/comms/messages/config/IntellichemMessage.ts +0 -0
  42. package/controller/comms/messages/config/OptionsMessage.ts +4 -21
  43. package/controller/comms/messages/config/PumpMessage.ts +53 -35
  44. package/controller/comms/messages/config/RemoteMessage.ts +0 -0
  45. package/controller/comms/messages/config/ScheduleMessage.ts +350 -347
  46. package/controller/comms/messages/config/SecurityMessage.ts +0 -0
  47. package/controller/comms/messages/config/ValveMessage.ts +1 -1
  48. package/controller/comms/messages/status/ChlorinatorStateMessage.ts +38 -86
  49. package/controller/comms/messages/status/EquipmentStateMessage.ts +58 -22
  50. package/controller/comms/messages/status/HeaterStateMessage.ts +116 -86
  51. package/controller/comms/messages/status/IntelliChemStateMessage.ts +445 -445
  52. package/controller/comms/messages/status/IntelliValveStateMessage.ts +35 -35
  53. package/controller/comms/messages/status/PumpStateMessage.ts +23 -1
  54. package/controller/comms/messages/status/VersionMessage.ts +0 -0
  55. package/controller/nixie/Nixie.ts +162 -162
  56. package/controller/nixie/NixieEquipment.ts +103 -103
  57. package/controller/nixie/bodies/Body.ts +120 -120
  58. package/controller/nixie/bodies/Filter.ts +135 -135
  59. package/controller/nixie/chemistry/ChemController.ts +2511 -2498
  60. package/controller/nixie/chemistry/Chlorinator.ts +363 -314
  61. package/controller/nixie/circuits/Circuit.ts +261 -248
  62. package/controller/nixie/heaters/Heater.ts +650 -648
  63. package/controller/nixie/pumps/Pump.ts +906 -661
  64. package/controller/nixie/schedules/Schedule.ts +313 -257
  65. package/controller/nixie/valves/Valve.ts +170 -170
  66. package/defaultConfig.json +306 -286
  67. package/logger/DataLogger.ts +448 -448
  68. package/logger/Logger.ts +0 -0
  69. package/package.json +56 -56
  70. package/tsconfig.json +25 -25
  71. package/web/Server.ts +92 -47
  72. package/web/bindings/aqualinkD.json +505 -0
  73. package/web/bindings/influxDB.json +1051 -1021
  74. package/web/bindings/mqtt.json +702 -654
  75. package/web/bindings/mqttAlt.json +731 -684
  76. package/web/bindings/rulesManager.json +54 -54
  77. package/web/bindings/smartThings-Hubitat.json +31 -31
  78. package/web/bindings/valveRelays.json +20 -20
  79. package/web/bindings/vera.json +25 -25
  80. package/web/interfaces/baseInterface.ts +137 -136
  81. package/web/interfaces/httpInterface.ts +145 -124
  82. package/web/interfaces/influxInterface.ts +276 -245
  83. package/web/interfaces/mqttInterface.ts +535 -475
  84. package/web/services/config/Config.ts +39 -18
  85. package/web/services/config/ConfigSocket.ts +0 -0
  86. package/web/services/state/State.ts +10 -0
  87. package/web/services/state/StateSocket.ts +4 -4
  88. package/web/services/utilities/Utilities.ts +44 -42
  89. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -52
  90. package/config copy.json +0 -300
  91. package/issue_template.md +0 -52
@@ -62,12 +62,21 @@ export class ConfigRoute {
62
62
  };
63
63
  return res.status(200).send(opts);
64
64
  });
65
- app.get('/config/options/rs485', (req, res) => {
66
- let opts = {
67
- port: config.getSection('controller.comms', { enabled: false, netConnect: false }),
68
- stats: conn.buffer.counter
69
- };
70
- return res.status(200).send(opts);
65
+ app.get('/config/options/rs485', async (req, res, next) => {
66
+ try {
67
+ let opts = { ports: [], local: [] }
68
+ let cfg = config.getSection('controller');
69
+ for (let section in cfg) {
70
+ if (section.startsWith('comms')) {
71
+ let cport = extend(true, { enabled: false, netConnect: false }, cfg[section]);
72
+ let port = conn.findPortById(cport.portId || 0);
73
+ if (typeof port !== 'undefined') cport.stats = port.stats;
74
+ opts.ports.push(cport);
75
+ }
76
+ }
77
+ opts.local = await conn.getLocalPortsAsync() || [];
78
+ return res.status(200).send(opts);
79
+ } catch (err) { next(err); }
71
80
  });
72
81
  app.get('/config/options/circuits', async (req, res, next) => {
73
82
  try {
@@ -156,7 +165,8 @@ export class ConfigRoute {
156
165
  circuits: sys.board.circuits.getCircuitReferences(true, true, true, true),
157
166
  bodies: sys.board.valueMaps.pumpBodies.toArray(),
158
167
  pumps: sys.pumps.get(),
159
- servers: await sys.ncp.getREMServers()
168
+ servers: await sys.ncp.getREMServers(),
169
+ rs485ports: await conn.listInstalledPorts()
160
170
  };
161
171
  // RKS: Why do we need the circuit names? We have the circuits. Is this so
162
172
  // that we can name the pump. I thought that *Touch uses the pump type as the name
@@ -203,7 +213,8 @@ export class ConfigRoute {
203
213
  heaterTypes: sys.board.valueMaps.heaterTypes.toArray(),
204
214
  heatModes: sys.board.valueMaps.heatModes.toArray(),
205
215
  coolDownDelay: sys.general.options.cooldownDelay,
206
- servers: []
216
+ servers: [],
217
+ rs485ports: await conn.listInstalledPorts()
207
218
  };
208
219
  // We only need the servers data when the controller is a Nixie controller. We don't need to
209
220
  // wait for this information if we are dealing with an OCP.
@@ -283,16 +294,19 @@ export class ConfigRoute {
283
294
  return res.status(200).send(opts);
284
295
  } catch (err) { next(err); }
285
296
  });
286
- app.get('/config/options/chlorinators', (req, res) => {
287
- let opts = {
288
- types: sys.board.valueMaps.chlorinatorType.toArray(),
289
- bodies: sys.board.bodies.getBodyAssociations(),
290
- chlorinators: sys.chlorinators.get(),
291
- maxChlorinators: sys.equipment.maxChlorinators,
292
- models: sys.board.valueMaps.chlorinatorModel.toArray(),
293
- equipmentMasters: sys.board.valueMaps.equipmentMaster.toArray()
294
- };
295
- return res.status(200).send(opts);
297
+ app.get('/config/options/chlorinators', async (req, res, next) => {
298
+ try {
299
+ let opts = {
300
+ types: sys.board.valueMaps.chlorinatorType.toArray(),
301
+ bodies: sys.board.bodies.getBodyAssociations(),
302
+ chlorinators: sys.chlorinators.get(),
303
+ maxChlorinators: sys.equipment.maxChlorinators,
304
+ models: sys.board.valueMaps.chlorinatorModel.toArray(),
305
+ equipmentMasters: sys.board.valueMaps.equipmentMaster.toArray(),
306
+ rs485ports: await conn.listInstalledPorts()
307
+ };
308
+ return res.status(200).send(opts);
309
+ } catch (err) { next(err); }
296
310
  });
297
311
  app.get('/config/options/dateTime', (req, res) => {
298
312
  let opts = {
@@ -756,6 +770,13 @@ export class ConfigRoute {
756
770
  }
757
771
  catch (err) { next(err); }
758
772
  });
773
+ app.delete('/app/rs485Port', async (req, res, next) => {
774
+ try {
775
+ let port = await conn.deleteAuxPort(req.body);
776
+ return res.status(200).send(port);
777
+ }
778
+ catch (err) { next(err); }
779
+ });
759
780
  app.get('/app/config/startPacketCapture', (req, res) => {
760
781
  startPacketCapture(true);
761
782
  return res.status(200).send('OK');
File without changes
@@ -161,6 +161,9 @@ export class StateRoute {
161
161
  app.get('/state/feature/:id', (req, res) => {
162
162
  res.status(200).send(state.features.getItemById(parseInt(req.params.id, 10)).get());
163
163
  });
164
+ app.get('/state/schedule/:id', (req, res) => {
165
+ res.status(200).send(state.schedules.getItemById(parseInt(req.params.id, 10)).get());
166
+ });
164
167
  app.get('/state/circuitGroup/:id', (req, res) => {
165
168
  res.status(200).send(state.circuitGroups.getItemById(parseInt(req.params.id, 10)).get());
166
169
  });
@@ -367,6 +370,13 @@ export class StateRoute {
367
370
  }
368
371
  catch (err) { next(err); }
369
372
  });
373
+ app.put('/state/manualOperationPriority', async (req, res, next) => {
374
+ try {
375
+ let cstate = await sys.board.system.setManualOperationPriority(parseInt(req.body.id, 10));
376
+ return res.status(200).send(cstate.get(true));
377
+ }
378
+ catch (err) { next(err); }
379
+ });
370
380
  app.put('/state/lightGroup/runCommand', async (req, res, next) => {
371
381
  try {
372
382
  let sgroup = await sys.board.circuits.runLightGroupCommandAsync(req.body);
@@ -174,7 +174,7 @@ export class StateSocket {
174
174
  sock.on('/circuit', async (data: any) => {
175
175
  try {
176
176
  data = JSON.parse(data);
177
- let id = data.parseInt(data.id, 10);
177
+ let id = parseInt(data.id, 10);
178
178
  if (!isNaN(id) && (typeof data.isOn !== 'undefined' || typeof data.state !== 'undefined')) {
179
179
  await sys.board.circuits.setCircuitStateAsync(id, utils.makeBool(data.isOn || typeof data.state));
180
180
  }
@@ -184,7 +184,7 @@ export class StateSocket {
184
184
  sock.on('/feature', async (data: any) => {
185
185
  try {
186
186
  data = JSON.parse(data);
187
- let id = data.parseInt(data.id, 10);
187
+ let id = parseInt(data.id, 10);
188
188
  if (!isNaN(id) && (typeof data.isOn !== 'undefined' || typeof data.state !== 'undefined')) {
189
189
  await sys.board.features.setFeatureStateAsync(id, utils.makeBool(data.isOn || typeof data.state));
190
190
  }
@@ -194,7 +194,7 @@ export class StateSocket {
194
194
  sock.on('/circuitGroup', async (data: any) => {
195
195
  try {
196
196
  data = JSON.parse(data);
197
- let id = data.parseInt(data.id, 10);
197
+ let id = parseInt(data.id, 10);
198
198
  if (!isNaN(id) && (typeof data.isOn !== 'undefined' || typeof data.state !== 'undefined')) {
199
199
  await sys.board.circuits.setCircuitGroupStateAsync(id, utils.makeBool(data.isOn || typeof data.state));
200
200
  }
@@ -204,7 +204,7 @@ export class StateSocket {
204
204
  sock.on('/lightGroup', async (data: any) => {
205
205
  try {
206
206
  data = JSON.parse(data);
207
- let id = data.parseInt(data.id, 10);
207
+ let id = parseInt(data.id, 10);
208
208
  if (!isNaN(id) && (typeof data.isOn !== 'undefined' || typeof data.state !== 'undefined')) {
209
209
  await sys.board.circuits.setLightGroupStateAsync(id, utils.makeBool(data.isOn || typeof data.state));
210
210
  }
@@ -1,43 +1,45 @@
1
- /* nodejs-poolController. An application to control pool equipment.
2
- Copyright (C) 2016, 2017, 2018, 2019, 2020. Russell Goldin, tagyoureit. russ.goldin@gmail.com
3
-
4
- This program is free software: you can redistribute it and/or modify
5
- it under the terms of the GNU Affero General Public License as
6
- published by the Free Software Foundation, either version 3 of the
7
- License, or (at your option) any later version.
8
-
9
- This program is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU Affero General Public License for more details.
13
-
14
- You should have received a copy of the GNU Affero General Public License
15
- along with this program. If not, see <http://www.gnu.org/licenses/>.
16
- */
17
- import * as express from 'express';
18
- import { SsdpServer} from '../../Server';
19
- import { state } from "../../../controller/State";
20
- import { sys } from "../../../controller/Equipment";
21
-
22
- const extend = require("extend");
23
- export class UtilitiesRoute {
24
-
25
- public static initRoutes(app: express.Application) {
26
- app.get('/device', function(req, res) {
27
- // there's got to be a better way to get this than instantiating SsdpServer() again.
28
- // RKS: There was I made the function static.
29
- let xml = SsdpServer.deviceXML();
30
- res.status(200).set('Content-Type', 'text/xml').send(xml);
31
- });
32
- app.get('/extended/:section', (req, res) => {
33
- let cfg = sys.getSection(req.params.section);
34
- let st = state.getState(req.params.section);
35
- let arr = [];
36
- for (let i = 0; i < cfg.length; i++){
37
- let p = extend(true, {}, cfg[i], st.find(s => s.id === cfg[i].id));
38
- arr.push(p);
39
- }
40
- return res.status(200).send(arr);
41
- });
42
- }
1
+ /* nodejs-poolController. An application to control pool equipment.
2
+ Copyright (C) 2016, 2017, 2018, 2019, 2020. Russell Goldin, tagyoureit. russ.goldin@gmail.com
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU Affero General Public License as
6
+ published by the Free Software Foundation, either version 3 of the
7
+ License, or (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU Affero General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Affero General Public License
15
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+ import * as express from 'express';
18
+ import { SsdpServer} from '../../Server';
19
+ import { state } from "../../../controller/State";
20
+ import { sys } from "../../../controller/Equipment";
21
+ import { webApp } from "../../Server";
22
+ const extend = require("extend");
23
+ export class UtilitiesRoute {
24
+
25
+ public static initRoutes(app: express.Application) {
26
+ app.use('/upnp.xml', async (req, res, next) => {
27
+ try {
28
+ // Put together the upnp device description.
29
+ let ssdp = webApp.findServer('ssdp') as SsdpServer;
30
+ if (typeof ssdp === 'undefined') throw new Error(`SSDP Server not initialized. No upnp information available.`);
31
+ res.status(200).set('Content-Type', 'text/xml').send(ssdp.deviceXML());
32
+ } catch (err) { next(err); }
33
+ });
34
+ app.get('/extended/:section', (req, res) => {
35
+ let cfg = sys.getSection(req.params.section);
36
+ let st = state.getState(req.params.section);
37
+ let arr = [];
38
+ for (let i = 0; i < cfg.length; i++){
39
+ let p = extend(true, {}, cfg[i], st.find(s => s.id === cfg[i].id));
40
+ arr.push(p);
41
+ }
42
+ return res.status(200).send(arr);
43
+ });
44
+ }
43
45
  }
@@ -1,52 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Describe the bug**
11
- A clear and concise description of what the bug is.
12
-
13
- **To Reproduce**
14
- Steps to reproduce the behavior:
15
- 1. Go to '...'
16
- 2. Click on '....'
17
- 3. Scroll down to '....'
18
- 4. See error
19
-
20
- **Expected behavior**
21
- A clear and concise description of what you expected to happen.
22
-
23
- **Screenshots**
24
- If applicable, add screenshots to help explain your problem.
25
-
26
- **Packet Capture**
27
- Follow the instructions to complete a [packet capture](https://github.com/tagyoureit/nodejs-poolController/wiki/How-to-capture-all-packets-for-issue-resolution) and attach the resulting zip/log files.
28
-
29
- **Pool Equipment**
30
- - Controller: [e.g. IntelliCenter, EasyTouch, IntelliTouch]
31
- - Controller Model: [e.g. IntelliCenter i5PS, EasyTouch2 8P]
32
- - Controller Firmware Version: [e.g. 1.047]
33
- - Pump(s) manufacturer and model: [e.g. IntelliFlow 2 VST 011056]
34
- - Chlorinator: [e.g. iChlor, IntelliChlor-40]
35
- - Heater(s): [e.g. gas, solar, heatpump, ultratemp]
36
- - Chemical controller: [e.g. IntelliChem, Relay Equipment Manager (REM)]
37
- - Valves: [e.g. Intellivalve]
38
- - Any other relevant equipment:
39
-
40
- **Desktop (please complete the following information):**
41
- - OS: [e.g. iOS]
42
- - Browser [e.g. chrome, safari]
43
- - Version [e.g. 22]
44
-
45
- **Smartphone (please complete the following information):**
46
- - Device: [e.g. iPhone6]
47
- - OS: [e.g. iOS8.1]
48
- - Browser [e.g. stock browser, safari]
49
- - Version [e.g. 22]
50
-
51
- **Additional context**
52
- Add any other context about the problem here.
@@ -1,300 +0,0 @@
1
- {
2
- "controller": {
3
- "comms": {
4
- "enabled": true,
5
- "rs485Port": "/dev/ttyUSB0",
6
- "mockPort": false,
7
- "netConnect": true,
8
- "netHost": "10.0.0.170",
9
- "netPort": 9801,
10
- "inactivityRetry": 10,
11
- "portSettings": {
12
- "baudRate": 9600,
13
- "dataBits": 8,
14
- "parity": "none",
15
- "stopBits": 1,
16
- "flowControl": false,
17
- "autoOpen": false,
18
- "lock": false
19
- }
20
- }
21
- },
22
- "web": {
23
- "servers": {
24
- "http2": {
25
- "enabled": false,
26
- "uuid": "2365fe2f-97e9-4353-95d4-9ccd71e0ce94"
27
- },
28
- "http": {
29
- "enabled": true,
30
- "ip": "0.0.0.0",
31
- "port": 4200,
32
- "httpsRedirect": false,
33
- "authentication": "none",
34
- "authFile": "/users.htpasswd",
35
- "uuid": "4ff21da9-8ba5-49e6-8c87-20e1c988ef9d"
36
- },
37
- "https": {
38
- "enabled": false,
39
- "ip": "0.0.0.0",
40
- "port": 4201,
41
- "authentication": "none",
42
- "authFile": "/users.htpasswd",
43
- "sslKeyFile": "",
44
- "sslCertFile": "",
45
- "uuid": "fb7e9f5e-d662-4000-b1ca-c01e17f2fc49"
46
- },
47
- "mdns": {
48
- "enabled": false,
49
- "uuid": "1e7bd3d0-f1d0-4dc5-95d4-f0bd0ceb2d76"
50
- },
51
- "ssdp": {
52
- "enabled": true,
53
- "uuid": "4fd33942-66c9-46a7-8a5a-9e50fc0f315f"
54
- }
55
- },
56
- "services": {},
57
- "interfaces": {
58
- "smartThings": {
59
- "name": "SmartThings",
60
- "enabled": false,
61
- "fileName": "smartThings-Hubitat.json",
62
- "globals": {},
63
- "options": {
64
- "host": "0.0.0.0",
65
- "port": 39500
66
- },
67
- "uuid": "95b47bcc-fb46-47c2-a44a-cd9aaa867ccc"
68
- },
69
- "hubitat": {
70
- "name": "Hubitat",
71
- "enabled": false,
72
- "fileName": "smartThings-Hubitat.json",
73
- "globals": {},
74
- "options": {
75
- "host": "0.0.0.0",
76
- "port": 39501
77
- },
78
- "uuid": "4573370e-5ae1-40a5-bda3-9597b17e4050"
79
- },
80
- "vera": {
81
- "name": "Vera",
82
- "enabled": false,
83
- "fileName": "vera.json",
84
- "vars": {
85
- "deviceId": 0
86
- },
87
- "options": {
88
- "host": "",
89
- "port": 3480
90
- },
91
- "uuid": "bc256cd7-af18-41f3-a94d-43397c835165"
92
- },
93
- "valveRelay": {
94
- "name": "Valve Relays",
95
- "enabled": false,
96
- "fileName": "valveRelays.json",
97
- "vars": {
98
- "valveIds": []
99
- },
100
- "options": {
101
- "host": "0.0.0.0",
102
- "port": 8081
103
- },
104
- "uuid": "415c5cbd-01e0-43bb-99c9-15a003febe0c"
105
- },
106
- "influxDB": {
107
- "name": "InfluxDB",
108
- "type": "influx",
109
- "enabled": false,
110
- "fileName": "influxDB.json",
111
- "options": {
112
- "protocol": "http",
113
- "host": "192.168.0.1",
114
- "port": 32770,
115
- "username": "",
116
- "password": "",
117
- "database": "pool",
118
- "retentionPolicy": "autogen"
119
- },
120
- "uuid": "7e7875c8-0161-448b-b9fa-c818f0d3d49f"
121
- },
122
- "mqtt": {
123
- "name": "MQTT",
124
- "type": "mqtt",
125
- "enabled": false,
126
- "fileName": "mqtt.json",
127
- "globals": {},
128
- "options": {
129
- "protocol": "mqtt://",
130
- "host": "192.168.0.1",
131
- "port": 1883,
132
- "username": "",
133
- "password": "",
134
- "rootTopic": "@bind=(state.equipment.model).replace(' ','-').replace('/','').toLowerCase();",
135
- "retain": true,
136
- "qos": 0,
137
- "changesOnly": true
138
- },
139
- "uuid": "dec40fe7-70d5-48d1-8f57-0e1a474838e6"
140
- },
141
- "mqttAlt": {
142
- "name": "MQTTAlt",
143
- "type": "mqtt",
144
- "enabled": false,
145
- "fileName": "mqttAlt.json",
146
- "globals": {},
147
- "options": {
148
- "protocol": "mqtt://",
149
- "host": "192.168.0.1",
150
- "port": 1883,
151
- "username": "",
152
- "password": "",
153
- "rootTopic": "@bind=(state.equipment.model).replace(' ','-').replace('/','').toLowerCase();Alt",
154
- "retain": true,
155
- "qos": 0,
156
- "changesOnly": true
157
- },
158
- "uuid": "b8b0e719-a81f-4085-b69e-5df3adfa990c"
159
- },
160
- "rem": {
161
- "name": "Relay Equipment Manager",
162
- "type": "rem",
163
- "enabled": true,
164
- "options": {
165
- "protocol": "http://",
166
- "host": "10.0.0.98",
167
- "port": "8080",
168
- "headers": {
169
- "content-type": "application/json"
170
- }
171
- },
172
- "socket": {
173
- "transports": [
174
- "websocket"
175
- ],
176
- "upgrade": false,
177
- "reconnectionDelay": 2000,
178
- "reconnection": true,
179
- "reconnectionDelayMax": 20000
180
- },
181
- "uuid": "af4c8252-0715-4edd-872f-9eeda8f18754"
182
- },
183
- "rem2": {
184
- "name": "Relay Equipment Manager2",
185
- "type": "rem",
186
- "enabled": false,
187
- "options": {
188
- "protocol": "http://",
189
- "host": "raspberrypi3",
190
- "port": "8080",
191
- "headers": {
192
- "content-type": "application/json"
193
- }
194
- },
195
- "socket": {
196
- "transports": [
197
- "websocket"
198
- ],
199
- "upgrade": false,
200
- "reconnectionDelay": 2000,
201
- "reconnection": true,
202
- "reconnectionDelayMax": 20000
203
- },
204
- "uuid": "9346f2a7-734d-475b-a90e-2b43f6131a4c"
205
- },
206
- "rulesManager": {
207
- "name": "Rules Manager",
208
- "type": "http",
209
- "enabled": false,
210
- "fileName": "rulesManager.json",
211
- "globals": {},
212
- "options": {
213
- "host": "localhost",
214
- "port": 4200
215
- },
216
- "uuid": "65ee2581-e652-427e-99c6-17c6aa02a6e3"
217
- }
218
- }
219
- },
220
- "log": {
221
- "packet": {
222
- "enabled": true,
223
- "logToConsole": true,
224
- "logToFile": false,
225
- "filename": "packetLog",
226
- "invalid": false,
227
- "broadcast": {
228
- "enabled": true,
229
- "includeActions": [
230
- 23,
231
- 24,
232
- 152,
233
- 155,
234
- 215,
235
- 216
236
- ],
237
- "includeSource": [],
238
- "includeDest": [],
239
- "excludeActions": [],
240
- "excludeSource": [],
241
- "excludeDest": []
242
- },
243
- "pump": {
244
- "enabled": false,
245
- "includeActions": [],
246
- "includeSource": [],
247
- "includeDest": [],
248
- "excludeActions": [],
249
- "excludeSource": [],
250
- "excludeDest": []
251
- },
252
- "chlorinator": {
253
- "enabled": false,
254
- "includeSource": [],
255
- "includeDest": [],
256
- "excludeSource": [],
257
- "excludeDest": []
258
- },
259
- "intellichem": {
260
- "enabled": false,
261
- "includeActions": [],
262
- "excludeActions": [],
263
- "includeSource": [],
264
- "includeDest": [],
265
- "excludeSource": [],
266
- "excludeDest": []
267
- },
268
- "intellivalve": {
269
- "enabled": false,
270
- "includeActions": [],
271
- "excludeActions": [],
272
- "includeSource": [],
273
- "includeDest": [],
274
- "excludeSource": [],
275
- "excludeDest": []
276
- },
277
- "unidentified": {
278
- "enabled": true,
279
- "includeSource": [],
280
- "includeDest": [],
281
- "excludeSource": [],
282
- "excludeDest": []
283
- },
284
- "unknown": {
285
- "enabled": true,
286
- "includeSource": [],
287
- "includeDest": [],
288
- "excludeSource": [],
289
- "excludeDest": []
290
- }
291
- },
292
- "app": {
293
- "enabled": true,
294
- "level": "verbose",
295
- "captureForReplay": false,
296
- "logToFile": false
297
- }
298
- },
299
- "appVersion": "6.5.2"
300
- }
package/issue_template.md DELETED
@@ -1,52 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Describe the bug**
11
- A clear and concise description of what the bug is.
12
-
13
- **To Reproduce**
14
- Steps to reproduce the behavior:
15
- 1. Go to '...'
16
- 2. Click on '....'
17
- 3. Scroll down to '....'
18
- 4. See error
19
-
20
- **Expected behavior**
21
- A clear and concise description of what you expected to happen.
22
-
23
- **Screenshots**
24
- If applicable, add screenshots to help explain your problem.
25
-
26
- **Packet Capture**
27
- Follow the instructions to complete a [packet capture](https://github.com/tagyoureit/nodejs-poolController/wiki/How-to-capture-all-packets-for-issue-resolution) and attach the resulting zip/log files.
28
-
29
- **Pool Equipment**
30
- - Controller: [e.g. IntelliCenter, EasyTouch, IntelliTouch]
31
- - Controller Model: [e.g. IntelliCenter i5PS, EasyTouch2 8P]
32
- - Controller Firmware Version: [e.g. 1.047]
33
- - Pump(s) manufacturer and model: [e.g. IntelliFlow 2 VST 011056]
34
- - Chlorinator: [e.g. iChlor, IntelliChlor-40]
35
- - Heater(s): [e.g. gas, solar, heatpump, ultratemp]
36
- - Chemical controller: [e.g. IntelliChem, Relay Equipment Manager (REM)]
37
- - Valves: [e.g. Intellivalve]
38
- - Any other relevant equipment:
39
-
40
- **Desktop (please complete the following information):**
41
- - OS: [e.g. iOS]
42
- - Browser [e.g. chrome, safari]
43
- - Version [e.g. 22]
44
-
45
- **Smartphone (please complete the following information):**
46
- - Device: [e.g. iPhone6]
47
- - OS: [e.g. iOS8.1]
48
- - Browser [e.g. stock browser, safari]
49
- - Version [e.g. 22]
50
-
51
- **Additional context**
52
- Add any other context about the problem here.