Skip to content

Commit 9aa46ee

Browse files
committed
### 0.7.6: Maintenance Release
**Enhancements** - Added time slots for TLXH
1 parent 87226df commit 9aa46ee

6 files changed

+324
-221
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
### 0.7.6: Maintenance Release
2+
3+
**Enhancements**
4+
5+
- Added time slots for TLXH
6+
17
### 0.7.5: Maintenance Release
28

39
**Enhancements**

lib/growatttype.js

+126
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,132 @@ module.exports = {
224224
parseRet: PARSERET.parseRetNum,
225225
param: { param1: { name: 'Active power rate', type: 'INUM_0_100', unit: '%' }, param2: { name: 'Store', type: 'BOOL', def: false } },
226226
},
227+
timeSlot1: {
228+
name: 'Time Slot 1',
229+
type: 'time_segment1',
230+
paramId: 'time_segment1',
231+
parseRet: PARSERET.parseTLXHTimeSlot,
232+
param: {
233+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
234+
param2: { name: 'Start HH', type: 'INUM_0_24' },
235+
param3: { name: 'Start MI', type: 'INUM_0_60' },
236+
param4: { name: 'End HH', type: 'INUM_0_24' },
237+
param5: { name: 'End MI', type: 'INUM_0_60' },
238+
param6: { name: 'Enabled', type: 'BOOL' },
239+
},
240+
},
241+
timeSlot2: {
242+
name: 'Time Slot 2',
243+
type: 'time_segment2',
244+
paramId: 'time_segment2',
245+
parseRet: PARSERET.parseTLXHTimeSlot,
246+
param: {
247+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
248+
param2: { name: 'Start HH', type: 'INUM_0_24' },
249+
param3: { name: 'Start MI', type: 'INUM_0_60' },
250+
param4: { name: 'End HH', type: 'INUM_0_24' },
251+
param5: { name: 'End MI', type: 'INUM_0_60' },
252+
param6: { name: 'Enabled', type: 'BOOL' },
253+
},
254+
},
255+
timeSlot3: {
256+
name: 'Time Slot 3',
257+
type: 'time_segment3',
258+
paramId: 'time_segment3',
259+
parseRet: PARSERET.parseTLXHTimeSlot,
260+
param: {
261+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
262+
param2: { name: 'Start HH', type: 'INUM_0_24' },
263+
param3: { name: 'Start MI', type: 'INUM_0_60' },
264+
param4: { name: 'End HH', type: 'INUM_0_24' },
265+
param5: { name: 'End MI', type: 'INUM_0_60' },
266+
param6: { name: 'Enabled', type: 'BOOL' },
267+
},
268+
},
269+
timeSlot4: {
270+
name: 'Time Slot 4',
271+
type: 'time_segment4',
272+
paramId: 'time_segment4',
273+
parseRet: PARSERET.parseTLXHTimeSlot,
274+
param: {
275+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
276+
param2: { name: 'Start HH', type: 'INUM_0_24' },
277+
param3: { name: 'Start MI', type: 'INUM_0_60' },
278+
param4: { name: 'End HH', type: 'INUM_0_24' },
279+
param5: { name: 'End MI', type: 'INUM_0_60' },
280+
param6: { name: 'Enabled', type: 'BOOL' },
281+
},
282+
},
283+
timeSlot5: {
284+
name: 'Time Slot 5',
285+
type: 'time_segment5',
286+
paramId: 'time_segment5',
287+
parseRet: PARSERET.parseTLXHTimeSlot,
288+
param: {
289+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
290+
param2: { name: 'Start HH', type: 'INUM_0_24' },
291+
param3: { name: 'Start MI', type: 'INUM_0_60' },
292+
param4: { name: 'End HH', type: 'INUM_0_24' },
293+
param5: { name: 'End MI', type: 'INUM_0_60' },
294+
param6: { name: 'Enabled', type: 'BOOL' },
295+
},
296+
},
297+
timeSlot6: {
298+
name: 'Time Slot 6',
299+
type: 'time_segment6',
300+
paramId: 'time_segment6',
301+
parseRet: PARSERET.parseTLXHTimeSlot,
302+
param: {
303+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
304+
param2: { name: 'Start HH', type: 'INUM_0_24' },
305+
param3: { name: 'Start MI', type: 'INUM_0_60' },
306+
param4: { name: 'End HH', type: 'INUM_0_24' },
307+
param5: { name: 'End MI', type: 'INUM_0_60' },
308+
param6: { name: 'Enabled', type: 'BOOL' },
309+
},
310+
},
311+
timeSlot7: {
312+
name: 'Time Slot 7',
313+
type: 'time_segment7',
314+
paramId: 'time_segment7',
315+
parseRet: PARSERET.parseTLXHTimeSlot,
316+
param: {
317+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
318+
param2: { name: 'Start HH', type: 'INUM_0_24' },
319+
param3: { name: 'Start MI', type: 'INUM_0_60' },
320+
param4: { name: 'End HH', type: 'INUM_0_24' },
321+
param5: { name: 'End MI', type: 'INUM_0_60' },
322+
param6: { name: 'Enabled', type: 'BOOL' },
323+
},
324+
},
325+
timeSlot8: {
326+
name: 'Time Slot 8',
327+
type: 'time_segment8',
328+
paramId: 'time_segment8',
329+
parseRet: PARSERET.parseTLXHTimeSlot,
330+
param: {
331+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
332+
param2: { name: 'Start HH', type: 'INUM_0_24' },
333+
param3: { name: 'Start MI', type: 'INUM_0_60' },
334+
param4: { name: 'End HH', type: 'INUM_0_24' },
335+
param5: { name: 'End MI', type: 'INUM_0_60' },
336+
param6: { name: 'Enabled', type: 'BOOL' },
337+
},
338+
},
339+
timeSlot9: {
340+
name: 'Time Slot 9',
341+
type: 'time_segment9',
342+
paramId: 'time_segment9',
343+
parseRet: PARSERET.parseTLXHTimeSlot,
344+
param: {
345+
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
346+
param2: { name: 'Start HH', type: 'INUM_0_24' },
347+
param3: { name: 'Start MI', type: 'INUM_0_60' },
348+
param4: { name: 'End HH', type: 'INUM_0_24' },
349+
param5: { name: 'End MI', type: 'INUM_0_60' },
350+
param6: { name: 'Enabled', type: 'BOOL' },
351+
},
352+
},
227353
},
228354
},
229355
[STORAGE]: {

lib/parsein.js

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ module.exports = class {
4141
return [val, Number.isInteger(val) && val >= 0 && val <= 1];
4242
}
4343

44+
static INUM_0_2(val) {
45+
debugApi('INUM_0_2:', val);
46+
return [val, Number.isInteger(val) && val >= 0 && val <= 2];
47+
}
48+
4449
static BOOL(val) {
4550
debugApi('BOOL:', val);
4651
return [val === true ? 1 : 0, val === false || val === true];

lib/parseret.js

+27
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,33 @@ module.exports = class {
110110
resolve(val);
111111
}
112112

113+
static parseTLXHTimeSlot(val, resolve) {
114+
debugApi('parseTLXHTimeSlot:', val);
115+
if (val.success === true && val.msg) {
116+
const ar = val.msg
117+
.toString()
118+
.split('-')
119+
.map(n => parseInt(n, 10));
120+
if (ar.length > 18) {
121+
let time = '';
122+
[val.param1, val.success] = fNum((ar[0] >> 13) & 0x03, 0, 2, val.success);
123+
[time, val.success] = fTime(ar[0] & 0x1fff, val.success);
124+
[val.param2, val.success] = fNum(time.substring(0, 2), 0, 24, val.success);
125+
[val.param3, val.success] = fNum(time.substring(3, 6), 0, 60, val.success);
126+
[time, val.success] = fTime(ar[1], val.success);
127+
[val.param4, val.success] = fNum(time.substring(0, 2), 0, 24, val.success);
128+
[val.param5, val.success] = fNum(time.substring(3, 6), 0, 60, val.success);
129+
[val.param6, val.success] = fBool(ar[0] >> 15, val.success);
130+
} else {
131+
val.success = false;
132+
}
133+
} else {
134+
val.success = false;
135+
}
136+
debugApi('parseTLXHTimeSlot result:', val);
137+
resolve(val);
138+
}
139+
113140
static parseGritFirst(val, resolve) {
114141
debugApi('parseGritFirst:', val);
115142
if (val.success === true && val.msg) {

0 commit comments

Comments
 (0)