influxdata
Plugin to store data from smarthome.py in InfluxData TSDB i.e. for graphing with Grafana or Chronograf. This plugin uses InfluxData UDP line protocol for non-blocking execution.
Thanks to SgtSeppel for the initial plugin which can be found here: https://github.com/SgtSeppel/influxdb I’d choose to implement UDP over the initial implementation because I run my InfluxData server in the cloud over VPN. This setup has some latency and the original plugin blocked my whole smarthome.py including logics not executed.
Installation
cd smarthome.py directory
cd plugins
git clone https://github.com/rthill/influxdata.git
Configuration
/etc/influxdb/influxdb.conf
###
### [[udp]]
###
### Controls the listeners for InfluxDB line protocol data via UDP.
###
[[udp]]
enabled = true
bind-address = ":8089"
database = "smarthome"
# retention-policy = ""
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.
# batch-size = 1000 # will flush if this many points get buffered
# batch-pending = 5 # number of batches that may be pending in memory
# batch-timeout = "1s" # will flush at least this often even if we haven't hit buffer limit
# read-buffer = 0 # UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
For more information on buffers and how to setup high performance UDP listener see: https://influxdb.com/docs/v0.9/write_protocols/udp.html
plugin.yaml
influxdata:
plugin_name: influxdata
# influx_host = localhost
# influx_port = 8089
influx_keyword: influx
items.yaml
The configuration flag influx_keyword has a special relevance. Here you can choose which keyword the plugin should look for. If you do not specify anything, the default keyword „influx“ will be used like in the following example of an EnOcean temperature and humidity sensor:
sensor:
gf:
kitchen:
enocean_rx_id: 1234567
enocean_rx_eep: A5_04_01
hum:
type: num
influx: 'true'
enocean_rx_key: HUM
temp:
type: num
influx: 'true'
enocean_rx_key: TMP
However, you can change this. Many people use the sqlite keyword to store data in a sqlite database.
If you set in plugin.yaml
influx_keyword: sqlite
you do not have to update anything in your item configuration files. All data that is pushed to sqlite (i.e. for smartVISU) will automatically be copied to InfluxData also.
Check data
Open influx terminal or webui and change to database ‚smarthome‘ and run:
> select * from "sensor.gf.kitchen.temp"
name: sensor.gf.kitchen.temp
----------------------------
time caller dest source value
1451897887326109961 EnOcean None 01234567 21.92
> select * from "sensor.gf.kitchen.hum"
name: sensor.gf.kitchen.hum
---------------------------
time caller dest source value
1451897887305586638 EnOcean None 01234567 44.800000000000004