Skip to content

Commit

Permalink
Merge pull request #41 from slavikme/master
Browse files Browse the repository at this point in the history
Add an ability to define different times according to the moving direction of the blinds
  • Loading branch information
dxdc authored Jul 1, 2020
2 parents c5244ad + 6b5e99d commit 1e120a2
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 5 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
14 changes: 13 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,17 @@ 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.

**Note!**
For cases where `motion_time` varies based on the direction of shutter movement (i.e., due to gravity), `motion_down_time` and `motion_up_time` may be used for more fine-tuning.

- `motion_down_time` is the time, in milliseconds, for your blinds to move from up to down.
- `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.

Ideally, a better approach would be using some kind of equation for calculating the exact time. This would be a nice-to-have feature in the future.

**Note!**
`motion_down_time` and `motion_up_time` have a higher priority over `motion_time`. This means, that if all three are explicitly provided in the configuration file, the value set in `motion_time` will be ignored.
**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
5 changes: 3 additions & 2 deletions 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 All @@ -26,7 +26,8 @@
"author": "Daniel Caspi <[email protected]>",
"contributors": [
"Robin Temme <[email protected]>",
"Jimmy Henderickx <[email protected]>"
"Jimmy Henderickx <[email protected]>",
"Slavik Meltser <[email protected]>"
],
"license": "ISC",
"dependencies": {
Expand Down

0 comments on commit 1e120a2

Please sign in to comment.