{ "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": "Dedicated per-device drilldown for a single Tasmota device.", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": null, "links": [ { "asDropdown": false, "icon": "external link", "includeVars": true, "keepTime": true, "targetBlank": false, "title": "Back to device summary", "type": "link", "url": "/d/tasmota-device-summary/tasmota-device-summary?refresh=10s" } ], "panels": [ { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 102, "panels": [], "title": "Selected Device Detail", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "dateTimeAsIso" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 }, "id": 7, "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": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "table", "query": "SELECT to_unixtime(max(time)) * 1000 AS last_seen FROM (SELECT time FROM tasmota_state WHERE device = '${device}' UNION ALL SELECT time FROM tasmota_sensor WHERE device = '${device}')", "rawQuery": true, "rawSql": "SELECT to_unixtime(max(time)) * 1000 AS last_seen FROM (SELECT time FROM tasmota_state WHERE device = '${device}' UNION ALL SELECT time FROM tasmota_sensor WHERE device = '${device}')", "refId": "A" } ], "title": "Selected Last Seen", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 6, "x": 6, "y": 1 }, "id": 8, "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": "dfftuvrrhv6kgb" }, "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 = '${device}' UNION ALL SELECT time FROM tasmota_sensor WHERE 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 = '${device}' UNION ALL SELECT time FROM tasmota_sensor WHERE device = '${device}')", "refId": "A" } ], "title": "Seconds Since Last Message", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "watt" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 }, "id": 9, "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": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "table", "query": "SELECT energy_power AS current_draw_w FROM tasmota_sensor WHERE device = '${device}' AND energy_power IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT energy_power AS current_draw_w FROM tasmota_sensor WHERE device = '${device}' AND energy_power IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Current Draw", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "kwatth" }, "overrides": [] }, "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 }, "id": 10, "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": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "table", "query": "SELECT energy_total AS total_draw_kwh FROM tasmota_sensor WHERE device = '${device}' AND energy_total IS NOT NULL ORDER BY time DESC LIMIT 1", "rawQuery": true, "rawSql": "SELECT energy_total AS total_draw_kwh FROM tasmota_sensor WHERE device = '${device}' AND energy_total IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Total Draw", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 5 }, "id": 11, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 5 }, "id": 12, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 13 }, "id": 13, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 13 }, "id": 14, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 13 }, "id": 15, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 21 }, "id": 16, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "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": 21 }, "id": 17, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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 = '${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 = '${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": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "auto" }, "inspect": false }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [ { "matcher": { "id": "byName", "options": "time" }, "properties": [ { "id": "unit", "value": "dateTimeAsIso" } ] }, { "matcher": { "id": "byName", "options": "wifi_signal" }, "properties": [ { "id": "unit", "value": "dBm" } ] }, { "matcher": { "id": "byName", "options": "uptime_sec" }, "properties": [ { "id": "unit", "value": "s" } ] } ] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 29 }, "id": 18, "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": "dfftuvrrhv6kgb" }, "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 = '${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 = '${device}' ORDER BY time DESC LIMIT 50", "refId": "A" } ], "title": "Recent State Snapshots", "type": "table" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 37 }, "id": 103, "panels": [], "title": "Selected Device Relay Status", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 38 }, "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": "dfftuvrrhv6kgb" }, "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 device = '${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 device = '${device}' AND power IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay Power", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 38 }, "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": "dfftuvrrhv6kgb" }, "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 device = '${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 device = '${device}' AND power1 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 1", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 38 }, "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": "dfftuvrrhv6kgb" }, "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 device = '${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 device = '${device}' AND power2 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 2", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 38 }, "id": 22, "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": "dfftuvrrhv6kgb" }, "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 device = '${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 device = '${device}' AND power3 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 3", "type": "stat" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "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": 38 }, "id": 23, "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": "dfftuvrrhv6kgb" }, "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 device = '${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 device = '${device}' AND power4 IS NOT NULL ORDER BY time DESC LIMIT 1", "refId": "A" } ], "title": "Relay 4", "type": "stat" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 42 }, "id": 104, "panels": [], "title": "Relay History", "type": "row" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 12, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "stepAfter", "lineWidth": 2, "pointSize": 3, "scaleDistribution": { "type": "linear" }, "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [ { "options": { "0": { "color": "red", "text": "OFF" }, "1": { "color": "green", "text": "ON" } }, "type": "value" } ], "max": 1, "min": 0, "thresholds": { "mode": "absolute", "steps": [ { "color": "red", "value": null }, { "color": "green", "value": 1 } ] }, "unit": "short" }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 43 }, "id": 25, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", "sort": "desc" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "time_series", "query": "SELECT time, CASE WHEN upper(power) = 'ON' THEN 1 WHEN upper(power) = 'OFF' THEN 0 ELSE NULL END AS relay_power_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power IS NOT NULL ORDER BY time", "rawQuery": true, "rawSql": "SELECT time, CASE WHEN upper(power) = 'ON' THEN 1 WHEN upper(power) = 'OFF' THEN 0 ELSE NULL END AS relay_power_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power IS NOT NULL ORDER BY time", "refId": "A" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "time_series", "query": "SELECT time, CASE WHEN upper(power1) = 'ON' THEN 1 WHEN upper(power1) = 'OFF' THEN 0 ELSE NULL END AS relay_1_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power1 IS NOT NULL ORDER BY time", "rawQuery": true, "rawSql": "SELECT time, CASE WHEN upper(power1) = 'ON' THEN 1 WHEN upper(power1) = 'OFF' THEN 0 ELSE NULL END AS relay_1_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power1 IS NOT NULL ORDER BY time", "refId": "B" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "time_series", "query": "SELECT time, CASE WHEN upper(power2) = 'ON' THEN 1 WHEN upper(power2) = 'OFF' THEN 0 ELSE NULL END AS relay_2_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power2 IS NOT NULL ORDER BY time", "rawQuery": true, "rawSql": "SELECT time, CASE WHEN upper(power2) = 'ON' THEN 1 WHEN upper(power2) = 'OFF' THEN 0 ELSE NULL END AS relay_2_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power2 IS NOT NULL ORDER BY time", "refId": "C" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "time_series", "query": "SELECT time, CASE WHEN upper(power3) = 'ON' THEN 1 WHEN upper(power3) = 'OFF' THEN 0 ELSE NULL END AS relay_3_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power3 IS NOT NULL ORDER BY time", "rawQuery": true, "rawSql": "SELECT time, CASE WHEN upper(power3) = 'ON' THEN 1 WHEN upper(power3) = 'OFF' THEN 0 ELSE NULL END AS relay_3_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power3 IS NOT NULL ORDER BY time", "refId": "D" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "time_series", "query": "SELECT time, CASE WHEN upper(power4) = 'ON' THEN 1 WHEN upper(power4) = 'OFF' THEN 0 ELSE NULL END AS relay_4_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power4 IS NOT NULL ORDER BY time", "rawQuery": true, "rawSql": "SELECT time, CASE WHEN upper(power4) = 'ON' THEN 1 WHEN upper(power4) = 'OFF' THEN 0 ELSE NULL END AS relay_4_state FROM tasmota_state WHERE $__timeFilter(time) AND device = '${device}' AND power4 IS NOT NULL ORDER BY time", "refId": "E" } ], "title": "Selected Device Relay History", "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "auto" }, "inspect": false }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [ { "matcher": { "id": "byName", "options": "time" }, "properties": [ { "id": "unit", "value": "dateTimeAsIso" } ] }, { "matcher": { "id": "byName", "options": "energy_power" }, "properties": [ { "id": "unit", "value": "watt" } ] }, { "matcher": { "id": "byName", "options": "energy_voltage" }, "properties": [ { "id": "unit", "value": "volt" } ] }, { "matcher": { "id": "byName", "options": "energy_today" }, "properties": [ { "id": "unit", "value": "kwatth" } ] }, { "matcher": { "id": "byName", "options": "energy_total" }, "properties": [ { "id": "unit", "value": "kwatth" } ] }, { "matcher": { "id": "byName", "options": "analog_temperature" }, "properties": [ { "id": "unit", "value": "celsius" } ] } ] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 51 }, "id": 24, "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": "dfftuvrrhv6kgb" }, "editorMode": "code", "format": "table", "query": "SELECT time, device, energy_power, energy_voltage, energy_today, energy_total, analog_temperature, analog_a0, temp_unit FROM tasmota_sensor WHERE $__timeFilter(time) AND device = '${device}' ORDER BY time DESC LIMIT 50", "rawQuery": true, "rawSql": "SELECT time, device, energy_power, energy_voltage, energy_today, energy_total, analog_temperature, analog_a0, temp_unit FROM tasmota_sensor WHERE $__timeFilter(time) AND device = '${device}' ORDER BY time DESC LIMIT 50", "refId": "A" } ], "title": "Recent Sensor Snapshots", "type": "table" } ], "refresh": "30s", "schemaVersion": 39, "style": "dark", "tags": [ "mqtt", "tasmota", "influxdb" ], "templating": { "list": [ { "current": { "selected": false, "text": "", "value": "" }, "datasource": { "type": "influxdb", "uid": "dfftuvrrhv6kgb" }, "definition": "SELECT device FROM (SELECT DISTINCT device FROM tasmota_state UNION SELECT DISTINCT device FROM tasmota_sensor) ORDER BY device", "hide": 0, "includeAll": false, "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" } ] }, "time": { "from": "now-24h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "Tasmota Device Detail", "uid": "tasmota-device-detail", "version": 1, "weekStart": "" }