From b9c0bb0dcb7448f7a65439adaf12098a4cb3a171 Mon Sep 17 00:00:00 2001 From: Harris Borawski Date: Tue, 22 Nov 2016 22:32:36 -0800 Subject: [PATCH] Add Sonarr sensor (#1469) * Add documentation for Sonarr sensor * Fix spelling mistake and add link to sonarr main site --- source/_components/sensor.sonarr.markdown | 123 ++++++++++++++++++++++ source/images/supported_brands/sonarr.png | Bin 0 -> 15681 bytes 2 files changed, 123 insertions(+) create mode 100644 source/_components/sensor.sonarr.markdown create mode 100644 source/images/supported_brands/sonarr.png diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown new file mode 100644 index 00000000000..df9069f355f --- /dev/null +++ b/source/_components/sensor.sonarr.markdown @@ -0,0 +1,123 @@ +--- +layout: page +title: "Sonarr Sensor" +description: "Instructions how to integrate Sonarr sensors with Home Assistant" +date: 2016-11-19 13:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: sonarr.png +ha_category: Sensor +ha_release: 0.34 +--- + + +This `sonarr` sensor platform pulls data from a given Sonarr instance. + +To use your [Sonarr](https://sonarr.tv/) sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: IP_ADDRESS + port: PORT +``` + +Configuration variables: + +- **api_key** (*Required*): Your Sonarr API key, found in Settings > General in the Sonarr Web UI. +- **monitored_conditions** array (*Required*): Conditions to display on the frontend. + - **series**: The number of series in Sonarr. + - **upcoming**: The number of upcoming episodes. + - **wanted**: The number of episodes still 'wanted'. + - **queue**: The number of episodes in the queue. + - **commands**: The number of commands being run. + - **diskspace**: Available disk space. +- **host** (*Optional*): The host Sonarr is running on (Default: localhost). +- **port** (*Optional*): The port Sonarr is running on (Default: 8989). +- **days** (*Optional*): How many days to look ahead for the upcoming sensor, 1 means today only (Default: 1). +- **included_paths** (*Optional*): Array of filepaths to include when calculating diskspace. Leave blank to include all. +- **unit**: (*Optional*): The unit to display disk space in (Default: GB). +- **ssl**: boolean (*Optional*): Whether or not to use SSL for Sonarr. + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Get Episodes airing in next 2 days %} + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: 192.168.1.8 + monitored_conditions: + - upcoming + days: 2 +``` + +### {% linkable_title Enable SSL %} + +SSL may run on a different port than the default (8989). The SSL port can be bound to any port in Sonarr, so it should be set in the config here (unless it is changed to 8989). See the [Sonarr site](https://github.com/Sonarr/Sonarr/wiki/SSL) for details on SSL in Sonarr. + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: 192.168.1.8 + port: 9898 + monitored_conditions: + - upcoming + days: 2 + ssl: true +``` + +### {% linkable_title Get disk space for all storage locations %} + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: 192.168.1.8 + monitored_conditions: + - diskspace +``` + +### {% linkable_title Get disk space for listed storage locations %} + +The storage locations Sonarr returns are in the system page and in some cases this can list duplicates if sub paths are mounted separately. By listing paths to include, you can choose what data is reported by the sensor. + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: 192.168.1.8 + monitored_conditions: + - diskspace + included_paths: + - /tank/plex +``` + +### {% linkable_title Get disk space in different unit %} + +The Sonarr API returns available space in bytes, but this sensor will default to reporting it in GB to make the number more manageable. This can be overridden if your storage needs require a different unit. All units from bytes (B) to yottabytes (YB) are supported. + +*This calculation is done using base 2 math, and may differ from systems calculating using base 10 math.* + +```yaml +# Example configuration.yml entry +sensor: + - platform: sonarr + api_key: YOUR_API_KEY + host: 192.168.1.8 + monitored_conditions: + - diskspace + unit: TB +``` diff --git a/source/images/supported_brands/sonarr.png b/source/images/supported_brands/sonarr.png new file mode 100644 index 0000000000000000000000000000000000000000..815750aa063546eeadf8f6295df5ffb3774cfc76 GIT binary patch literal 15681 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 literal 0 HcmV?d00001