nodejs-poolcontroller 7.4.0 → 7.5.1
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/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/Changelog +3 -0
- package/README.md +2 -2
- package/app.ts +2 -0
- package/config/Config.ts +3 -0
- package/config/VersionCheck.ts +8 -4
- package/controller/Equipment.ts +89 -29
- package/controller/Errors.ts +14 -1
- package/controller/State.ts +75 -31
- package/controller/boards/EasyTouchBoard.ts +81 -36
- package/controller/boards/IntelliCenterBoard.ts +96 -32
- package/controller/boards/IntelliTouchBoard.ts +103 -29
- package/controller/boards/NixieBoard.ts +79 -27
- package/controller/boards/SystemBoard.ts +1552 -822
- package/controller/comms/Comms.ts +84 -9
- package/controller/comms/messages/Messages.ts +10 -4
- package/controller/comms/messages/config/ChlorinatorMessage.ts +13 -4
- package/controller/comms/messages/config/CircuitGroupMessage.ts +6 -0
- package/controller/comms/messages/config/CoverMessage.ts +1 -0
- package/controller/comms/messages/config/EquipmentMessage.ts +4 -0
- package/controller/comms/messages/config/ExternalMessage.ts +43 -25
- package/controller/comms/messages/config/FeatureMessage.ts +8 -1
- package/controller/comms/messages/config/GeneralMessage.ts +8 -0
- package/controller/comms/messages/config/HeaterMessage.ts +10 -9
- package/controller/comms/messages/config/IntellichemMessage.ts +4 -1
- package/controller/comms/messages/config/OptionsMessage.ts +13 -1
- package/controller/comms/messages/config/PumpMessage.ts +4 -20
- package/controller/comms/messages/config/RemoteMessage.ts +4 -0
- package/controller/comms/messages/config/ScheduleMessage.ts +11 -0
- package/controller/comms/messages/config/SecurityMessage.ts +1 -0
- package/controller/comms/messages/config/ValveMessage.ts +12 -2
- package/controller/comms/messages/status/ChlorinatorStateMessage.ts +2 -3
- package/controller/comms/messages/status/EquipmentStateMessage.ts +74 -22
- package/controller/comms/messages/status/HeaterStateMessage.ts +15 -6
- package/controller/comms/messages/status/IntelliChemStateMessage.ts +37 -26
- package/controller/nixie/Nixie.ts +18 -16
- package/controller/nixie/chemistry/ChemController.ts +57 -37
- package/controller/nixie/chemistry/Chlorinator.ts +7 -8
- package/controller/nixie/circuits/Circuit.ts +17 -0
- package/controller/nixie/pumps/Pump.ts +49 -24
- package/controller/nixie/schedules/Schedule.ts +1 -1
- package/defaultConfig.json +15 -0
- package/issue_template.md +1 -1
- package/logger/DataLogger.ts +37 -22
- package/package.json +3 -1
- package/web/Server.ts +515 -27
- package/web/bindings/influxDB.json +35 -0
- package/web/bindings/mqtt.json +62 -3
- package/web/bindings/mqttAlt.json +57 -4
- package/web/interfaces/httpInterface.ts +2 -0
- package/web/interfaces/influxInterface.ts +3 -2
- package/web/interfaces/mqttInterface.ts +12 -1
- package/web/services/config/Config.ts +162 -37
- package/web/services/state/State.ts +47 -3
- package/web/services/state/StateSocket.ts +1 -1
|
@@ -15,6 +15,8 @@ You should have received a copy of the GNU Affero General Public License
|
|
|
15
15
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
import * as express from "express";
|
|
18
|
+
import * as extend from "extend";
|
|
19
|
+
|
|
18
20
|
import { state, ICircuitState, LightGroupState, ICircuitGroupState, ChemicalDoseState } from "../../../controller/State";
|
|
19
21
|
import { sys } from "../../../controller/Equipment";
|
|
20
22
|
import { utils } from '../../../controller/Constants';
|
|
@@ -79,7 +81,21 @@ export class StateRoute {
|
|
|
79
81
|
catch (err) { next(err); }
|
|
80
82
|
|
|
81
83
|
});
|
|
82
|
-
app.
|
|
84
|
+
app.get('/state/chemController/:id/doseLog/ph', async (req, res, next) => {
|
|
85
|
+
try {
|
|
86
|
+
let schem = state.chemControllers.getItemById(parseInt(req.params.id));
|
|
87
|
+
let filter = req.body || {};
|
|
88
|
+
let dh = await DataLogger.readFromEndAsync(`chemDosage_${schem.ph.chemType}.log`, ChemicalDoseState, (lineNumber: number, entry: ChemicalDoseState, arr: ChemicalDoseState[]): boolean => {
|
|
89
|
+
if (entry.id !== schem.id) return false;
|
|
90
|
+
if (typeof filter.lines !== 'undefined' && filter.lines <= arr.length) return false;
|
|
91
|
+
if (typeof filter.date !== 'undefined' && entry.end < filter.date) return false;
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
return res.status(200).send(dh);
|
|
95
|
+
}
|
|
96
|
+
catch (err) { next(err); }
|
|
97
|
+
});
|
|
98
|
+
app.search('/state/chemController/:id/doseLog/ph', async (req, res, next) => {
|
|
83
99
|
try {
|
|
84
100
|
let schem = state.chemControllers.getItemById(parseInt(req.params.id));
|
|
85
101
|
let filter = req.body || {};
|
|
@@ -93,6 +109,34 @@ export class StateRoute {
|
|
|
93
109
|
}
|
|
94
110
|
catch (err) { next(err); }
|
|
95
111
|
});
|
|
112
|
+
app.get('/state/chemController/:id/doseLog/orp', async (req, res, next) => {
|
|
113
|
+
try {
|
|
114
|
+
let schem = state.chemControllers.getItemById(parseInt(req.params.id));
|
|
115
|
+
let filter = req.body || {};
|
|
116
|
+
let dh = await DataLogger.readFromEndAsync(`chemDosage_orp.log`, ChemicalDoseState, (lineNumber: number, entry: ChemicalDoseState, arr: ChemicalDoseState[]): boolean => {
|
|
117
|
+
if (entry.id !== schem.id) return false;
|
|
118
|
+
if (typeof filter.lines !== 'undefined' && filter.lines <= arr.length) return false;
|
|
119
|
+
if (typeof filter.date !== 'undefined' && entry.end < filter.date) return false;
|
|
120
|
+
return true;
|
|
121
|
+
});
|
|
122
|
+
return res.status(200).send(dh);
|
|
123
|
+
}
|
|
124
|
+
catch (err) { next(err); }
|
|
125
|
+
});
|
|
126
|
+
app.search('/state/chemController/:id/doseLog/orp', async (req, res, next) => {
|
|
127
|
+
try {
|
|
128
|
+
let schem = state.chemControllers.getItemById(parseInt(req.params.id));
|
|
129
|
+
let filter = req.body || {};
|
|
130
|
+
let dh = DataLogger.readFromEnd(`chemDosage_orp.log`, ChemicalDoseState, (lineNumber: number, entry: ChemicalDoseState, arr: ChemicalDoseState[]): boolean => {
|
|
131
|
+
if (entry.id !== schem.id) return;
|
|
132
|
+
if (typeof filter.lines !== 'undefined' && filter.lines <= arr.length) return false;
|
|
133
|
+
if (typeof filter.date !== 'undefined' && entry.end < filter.date) return false;
|
|
134
|
+
return true;
|
|
135
|
+
});
|
|
136
|
+
return res.status(200).send(dh);
|
|
137
|
+
}
|
|
138
|
+
catch (err) { next(err); }
|
|
139
|
+
});
|
|
96
140
|
app.put('/state/chemController/cancelDosing', async (req, res, next) => {
|
|
97
141
|
try {
|
|
98
142
|
let schem = await sys.board.chemControllers.cancelDosingAsync(req.body);
|
|
@@ -109,7 +153,7 @@ export class StateRoute {
|
|
|
109
153
|
});
|
|
110
154
|
|
|
111
155
|
app.get('/state/chlorinator/:id', (req, res) => {
|
|
112
|
-
res.status(200).send(state.chlorinators.getItemById(parseInt(req.params.id, 10)).
|
|
156
|
+
res.status(200).send(state.chlorinators.getItemById(parseInt(req.params.id, 10), false).getExtended());
|
|
113
157
|
});
|
|
114
158
|
app.get('/state/circuit/:id', (req, res) => {
|
|
115
159
|
res.status(200).send(state.circuits.getItemById(parseInt(req.params.id, 10)).get());
|
|
@@ -229,7 +273,7 @@ export class StateRoute {
|
|
|
229
273
|
if (typeof req.body.heatSetpoint !== 'undefined' && !isNaN(parseInt(req.body.heatSetpoint, 10)))
|
|
230
274
|
await sys.board.bodies.setHeatSetpointAsync(body, parseInt(req.body.heatSetpoint, 10));
|
|
231
275
|
else if (typeof req.body.setPoint !== 'undefined' && !isNaN(parseInt(req.body.setPoint, 10)))
|
|
232
|
-
await sys.board.bodies.setHeatSetpointAsync(body, parseInt(req.body.
|
|
276
|
+
await sys.board.bodies.setHeatSetpointAsync(body, parseInt(req.body.setpoint, 10));
|
|
233
277
|
let tbody = state.temps.bodies.getItemById(body.id);
|
|
234
278
|
return res.status(200).send(tbody.get(true));
|
|
235
279
|
} catch (err) { next(err); }
|
|
@@ -161,7 +161,7 @@ export class StateSocket {
|
|
|
161
161
|
if (typeof data.orpTank.units === 'string') scontroller.orp.tank.units = controller.orp.tank.units = data.orpTank.units;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
// Need to build this out to include the type of controller. If this is
|
|
164
|
+
// Need to build this out to include the type of controller. If this is REM Chem we
|
|
165
165
|
// will send the whole rest of the nut over to it. Intellichem will only let us
|
|
166
166
|
// set specific values.
|
|
167
167
|
if (controller.type === 3) {
|