{"id":731,"date":"2022-12-11T21:19:42","date_gmt":"2022-12-11T20:19:42","guid":{"rendered":"https:\/\/patrick-nagel.net\/blog\/?p=731"},"modified":"2022-12-12T08:52:16","modified_gmt":"2022-12-12T07:52:16","slug":"influxdb-newcomers-impressions","status":"publish","type":"post","link":"https:\/\/patrick-nagel.net\/blog\/archives\/731","title":{"rendered":"InfluxDB newcomer&#8217;s impressions"},"content":{"rendered":"\n<p>Three weeks ago I&#8217;ve decided to use InfluxDB for some Smart Home data. Here is a short article about my impressions.<\/p>\n\n\n\n<p>Getting it to run on my home server was pretty easy:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span role=\"button\" tabindex=\"0\" data-code=\"$ docker run --rm --name influxdb -d -p 8086:8086 \\\n  --volume \/data\/influxdb\/influxdb2:\/var\/lib\/influxdb2 \\\n  --volume \/data\/influxdb\/config.yml:\/etc\/influxdb2\/config.yml \\\n  influxdb\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">$ docker run --rm --name influxdb -d -p 8086:8086 \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  --volume \/data\/influxdb\/influxdb2:\/var\/lib\/influxdb2 \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  --volume \/data\/influxdb\/config.yml:\/etc\/influxdb2\/config.yml \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  influxdb<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Of course I first had to figure out these arguments, and how to get that config.yml, but it&#8217;s all rather well-documented <a href=\"https:\/\/hub.docker.com\/_\/influxdb\">here<\/a>.<\/p>\n\n\n\n<p>Once it was running, I started feeding in data from a Python script. That was also really easy, with the guided example directly from the InfluxDB web GUI. I&#8217;ve added the necessary code into a script that I already had running every minute  &#8211; the relevant portions are:<\/p>\n\n\n<div class=\"lightweight-accordion has-text-color has-background\"><details><summary class=\"lightweight-accordion-title\" style=\"color:#fff;background:#686868;\"><span>Python code to publish data points into InfluxDB<\/span><\/summary><div class=\"lightweight-accordion-body\" style=\"border-color:#686868;\">\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.75rem;line-height:1rem\"><span role=\"button\" tabindex=\"0\" data-code=\"import influxdb_client\nfrom influxdb_client import InfluxDBClient, Point, WritePrecision\nfrom influxdb_client.client.write_api import SYNCHRONOUS\nimport traceback, urllib3\n\ninfluxdb_token = os.getenv('InfluxDB_token', '')\ninfluxdb_org = os.getenv('InfluxDB_org', '')\ninfluxdb_url = os.getenv('InfluxDB_URL', 'http:\/\/localhost:8086')\nlogger_version = &quot;1&quot;\n\n# 'device' is populated by the PyViCare library that accesses\n# my heating system's API - something for another blog post ;)\nt = device.asFuelCell()\n\ninfo = {\n    &quot;FuelCellPowerProductionCurrent&quot;: float(t.getFuelCellPowerProductionCurrent()),\n    &quot;FuelCellPowerPurchaseCurrent&quot;: float(t.getFuelCellPowerPurchaseCurrent()),\n    &quot;FuelCellPowerSoldCurrent&quot;: float(t.getFuelCellPowerSoldCurrent()),\n    &quot;HotWaterStorageTemperatureBottom&quot;: float(t.getHotWaterStorageTemperatureBottom()),\n    &quot;HotWaterStorageTemperatureTop&quot;: float(t.getHotWaterStorageTemperatureTop())\n}\n\nclient = influxdb_client.InfluxDBClient(url=influxdb_url, token=influxdb_token, org=influxdb_org)\nbucket=&quot;smarthome&quot;\nwrite_api = client.write_api(write_options=SYNCHRONOUS)\n\nfor field in info:\n    point = (\n    Point(&quot;heating&quot;)\n    .tag(&quot;logger_version&quot;, logger_version)\n    .field(field, info[field])\n    )\n    try:\n        write_api.write(bucket=bucket, org=influxdb_org, record=point)\n        print('- ' + field)\n    except urllib3.exceptions.NewConnectionError as e:\n        print('\\nWARNING: InfluxDB seems to be down:')\n        print(''.join(traceback.format_exception(None, e, e.__traceback__)))\n        break\n    except Exception as e:\n        print('\\nWARNING: Could not submit ' + field + ' to InfluxDB:')\n        print(''.join(traceback.format_exception(None, e, e.__traceback__)))\n        pass\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> influxdb_client<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> influxdb_client <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> InfluxDBClient<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> Point<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> WritePrecision<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> influxdb_client<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">client<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">write_api <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> SYNCHRONOUS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> traceback<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> urllib3<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">influxdb_token <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getenv<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">InfluxDB_token<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">influxdb_org <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getenv<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">InfluxDB_org<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">influxdb_url <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> os<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getenv<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">InfluxDB_URL<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">http:\/\/localhost:8086<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">logger_version <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">1<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># &#39;device&#39; is populated by the PyViCare library that accesses<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># my heating system&#39;s API - something for another blog post ;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">t <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> device<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">asFuelCell<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">info <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">FuelCellPowerProductionCurrent<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">float<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getFuelCellPowerProductionCurrent<\/span><span style=\"color: #ECEFF4\">()),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">FuelCellPowerPurchaseCurrent<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">float<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getFuelCellPowerPurchaseCurrent<\/span><span style=\"color: #ECEFF4\">()),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">FuelCellPowerSoldCurrent<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">float<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getFuelCellPowerSoldCurrent<\/span><span style=\"color: #ECEFF4\">()),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">HotWaterStorageTemperatureBottom<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">float<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getHotWaterStorageTemperatureBottom<\/span><span style=\"color: #ECEFF4\">()),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">HotWaterStorageTemperatureTop<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">float<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">t<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getHotWaterStorageTemperatureTop<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">client <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> influxdb_client<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">InfluxDBClient<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">url<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">influxdb_url<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">token<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">influxdb_token<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">org<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">influxdb_org<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">bucket<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">smarthome<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">write_api <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> client<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">write_api<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">write_options<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">SYNCHRONOUS<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> field <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> info<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    point <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">Point<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">heating<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">tag<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">logger_version<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> logger_version<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">field<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">field<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> info<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">field<\/span><span style=\"color: #ECEFF4\">])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">try<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        write_api<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">write<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">bucket<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">bucket<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">org<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">influxdb_org<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">record<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">point<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">- <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> field<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">except<\/span><span style=\"color: #D8DEE9FF\"> urllib3<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">exceptions<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">NewConnectionError <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #EBCB8B\">\\n<\/span><span style=\"color: #A3BE8C\">WARNING: InfluxDB seems to be down:<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">join<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">traceback<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">format_exception<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">None<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">__traceback__<\/span><span style=\"color: #ECEFF4\">)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">except<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Exception<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #EBCB8B\">\\n<\/span><span style=\"color: #A3BE8C\">WARNING: Could not submit <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> field <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\"> to InfluxDB:<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">join<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">traceback<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">format_exception<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">None<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> e<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">__traceback__<\/span><span style=\"color: #ECEFF4\">)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">pass<\/span><\/span><\/code><\/pre><\/div>\n\n<\/div><\/details><\/div>\n\n\n<p>Et voil\u00e0, my first queries with Data Explorer within InfluxDB returned results:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"650\" src=\"https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-1024x650.png\" alt=\"\" class=\"wp-image-733\" srcset=\"https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-1024x650.png 1024w, https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-300x190.png 300w, https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-768x487.png 768w, https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-1536x974.png 1536w, https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image-1200x761.png 1200w, https:\/\/patrick-nagel.net\/blog\/wp-content\/uploads\/2022\/12\/image.png 1622w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"wp-element-caption\">Using InfluxDB&#8217;s Data Explorer<\/figcaption><\/figure>\n\n\n\n<p>After a bit of customizing and then saving the query on a dashboard, I have very beautiful graphs of the data, and so far it has been running very stable and reliably.<\/p>\n\n\n\n<p>However there are two things that started to bother me, namely:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>There is no way to access the dashboards on mobile.<\/strong> I can log in alright, but the dashboard is just empty. Looks like a major bug \/ missing functionality. If I switch on &#8220;desktop site&#8221; in the browser (Firefox on Android, but also tried Chrome), I get the same that I get on my desktop. While somehow working, it&#8217;s not a really good experience: for example when you zoom in you can no longer &#8220;scroll&#8221;, because touching a diagram\/cell content will interact with it, e.g. moving the cell to another place instead of doing the desired scroll action. I&#8217;ve also searched for an app that would let me connect to my InfluxDB and offer a proper mobile experience, but couldn&#8217;t find one.<\/li>\n\n\n\n<li><strong>Downsampling of data doesn&#8217;t happen automatically for longer time ranges, and there is no &#8220;easy&#8221; way to get this working.<\/strong> I absolutely expected from a time series database with integrated visualization to be able to do this out of the box. Because as soon as you have more than a &#8220;handful&#8221; of data points in the database, queries over longer time ranges cause the client (i.e. the machine running the browser that accesses InfluxDB) to work really hard after executing a query. That&#8217;s because <em>all<\/em> the data points in that range from the database are actually sent to the graphing\/rendering engine. So even when I do a &#8220;30 days&#8221; query for my 5 data points which I sample once a minute (= 216,000 data point entries), InfluxDB won&#8217;t reduce that to a more reasonable number. It actually transfers 216,000 data point entries to the browser that tries to graph them in the diagram. Depending on what hardware the browser runs on this can take a while. It would be better if there was a way to dynamically downsample the data, so its resolution matches the use case at hand.<br>Example: If a graph is rendered on a 1080p screen and covering 50% screen width (1920\/2 = 960 pixels), I would assume that 960 data point entries per graph line would suffice. That would reduce the 216,000 points to a mere 4,800. But in InfluxDB, you get 45 data points per pixel, who needs that? And that was only a one-month query. Once I have a year worth of data points, I&#8217;ll probably have to wait minutes for the browser to finish its number crunching.<br>The <a href=\"https:\/\/docs.influxdata.com\/influxdb\/v2.5\/process-data\/common-tasks\/downsample-data\/#example-downsampling-task-script\">proposed way is to set up a &#8220;cron task&#8221;<\/a> that does the downsampling and <em>copies<\/em> the values into a separate bucket. Of course I could make this work, but seriously?!<\/li>\n<\/ul>\n\n\n\n<p>Having said that, it&#8217;s still definitely a great tool, and I hope these two issues will be resolved in the near future (or someone tells me what I&#8217;ve been doing wrong, which is always a possibility \ud83d\ude09).<\/p>\n\n\n\n<p><em>Edit (2022-12-12): Fixed downsampling example math, had forgotten that the 216,000 points are for five data points, and would thus be rendered as five graphs, not one.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Three weeks ago I&#8217;ve decided to use InfluxDB for some Smart Home data. Here is a short article about my impressions. Getting it to run on my home server was pretty easy: Of course I first had to figure out these arguments, and how to get that config.yml, but it&#8217;s all rather well-documented here. Once &hellip; <a href=\"https:\/\/patrick-nagel.net\/blog\/archives\/731\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;InfluxDB newcomer&#8217;s impressions&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-731","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/posts\/731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/comments?post=731"}],"version-history":[{"count":29,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/posts\/731\/revisions"}],"predecessor-version":[{"id":774,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/posts\/731\/revisions\/774"}],"wp:attachment":[{"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/media?parent=731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/categories?post=731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/patrick-nagel.net\/blog\/wp-json\/wp\/v2\/tags?post=731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}