Skip to content

Commit

Permalink
### 0.7.6: Maintenance Release
Browse files Browse the repository at this point in the history
**Enhancements**

- Added time slots for TLXH
  • Loading branch information
PLCHome committed Oct 23, 2024
1 parent 87226df commit 9aa46ee
Show file tree
Hide file tree
Showing 6 changed files with 324 additions and 221 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
### 0.7.6: Maintenance Release

**Enhancements**

- Added time slots for TLXH

### 0.7.5: Maintenance Release

**Enhancements**
Expand Down
126 changes: 126 additions & 0 deletions lib/growatttype.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,132 @@ module.exports = {
parseRet: PARSERET.parseRetNum,
param: { param1: { name: 'Active power rate', type: 'INUM_0_100', unit: '%' }, param2: { name: 'Store', type: 'BOOL', def: false } },
},
timeSlot1: {
name: 'Time Slot 1',
type: 'time_segment1',
paramId: 'time_segment1',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot2: {
name: 'Time Slot 2',
type: 'time_segment2',
paramId: 'time_segment2',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot3: {
name: 'Time Slot 3',
type: 'time_segment3',
paramId: 'time_segment3',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot4: {
name: 'Time Slot 4',
type: 'time_segment4',
paramId: 'time_segment4',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot5: {
name: 'Time Slot 5',
type: 'time_segment5',
paramId: 'time_segment5',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot6: {
name: 'Time Slot 6',
type: 'time_segment6',
paramId: 'time_segment6',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot7: {
name: 'Time Slot 7',
type: 'time_segment7',
paramId: 'time_segment7',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot8: {
name: 'Time Slot 8',
type: 'time_segment8',
paramId: 'time_segment8',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
timeSlot9: {
name: 'Time Slot 9',
type: 'time_segment9',
paramId: 'time_segment9',
parseRet: PARSERET.parseTLXHTimeSlot,
param: {
param1: { name: 'Mode', type: 'INUM_0_2', values: { 2: 'Grid First', 1: 'Battery First', 0: 'Load First' } },
param2: { name: 'Start HH', type: 'INUM_0_24' },
param3: { name: 'Start MI', type: 'INUM_0_60' },
param4: { name: 'End HH', type: 'INUM_0_24' },
param5: { name: 'End MI', type: 'INUM_0_60' },
param6: { name: 'Enabled', type: 'BOOL' },
},
},
},
},
[STORAGE]: {
Expand Down
5 changes: 5 additions & 0 deletions lib/parsein.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ module.exports = class {
return [val, Number.isInteger(val) && val >= 0 && val <= 1];
}

static INUM_0_2(val) {
debugApi('INUM_0_2:', val);
return [val, Number.isInteger(val) && val >= 0 && val <= 2];
}

static BOOL(val) {
debugApi('BOOL:', val);
return [val === true ? 1 : 0, val === false || val === true];
Expand Down
27 changes: 27 additions & 0 deletions lib/parseret.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,33 @@ module.exports = class {
resolve(val);
}

static parseTLXHTimeSlot(val, resolve) {
debugApi('parseTLXHTimeSlot:', val);
if (val.success === true && val.msg) {
const ar = val.msg
.toString()
.split('-')
.map(n => parseInt(n, 10));
if (ar.length > 18) {
let time = '';
[val.param1, val.success] = fNum((ar[0] >> 13) & 0x03, 0, 2, val.success);
[time, val.success] = fTime(ar[0] & 0x1fff, val.success);
[val.param2, val.success] = fNum(time.substring(0, 2), 0, 24, val.success);
[val.param3, val.success] = fNum(time.substring(3, 6), 0, 60, val.success);
[time, val.success] = fTime(ar[1], val.success);
[val.param4, val.success] = fNum(time.substring(0, 2), 0, 24, val.success);
[val.param5, val.success] = fNum(time.substring(3, 6), 0, 60, val.success);
[val.param6, val.success] = fBool(ar[0] >> 15, val.success);
} else {
val.success = false;
}
} else {
val.success = false;
}
debugApi('parseTLXHTimeSlot result:', val);
resolve(val);
}

static parseGritFirst(val, resolve) {
debugApi('parseGritFirst:', val);
if (val.success === true && val.msg) {
Expand Down
Loading

0 comments on commit 9aa46ee

Please sign in to comment.