-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
interval-output.ts
46 lines (37 loc) · 1.18 KB
/
interval-output.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import P1Reader from '../p1-reader';
import Output from './output';
import P1ReaderEvents from '../p1-reader-events';
export default class IntervalOutput extends Output {
private timer?: NodeJS.Timeout;
private publishNextEvent: boolean;
private interval?: number;
constructor(interval?: number) {
super();
this.publishNextEvent = true;
this.interval = interval ?? 60;
}
start(p1Reader: P1Reader): void {
if (p1Reader === undefined) throw new Error('p1Reader is undefined!');
p1Reader.on(P1ReaderEvents.ParsedResult, (result) => {
if (this.publishNextEvent) {
this.emit(P1ReaderEvents.ParsedResult, result);
this.publishNextEvent = false;
}
});
p1Reader.on(P1ReaderEvents.UsageChanged, (result) => {
this.emit(P1ReaderEvents.UsageChanged, result);
});
p1Reader.on(P1ReaderEvents.GasUsageChanged, (result) => {
this.emit(P1ReaderEvents.GasUsageChanged, result);
});
this.timer = setInterval(() => {
this.publishNextEvent = true;
}, (this.interval ?? 60) * 1000);
}
close(): Promise<void> {
if (this.timer) {
clearInterval(this.timer);
}
return Promise.resolve();
}
}