homebridge-ecobee-security 0.9.0 → 1.0.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
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0
4
+
5
+ - New setting **Quick Responses** (`quickResponses`, `quickResponseMessages`) in the Doorbell camera card:
6
+ short messages the doorbell plays on its speaker. They appear as one "Quick Responses" tile in the Home app
7
+ with a switch per message (open the tile to pick one; tapping the tile itself plays nothing), which you can
8
+ add to the live view's Nearby Accessories or use from Siri and automations. New setting
9
+ `quickResponseVolume` (default 40%) sets how loud they play. Three come built in (Leave
10
+ Delivery, Hang On, Not Home), each with a Preview button in the settings; remove the ones you don't want
11
+ (and add them back). With Piper installed you can also reword them and add your own.
12
+ The doorbell needs to accept audio from the plugin, as for two-way talk, but two-way talk doesn't have to be
13
+ on. If the doorbell connection is down, a message waits up to 20 seconds for it to come back; it doesn't
14
+ play while another message is playing or someone is talking in a live view, and the log says why.
15
+ - The built-in messages come as recordings made with Piper's ryan voice (RyanSpeech, CC BY-NC-SA 4.0; see
16
+ `assets/quick-responses/LICENSE`). Changed or new wording needs [Piper](https://github.com/OHF-Voice/piper1-gpl)
17
+ on the Homebridge machine (`piperPath`, `piperVoice`; see "Custom wording with Piper" in the README).
18
+ - Two-way talk is no longer a beta.
19
+ - New **Doorbell Pressed** occupancy sensor on the video doorbell (with the doorbell link): Detected for 10
20
+ seconds after each press of any kind, for automations. It shows No Response while the link is down.
21
+
22
+ ## 0.9.1
23
+
24
+ - New setting **Add Comfort Setting switches** (`comfortSetting`, `comfortHoldType`): a Comfort Setting
25
+ accessory with a switch for each ecobee comfort setting (Home, Away, Sleep and your own). Turning one on
26
+ holds it, turning it off goes back to the schedule, and holds set in the ecobee app show up too.
27
+ - New setting **Two-way talk (beta)** (`twoWayAudio`, off by default): talk through the doorbell from the Home
28
+ app's live view. Needs the doorbell to accept audio from the plugin; the log says what it answered. With it
29
+ on, `twoWayAudioTest` (config only) plays a 3-second tone on the doorbell when a live view starts.
30
+ - New setting **Enable presence sensors for household members** (`memberPresence`, `presenceMembers`):
31
+ an occupancy sensor per person, Occupied while the ecobee app's location says they are home, for Home
32
+ app conditions like "only if Alex is home". Needs location set to Always in the ecobee app on that
33
+ person's phone; shows No Response while unknown.
34
+ - New setting **Home Occupied source** (`occupancySource`): besides your own Home app automations
35
+ (the default), Home Occupied can follow **ecobee Autopilot**, the ecobee app's location on household
36
+ members' phones, which arms and disarms like the switch does. ecobee's Smart Home & Away stays as the
37
+ third choice, now labelled beta.
38
+ - Two new settings with the Vacation Mode switch (off by default; they need the Home Occupied switch and
39
+ a source other than ecobee Smart Home & Away): **Start a vacation when the home has been empty for**
40
+ (`vacationWhenEmpty`, `vacationEmptyHours`), a safety net that starts a vacation once, and **End the
41
+ vacation when someone comes home** (`vacationEndOnArrival`), which also ends dated vacations.
42
+ - When the last hold is released (a robot back on its base, say) and it had switched Away to Home, Away is
43
+ armed again after a 3-second countdown instead of the full exit delay. The house was already empty, so
44
+ the delay only left it unarmed longer. Away you asked for during the hold still gets the normal exit delay.
45
+ - Fixed: turning Vacation Mode on in the Home app didn't start a vacation (ecobee rejected the vacation's
46
+ name).
47
+
3
48
  ## 0.9.0
4
49
 
5
50
  ### Doorbell camera (beta)
package/README.md CHANGED
@@ -38,6 +38,7 @@ GraphQL at `federated-api.prod.federated-graph.generacapis.com`), which ecobee c
38
38
  - **Vacation Mode** switch that follows, and starts, an ecobee vacation.
39
39
  - **Security holds** let other plugins, like a robot vacuum, keep the system from arming Away while they work.
40
40
  - **Doorbell camera** with HomeKit Secure Video, live view and snapshots; with the **doorbell link**, instant ring and motion, the sensors the doorbell bridges to HomeKit, and its Chime, Status Light and Night Vision switches.
41
+ - **Quick Responses**: short messages the doorbell plays on its speaker ("Leave Delivery", "Hang On", "Not Home"), one Quick Responses tile in the Home app, plus a **Doorbell Pressed** sensor for automations.
41
42
 
