From e7544c8c7ccb397be3fd3c19f7a4c7b4150683c8 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Fri, 3 Jan 2020 19:11:03 +0100 Subject: [PATCH] Add KEF integration (#11274) * add KEF speaker integration docs * :pencil2: Tweak * update text for usage of aiokef v0.2.0 * :pencil2: Tweak * add port to the configuration * update ha_release to 0.104 Co-authored-by: Franck Nijhof Co-authored-by: Klaas Schoute --- source/_integrations/kef.markdown | 85 +++++++++++++++++++++++++ source/images/supported_brands/kef.png | Bin 0 -> 18986 bytes 2 files changed, 85 insertions(+) create mode 100644 source/_integrations/kef.markdown create mode 100644 source/images/supported_brands/kef.png diff --git a/source/_integrations/kef.markdown b/source/_integrations/kef.markdown new file mode 100644 index 00000000000..d426953c30f --- /dev/null +++ b/source/_integrations/kef.markdown @@ -0,0 +1,85 @@ +--- +title: "KEF Speakers" +description: "Instructions on how to integrate KEF Speakers into Home Assistant." +logo: kef.png +ha_category: + - Media Player +ha_iot_class: Local Polling +ha_release: 0.104 +--- + +The `kef` platform allows you to control the [KEF LS50 Wireless](https://international.kef.com/products/ls50-wireless) and [KEF LSX](https://international.kef.com/products/lsx) speakers from Home Assistant. + +Supported devices: + +- KEF LS50 Wireless +- KEF LSX (untested) + +To add KEF Speakers to your installation, add the following to your `configuration.yaml` file: + +## Configuration + +```yaml +# Example configuration.yaml entry +- platform: kef + host: IP_ADDRESS + type: LS50 +``` + +{% configuration %} +host: + description: "IP address of the device. Example: 192.168.1.32" + required: true + type: string +type: + description: The speaker type, either `LS50` or `LSX`. + required: true + type: string +name: + description: The name of the device + required: false + default: KEF + type: string +port: + description: The port of the device + required: false + default: 50001 + type: integer +maximum_volume: + description: Maximum volume allowed. Number between 0 and 1. + required: false + default: 0.5 + type: float +volume_step: + description: Volume step when increasing volume. + required: false + default: 0.05 + type: float +inverse_speaker_mode: + description: Switch channels from L/R to R/L. + required: false + default: false + type: boolean +standby_time: + description: The speakers automatically turn to standby mode after either `20` or `60` minutes. Leave out for the speaker to never go into standby mode. + required: false + type: integer +{% endconfiguration %} + +## Advanced configuration example + +```yaml +# Example configuration.yaml entry +- platform: kef + host: IP_ADDRESS + type: LS50 + name: My KEF speakers + maximum_volume: 0.6 + volume_step: 0.05 +``` + +Notes: + +- The LS50 Wireless is tested with the latest firmware of 19-11-2019: `p6.3001902221.105039422` and older firmware: `p6.2101809171.105039422` + +[KEF Speakers]: /integrations/kef/ diff --git a/source/images/supported_brands/kef.png b/source/images/supported_brands/kef.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb73f3a3e2e4f45c64578361803de7f2c06a271 GIT binary patch literal 18986 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 literal 0 HcmV?d00001