Skip to content

Commit 560a64a

Browse files
committed
feat(pump): add pump error code parsing and state tracking
#1197
1 parent 2c60c06 commit 560a64a

3 files changed

Lines changed: 31 additions & 0 deletions

File tree

controller/State.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,13 @@ export class PumpState extends EqState {
10621062
public set isActive(val: boolean) { this.setDataVal('isActive', val); }
10631063
public get ppc(): number { return this.data.ppc; } // I think this is actually the filter % for vf and vsf. Pump Pressure determines how much backpressure.
10641064
public set ppc(val: number) { this.setDataVal('ppc', val); }
1065+
public get pumpError(): number { return typeof (this.data.pumpError) !== 'undefined' ? this.data.pumpError.val : 0; }
1066+
public set pumpError(val: number) {
1067+
if (this.pumpError !== val) {
1068+
this.data.pumpError = sys.board.valueMaps.pumpErrors.transform(val);
1069+
this.hasChanged = true;
1070+
}
1071+
}
10651072
public get status(): number { return typeof (this.data.status) !== 'undefined' ? this.data.status.val : -1; }
10661073
public set status(val: number) {
10671074
// quick fix for #172

controller/boards/SystemBoard.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ export class byteValueMaps {
149149
}
150150
return { val: byte, name: 'unknown' + byte, desc: 'Unknown status ' + byte };
151151
};
152+
this.pumpErrors.transform = function (byte) {
153+
if (byte === 0) return extend(true, {}, this.get(0), { val: byte });
154+
let v = this.get(byte);
155+
if (typeof v !== 'undefined') return extend(true, {}, v, { val: byte });
156+
return { val: byte, name: 'error' + byte, desc: 'Unspecified Pump Error ' + byte };
157+
};
152158
this.scheduleTypes.transform = function (byte) {
153159
return (byte & 128) > 0 ? extend(true, { val: 128 }, this.get(128)) : extend(true, { val: 0 }, this.get(0));
154160
};
@@ -505,6 +511,10 @@ export class byteValueMaps {
505511
[15, { name: 'error15', desc: 'Unspecified Error 15' }],
506512
[16, { name: 'commfailure', desc: 'Communication failure' }]
507513
]);
514+
public pumpErrors: byteValueMap = new byteValueMap([
515+
[0, { name: 'ok', desc: 'Ok' }],
516+
[2, { name: 'filter', desc: 'Filter Error' }]
517+
]);
508518
public pumpUnits: byteValueMap = new byteValueMap([
509519
[0, { name: 'rpm', desc: 'RPM' }],
510520
[1, { name: 'gpm', desc: 'GPM' }]

controller/comms/messages/status/PumpStateMessage.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,20 @@ export class PumpStateMessage {
108108
pump.rpm = (typeof ptype !== 'undefined' && (ptype.maxSpeed > 0 || ptype.name === 'vf')) ? (msg.extractPayloadByte(5) * 256) + msg.extractPayloadByte(6) : 0;
109109
pump.flow = (typeof ptype !== 'undefined' && ptype.maxFlow > 0) ? msg.extractPayloadByte(7) : 0;
110110
pump.ppc = msg.extractPayloadByte(8);
111+
// Byte 10: Pump error code (0x00=OK, 0x02=Filter Error).
112+
// See discussion #1197 for protocol documentation.
113+
let pumpError = msg.extractPayloadByte(10);
114+
pump.pumpError = pumpError;
115+
if (pumpError !== 0) {
116+
let errDesc = sys.board.valueMaps.pumpErrors.transform(pumpError);
117+
state.equipment.messages.setMessageByCode(
118+
`pump:${pumpId}:error`,
119+
'warning',
120+
`${pumpCfg.name}: ${errDesc.desc}`
121+
);
122+
} else {
123+
state.equipment.messages.removeItemByCode(`pump:${pumpId}:error`);
124+
}
111125
pump.status = (msg.extractPayloadByte(11) * 256) + msg.extractPayloadByte(12); // 16-bits of error codes.
112126
pump.name = pumpCfg.name;
113127
// Byte 14 ticks up every minute while byte 13 ticks up every 59 minutes.

0 commit comments

Comments
 (0)