42
43
  ## Contents
43
44
 
@@ -49,6 +50,7 @@ GraphQL at `federated-api.prod.federated-graph.generacapis.com`), which ecobee c
49
50
  - [Keypad unlock](#keypad-unlock)
50
51
  - [Security holds](#security-holds)
51
52
  - [Doorbell camera](#doorbell-camera)
53
+ - [Quick Responses](#quick-responses)
52
54
  - [Home Occupied switch](#home-occupied-switch)
53
55
  - [Vacation Mode switch](#vacation-mode-switch)
54
56
  - [Smoke alarm and air quality](#smoke-alarm-and-air-quality)
@@ -150,6 +152,12 @@ Sign-in: see [Sign-in](#sign-in).
150
152
  | `doorbellCamera` | `false` | Adds the doorbell camera (beta). Restart the bridge after changing it. |
151
153
  | `motionGrace` | `15` | Seconds the motion sensor stays on after the doorbell's motion ends (6 to 120). |
152
154
  | `ffmpegPath` | `/usr/local/bin/ffmpeg` if it exists, else `ffmpeg` | The ffmpeg to use. |
155
+ | `twoWayAudio` | `false` | Talk through the doorbell from the Home app's live view (see [Two-way talk](#two-way-talk)). |
156
+ | `twoWayAudioTest` | `false` | With `twoWayAudio`: plays a 3-second tone on the doorbell when a live view starts (config file only). |
157
+ | `quickResponses` | `false` | Adds a switch per message that plays it on the doorbell (see [Quick Responses](#quick-responses)). Restart the bridge after changing it. |
158
+ | `quickResponseVolume` | `40` | How loud messages play at the door, in percent (5 to 100). Doesn't change two-way talk. |
159
+ | `quickResponseMessages` | the three built-ins | The messages: a list of `{ "id", "name", "phrase" }`; a built-in with `"enabled": false` is removed but keeps its wording. `id` never changes (it is the switch's identity in the Home app), `name` is the tile name (14 characters at most), `phrase` is what is said. |
160
+ | `piperPath`, `piperVoice` | none | Piper and its voice, only for changed or new wording (see [Custom wording with Piper](#custom-wording-with-piper)). |
153
161
  | `debugRecordings` | `false` | Keeps the last five recordings for troubleshooting (config file only; see [Troubleshooting](#troubleshooting)). |
154
162
 
155
163
  ### Switches and sensors settings
@@ -157,7 +165,14 @@ Sign-in: see [Sign-in](#sign-in).
157
165
  | Setting | Default | |
158
166
  |---|---|---|
159
167
  | `occupancySwitch` | `false` | Adds a **Home Occupied** switch for your presence automations (see [Home Occupied switch](#home-occupied-switch)). |
168
+ | `occupancySource` | `"home"` | Who sets Home Occupied: `"home"` (your automations), `"autopilot"` or `"ecobee"` (see [Home Occupied source](#home-occupied-source)). |
169
+ | `memberPresence` | `false` | Adds a presence sensor for each household member in `presenceMembers` (see [Member presence sensors](#member-presence-sensors)). |
170
+ | `presenceMembers` | none | The ecobee account ids of the people to add; the settings page lists them. |
160
171
  | `vacationSwitch` | `false` | Adds a **Vacation Mode** switch that is on while an ecobee vacation is running (see [Vacation Mode switch](#vacation-mode-switch)). |
172
+ | `vacationWhenEmpty` | `false` | Starts a vacation when Home Occupied has been off for `vacationEmptyHours` (default 24; see [Vacations that follow Home Occupied](#vacations-that-follow-home-occupied)). |
173
+ | `vacationEndOnArrival` | `false` | Ends running vacations when Home Occupied turns on. |
174
+ | `comfortSetting` | `false` | Adds a **Comfort Setting** accessory with a switch per ecobee comfort setting (see [Comfort Setting](#comfort-setting)). |
175
+ | `comfortHoldType` | `"nextTransition"` | How long a comfort setting turned on is held: `"nextTransition"` or `"indefinite"`. |
161
176
  | `smokeSensor` | `true` | Adds a separate **Smoke Alarm** accessory (a Smoke Sensor) that detects smoke while ecobee has a smoke-alarm incident open, for automations and Home app smoke notifications. Set to `false` to remove it. |
162
177
  | `airQuality` | `true` | For each thermostat with an air quality sensor: an accessory "<thermostat> Air Quality" with an **Air Quality Sensor** (overall level; VOC as ecobee reports it, in ppb, which the Home app labels µg/m³) and a **Carbon Dioxide Sensor** (ppm). Read every 5 minutes. The level follows the ecobee app's Clean–Poor bar: its first two segments are Excellent, then Good, Fair, Inferior, Poor; Unknown while the sensor calibrates. |
163
178
  | `co2Alert` | `1000` | CO2 (ppm) at or above which the Carbon Dioxide Sensor reports abnormal levels. |
@@ -231,9 +246,9 @@ Using a robot vacuum as the example:
231
246
 
232
247
  | Situation | What the security system does |
233
248
  |---|---|
234
- | The robot starts cleaning while the system is armed **Away** | Switches to Home, and goes back to Away when the robot is done. |
249
+ | The robot starts cleaning while the system is armed **Away** | Switches to Home, and goes back to Away when the robot is done, after a 3-second countdown. |
235
250
  | The robot starts while the system is set to **Home**, **Night** or **Off** | Nothing changes. |
236
- | You arm **Away in the Home app** while the robot is cleaning (the tile, a scene, an automation or Siri) | Stays in Home until the robot is done, then arms Away. The tile shows "Arming…" meanwhile. |
251
+ | You arm **Away in the Home app** while the robot is cleaning (the tile, a scene, an automation or Siri) | Stays in Home until the robot is done, then arms Away with the normal exit delay. The tile shows "Arming…" meanwhile. |
237
252
  | You want Away **now** | Turn on the **Arm Away Now** switch (see [Hold options](#hold-options)). It arms Away right away and sends the robot home. |
238
253
  | You arm **Away in the ecobee app** while the robot is cleaning | Sends the robot home, and gives it up to 2 extra minutes on the countdown. It arms as soon as the robot is docked, but never earlier than your normal countdown. If the robot won't make it in time, it stops where it is before the sensors arm. |
239
254
  | You arm **Away at the keypad** while the robot is cleaning | Stops the robot where it is. ecobee doesn't report keypad countdowns, so this happens once Away is already armed: there's a window of up to 10 seconds in which a motion sensor could still catch the robot. |
@@ -313,7 +328,7 @@ camera isn't published and the log says why.
313
328
 
314
329
  Skip steps 2 to 4 to run the camera without the link: it is then a second tile, a plain camera named
315
330
  "<name> Camera", next to ecobee's own doorbell tile, which keeps the ring, motion and recordings. With the
316
- link the camera replaces ecobee's doorbell. Two-way talk isn't supported yet (see the notes above).
331
+ link the camera replaces ecobee's doorbell.
317
332
 
318
333
  Notes:
319
334
 
@@ -339,7 +354,8 @@ the Home app. You get:
339
354
  occupancy and battery state;
340
355
  - the doorbell's own switches: **Chime Doorbell**, **Camera Status Light** and **Night Vision Light**.
341
356
  Changes in the Home app are sent to the doorbell, and changes made at the doorbell show up in the Home
342
- app. While the link is down, setting one fails.
357
+ app. While the link is down, setting one fails;
358
+ - a **Doorbell Pressed** sensor (see below).
343
359
 
344
360
  The pairing is kept in `ecobee-security/doorbell-pairing.json` in the Homebridge folder. **Unlink** in the
345
361
  settings removes it from the doorbell as well (restart the bridge afterwards). If the link drops, the
@@ -347,6 +363,13 @@ plugin looks for the doorbell again and reconnects by itself; the ring, motion,
347
363
  sensors show **No Response** while it has been down for a minute. The video still comes from the
348
364
  cloud session (the doorbell's own stream isn't used).
349
365
 
366
+ ### Doorbell Pressed sensor
367
+
368
+ With the doorbell link, the video doorbell also has an occupancy sensor named **Doorbell Pressed**. Each press
369
+ (single, double or long) sets it to Detected for 10 seconds; another press starts the 10 seconds again.
370
+ The Home app can't start an automation from a video doorbell's ring, but it can from a sensor. It shows No
371
+ Response while the doorbell link is down.
372
+
350
373
  ### HomeKit Secure Video
351
374
 
352
375
  The camera records for HomeKit Secure Video (a home hub and an iCloud+ plan are needed, as for any
@@ -369,6 +392,63 @@ person, animal and package detection, are then made by HomeKit.
369
392
 
370
393
  To inspect recordings, see [Troubleshooting](#troubleshooting).
371
394
 
395
+ ### Two-way talk
396
+
397
+ Turn on **Two-way talk** (`twoWayAudio`) and restart the bridge to talk through the doorbell from the Home app's
398
+ live view (the microphone button). Whether the doorbell accepts audio from the plugin can depend on its firmware, and talking adds a little delay. The log says at start-up what the doorbell answered ("two-way
399
+ talk: the camera answered audio sendrecv" is good; anything else means it can't take audio and the plugin carries
400
+ on receive-only, as before). The live view's picture and sound are not affected.
401
+
402
+ To check that audio reaches the doorbell, set `"twoWayAudioTest": true` in the config (there is no settings-page
403
+ switch), open the live view while standing at the door, and listen for a 3-second tone; the log says "test tone
404
+ sent". Turn it off afterwards.
405
+
406
+ ## Quick Responses
407
+
408
+ Quick Responses are short messages the doorbell plays on its speaker, for the person at your door: "You can just leave it", "We'll be right there". Turn on **Quick Responses** (`quickResponses`, in the **Doorbell camera** card, which needs the doorbell camera) and restart the bridge. It needs the doorbell to accept audio from the plugin, the same as [Two-way talk](#two-way-talk) (the log says what it answered), but **Two-way talk** itself doesn't have to be on.
409
+
410
+ There are three built-in messages:
411
+
412
+ | Tile | Says |
413
+ |---|---|
414
+ | Leave Delivery | "Hi there. You can just leave it. Thanks!" |
415
+ | Hang On | "Just a sec, we'll be right there." |
416
+ | Not Home | "Hi there, no one can answer the door right now, but we'll be notified that you stopped by." |
417
+
418
+ The messages appear in the Home app as **one tile, "Quick Responses"**, which holds a switch per message. Tapping the tile itself turns all of them on at once, which the plugin recognises and ignores (it plays nothing and the switches turn back off; the log says so). **Open the tile** (long-press, or tap its settings) and pick one message instead. If you prefer a tile per message, turn on **Show as Separate Tiles** in the accessory's settings in the Home app. In the doorbell's live view, the group appears as one tile in **Nearby Accessories**: add it there and tap the message you want. Turning a message's switch on plays it and it turns itself off when the message ends. Siri works too ("Hey Siri, turn on Not Home"), and so do automations and scenes. Messages play at the volume you set (`quickResponseVolume`, 40% by default).
419
+
420
+ In the settings, each message is a row: the **title** (the tile name, 14 characters at most), **what is said**, and **Preview**, which plays it in your browser. Without Piper, the three built-in messages are fixed: the rows show their title and wording as text, and you can preview them. Once [Piper](#custom-wording-with-piper) is installed, each built-in row has **Replace** (edit its title and wording; **Restore** goes back to the shipped wording and audio) and **Add a message** adds your own, with a remove button. The built-in messages can be removed (×) and added back from the line under the rows, with or without Piper; a removed message's switch leaves the Home app after a bridge restart, and returns with the same identity when added back. Changing a title or the wording takes effect after a bridge restart.
421
+
422
+ An example automation: when someone rings and nobody is home, tell them so.
423
+
424
+ 1. **Trigger:** An Accessory is Controlled > **Doorbell Pressed** detects occupancy ([Doorbell Pressed sensor](#doorbell-pressed-sensor)).
425
+ 2. **Condition:** only if **Home Occupied** is off ([Home Occupied switch](#home-occupied-switch)).
426
+ 3. **Action:** turn on **Not Home**.
427
+
428
+ How it works: the message is played into the plugin's session with the doorbell, so it can't play while the session is down, while the camera hasn't accepted audio from us, while another message is playing, or while someone is talking in a live view (the microphone has priority; a message that is playing stops when someone starts talking). The switch then turns itself back off after a second, and the log says why. One message plays at a time. The log line "Quick Response "<name>" played" shows how many audio packets were sent. Each switch's identity comes from the message's `id`, not its title or wording, so you can rename a message without breaking the automations that use it. Messages you remove from the settings disappear from the Home app after a restart.
429
+
430
+ ### Custom wording with Piper
431
+
432
+ The three built-in messages come as recordings with the plugin. Anything else, meaning reworded built-ins and your own messages, is turned into speech on your Homebridge machine with [Piper](https://github.com/OHF-Voice/piper1-gpl), a local text-to-speech program that doesn't send your text anywhere. That is optional: without Piper the built-ins work as they are, and a message that needs it is left out, with a warning in the log.
433
+
434
+ 1. Install Piper into a folder the Homebridge user can read, for example a Python virtual environment:
435
+
436
+ ```sh
437
+ sudo -u homebridge python3 -m venv /var/lib/homebridge/piper
438
+ sudo -u homebridge /var/lib/homebridge/piper/bin/pip install piper-tts
439
+ ```
440
+
441
+ 2. Download a voice: an `.onnx` file and its `.onnx.json` file, side by side, from [rhasspy/piper-voices on Hugging Face](https://huggingface.co/rhasspy/piper-voices). The built-in messages use the English (US) **ryan**, **high** quality voice, which is a good place to start.
442
+ 3. In the settings, under **Piper settings** in the Quick Responses box, fill in **Piper path** (the `piper` program, for example `/var/lib/homebridge/piper/bin/piper`) and **Piper voice** (the `.onnx` file). The page says whether Piper was found. **Preview** then plays your wording.
443
+
444
+ The plugin makes the audio for your messages when the bridge starts (one at a time, in the background) and keeps it in `ecobee-security/quick-responses` in the Homebridge folder, and removes it when no message uses it any more. A message shows up in the Home app once its audio is ready. All messages are spoken with the same speed and voice settings as the built-ins.
445
+
446
+ Tips: a bare "Hi!" can come out as "Aye". Writing "Hi there" usually helps, or give Piper the exact sounds: text between `[[` and `]]` is read as phonemes, for example `[[ hˈaɪ ðɛɹ ]]`. Phonemes are passed through unchanged.
447
+
448
+ ### Voice licensing
449
+
450
+ The recordings of the built-in messages (in `assets/quick-responses`) were made with Piper's **ryan** voice, whose training data (RyanSpeech) is licensed **CC BY-NC-SA 4.0**. The recordings are therefore licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) too: free for non-commercial use, with attribution: "RyanSpeech (CC BY-NC-SA 4.0), synthesized with Piper". The rest of the plugin stays MIT licensed. A voice you use for your own wording has its own license; check it before sharing recordings made with it.
451
+
372
452
  ## Home Occupied switch
373
453
 
374
454
  Apple Home asks you to confirm (a notification you have to tap) whenever a people-arrive or
@@ -404,6 +484,42 @@ What each direction does:
404
484
  > or from a shared home member's phone, turns off an Away system, so treat it as as sensitive as the
405
485
  > security tile itself.
406
486
 
487
+ ### Home Occupied source
488
+
489
+ Who sets the switch is the **Home Occupied source** (`occupancySource`), shown once the switch is on.
490
+ Restart the bridge after changing it.
491
+
492
+ | Source | `occupancySource` | What decides |
493
+ |---|---|---|
494
+ | **Set via Home App Automations** | `"home"` (default) | You do, with Home app arrive/leave automations, which use Apple's location of each person in your Home. Fastest, and you keep the most control. Nothing to set up in ecobee. |
495
+ | **ecobee Autopilot** | `"autopilot"` | The ecobee app's location on each household member's phone, read every 30 seconds. Location must be set to **Always** in the ecobee app on every phone that counts. Reacts quickly, but doesn't see guests or people without the ecobee app. |
496
+ | **ecobee Smart Home & Away (beta)** | `"ecobee"` | The thermostat, part of ecobee's eco+: it decides from motion on ecobee sensors, plus phones when Autopilot is on. It notices anyone in the house, but can take a long time to decide the home is empty. Paused during an ecobee vacation. Doesn't arm or disarm anything. |
497
+
498
+ With Autopilot, someone home is any member whose phone is tracked and reads home; nobody home is all of
499
+ those reading away. If some are unknown and none is home, the switch keeps its last state, and so it
500
+ does if no member is tracked or ecobee can't be reached (the log says which). After a restart, Autopilot's first reading only brings the switch up to date, without arming or disarming
501
+ anything; later changes arm and disarm exactly as the switch does. With either ecobee source the switch follows ecobee, so changing it
502
+ in the Home app is undone.
503
+
504
+ > [!NOTE]
505
+ > If ecobee's own Autopilot is set to arm and disarm by itself in the ecobee app, ecobee and the plugin
506
+ > both act on the same arrivals and departures. Pick one.
507
+
508
+ ## Member presence sensors
509
+
510
+ Turn on **Enable presence sensors for household members** (`memberPresence`) and tick the people in the
511
+ settings (`presenceMembers`, their ecobee account ids). Each gets an occupancy sensor named after them,
512
+ **Occupied** while the ecobee app's location says they are home, for Home app conditions like "only if
513
+ Alex is home" or "only when nobody else is home". The plugin reads ecobee every 30 seconds and logs
514
+ when someone comes or goes. Restart the bridge after changing the setting.
515
+
516
+ - The person's phone must report to ecobee with location set to **Always** in the ecobee app. A person
517
+ for whom that isn't so isn't listed as available in the settings, and gets no sensor until it is.
518
+ - Only household members count. Guests, and people without the ecobee app, aren't seen.
519
+ - **No Response** means unknown: ecobee doesn't know where the phone is, the person is no longer tracked,
520
+ or ecobee couldn't be reached for a while.
521
+ - Anyone you share your Home with can see these sensors, and so where the people are.
522
+
407
523
  ## Vacation Mode switch
408
524
 
409
525
  Turn on **Vacation Mode switch** (`vacationSwitch`) and the plugin adds a switch named **Vacation Mode**
@@ -421,6 +537,47 @@ ends.
421
537
  - Like the other sensors, the switch shows No Response while ecobee can't be reached or you're
422
538
  signed out. Restart the bridge after changing the setting.
423
539
 
540
+ ### Vacations that follow Home Occupied
541
+
542
+ Two optional settings in the Vacation Mode section (off by default). They need both the Home Occupied
543
+ and the Vacation Mode switches, and a [Home Occupied source](#home-occupied-source) other than ecobee
544
+ Smart Home & Away, which ecobee pauses during a vacation.
545
+
546
+ - **Start a vacation when the home has been empty for** (`vacationWhenEmpty`, `vacationEmptyHours`,
547
+ 24 by default, 1 to 720): once Home Occupied has been off that long and no vacation is running, the
548
+ plugin starts one as the switch does. It does this at most once per empty period, so a vacation you
549
+ end by hand while still away stays ended. Treat it as a safety net and start vacations deliberately,
550
+ with the switch or dated in the ecobee app: a wrongly "empty" home (say, a phone without location
551
+ set to Always under ecobee Autopilot) would start one, which is why the default is long.
552
+ - **End the vacation when someone comes home** (`vacationEndOnArrival`): when Home Occupied turns on,
553
+ every running ecobee vacation ends, including dated ones from the ecobee app. The reading right
554
+ after a restart doesn't count.
555
+
556
+ Visitors while you're away aren't household members, so Home Occupied stays off and the vacation keeps
557
+ running. They disarm with their keypad code and arm Away from the ecobee keypad when they leave. If
558
+ they forget, the Home app's security notification shows the disarm, and you can arm from your phone.
559
+
560
+ ## Comfort Setting
561
+
562
+ Turn on **Add Comfort Setting switches** (`comfortSetting`) and the plugin adds one accessory,
563
+ **Comfort Setting**, with a switch for each of your ecobee comfort settings (Home, Away, Sleep and your own,
564
+ read from the thermostats' program; with several thermostats, a setting any of them has). It is for
565
+ automations such as "Home Occupied off → Away on".
566
+
567
+ - Turning a switch **on** holds that comfort setting on the thermostats that have it, and the others
568
+ turn off. How long: `comfortHoldType`, `"nextTransition"` (default, until the next scheduled change)
569
+ or `"indefinite"` (until you change it).
570
+ - Turning the active switch **off** goes back to your schedule, so all off means following the schedule.
571
+ - A hold set in the ecobee app or on the thermostat lights the matching switch (read every minute). A
572
+ temperature-only hold lights none.
573
+ - During an ecobee vacation all switches are off and changes are refused (the log says so).
574
+ - Like the other sensors, the switches show No Response while ecobee can't be reached. Restart the
575
+ bridge after changing the setting.
576
+
577
+ > [!NOTE]
578
+ > The Home app shows the switches as one tile, and tapping the tile toggles all of them. Open the tile
579
+ > and pick one, or use **Show as Separate Tiles** in the accessory's settings.
580
+
424
581
  ## Smoke alarm and air quality
425
582
 
426
583
  - **Smoke Alarm** (`smokeSensor`, on by default) is its own accessory, a Smoke Sensor that detects smoke while ecobee has a smoke-alarm incident open. It is separate from the security tile (the Home app would otherwise merge it into the tile with a cloud icon).
@@ -0,0 +1,19 @@
1
+ The audio files in this folder (leave-delivery.wav, hang-on.wav, not-home.wav) are licensed under the
2
+ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license (CC BY-NC-SA 4.0).
3
+
4
+ https://creativecommons.org/licenses/by-nc-sa/4.0/
5
+ Legal code: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
6
+
7
+ You may copy and redistribute the recordings and adapt them, for non-commercial purposes only, if you give
8
+ appropriate credit, indicate changes, and share your adaptations under the same license.
9
+
10
+ Attribution:
11
+
12
+ RyanSpeech (CC BY-NC-SA 4.0), synthesized with Piper
13
+
14
+ The recordings were synthesized with the Piper text-to-speech program (https://github.com/OHF-Voice/piper1-gpl)
15
+ and its "ryan" voice (en_US-ryan-high), which was trained on the RyanSpeech dataset,
16
+ licensed CC BY-NC-SA 4.0.
17
+
18
+ The rest of this package is licensed under the MIT license (see the LICENSE file in the package root); this
19
+ license applies only to the files in this folder.
@@ -106,17 +106,121 @@
106
106
  "default": false,
107
107
  "description": "Adds a Home Occupied switch to the Home app, with an occupancy sensor. By default your own people-arrive and people-leave automations set it, and it does the rest: off (nobody home) arms Away, on (someone home) turns Away off. Switches don't ask for confirmation the way automations that change the security system do. See \"Home Occupied switch\" in the README."
108
108
  },
109
+ "occupancySource": {
110
+ "title": "Home Occupied source",
111
+ "type": "string",
112
+ "default": "home",
113
+ "oneOf": [
114
+ {
115
+ "title": "Set via Home App Automations",
116
+ "enum": [
117
+ "home"
118
+ ]
119
+ },
120
+ {
121
+ "title": "ecobee Autopilot",
122
+ "enum": [
123
+ "autopilot"
124
+ ]
125
+ },
126
+ {
127
+ "title": "ecobee Smart Home & Away (beta)",
128
+ "enum": [
129
+ "ecobee"
130
+ ]
131
+ }
132
+ ],
133
+ "description": "Who sets Home Occupied. Home App Automations: your arrive/leave automations. ecobee Autopilot: the ecobee app's location on household members' phones, which need location set to Always in the ecobee app. ecobee Smart Home & Away: the thermostat decides from motion on ecobee sensors (plus phones when Autopilot is on); it can be slow to notice an empty home, and it doesn't arm or disarm. See \"Home Occupied source\" in the README.",
134
+ "condition": {
135
+ "functionBody": "return model.occupancySwitch === true;"
136
+ }
137
+ },
138
+ "memberPresence": {
139
+ "title": "Presence sensors for household members",
140
+ "type": "boolean",
141
+ "default": false,
142
+ "description": "Adds an occupancy sensor for each person in presenceMembers, for Home app conditions like \"only if Alex is home\". Anyone you share your Home with can see them. Each person's phone needs location set to Always in the ecobee app. See \"Member presence sensors\" in the README."
143
+ },
144
+ "presenceMembers": {
145
+ "title": "People with a presence sensor",
146
+ "type": "array",
147
+ "items": {
148
+ "type": "string"
149
+ },
150
+ "description": "ecobee account ids of the people to add (the settings page lists them). With no list, none.",
151
+ "condition": {
152
+ "functionBody": "return model.memberPresence === true;"
153
+ }
154
+ },
109
155
  "vacationSwitch": {
110
156
  "title": "Vacation Mode switch",
111
157
  "type": "boolean",
112
158
  "default": false,
113
159
  "description": "Shows when an ecobee vacation is on, for other accessories to follow. Turn it on to start a vacation now, until you turn it off; set dated vacations in the ecobee app."
114
160
  },
161
+ "vacationWhenEmpty": {
162
+ "title": "Start a vacation when the home has been empty for",
163
+ "type": "boolean",
164
+ "default": false,
165
+ "description": "A safety net if you forget to turn Vacation Mode on: starts an ecobee vacation once Home Occupied has been off for vacationEmptyHours. Needs the Home Occupied and Vacation Mode switches, and a Home Occupied source other than ecobee Smart Home & Away.",
166
+ "condition": {
167
+ "functionBody": "return model.vacationSwitch === true && model.occupancySwitch === true && model.occupancySource !== 'ecobee';"
168
+ }
169
+ },
170
+ "vacationEmptyHours": {
171
+ "title": "Hours empty before the vacation starts",
172
+ "type": "integer",
173
+ "default": 24,
174
+ "minimum": 1,
175
+ "maximum": 720,
176
+ "description": "How long the home has to be empty first.",
177
+ "condition": {
178
+ "functionBody": "return model.vacationWhenEmpty === true && model.vacationSwitch === true && model.occupancySwitch === true && model.occupancySource !== 'ecobee';"
179
+ }
180
+ },
181
+ "vacationEndOnArrival": {
182
+ "title": "End the vacation when someone comes home",
183
+ "type": "boolean",
184
+ "default": false,
185
+ "description": "Ends any running ecobee vacation, including dated ones from the ecobee app, when Home Occupied turns on. Needs the Home Occupied and Vacation Mode switches, and a Home Occupied source other than ecobee Smart Home & Away.",
186
+ "condition": {
187
+ "functionBody": "return model.vacationSwitch === true && model.occupancySwitch === true && model.occupancySource !== 'ecobee';"
188
+ }
189
+ },
190
+ "comfortSetting": {
191
+ "title": "Add Comfort Setting switches",
192
+ "type": "boolean",
193
+ "default": false,
194
+ "description": "One switch per ecobee comfort setting (Home, Away, Sleep and your own). Turning one on holds it; turning it off goes back to your schedule. Restart the bridge after changing this."
195
+ },
196
+ "comfortHoldType": {
197
+ "title": "Comfort setting hold",
198
+ "type": "string",
199
+ "default": "nextTransition",
200
+ "oneOf": [
201
+ {
202
+ "title": "Until the next scheduled change",
203
+ "enum": [
204
+ "nextTransition"
205
+ ]
206
+ },
207
+ {
208
+ "title": "Until I change it",
209
+ "enum": [
210
+ "indefinite"
211
+ ]
212
+ }
213
+ ],
214
+ "description": "How long a comfort setting you turn on in the Home app is held.",
215
+ "condition": {
216
+ "functionBody": "return model.comfortSetting === true;"
217
+ }
218
+ },
115
219
  "doorbellCamera": {
116
220
  "title": "Doorbell camera",
117
221
  "type": "boolean",
118
222
  "default": false,
119
- "description": "Brings the ecobee doorbell into HomeKit Secure Video: recordings, activity zones and Apple's person and package detection in the Home app, plus live view. With the doorbell link it replaces ecobee's doorbell (instant ring and motion). Two-way talk isn't supported yet. Restart the bridge after changing this. Add it in the Home app with the setup code shown in the Homebridge log. Needs an ffmpeg with libfdk_aac and libx264. See \"Doorbell camera\" in the README."
223
+ "description": "Brings the ecobee doorbell into HomeKit Secure Video: recordings, activity zones and Apple's person and package detection in the Home app, plus live view. With the doorbell link it replaces ecobee's doorbell (instant ring and motion). Restart the bridge after changing this. Add it in the Home app with the setup code shown in the Homebridge log. Needs an ffmpeg with libfdk_aac and libx264. See \"Doorbell camera\" in the README."
120
224
  },
121
225
  "motionGrace": {
122
226
  "title": "Motion grace period (seconds)",
@@ -129,6 +233,97 @@
129
233
  "functionBody": "return model.doorbellCamera === true;"
130
234
  }
131
235
  },
236
+ "twoWayAudio": {
237
+ "title": "Two-way talk",
238
+ "type": "boolean",
239
+ "default": false,
240
+ "description": "Talk through the doorbell from the Home app's live view.",
241
+ "condition": {
242
+ "functionBody": "return model.doorbellCamera === true;"
243
+ }
244
+ },
245
+ "twoWayAudioTest": {
246
+ "title": "Two-way talk test tone",
247
+ "type": "boolean",
248
+ "default": false,
249
+ "description": "Plays a 3-second tone on the doorbell when live view starts, to check that audio reaches it. Turn it off afterwards.",
250
+ "condition": {
251
+ "functionBody": "return model.doorbellCamera === true && model.twoWayAudio === true;"
252
+ }
253
+ },
254
+ "quickResponses": {
255
+ "title": "Quick Responses",
256
+ "type": "boolean",
257
+ "default": false,
258
+ "description": "Short messages the doorbell can play. They appear as one Quick Responses tile in the Home app, with a switch per message, which you can add to the live view's Nearby Accessories. Restart the bridge after changing this. See \"Quick Responses\" in the README.",
259
+ "condition": {
260
+ "functionBody": "return model.doorbellCamera === true;"
261
+ }
262
+ },
263
+ "quickResponseVolume": {
264
+ "title": "Quick Response volume (%)",
265
+ "type": "integer",
266
+ "default": 40,
267
+ "minimum": 5,
268
+ "maximum": 100,
269
+ "description": "How loud messages play at the door.",
270
+ "condition": {
271
+ "functionBody": "return model.doorbellCamera === true && model.quickResponses === true;"
272
+ }
273
+ },
274
+ "quickResponseMessages": {
275
+ "title": "Quick Response messages",
276
+ "type": "array",
277
+ "description": "The messages, each with an id that stays the same (it keeps the switch's identity in the Home app), a name of up to 14 characters, and what is said. With no list, the three built-in messages (Leave Delivery, Hang On, Not Home).",
278
+ "items": {
279
+ "type": "object",
280
+ "properties": {
281
+ "id": {
282
+ "title": "Id",
283
+ "type": "string"
284
+ },
285
+ "name": {
286
+ "title": "Name",
287
+ "type": "string",
288
+ "maxLength": 14
289
+ },
290
+ "phrase": {
291
+ "title": "What is said",
292
+ "type": "string"
293
+ },
294
+ "enabled": {
295
+ "title": "Enabled",
296
+ "type": "boolean",
297
+ "default": true,
298
+ "description": "Only for the built-in messages: false removes the switch from the Home app and keeps the wording."
299
+ }
300
+ },
301
+ "required": [
302
+ "id",
303
+ "name",
304
+ "phrase"
305
+ ]
306
+ },
307
+ "condition": {
308
+ "functionBody": "return model.doorbellCamera === true && model.quickResponses === true;"
309
+ }
310
+ },
311
+ "piperPath": {
312
+ "title": "Piper path",
313
+ "type": "string",
314
+ "description": "Only for changed or new wording: the piper program you installed (see \"Custom wording with Piper\" in the README).",
315
+ "condition": {
316
+ "functionBody": "return model.doorbellCamera === true && model.quickResponses === true;"
317
+ }
318
+ },
319
+ "piperVoice": {
320
+ "title": "Piper voice",
321
+ "type": "string",
322
+ "description": "Path to the voice (.onnx) Piper speaks with.",
323
+ "condition": {
324
+ "functionBody": "return model.doorbellCamera === true && model.quickResponses === true;"
325
+ }
326
+ },
132
327
  "ffmpegPath": {
133
328
  "title": "ffmpeg path",
134
329
  "type": "string",