Skip to content

Commit

Permalink
Add an ability to define different times according to the moving dire…
Browse files Browse the repository at this point in the history
…ction of the blinds.
  • Loading branch information
slavikme committed Jul 1, 2020
1 parent c5244ad commit efd7796
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ node_modules/
.DS_Store
.env
package-lock.json
.idea
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ Add the accessory in `config.json` in your home directory inside `.homebridge`.
"webhook_https": false,
"webhook_https_keyfile": "/path/to/https.key",
"webhook_https_certfile": "/path/to/https.crt",
"motion_time": 10000,
"motion_up_time": 11000,
"motion_down_time": 10000,
"response_lag": 0,
"trigger_stop_at_boundaries": false,
"verbose": false
Expand Down Expand Up @@ -177,6 +178,18 @@ Ensure that the motion time is configured properly, even when `position_url` is

`motion_time` is the time, in milliseconds, for your blinds to move from up to down. This should only include the time the motor is running. Filming this with your phone to determine the time may be easier than trying to do it with a timer. **NOTE**: If you are performing multiple blind requests simultaneously and are getting network timeouts due to your configuration, try using non-identical `motion_time` (e.g., 9800, 10000, 10200 vs. 10000 for each) it may help.

There are additional two configurations parameters, `motion_down_time` and `motion_up_time`.

`motion_down_time` is the time, in milliseconds, for your blinds to move from up to down. Everything else is exactly as described in `motion_time` above.

`motion_up_time` is the time, in milliseconds, for your blinds to move from down to up. Everything else is exactly as described in `motion_time` above.

The reason for this, is that there are some blinds that their opening time is different from closing time, due to simple physics - The weight of the shutter affects on the speed of the motor.
Ideally, a better approach would be using some kind of gradual equation for calculating the exact time, according to the position, because the weight gradually added or subtracted during the move. But, hopefully this will be a nice to have feature in the future.

**Note!**
`motion_down_time` and `motion_up_time` are always have higher priority over `motion_time`. This means, that if all three explicitly provided in the configuration file, the value set in `motion_down_time` and `motion_up_time` will be used instead and the value in `motion_time` will be ignored. You can also provide only `motion_down_time` and `motion_up_time` value without providing `motion_time`. If only `motion_time` is provided, its value will be used for `motion_down_time` and `motion_up_time`.

**Steps:**
1. HTTP UP/DOWN request sent; wait for successful reply (i.e., `success_codes`) = `HTTP request delay (measured)`
2. Wait for device to send the signal to blinds, and movement begins = `response_lag`
Expand Down
12 changes: 12 additions & 0 deletions config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@
"title": "Motion Time",
"type": "number",
"default": 10000,
"description": "Time (in ms) for blinds to move completely up or down."
},
"motion_up_time": {
"title": "Motion Upward Time",
"type": "number",
"default": 10000,
"description": "Time (in ms) for blinds to move completely from down to up."
},
"motion_down_time": {
"title": "Motion Downward Time",
"type": "number",
"default": 10000,
"description": "Time (in ms) for blinds to move completely from up to down."
},
"response_lag": {
Expand Down
7 changes: 5 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ function BlindsHTTPAccessory(log, config) {
this.showToggleButton = config.show_toggle_button === true;

// motion time vars
this.motionTime = parseInt(config.motion_time, 10) || 10000;
const motionTimeConfig = parseInt(config.motion_time, 10) || 10000;
this.motionUpTime = parseInt(config.motion_up_time, 10) || motionTimeConfig;
this.motionDownTime = parseInt(config.motion_down_time, 10) || motionTimeConfig;
this.responseLag = parseInt(config.response_lag, 10) || 0;

// advanced vars
Expand Down Expand Up @@ -414,7 +416,8 @@ BlindsHTTPAccessory.prototype.setTargetPosition = function (pos, callback) {
this.lastCommandMoveUp = moveUp;

this.storage.setItemSync(this.name, this.currentTargetPosition);
const motionTimeStep = this.motionTime / 100;
const motionTime = moveUp ? this.motionUpTime : this.motionDownTime;
const motionTimeStep = motionTime / 100;
const waitDelay = Math.abs(this.currentTargetPosition - this.lastPosition) * motionTimeStep;

this.log.info(
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "homebridge-blinds",
"version": "1.3.20",
"version": "1.3.21",
"description": "A homebridge plugin to control my blinds",
"main": "index.js",
"scripts": {
Expand Down

0 comments on commit efd7796

Please sign in to comment.