-
Notifications
You must be signed in to change notification settings - Fork 4k
Description
Prior to changes in Koenkk/zigbee-herdsman#1479
Received dayofweek value was at start assigned in payload, later in code was logic for handling strings/arrays, but if it did not run payload still had value from start.
After changes from v25.3.0 if dayofweek contains number (value for bitmap) payload will have 0 if dayofweek, because it is set as default value and only logic for string/array of days can override it.
I propose simple change of https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/src/converters/toZigbee.ts#L1612-L1626:
let dayofweek: number;
if (typeof daysofweek === "number") {
dayofweek = daysofweek;
} else if (Array.isArray(daysofweek)) {
dayofweek = 0;
for (let d of daysofweek) {
if (typeof d === "object") {
if (d.day == null) {
throw new Error(`weekly_schedule: expected dayofweek to be string or {"day": "str"}, but got '${JSON.stringify(d)}'!`);
}
d = d.day;
}
// lookup dayofweek bit
d = utils.getKey(constants.thermostatDayOfWeek, d.toLowerCase(), d, Number);
dayofweek |= 1 << d;
}
} else {
dayofweek = 0;
}From what i understand valid number should have value between 0 and 255 (zigbee cluster documentation section 6. 3. 2 .3 .2 . 4 Figure 6-7. states map8 as data type) , and maybe we could throw Error when it is outside this range.
let dayofweek: number;
if (typeof daysofweek === "number") {
if (daysofweek < 0 || daysofweek > 255) {
throw new Error(`weekly_schedule: expected dayofweek to be between 0 and 255, but got '${daysofweek}'!`);
}
dayofweek = daysofweek;
} else if (Array.isArray(daysofweek)) {
dayofweek = 0;
for (let d of daysofweek) {
if (typeof d === "object") {
if (d.day == null) {
throw new Error(`weekly_schedule: expected dayofweek to be string or {"day": "str"}, but got '${JSON.stringify(d)}'!`);
}
d = d.day;
}
// lookup dayofweek bit
d = utils.getKey(constants.thermostatDayOfWeek, d.toLowerCase(), d, Number);
dayofweek |= 1 << d;
}
} else {
dayofweek = 0;
}