Skip to content

Commit

Permalink
fix: Fix is not a number, got string errors Koenkk/zigbee2mqtt#18169
Browse files Browse the repository at this point in the history
  • Loading branch information
Koenkk committed Jul 4, 2023
1 parent ff13599 commit 05e3d2e
Show file tree
Hide file tree
Showing 11 changed files with 115 additions and 106 deletions.
2 changes: 1 addition & 1 deletion src/converters/toZigbee.js
Original file line number Diff line number Diff line change
Expand Up @@ -4640,7 +4640,7 @@ const converters = {
TS0210_sensitivity: {
key: ['sensitivity'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value, 'sensitivity');
value = utils.toNumber(value, 'sensitivity');
await entity.write('ssIasZone', {currentZoneSensitivityLevel: value});
return {state: {sensitivity: value}};
},
Expand Down
18 changes: 9 additions & 9 deletions src/devices/bosch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,16 +117,16 @@ const tzLocal = {
return {state: {child_lock: value}};
}
if (key === 'calibration_closing_time') {
utils.assertNumber(value, 'calibration_closing_time');
const index = value *10;
const number = utils.toNumber(value, 'calibration_closing_time');
const index = number *10;
await entity.write(0xFCA0, {0x0002: {value: index, type: 0x23}}, boschManufacturer);
return {state: {calibration_closing_time: value}};
return {state: {calibration_closing_time: number}};
}
if (key === 'calibration_opening_time') {
utils.assertNumber(value, 'calibration_opening_time');
const index = value *10;
const number = utils.toNumber(value, 'calibration_opening_time');
const index = number *10;
await entity.write(0xFCA0, {0x0003: {value: index, type: 0x23}}, boschManufacturer);
return {state: {calibration_opening_time: value}};
return {state: {calibration_opening_time: number}};
}
},
convertGet: async (entity, key, meta) => {
Expand Down Expand Up @@ -208,11 +208,11 @@ const tzLocal = {
return {state: {pi_heating_demand: value}};
}
if (key === 'remote_temperature') {
utils.assertNumber(value, 'remote_temperature');
const remoteTemperature = Number((Math.round(Number((value * 2).toFixed(1))) / 2).toFixed(1)) * 100;
const number = utils.toNumber(value, 'remote_temperature');
const remoteTemperature = Number((Math.round(Number((number * 2).toFixed(1))) / 2).toFixed(1)) * 100;
await entity.write('hvacThermostat',
{0x4040: {value: remoteTemperature, type: Zcl.DataType.int16}}, boschManufacturer);
return {state: {remote_temperature: value}};
return {state: {remote_temperature: number}};
}
},
convertGet: async (entity, key, meta) => {
Expand Down
3 changes: 1 addition & 2 deletions src/devices/develco.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,7 @@ const develco = {
ias_occupancy_timeout: {
key: ['occupancy_timeout'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value, 'occupancy_timeout');
let timeoutValue = value;
let timeoutValue = utils.toNumber(value, 'occupancy_timeout');
if (timeoutValue < 20) {
meta.logger.warn(`Minimum occupancy_timeout is 20, using 20 instead of ${timeoutValue}!`);
timeoutValue = 20;
Expand Down
3 changes: 1 addition & 2 deletions src/devices/namron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,7 @@ const tzLocal = {
const payload = {0x1009: {value: utils.getFromLookup(value, lookup), type: Zcl.DataType.enum8}};
await entity.write('hvacThermostat', payload, sunricherManufacturer);
} else if (key==='hysterersis') {
utils.assertNumber(value, 'hysterersis');
const payload = {0x100A: {value: value * 10, type: 0x20}};
const payload = {0x100A: {value: utils.toNumber(value, 'hysterersis') * 10, type: 0x20}};
await entity.write('hvacThermostat', payload, sunricherManufacturer);
}
},
Expand Down
48 changes: 24 additions & 24 deletions src/devices/sinope.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,11 +284,11 @@ const tzLocal = {
thermostat_outdoor_temperature: {
key: ['thermostat_outdoor_temperature'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= -99.5 && value <= 99.5) {
await entity.write('manuSpecificSinope', {outdoorTempToDisplay: value * 100}, manuSinope);
const number = utils.toNumber(value);
if (number >= -99.5 && number <= 99.5) {
await entity.write('manuSpecificSinope', {outdoorTempToDisplay: number * 100}, manuSinope);
}
return {state: {thermostat_outdoor_temperature: value}};
return {state: {thermostat_outdoor_temperature: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('manuSpecificSinope', ['outdoorTempToDisplay'], manuSinope);
Expand All @@ -297,10 +297,10 @@ const tzLocal = {
outdoor_temperature_timeout: {
key: ['outdoor_temperature_timeout'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= 30 && value <= 64800) {
await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: value});
return {state: {outdoor_temperature_timeout: value}};
const number = utils.toNumber(value);
if (number >= 30 && number <= 64800) {
await entity.write('manuSpecificSinope', {outdoorTempToDisplayTimeout: number});
return {state: {outdoor_temperature_timeout: number}};
}
},
convertGet: async (entity, key, meta) => {
Expand Down Expand Up @@ -464,11 +464,11 @@ const tzLocal = {
// DM25x0ZB and SW2500ZB
key: ['led_intensity_on'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= 0 && value <= 100) {
await entity.write('manuSpecificSinope', {ledIntensityOn: value});
const number = utils.toNumber(value);
if (number >= 0 && number <= 100) {
await entity.write('manuSpecificSinope', {ledIntensityOn: number});
}
return {state: {led_intensity_on: value}};
return {state: {led_intensity_on: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('manuSpecificSinope', ['ledIntensityOn']);
Expand All @@ -478,11 +478,11 @@ const tzLocal = {
// DM25x0ZB and SW2500ZB
key: ['led_intensity_off'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= 0 && value <= 100) {
await entity.write('manuSpecificSinope', {ledIntensityOff: value});
const number = utils.toNumber(value);
if (number >= 0 && number <= 100) {
await entity.write('manuSpecificSinope', {ledIntensityOff: number});
}
return {state: {led_intensity_off: value}};
return {state: {led_intensity_off: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('manuSpecificSinope', ['ledIntensityOff']);
Expand Down Expand Up @@ -516,11 +516,11 @@ const tzLocal = {
// DM25x0ZB
key: ['minimum_brightness'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= 0 && value <= 3000) {
await entity.write('manuSpecificSinope', {minimumBrightness: value});
const number = utils.toNumber(value);
if (number >= 0 && number <= 3000) {
await entity.write('manuSpecificSinope', {minimumBrightness: number});
}
return {readAfterWriteTime: 250, state: {minimumBrightness: value}};
return {readAfterWriteTime: 250, state: {minimumBrightness: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('manuSpecificSinope', ['minimumBrightness']);
Expand All @@ -530,11 +530,11 @@ const tzLocal = {
// DM25x0ZB and SW2500ZB
key: ['timer_seconds'],
convertSet: async (entity, key, value, meta) => {
utils.assertNumber(value);
if (value >= 0 && value <= 65535) {
await entity.write('manuSpecificSinope', {dimmerTimmer: value});
const number = utils.toNumber(value);
if (number >= 0 && number <= 65535) {
await entity.write('manuSpecificSinope', {dimmerTimmer: number});
}
return {state: {timer_seconds: value}};
return {state: {timer_seconds: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('manuSpecificSinope', ['dimmerTimmer']);
Expand Down
41 changes: 20 additions & 21 deletions src/devices/sprut.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {Definition, Fz, KeyValueAny, Tz} from '../lib/types';
const e = exposes.presets;
const eo = exposes.options;
const ea = exposes.access;
import {assertNumber, assertString, calibrateAndPrecisionRoundOptions, getFromLookup, getOptions} from '../lib/utils';
import {assertString, calibrateAndPrecisionRoundOptions, getFromLookup, getOptions, toNumber} from '../lib/utils';

const sprutCode = 0x6666;
const manufacturerOptions = {manufacturerCode: sprutCode};
Expand Down Expand Up @@ -163,10 +163,9 @@ const tzLocal = {
occupancy_timeout: {
key: ['occupancy_timeout'],
convertSet: async (entity, key, value, meta) => {
assertNumber(value, 'occupancy_timeout');
value *= 1;
await entity.write('msOccupancySensing', {pirOToUDelay: value}, getOptions(meta.mapped, entity));
return {state: {[key]: value}};
const number = toNumber(value, 'occupancy_timeout');
await entity.write('msOccupancySensing', {pirOToUDelay: number}, getOptions(meta.mapped, entity));
return {state: {[key]: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('msOccupancySensing', ['pirOToUDelay']);
Expand All @@ -175,10 +174,10 @@ const tzLocal = {
noise_timeout: {
key: ['noise_timeout'],
convertSet: async (entity, key, value, meta) => {
assertNumber(value, 'noise_timeout');
value *= 1;
await entity.write('sprutNoise', {noiseAfterDetectDelay: value}, getOptions(meta.mapped, entity));
return {state: {[key]: value}};
let number = toNumber(value, 'noise_timeout');
number *= 1;
await entity.write('sprutNoise', {noiseAfterDetectDelay: number}, getOptions(meta.mapped, entity));
return {state: {[key]: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('sprutNoise', ['noiseAfterDetectDelay']);
Expand All @@ -187,11 +186,11 @@ const tzLocal = {
occupancy_sensitivity: {
key: ['occupancy_sensitivity'],
convertSet: async (entity, key, value, meta) => {
assertNumber(value, 'occupancy_sensitivity');
value *= 1;
let number = toNumber(value, 'occupancy_sensitivity');
number *= 1;
const options = getOptions(meta.mapped, entity, manufacturerOptions);
await entity.write('msOccupancySensing', {'sprutOccupancySensitivity': value}, options);
return {state: {[key]: value}};
await entity.write('msOccupancySensing', {'sprutOccupancySensitivity': number}, options);
return {state: {[key]: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('msOccupancySensing', ['sprutOccupancySensitivity'], manufacturerOptions);
Expand All @@ -200,11 +199,11 @@ const tzLocal = {
noise_detect_level: {
key: ['noise_detect_level'],
convertSet: async (entity, key, value, meta) => {
assertNumber(value, 'noise_detect_level');
value *= 1;
let number = toNumber(value, 'noise_detect_level');
number *= 1;
const options = getOptions(meta.mapped, entity, manufacturerOptions);
await entity.write('sprutNoise', {'noiseDetectLevel': value}, options);
return {state: {[key]: value}};
await entity.write('sprutNoise', {'noiseDetectLevel': number}, options);
return {state: {[key]: number}};
},
convertGet: async (entity, key, meta) => {
await entity.read('sprutNoise', ['noiseDetectLevel'], manufacturerOptions);
Expand All @@ -213,12 +212,12 @@ const tzLocal = {
temperature_offset: {
key: ['temperature_offset'],
convertSet: async (entity, key, value, meta) => {
assertNumber(value, 'temperature_offset');
value *= 1;
const newValue = value * 100.0;
let number = toNumber(value, 'temperature_offset');
number *= 1;
const newValue = number * 100.0;
const options = getOptions(meta.mapped, entity, manufacturerOptions);
await entity.write('msTemperatureMeasurement', {'sprutTemperatureOffset': newValue}, options);
return {state: {[key]: value}};
return {state: {[key]: number}};
},
} as Tz.Converter,
co2_config: {
Expand Down
Loading

0 comments on commit 05e3d2e

Please sign in to comment.