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.
Files changed (55) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  2. package/Changelog +3 -0
  3. package/README.md +2 -2
  4. package/app.ts +2 -0
  5. package/config/Config.ts +3 -0
  6. package/config/VersionCheck.ts +8 -4
  7. package/controller/Equipment.ts +89 -29
  8. package/controller/Errors.ts +14 -1
  9. package/controller/State.ts +75 -31
  10. package/controller/boards/EasyTouchBoard.ts +81 -36
  11. package/controller/boards/IntelliCenterBoard.ts +96 -32
  12. package/controller/boards/IntelliTouchBoard.ts +103 -29
  13. package/controller/boards/NixieBoard.ts +79 -27
  14. package/controller/boards/SystemBoard.ts +1552 -822
  15. package/controller/comms/Comms.ts +84 -9
  16. package/controller/comms/messages/Messages.ts +10 -4
  17. package/controller/comms/messages/config/ChlorinatorMessage.ts +13 -4
  18. package/controller/comms/messages/config/CircuitGroupMessage.ts +6 -0
  19. package/controller/comms/messages/config/CoverMessage.ts +1 -0
  20. package/controller/comms/messages/config/EquipmentMessage.ts +4 -0
  21. package/controller/comms/messages/config/ExternalMessage.ts +43 -25
  22. package/controller/comms/messages/config/FeatureMessage.ts +8 -1
  23. package/controller/comms/messages/config/GeneralMessage.ts +8 -0
  24. package/controller/comms/messages/config/HeaterMessage.ts +10 -9
  25. package/controller/comms/messages/config/IntellichemMessage.ts +4 -1
  26. package/controller/comms/messages/config/OptionsMessage.ts +13 -1
  27. package/controller/comms/messages/config/PumpMessage.ts +4 -20
  28. package/controller/comms/messages/config/RemoteMessage.ts +4 -0
  29. package/controller/comms/messages/config/ScheduleMessage.ts +11 -0
  30. package/controller/comms/messages/config/SecurityMessage.ts +1 -0
  31. package/controller/comms/messages/config/ValveMessage.ts +12 -2
  32. package/controller/comms/messages/status/ChlorinatorStateMessage.ts +2 -3
  33. package/controller/comms/messages/status/EquipmentStateMessage.ts +74 -22
  34. package/controller/comms/messages/status/HeaterStateMessage.ts +15 -6
  35. package/controller/comms/messages/status/IntelliChemStateMessage.ts +37 -26
  36. package/controller/nixie/Nixie.ts +18 -16
  37. package/controller/nixie/chemistry/ChemController.ts +57 -37
  38. package/controller/nixie/chemistry/Chlorinator.ts +7 -8
  39. package/controller/nixie/circuits/Circuit.ts +17 -0
  40. package/controller/nixie/pumps/Pump.ts +49 -24
  41. package/controller/nixie/schedules/Schedule.ts +1 -1
  42. package/defaultConfig.json +15 -0
  43. package/issue_template.md +1 -1
  44. package/logger/DataLogger.ts +37 -22
  45. package/package.json +3 -1
  46. package/web/Server.ts +515 -27
  47. package/web/bindings/influxDB.json +35 -0
  48. package/web/bindings/mqtt.json +62 -3
  49. package/web/bindings/mqttAlt.json +57 -4
  50. package/web/interfaces/httpInterface.ts +2 -0
  51. package/web/interfaces/influxInterface.ts +3 -2
  52. package/web/interfaces/mqttInterface.ts +12 -1
  53. package/web/services/config/Config.ts +162 -37
  54. package/web/services/state/State.ts +47 -3
  55. 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.search('/state/chemController/:id/doseHistory/ph', async (req, res, next) => {
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)).get());
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.heatSetpoint, 10));
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 Homegrown or REM Chem we
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) {