From ed905b370b58bd6c9553b41268fa2db0517c551d Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Tue, 17 Oct 2017 14:24:02 -0600 Subject: [PATCH] Adds documentation for the Yi Home Camera platform (#3580) * Adding docs * Various tweaks * Fixed typos --- source/_components/camera.yi.markdown | 96 ++++++++++++++++++++++++++ source/images/supported_brands/yi.png | Bin 0 -> 14464 bytes 2 files changed, 96 insertions(+) create mode 100644 source/_components/camera.yi.markdown create mode 100644 source/images/supported_brands/yi.png diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown new file mode 100644 index 0000000000..d00a131ef8 --- /dev/null +++ b/source/_components/camera.yi.markdown @@ -0,0 +1,96 @@ +--- +layout: page +title: "Yi Home Camera" +description: "Instructions on how to integrate a video feed (via FFmpeg) as a camera within Home Assistant." +date: 2017-10-10 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: yi.png +ha_category: Camera +ha_release: 0.56 +ha_iot_class: "Local Polling" +--- + +The `yi` camera platform allows you to utilize Yi Home Cameras within Home +Assistant. Specifically, this platform supports the line of Yi Home Cameras +that are based on the Hi3518e Chipset; these include: + +* Yi Home 17CN +* Yi 1080p Home +* Yi Dome +* Yi 1080p Dome + +To successfully implement this platform, the Home Assistant host should be +capable of multiple simultaneous reads; for every concurrent Home Assistant +user, a connection will be made to the camera every 10 seconds. +This should normally not be a problem. + +## {% linkable_title Preparing the Device %} + +### {% linkable_title Installing Alternative Firmware %} + +In order to integrate the camera with Home Assitant, it is necessary to install +a custom firmware on the device. Instructions for doing so can be found via the +[yi-hack-v3 GitHub project](https://github.com/shadow-1/yi-hack-v3). + +Once installed, please ensure that you have enabled FTP and Telnet on your +device. + +

+Some alternative Yi firmwares enable an experimental RTSP server, which will +allow you to connect to your camera via other Home Assistant camera platforms. +However, this RTSP server disables the ability to use the supremely-useful Yi +Home app. In order to maintain both Home Assistant compatibility _and_ the native +app, this platform retrieves videos via FTP. +

+ +### {% linkable_title Changing the FTP Password %} + +Once the custom firmware is installed, a password must be added to the FTP +server. To do so: + +1. Telnet into your camera: `telnet `. +2. Enter `root` as the username and `` as the password. +3. Type `passwd` and hit ``. +4. Enter your new password twice. +5. Log out of Telnet. + +## {% linkable_title Configuring the Platform %} + +To enable the platform, add the following lines to your +`configuration.yaml` file: + +```yaml +camera: + - platform: yi + host: '192.168.1.100' + password: my_password_123 +``` + +Configuration variables: + +- **host** (*Required*): the IP address or hostname of the camera +- **password** (*Required*): the password to the FTP server on the camera (from above) +- **username** (*Optional*): the user that can access the FTP server (default: `root`) +- **name** (*Optional*): a human-friendly name for the camera +- **ffmpeg_arguments** (*Optional*): extra options to pass to `ffmpeg` (e.g. image quality or video filter options) + +## {% linkable_title Image quality %} + +Any option supported by the `ffmpeg` client can be utilized via the +`ffmpeg_arguments` configuration parameter. + +One particularly useful adjustment deals with video size. Since Yi videos are +fairly large (especially on the 1080p cameras), the following configuration will +bring them down to a manageable size: + +```yaml +camera: + - platform: yi + name: My Camera + host: '192.168.1.100' + password: my_password_123 + ffmpeg_arguments: '-vf scale=800:450' +``` diff --git a/source/images/supported_brands/yi.png b/source/images/supported_brands/yi.png new file mode 100644 index 0000000000000000000000000000000000000000..c7029bea791057072ecf11e5afa957b3d77d59bc GIT binary patch literal 14464 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 JE5tts{0~>Ac1ZvL literal 0 HcmV?d00001