homebridge-gsh 4.2.0-beta.9 → 4.2.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/README.md +30 -2
- package/dist/types/fan.d.ts +7 -1
- package/dist/types/fan.js +76 -5
- package/dist/types/fan.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,7 @@ All notable changes to `homebridge-gsh` will be documented in this file. This pr
|
|
|
12
12
|
|
|
13
13
|
- Doorbell support - doorbell presses are sent to Google Home as notifications (no video streaming). #103
|
|
14
14
|
- Fan speed control for fans #92
|
|
15
|
+
- Named fan speeds - "Set Bedroom Fan to low / medium / high" or "speed 2". Fans with 2-10 Rotation Speed steps (from `minStep`) get one named speed per step, other fans get low / medium / high presets at 33 / 66 / 100%. Percentage control still works. Say "Hey Google, sync my devices" after updating. See [Fan Voice Commands](README.md#fan-voice-commands). #92
|
|
15
16
|
|
|
16
17
|
### Fixes
|
|
17
18
|
|
package/README.md
CHANGED
|
@@ -40,8 +40,10 @@ Control your supported [Homebridge](https://github.com/homebridge/homebridge) ac
|
|
|
40
40
|
- On / Off
|
|
41
41
|
- Brightness
|
|
42
42
|
- Color (Hue/Saturation)
|
|
43
|
-
- Fan
|
|
44
|
-
-
|
|
43
|
+
- Fan / Fan v2
|
|
44
|
+
- On / Off
|
|
45
|
+
- Fan Speed (percentage and named speeds, see [Fan Voice Commands](#fan-voice-commands))
|
|
46
|
+
- Reverse (when the fan supports Rotation Direction)
|
|
45
47
|
- Window
|
|
46
48
|
- Window Coverings
|
|
47
49
|
- Door
|
|
@@ -100,6 +102,32 @@ This plugin **must** only be configured on one Homebridge instance on your netwo
|
|
|
100
102
|
- all instances must be running [in insecure mode](https://github.com/homebridge/homebridge-config-ui-x/wiki/Enabling-Accessory-Control)
|
|
101
103
|
- all instances must have the same PIN defined in the `config.json`
|
|
102
104
|
|
|
105
|
+
## Fan Voice Commands
|
|
106
|
+
|
|
107
|
+
Fans that expose a Rotation Speed characteristic can be controlled by percentage or by named speed. The named speeds come from the Rotation Speed `minStep`:
|
|
108
|
+
|
|
109
|
+
| Fan reports | Named speeds |
|
|
110
|
+
|---|---|
|
|
111
|
+
| `minStep` of 1 or none (continuous) | `low` (33%), `medium` (66%), `high` (100%) |
|
|
112
|
+
| 2 steps (e.g. `minStep` 50) | `low`, `high` |
|
|
113
|
+
| 3 steps (e.g. `minStep` 33.33) | `low`, `medium`, `high` |
|
|
114
|
+
| 4 to 10 steps (e.g. `minStep` 16.67 for a 6-speed fan) | `speed 1` … `speed N` |
|
|
115
|
+
|
|
116
|
+
Example commands, using a fan named "Bedroom Fan":
|
|
117
|
+
|
|
118
|
+
- "Hey Google, turn on / turn off Bedroom Fan"
|
|
119
|
+
- "Hey Google, set Bedroom Fan to low / medium / high"
|
|
120
|
+
- "Hey Google, set Bedroom Fan to speed 2" (also "level 2"; "low" / "minimum" and "high" / "maximum" always pick the lowest and highest speed)
|
|
121
|
+
- "Hey Google, set Bedroom Fan to 40 percent"
|
|
122
|
+
- "Hey Google, what speed is Bedroom Fan on?"
|
|
123
|
+
- "Hey Google, reverse Bedroom Fan" (only if the fan supports Rotation Direction)
|
|
124
|
+
|
|
125
|
+
_Notes:_
|
|
126
|
+
|
|
127
|
+
- _Use "turn off" to stop the fan. Off is handled by On / Off, not as a named speed._
|
|
128
|
+
- _"Increase / decrease fan speed" is not supported yet._
|
|
129
|
+
- _Named speeds are English only. After updating, say "Hey Google, sync my devices" so Google picks up the new speeds._
|
|
130
|
+
|
|
103
131
|
## Known Issues
|
|
104
132
|
|
|
105
133
|
1. Only one Homebridge instance can be linked to an account (even across different local networks). You will experience unintended results if you try and link more than one instance to the same account.
|
package/dist/types/fan.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { ServiceType } from '@homebridge/hap-client';
|
|
1
|
+
import { CharacteristicType, ServiceType } from '@homebridge/hap-client';
|
|
2
2
|
import type { SmartHomeV1ExecuteRequestCommands, SmartHomeV1ExecuteResponseCommands } from 'actions-on-google';
|
|
3
3
|
import { ghToHap, ghToHap_t } from './ghToHapTypes.js';
|
|
4
|
+
interface FanSpeedStep {
|
|
5
|
+
name: string;
|
|
6
|
+
value: number;
|
|
7
|
+
synonyms: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function getFanSpeedSteps(rotationSpeed?: CharacteristicType): FanSpeedStep[] | undefined;
|
|
4
10
|
declare abstract class FanBase extends ghToHap implements ghToHap_t {
|
|
5
11
|
protected abstract readonly onCharacteristic: string;
|
|
6
12
|
protected abstract coerce(on: boolean): boolean | number;
|
package/dist/types/fan.js
CHANGED
|
@@ -1,12 +1,73 @@
|
|
|
1
1
|
import { Characteristic } from '../hap-types.js';
|
|
2
2
|
import { ghToHap } from './ghToHapTypes.js';
|
|
3
|
+
const MAX_NAMED_SPEEDS = 10;
|
|
4
|
+
const DEFAULT_PRESET_COUNT = 3;
|
|
5
|
+
function stepNames(index, count) {
|
|
6
|
+
const n = index + 1;
|
|
7
|
+
const numbered = [`speed ${n}`, `level ${n}`];
|
|
8
|
+
if (count === 3) {
|
|
9
|
+
return [
|
|
10
|
+
{ name: 'low', synonyms: ['low', 'minimum', ...numbered] },
|
|
11
|
+
{ name: 'medium', synonyms: ['medium', 'mid', ...numbered] },
|
|
12
|
+
{ name: 'high', synonyms: ['high', 'maximum', ...numbered] },
|
|
13
|
+
][index];
|
|
14
|
+
}
|
|
15
|
+
if (count === 2) {
|
|
16
|
+
return [
|
|
17
|
+
{ name: 'low', synonyms: ['low', 'minimum', ...numbered] },
|
|
18
|
+
{ name: 'high', synonyms: ['high', 'maximum', ...numbered] },
|
|
19
|
+
][index];
|
|
20
|
+
}
|
|
21
|
+
const synonyms = [...numbered, `${n}`];
|
|
22
|
+
if (index === 0) {
|
|
23
|
+
synonyms.push('low', 'minimum');
|
|
24
|
+
}
|
|
25
|
+
if (index === count - 1) {
|
|
26
|
+
synonyms.push('high', 'maximum');
|
|
27
|
+
}
|
|
28
|
+
return { name: `speed_${n}`, synonyms };
|
|
29
|
+
}
|
|
30
|
+
export function getFanSpeedSteps(rotationSpeed) {
|
|
31
|
+
if (!rotationSpeed) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
const min = rotationSpeed.minValue ?? 0;
|
|
35
|
+
const max = rotationSpeed.maxValue ?? 100;
|
|
36
|
+
const stepCount = rotationSpeed.minStep && rotationSpeed.minStep > 0
|
|
37
|
+
? Math.round((max - min) / rotationSpeed.minStep)
|
|
38
|
+
: 0;
|
|
39
|
+
const stepped = stepCount >= 2 && stepCount <= MAX_NAMED_SPEEDS;
|
|
40
|
+
if (!stepped && stepCount === 1) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const count = stepped ? stepCount : DEFAULT_PRESET_COUNT;
|
|
44
|
+
const increment = stepped ? rotationSpeed.minStep : (max - min) / count;
|
|
45
|
+
const steps = [];
|
|
46
|
+
for (let i = 1; i <= count; i++) {
|
|
47
|
+
const raw = min + i * increment;
|
|
48
|
+
const value = i === count ? max : stepped ? Math.round(raw * 100) / 100 : Math.floor(raw);
|
|
49
|
+
steps.push({ value, ...stepNames(i - 1, count) });
|
|
50
|
+
}
|
|
51
|
+
return steps;
|
|
52
|
+
}
|
|
3
53
|
class FanBase extends ghToHap {
|
|
4
54
|
sync(service) {
|
|
5
55
|
const traits = ['action.devices.traits.OnOff'];
|
|
6
56
|
const attributes = {};
|
|
7
|
-
|
|
57
|
+
const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
|
|
58
|
+
if (rotationSpeed) {
|
|
8
59
|
traits.push('action.devices.traits.FanSpeed');
|
|
9
60
|
attributes.supportsFanSpeedPercent = true;
|
|
61
|
+
const steps = getFanSpeedSteps(rotationSpeed);
|
|
62
|
+
if (steps) {
|
|
63
|
+
attributes.availableFanSpeeds = {
|
|
64
|
+
speeds: steps.map(step => ({
|
|
65
|
+
speed_name: step.name,
|
|
66
|
+
speed_values: [{ speed_synonym: step.synonyms, lang: 'en' }],
|
|
67
|
+
})),
|
|
68
|
+
ordered: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
10
71
|
}
|
|
11
72
|
if (service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationDirection)) {
|
|
12
73
|
attributes.reversible = true;
|
|
@@ -27,7 +88,12 @@ class FanBase extends ghToHap {
|
|
|
27
88
|
};
|
|
28
89
|
const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
|
|
29
90
|
if (rotationSpeed) {
|
|
30
|
-
|
|
91
|
+
const current = Number(rotationSpeed.value) || 0;
|
|
92
|
+
response.currentFanSpeedPercent = current;
|
|
93
|
+
const steps = getFanSpeedSteps(rotationSpeed);
|
|
94
|
+
if (steps) {
|
|
95
|
+
response.currentFanSpeedSetting = steps.reduce((best, step) => Math.abs(step.value - current) < Math.abs(best.value - current) ? step : best).name;
|
|
96
|
+
}
|
|
31
97
|
}
|
|
32
98
|
return response;
|
|
33
99
|
}
|
|
@@ -44,8 +110,8 @@ class FanBase extends ghToHap {
|
|
|
44
110
|
}
|
|
45
111
|
case 'action.devices.commands.SetFanSpeed': {
|
|
46
112
|
const params = command.execution[0].params;
|
|
113
|
+
const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
|
|
47
114
|
if (params.fanSpeedPercent !== undefined) {
|
|
48
|
-
const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
|
|
49
115
|
if (!rotationSpeed) {
|
|
50
116
|
return { ids: [service.uniqueId], status: 'ERROR', debugString: 'RotationSpeed not supported' };
|
|
51
117
|
}
|
|
@@ -53,9 +119,14 @@ class FanBase extends ghToHap {
|
|
|
53
119
|
return { ids: [service.uniqueId], status: 'SUCCESS' };
|
|
54
120
|
}
|
|
55
121
|
if (params.fanSpeed) {
|
|
56
|
-
|
|
122
|
+
const step = getFanSpeedSteps(rotationSpeed)?.find(x => x.name === params.fanSpeed);
|
|
123
|
+
if (!rotationSpeed || !step) {
|
|
124
|
+
return { ids: [service.uniqueId], status: 'ERROR', debugString: `unsupported fan speed ${params.fanSpeed}` };
|
|
125
|
+
}
|
|
126
|
+
await rotationSpeed.setValue(step.value);
|
|
127
|
+
return { ids: [service.uniqueId], status: 'SUCCESS' };
|
|
57
128
|
}
|
|
58
|
-
return { ids: [service.uniqueId], status: 'ERROR', debugString: 'missing fanSpeedPercent' };
|
|
129
|
+
return { ids: [service.uniqueId], status: 'ERROR', debugString: 'missing fanSpeed or fanSpeedPercent' };
|
|
59
130
|
}
|
|
60
131
|
case 'action.devices.commands.Reverse': {
|
|
61
132
|
const directionChar = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationDirection);
|
package/dist/types/fan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan.js","sourceRoot":"","sources":["../../src/types/fan.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAa,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"fan.js","sourceRoot":"","sources":["../../src/types/fan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "homebridge-gsh",
|
|
3
3
|
"displayName": "Homebridge Google Smart Home",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.2.
|
|
5
|
+
"version": "4.2.1-beta.0",
|
|
6
6
|
"description": "Google Smart Home",
|
|
7
7
|
"homepage": "https://github.com/homebridge-plugins/homebridge-gsh/blob/latest/README.md",
|
|
8
8
|
"license": "GPL-3.0",
|