diff --git a/index.js b/index.js index 4bc848e..d5e9fe7 100755 --- a/index.js +++ b/index.js @@ -3276,7 +3276,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser action = 'setValue'; const oldValue = value; value = 100 - value;// invert percentage - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue); // transform from percentage to scale + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state.currentValue) { service.Moving=Characteristic.PositionState.DECREASING; } else if (value != service.infos.state.currentValue) { @@ -3304,7 +3304,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser action = 'setValue'; const oldValue = value; value = 100 - value;// invert percentage - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue); // transform from percentage to scale + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state.currentValue) { service.Moving=Characteristic.PositionState.DECREASING; } else if (value != service.infos.state.currentValue) { @@ -3331,7 +3331,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser } else { action = 'setValue'; const oldValue = value; - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue);// transform from percentage to scale + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state.currentValue) { service.Moving=Characteristic.PositionState.INCREASING; } else if (value != service.infos.state.currentValue) { @@ -3358,7 +3358,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser else if (service.actions.slider) { action = 'setValue'; const oldValue = value; - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue);// transform from percentage to scale + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state.currentValue) { service.Moving=Characteristic.PositionState.INCREASING; } else if (value != service.infos.state.currentValue) { @@ -3390,7 +3390,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser } else { action = 'setValue'; const oldValue = value; - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue); + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state) { service.Moving=Characteristic.PositionState.INCREASING; } else if (value != service.infos.state) { @@ -3415,7 +3415,7 @@ JeedomPlatform.prototype.setAccessoryValue = function(value, characteristic, ser else if (service.actions.slider) { action = 'setValue'; const oldValue = value; - value = Math.round(((value / 100)*(service.maxValue-service.minValue))+service.minValue); + value = percentageToRange(value, service.minValue, service.maxValue); // transform from percentage to scale if(value > service.infos.state) { service.Moving=Characteristic.PositionState.INCREASING; } else if (value != service.infos.state) { @@ -4612,7 +4612,7 @@ JeedomPlatform.prototype.getAccessoryValue = function(characteristic, service, i for (const cmd of cmdList) { if (cmd.generic_type == 'FLAP_STATE' && cmd.id == service.cmd_id) { returnValue = parseInt(cmd.currentValue); - returnValue = Math.round(((returnValue-service.minValue) / (service.maxValue-service.minValue))*100); + returnValue = rangeToPercentage(returnValue, service.minValue, service.maxValue); if(service.maxValue == 100) { returnValue = returnValue > (service.maxValue-5) ? service.maxValue : returnValue; // >95% is 100% in home (flaps need yearly tunning) @@ -4625,7 +4625,7 @@ JeedomPlatform.prototype.getAccessoryValue = function(characteristic, service, i } if (cmd.generic_type == 'FLAP_STATE_CLOSING' && cmd.id == service.cmd_id) { returnValue = parseInt(cmd.currentValue); - returnValue = Math.round(((returnValue-service.minValue) / (service.maxValue-service.minValue))*100); + returnValue = rangeToPercentage(returnValue, service.minValue, service.maxValue); if(service.maxValue == 100) { returnValue = returnValue > (service.maxValue-5) ? service.maxValue : returnValue; // >95% is 100% in home (flaps need yearly tunning) @@ -4639,7 +4639,7 @@ JeedomPlatform.prototype.getAccessoryValue = function(characteristic, service, i } if (cmd.generic_type == 'WINDOW_STATE' && cmd.id == service.cmd_id) { returnValue = parseInt(cmd.currentValue); - returnValue = Math.round(((returnValue-service.minValue) / (service.maxValue-service.minValue))*100); + returnValue = rangeToPercentage(returnValue, service.minValue, service.maxValue); if(returnValue === service.TargetValue) {service.Moving=Characteristic.PositionState.STOPPED;} else if (service.TargetValue !== undefined && service.Moving===Characteristic.PositionState.STOPPED) {service.TargetValue=undefined;} @@ -4651,7 +4651,7 @@ JeedomPlatform.prototype.getAccessoryValue = function(characteristic, service, i case Characteristic.TargetPosition.UUID : if(service.TargetValue === undefined) { returnValue = parseInt(service.infos.state.currentValue); - returnValue = Math.round(((returnValue-service.minValue) / (service.maxValue-service.minValue))*100); + returnValue = rangeToPercentage(returnValue, service.minValue, service.maxValue); if(service.maxValue == 100) { returnValue = returnValue > (service.maxValue-5) ? service.maxValue : returnValue; // >95% is 100% in home (flaps need yearly tunning) @@ -6435,6 +6435,16 @@ JeedomBridgedAccessory.prototype.delServices = function(accessory) { } }; +// convert range to percentage +function rangeToPercentage(value, min, max) { + return Math.floor(((value - min) / (max - min)) * 100); +} + +// convert percentage to range +function percentageToRange(percentage, min, max) { + return Math.ceil((percentage / 100) * (max - min) + min); +} + // -- hexToR // -- Desc : take the R value in a html color string // -- Params -- diff --git a/package.json b/package.json index 5f1fb9f..b20b27a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@nebz/homebridge-jeedom", "version": "v1.7.0", - "cust_serial": "0024", + "cust_serial": "0027", "description": "Homebridge plugin for Jeedom ", "main": "index.js", "private":true, @@ -26,14 +26,14 @@ ], "dependencies": { "async": "3.2.5", - "axios": "1.6.7", - "express": "4.18.2", + "axios": "1.6.8", + "express": "4.19.2", "fakegato-history": "NebzHB/fakegato-history#master" }, "devDependencies": { - "@babel/core": ">=7.23.9", - "@babel/eslint-parser": "^7.23.10", - "eslint": "^8.56.0" + "@babel/core": ">=7.24.5", + "@babel/eslint-parser": "^7.24.5", + "eslint": "^8.57.0" }, "author": "Nebz ", "license": "GPL-2.0",