{ "__inputs": [ { "name": "DS_INFLUXDB", "label": "InfluxDB", "type": "datasource", "pluginId": "influxdb", "pluginName": "InfluxDB" } ], "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "-- Grafana --" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "description": "Simple overview of Tasmota STATE and SENSOR data written by mqqt-scrubber into InfluxDB v3.", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": null, "links": [], "panels": [ { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 17, "panels": [], "title": "Fleet Summary", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "orange", "value": 1 }, { "color": "red", "value": 5 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 }, "id": 1, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT count(DISTINCT device) AS device_count FROM tasmota_state WHERE $__timeFilter(time)", "rawQuery": true, "rawSql": "SELECT count(DISTINCT device) AS device_count FROM tasmota_state WHERE $__timeFilter(time)", "refId": "A" } ], "title": "Devices Reporting State", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "orange", "value": 1 }, { "color": "red", "value": 3 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 }, "id": 2, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT count(DISTINCT device) AS sensor_devices FROM tasmota_sensor WHERE $__timeFilter(time)", "rawQuery": true, "rawSql": "SELECT count(DISTINCT device) AS sensor_devices FROM tasmota_sensor WHERE $__timeFilter(time)", "refId": "A" } ], "title": "Devices Reporting Sensor Data", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 }, "id": 3, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT count(*) AS state_messages FROM tasmota_state WHERE $__timeFilter(time)", "rawQuery": true, "rawSql": "SELECT count(*) AS state_messages FROM tasmota_state WHERE $__timeFilter(time)", "refId": "A" } ], "title": "State Messages", "type": "stat" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, "id": 18, "panels": [], "title": "Selected Device", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" }, "OFF": { "color": "red", "text": "OFF" }, "ON": { "color": "green", "text": "ON" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 0, "y": 6 }, "id": 12, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT CASE WHEN upper(power) = 'ON' THEN 1 WHEN upper(power) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT CASE WHEN upper(power) = 'ON' THEN 1 WHEN upper(power) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay Power", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" }, "OFF": { "color": "red", "text": "OFF" }, "ON": { "color": "green", "text": "ON" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 4, "y": 6 }, "id": 13, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT CASE WHEN upper(power1) = 'ON' THEN 1 WHEN upper(power1) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power1 IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT CASE WHEN upper(power1) = 'ON' THEN 1 WHEN upper(power1) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power1 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 1", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" }, "OFF": { "color": "red", "text": "OFF" }, "ON": { "color": "green", "text": "ON" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 8, "y": 6 }, "id": 14, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT CASE WHEN upper(power2) = 'ON' THEN 1 WHEN upper(power2) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power2 IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT CASE WHEN upper(power2) = 'ON' THEN 1 WHEN upper(power2) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power2 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 2", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" }, "OFF": { "color": "red", "text": "OFF" }, "ON": { "color": "green", "text": "ON" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 12, "y": 6 }, "id": 15, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT CASE WHEN upper(power3) = 'ON' THEN 1 WHEN upper(power3) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power3 IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT CASE WHEN upper(power3) = 'ON' THEN 1 WHEN upper(power3) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power3 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 3", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" }, "OFF": { "color": "red", "text": "OFF" }, "ON": { "color": "green", "text": "ON" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 16, "y": 6 }, "id": 16, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT CASE WHEN upper(power4) = 'ON' THEN 1 WHEN upper(power4) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power4 IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT CASE WHEN upper(power4) = 'ON' THEN 1 WHEN upper(power4) = 'OFF' THEN 0 ELSE NULL END AS relay_state FROM tasmota_state WHERE (('${relay_device}' != '*' AND device = '${relay_device}') OR ('${relay_device}' = '*' AND '${device}' != '*' AND device = '${device}') OR ('${relay_device}' = '*' AND '${device}' = '*')) AND power4 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 4", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "dateTimeAsIso" }, "overrides": [] }, "gridPos": { "h": 4, "w": 8, "x": 0, "y": 10 }, "id": 19, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT max(time) AS last_seen FROM (SELECT time FROM tasmota_state WHERE ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE ('${device}' = '*' OR device = '${device}'))", "rawQuery": true, "rawSql": "SELECT max(time) AS last_seen FROM (SELECT time FROM tasmota_state WHERE ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE ('${device}' = '*' OR device = '${device}'))", "refId": "A" } ], "title": "Last Seen", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "orange", "value": 300 }, { "color": "red", "value": 1800 } ] }, "unit": "s" }, "overrides": [] }, "gridPos": { "h": 4, "w": 8, "x": 8, "y": 10 }, "id": 20, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT to_unixtime(now()) - to_unixtime(max(time)) AS last_seen_age_s FROM (SELECT time FROM tasmota_state WHERE ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE ('${device}' = '*' OR device = '${device}'))", "rawQuery": true, "rawSql": "SELECT to_unixtime(now()) - to_unixtime(max(time)) AS last_seen_age_s FROM (SELECT time FROM tasmota_state WHERE ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE ('${device}' = '*' OR device = '${device}'))", "refId": "A" } ], "title": "Seconds Since Last Message", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 4, "w": 8, "x": 16, "y": 10 }, "id": 21, "options": { "colorMode": "background", "graphMode": "none", "justifyMode": "center", "orientation": "horizontal", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "textMode": "value" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT count(*) AS messages_in_range FROM (SELECT time FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}'))", "rawQuery": true, "rawSql": "SELECT count(*) AS messages_in_range FROM (SELECT time FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') UNION ALL SELECT time FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}'))", "refId": "A" } ], "title": "Messages In Range", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 2, "pointSize": 4, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "watt" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 14 }, "id": 4, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, avg(energy_power) AS power_w FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_power IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, avg(energy_power) AS power_w FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_power IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Selected Device Power Draw", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "volt" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 14 }, "id": 5, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, avg(energy_voltage) AS voltage_v FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_voltage IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, avg(energy_voltage) AS voltage_v FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_voltage IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Selected Device Voltage", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "celsius" }, "overrides": [] }, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 22 }, "id": 6, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, avg(analog_temperature) AS temperature_c FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND analog_temperature IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, avg(analog_temperature) AS temperature_c FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND analog_temperature IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Analog Temperature", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "dBm" }, "overrides": [] }, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 22 }, "id": 7, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, avg(wifi_signal) AS wifi_signal_dbm FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND wifi_signal IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, avg(wifi_signal) AS wifi_signal_dbm FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND wifi_signal IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "WiFi Signal", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "hour" }, "overrides": [] }, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 22 }, "id": 8, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, max(uptime_sec) / 3600.0 AS uptime_hours FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND uptime_sec IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, max(uptime_sec) / 3600.0 AS uptime_hours FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND uptime_sec IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Uptime", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "kwatth" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 30 }, "id": 9, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, max(energy_total) AS energy_total_kwh FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_total IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, max(energy_total) AS energy_total_kwh FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND energy_total IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Energy Total", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 30 }, "id": 10, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "time_series", "query": "SELECT $__dateBin(time) AS time, device, avg(analog_a0) AS analog_a0_value FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND analog_a0 IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "rawQuery": true, "rawSql": "SELECT $__dateBin(time) AS time, device, avg(analog_a0) AS analog_a0_value FROM tasmota_sensor WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') AND analog_a0 IS NOT NULL GROUP BY 1, device ORDER BY 1, device", "refId": "A" } ], "title": "Analog A0", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "auto" }, "inspect": false }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 38 }, "id": 11, "options": { "cellHeight": "sm", "footer": { "countRows": false, "fields": "", "reducer": [ "sum" ], "show": false }, "showHeader": true, "sortBy": [ { "desc": true, "displayName": "time" } ] }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "editorMode": "code", "format": "table", "query": "SELECT time, device, power, power1, power2, power3, power4, wifi_signal, uptime_sec FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') ORDER BY time DESC LIMIT 50", "rawQuery": true, "rawSql": "SELECT time, device, power, power1, power2, power3, power4, wifi_signal, uptime_sec FROM tasmota_state WHERE $__timeFilter(time) AND ('${device}' = '*' OR device = '${device}') ORDER BY time DESC LIMIT 50", "refId": "A" } ], "title": "Recent State Snapshots", "type": "table" } ], "refresh": "30s", "schemaVersion": 39, "style": "dark", "tags": [ "mqtt", "tasmota", "influxdb" ], "templating": { "list": [ { "allValue": "*", "current": { "selected": true, "text": "All", "value": "*" }, "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "definition": "SELECT device FROM (SELECT DISTINCT device FROM tasmota_state UNION SELECT DISTINCT device FROM tasmota_sensor) ORDER BY device", "hide": 0, "includeAll": true, "label": "Device", "multi": false, "name": "device", "options": [], "query": { "query": "SELECT device FROM (SELECT DISTINCT device FROM tasmota_state UNION SELECT DISTINCT device FROM tasmota_sensor) ORDER BY device", "refId": "InfluxDBVariableQueryEditor-VariableQuery" }, "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 1, "type": "query" }, { "allValue": "*", "current": { "selected": true, "text": "All", "value": "*" }, "datasource": { "type": "influxdb", "uid": "${DS_INFLUXDB}" }, "definition": "SELECT DISTINCT device FROM tasmota_state WHERE power IS NOT NULL OR power1 IS NOT NULL OR power2 IS NOT NULL OR power3 IS NOT NULL OR power4 IS NOT NULL ORDER BY device", "hide": 0, "includeAll": true, "label": "Relay Device", "multi": false, "name": "relay_device", "options": [], "query": { "query": "SELECT DISTINCT device FROM tasmota_state WHERE power IS NOT NULL OR power1 IS NOT NULL OR power2 IS NOT NULL OR power3 IS NOT NULL OR power4 IS NOT NULL ORDER BY device", "refId": "InfluxDBVariableQueryEditor-RelayDevice" }, "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 1, "type": "query" } ] }, "time": { "from": "now-24h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "Tasmota Overview", "uid": "tasmota-overview", "version": 2, "weekStart": "" }