From 1923b143321feee376be9544da8669188e8008e7 Mon Sep 17 00:00:00 2001 From: joyrider3774 Date: Mon, 19 Sep 2016 14:50:21 +0200 Subject: [PATCH] Documentation for the emoncms sensor. (#910) * documentation for the emoncms sensor. * add emoncms logo * Changed functionality and better config variable names * remove min / default value, this is defined by home assistant itselve. The component was wrongfully adding scan_interval to voloptuous schema twice as it was already defined in config_velidation helper so i should not try to redefine it either * switch logo to their official logo --- source/_components/sensor.emoncms.markdown | 147 +++++++++++++++++++++ source/images/supported_brands/emoncms.png | Bin 0 -> 10385 bytes 2 files changed, 147 insertions(+) create mode 100644 source/_components/sensor.emoncms.markdown create mode 100644 source/images/supported_brands/emoncms.png diff --git a/source/_components/sensor.emoncms.markdown b/source/_components/sensor.emoncms.markdown new file mode 100644 index 00000000000..335c4353ec4 --- /dev/null +++ b/source/_components/sensor.emoncms.markdown @@ -0,0 +1,147 @@ +--- +layout: page +title: "Emoncms Sensor" +description: "Instructions on how to integrate emoncms feeds as sensors into Home Assistant." +date: 2016-09-08 00:15 +logo: emoncms.png +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +--- + + +The `emoncms` sensor platform creates sensors for the feeds available in your local or cloud based version of [emoncms](https://emoncms.org). + +To enable this sensor, add the following lines to your `configuration.yaml`, it will list all feeds as a sensor: + +```yaml +# Example configuration.yaml entry using cloud based emoncms +sensor: + platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + id: 1 +``` + +## {% linkable_title Configuration variables %} + +- **api_key** (*Required*): The read api key for your emoncms user. +- **url** (*Required*): The base url of emoncms, use "https://emoncms.org" for the cloud based version. +- **id** (*Required*): Positive Integer identifier for the sensor. Must be unique if you specify multiple emoncms sensors. +- **include_only_feed_id** (*optional*): Positive integer list of emoncms feed id's. Only the feeds with feed id's specified here will be displayed. Can not be specified if `exclude_feed_id` is specified. +- **exclude_feed_id** (*optional*): Positive integer list of emoncms feed id's. All the feeds will be displayed as sensors except the ones listed here. Can not be specified if `include_only_feed_id` is specified. +- **sensor_names** (*optional*): Dictionary of names for the sensors created that are created based on feedid. The dictionary consists of feedid:name pairs. Sensors for feeds with their feedid mentioned here will get the chosen name instead of the default name +- **value_template** (*Optional*): Defines a [template](/topics/templating/) to alter the feed value. +- **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. +- **unit_of_measurement** (*Optional*): Defines the unit of measurement of for all the sensors. default is "W". + +## {% linkable_title Default naming scheme %} + +The names of the sensors created by this component, will be a combination of static text, `id` from the config and `feedid` from the emoncms feed, unless `sensor_names` is used. +An example name would be "emoncms1_feedid_10" + +## {% linkable_title Examples %} + +In this section you find some more examples of how this sensor can be used. + +```yaml +# Display only feeds with their feed id's specified in "include_only_feed_id" +sensor: + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + id: 1 + unit_of_measurement: "W" + include_only_feed_id: + - 107 + - 106 + - 105 +``` + + +```yaml +# Display all feeds except feeds with their feed id specified in "exclude_feed_id" +sensor: + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + id: 1 + unit_of_measurement: "KWH" + exclude_feed_id: + - 107 + - 106 + - 105 +``` + + +```yaml +# Display only feeds with their feed id's specified in "include_only_feed_id" and give the feed sensors a name using "sensor_names". You don't have to specify all feeds names in "sensor_names", the remaining sensor names will be chosen based on "id" and the emoncms feedid +sensor: + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + id: 1 + unit_of_measurement: "KW" + include_only_feed_id: + - 5 + - 18 + - 29 + - 48 + - 61 + - 110 + - 116 + - 120 + sensor_names: + 5: "feed 1" + 18: "feed 2" + 29: "feed 3" + 48: "kwh feed" + 61: "amp feed" + 110: "watt feed" +``` + + +```yaml +# Use a "value_template" to add 1500 to the feed value for all specified feed id's in "include_feed_id" +sensor: + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + scan_interval: 15 + id: 1 + value_template: {% raw %}"{{ value | float + 1500 }}"{% endraw %} + include_only_feed_id: + - 107 + - 106 + - 105 + - 61 +``` + + +```yaml +# Display feeds from the same emoncms instance with 2 groups of feeds, diffrent scan_interval and a diffrent unit_of_measurement +sensor: + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + scan_interval: 30 + id: 1 + unit_of_measurement: "W" + include_only_feed_id: + - 107 + - 106 + - 105 + - platform: emoncms + api_key: put your emoncms read api key here + url: https://emoncms.org + id: 2 + scan_interval: 60 + unit_of_measurement: "A" + include_only_feed_id: + - 108 + - 109 + - 110 + - 61 +``` \ No newline at end of file diff --git a/source/images/supported_brands/emoncms.png b/source/images/supported_brands/emoncms.png new file mode 100644 index 0000000000000000000000000000000000000000..89e14541d2dffce923c201dbe5bbd9c1518c0d53 GIT binary patch literal 10385 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 literal 0 HcmV?d00001