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.
- package/.eslintrc.json +44 -44
- package/.github/ISSUE_TEMPLATE/1-bug-report.yml +84 -0
- package/.github/ISSUE_TEMPLATE/2-docs.md +12 -0
- package/.github/ISSUE_TEMPLATE/3-proposal.md +28 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/CONTRIBUTING.md +74 -74
- package/Changelog +220 -215
- package/Dockerfile +17 -17
- package/Gruntfile.js +40 -40
- package/LICENSE +661 -661
- package/README.md +191 -191
- package/app.ts +1 -1
- package/config/Config.ts +14 -0
- package/config/VersionCheck.ts +2 -2
- package/controller/Constants.ts +2 -1
- package/controller/Equipment.ts +2484 -2459
- package/controller/Errors.ts +180 -180
- package/controller/Lockouts.ts +502 -436
- package/controller/State.ts +106 -30
- package/controller/boards/AquaLinkBoard.ts +1000 -0
- package/controller/boards/BoardFactory.ts +49 -45
- package/controller/boards/EasyTouchBoard.ts +2859 -2653
- package/controller/boards/IntelliCenterBoard.ts +4198 -4230
- package/controller/boards/IntelliComBoard.ts +63 -63
- package/controller/boards/IntelliTouchBoard.ts +273 -241
- package/controller/boards/NixieBoard.ts +1728 -1675
- package/controller/boards/SystemBoard.ts +4925 -4697
- package/controller/comms/Comms.ts +442 -479
- package/controller/comms/messages/Messages.ts +171 -25
- package/controller/comms/messages/config/ChlorinatorMessage.ts +5 -2
- package/controller/comms/messages/config/CircuitGroupMessage.ts +0 -0
- package/controller/comms/messages/config/CircuitMessage.ts +1 -0
- package/controller/comms/messages/config/ConfigMessage.ts +0 -0
- package/controller/comms/messages/config/CoverMessage.ts +0 -0
- package/controller/comms/messages/config/CustomNameMessage.ts +30 -30
- package/controller/comms/messages/config/EquipmentMessage.ts +0 -0
- package/controller/comms/messages/config/ExternalMessage.ts +0 -0
- package/controller/comms/messages/config/FeatureMessage.ts +0 -0
- package/controller/comms/messages/config/GeneralMessage.ts +0 -0
- package/controller/comms/messages/config/HeaterMessage.ts +142 -10
- package/controller/comms/messages/config/IntellichemMessage.ts +0 -0
- package/controller/comms/messages/config/OptionsMessage.ts +4 -21
- package/controller/comms/messages/config/PumpMessage.ts +53 -35
- package/controller/comms/messages/config/RemoteMessage.ts +0 -0
- package/controller/comms/messages/config/ScheduleMessage.ts +350 -347
- package/controller/comms/messages/config/SecurityMessage.ts +0 -0
- package/controller/comms/messages/config/ValveMessage.ts +1 -1
- package/controller/comms/messages/status/ChlorinatorStateMessage.ts +38 -86
- package/controller/comms/messages/status/EquipmentStateMessage.ts +58 -22
- package/controller/comms/messages/status/HeaterStateMessage.ts +116 -86
- package/controller/comms/messages/status/IntelliChemStateMessage.ts +445 -445
- package/controller/comms/messages/status/IntelliValveStateMessage.ts +35 -35
- package/controller/comms/messages/status/PumpStateMessage.ts +23 -1
- package/controller/comms/messages/status/VersionMessage.ts +0 -0
- package/controller/nixie/Nixie.ts +162 -162
- package/controller/nixie/NixieEquipment.ts +103 -103
- package/controller/nixie/bodies/Body.ts +120 -120
- package/controller/nixie/bodies/Filter.ts +135 -135
- package/controller/nixie/chemistry/ChemController.ts +2511 -2498
- package/controller/nixie/chemistry/Chlorinator.ts +363 -314
- package/controller/nixie/circuits/Circuit.ts +261 -248
- package/controller/nixie/heaters/Heater.ts +650 -648
- package/controller/nixie/pumps/Pump.ts +906 -661
- package/controller/nixie/schedules/Schedule.ts +313 -257
- package/controller/nixie/valves/Valve.ts +170 -170
- package/defaultConfig.json +306 -286
- package/logger/DataLogger.ts +448 -448
- package/logger/Logger.ts +0 -0
- package/package.json +56 -56
- package/tsconfig.json +25 -25
- package/web/Server.ts +92 -47
- package/web/bindings/aqualinkD.json +505 -0
- package/web/bindings/influxDB.json +1051 -1021
- package/web/bindings/mqtt.json +702 -654
- package/web/bindings/mqttAlt.json +731 -684
- package/web/bindings/rulesManager.json +54 -54
- package/web/bindings/smartThings-Hubitat.json +31 -31
- package/web/bindings/valveRelays.json +20 -20
- package/web/bindings/vera.json +25 -25
- package/web/interfaces/baseInterface.ts +137 -136
- package/web/interfaces/httpInterface.ts +145 -124
- package/web/interfaces/influxInterface.ts +276 -245
- package/web/interfaces/mqttInterface.ts +535 -475
- package/web/services/config/Config.ts +39 -18
- package/web/services/config/ConfigSocket.ts +0 -0
- package/web/services/state/State.ts +10 -0
- package/web/services/state/StateSocket.ts +4 -4
- package/web/services/utilities/Utilities.ts +44 -42
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -52
- package/config copy.json +0 -300
- 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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
let
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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.
|
package/config copy.json
DELETED
|
@@ -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.
|