homebridge-gsh 4.2.0-beta.9 → 4.2.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 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" works on every fan with Rotation Speed. Fans with 2-10 Rotation Speed steps (from `minStep`) also get one named speed per step ("speed 2"), 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 (On / Off)
44
- - Fan v2 (On / Off)
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. Every fan answers to "low", "medium" and "high". How they map depends on the Rotation Speed `minStep`:
108
+
109
+ | Fan reports | Named speeds | low | medium | high |
110
+ |---|---|---|---|---|
111
+ | `minStep` of 1 or none (continuous) | `low`, `medium`, `high` | 33% | 66% | 100% |
112
+ | 2 steps (e.g. `minStep` 50) | `low`, `high` | step 1 | step 2 | step 2 |
113
+ | 3 steps (e.g. `minStep` 33.33) | `low`, `medium`, `high` | step 1 | step 2 | step 3 |
114
+ | 4 to 10 steps (e.g. `minStep` 16.67 for a 6-speed fan) | `speed 1` … `speed N` | speed 1 | middle speed, rounded up (e.g. speed 3 of 6) | 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")
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.
@@ -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,76 @@
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', 'medium', 'mid', ...numbered] },
19
+ ][index];
20
+ }
21
+ const synonyms = [...numbered, `${n}`];
22
+ if (index === 0) {
23
+ synonyms.push('low', 'minimum');
24
+ }
25
+ if (index === Math.ceil(count / 2) - 1) {
26
+ synonyms.push('medium', 'mid');
27
+ }
28
+ if (index === count - 1) {
29
+ synonyms.push('high', 'maximum');
30
+ }
31
+ return { name: `speed_${n}`, synonyms };
32
+ }
33
+ export function getFanSpeedSteps(rotationSpeed) {
34
+ if (!rotationSpeed) {
35
+ return undefined;
36
+ }
37
+ const min = rotationSpeed.minValue ?? 0;
38
+ const max = rotationSpeed.maxValue ?? 100;
39
+ const stepCount = rotationSpeed.minStep && rotationSpeed.minStep > 0
40
+ ? Math.round((max - min) / rotationSpeed.minStep)
41
+ : 0;
42
+ const stepped = stepCount >= 2 && stepCount <= MAX_NAMED_SPEEDS;
43
+ if (!stepped && stepCount === 1) {
44
+ return undefined;
45
+ }
46
+ const count = stepped ? stepCount : DEFAULT_PRESET_COUNT;
47
+ const increment = stepped ? rotationSpeed.minStep : (max - min) / count;
48
+ const steps = [];
49
+ for (let i = 1; i <= count; i++) {
50
+ const raw = min + i * increment;
51
+ const value = i === count ? max : stepped ? Math.round(raw * 100) / 100 : Math.floor(raw);
52
+ steps.push({ value, ...stepNames(i - 1, count) });
53
+ }
54
+ return steps;
55
+ }
3
56
  class FanBase extends ghToHap {
4
57
  sync(service) {
5
58
  const traits = ['action.devices.traits.OnOff'];
6
59
  const attributes = {};
7
- if (service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed)) {
60
+ const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
61
+ if (rotationSpeed) {
8
62
  traits.push('action.devices.traits.FanSpeed');
9
63
  attributes.supportsFanSpeedPercent = true;
64
+ const steps = getFanSpeedSteps(rotationSpeed);
65
+ if (steps) {
66
+ attributes.availableFanSpeeds = {
67
+ speeds: steps.map(step => ({
68
+ speed_name: step.name,
69
+ speed_values: [{ speed_synonym: step.synonyms, lang: 'en' }],
70
+ })),
71
+ ordered: true,
72
+ };
73
+ }
10
74
  }
11
75
  if (service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationDirection)) {
12
76
  attributes.reversible = true;
@@ -27,7 +91,12 @@ class FanBase extends ghToHap {
27
91
  };
28
92
  const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
29
93
  if (rotationSpeed) {
30
- response.currentFanSpeedPercent = Number(rotationSpeed.value) || 0;
94
+ const current = Number(rotationSpeed.value) || 0;
95
+ response.currentFanSpeedPercent = current;
96
+ const steps = getFanSpeedSteps(rotationSpeed);
97
+ if (steps) {
98
+ response.currentFanSpeedSetting = steps.reduce((best, step) => Math.abs(step.value - current) < Math.abs(best.value - current) ? step : best).name;
99
+ }
31
100
  }
32
101
  return response;
33
102
  }
@@ -44,8 +113,8 @@ class FanBase extends ghToHap {
44
113
  }
45
114
  case 'action.devices.commands.SetFanSpeed': {
46
115
  const params = command.execution[0].params;
116
+ const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
47
117
  if (params.fanSpeedPercent !== undefined) {
48
- const rotationSpeed = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationSpeed);
49
118
  if (!rotationSpeed) {
50
119
  return { ids: [service.uniqueId], status: 'ERROR', debugString: 'RotationSpeed not supported' };
51
120
  }
@@ -53,9 +122,14 @@ class FanBase extends ghToHap {
53
122
  return { ids: [service.uniqueId], status: 'SUCCESS' };
54
123
  }
55
124
  if (params.fanSpeed) {
56
- return { ids: [service.uniqueId], status: 'ERROR', debugString: 'named fan speeds not supported' };
125
+ const step = getFanSpeedSteps(rotationSpeed)?.find(x => x.name === params.fanSpeed);
126
+ if (!rotationSpeed || !step) {
127
+ return { ids: [service.uniqueId], status: 'ERROR', debugString: `unsupported fan speed ${params.fanSpeed}` };
128
+ }
129
+ await rotationSpeed.setValue(step.value);
130
+ return { ids: [service.uniqueId], status: 'SUCCESS' };
57
131
  }
58
- return { ids: [service.uniqueId], status: 'ERROR', debugString: 'missing fanSpeedPercent' };
132
+ return { ids: [service.uniqueId], status: 'ERROR', debugString: 'missing fanSpeed or fanSpeedPercent' };
59
133
  }
60
134
  case 'action.devices.commands.Reverse': {
61
135
  const directionChar = service.serviceCharacteristics.find(x => x.uuid === Characteristic.RotationDirection);
@@ -1 +1 @@
1
- {"version":3,"file":"fan.js","sourceRoot":"","sources":["../../src/types/fan.ts"],"names":[],"mappings":"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"}
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.0-beta.9",
5
+ "version": "4.2.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",
@@ -111,4 +111,4 @@
111
111
  "uuid": "^11.0.0"
112
112
  }
113
113
  }
114
- }
114
+ }