diff --git a/k8s/monitoring/dashboards/grafana-dashboard-shelly-ws90.yaml b/k8s/monitoring/dashboards/grafana-dashboard-shelly-ws90.yaml new file mode 100644 index 0000000..6669907 --- /dev/null +++ b/k8s/monitoring/dashboards/grafana-dashboard-shelly-ws90.yaml @@ -0,0 +1,482 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-shelly-ws90 + namespace: monitoring + labels: + grafana_dashboard: "1" + annotations: + grafana_dashboard_folder: "🏡 Home" +data: + shelly-ws90.json: | + { + "uid": "shelly-ws90", + "title": "🌦️ Shelly WS90 Weather Console", + "tags": ["home", "weather", "outdoor", "prometheus"], + "timezone": "browser", + "schemaVersion": 39, + "version": 1, + "refresh": "30s", + "editable": false, + "graphTooltip": 2, + "time": { "from": "now-24h", "to": "now" }, + "panels": [ + { + "id": 1, + "type": "stat", + "title": "📶 Signal Strength", + "gridPos": { "x": 0, "y": 0, "w": 4, "h": 3 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_linkquality_lqi{entity_id=\"sensor.shelly_ws90_linkquality\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "min": 0, + "max": 255, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "red", "value": null }, + { "color": "orange", "value": 50 }, + { "color": "yellow", "value": 100 }, + { "color": "green", "value": 150 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 2, + "type": "stat", + "title": "🔋 Battery Level", + "gridPos": { "x": 4, "y": 0, "w": 4, "h": 3 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_battery_percent{entity_id=\"sensor.shelly_ws90_battery\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "min": 0, + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "red", "value": null }, + { "color": "orange", "value": 20 }, + { "color": "green", "value": 50 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 3, + "type": "stat", + "title": "🧭 Barometric Pressure", + "gridPos": { "x": 8, "y": 0, "w": 8, "h": 3 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_pressure_kpa{entity_id=\"sensor.shelly_ws90_pressure\"} * 10", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "pressurehpa", + "decimals": 1, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "blue", "value": null }, + { "color": "green", "value": 1000 }, + { "color": "orange", "value": 1020 } + ] + }, + "color": { "mode": "value" } + } + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 4, + "type": "stat", + "title": "☀️ Light Level", + "gridPos": { "x": 16, "y": 0, "w": 8, "h": 3 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_illuminance_lux_lx{entity_id=\"sensor.shelly_ws90_illuminance_lux\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "lux", + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "purple", "value": null }, + { "color": "orange", "value": 1000 }, + { "color": "yellow", "value": 5000 } + ] + }, + "color": { "mode": "value" } + } + }, + "options": { + "graphMode": "none", + "colorMode": "value", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 5, + "type": "stat", + "title": "🌡️ Outdoor Temperature", + "gridPos": { "x": 0, "y": 3, "w": 12, "h": 8 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_temperature_celsius{entity_id=\"sensor.shelly_ws90_temperature\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "celsius", + "decimals": 1, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "#5794F2", "value": null }, + { "color": "#73BF69", "value": 15 }, + { "color": "#FFD700", "value": 22 }, + { "color": "#FF7383", "value": 26 }, + { "color": "#C4162A", "value": 30 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "graphMode": "area", + "colorMode": "background", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 6, + "type": "stat", + "title": "💧 Outdoor Humidity", + "gridPos": { "x": 12, "y": 3, "w": 12, "h": 8 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_humidity_percent{entity_id=\"sensor.shelly_ws90_humidity\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent", + "decimals": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "#FF7383", "value": null }, + { "color": "#FFD700", "value": 30 }, + { "color": "#73BF69", "value": 40 }, + { "color": "#5794F2", "value": 70 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "graphMode": "area", + "colorMode": "background", + "textMode": "auto", + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] } + } + }, + { + "id": 7, + "type": "gauge", + "title": "💨 Wind Speed", + "gridPos": { "x": 0, "y": 11, "w": 6, "h": 6 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_wind_speed_km_per_h{entity_id=~\"sensor.shelly_ws90_wind_speed.*\"} or on() vector(0)", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "velocitykmh", + "min": 0, + "max": 100, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "yellow", "value": 15 }, + { "color": "orange", "value": 30 }, + { "color": "red", "value": 50 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] }, + "orientation": "auto", + "showThresholdLabels": true, + "showThresholdMarkers": true + } + }, + { + "id": 8, + "type": "gauge", + "title": "🧭 Wind Direction", + "gridPos": { "x": 6, "y": 11, "w": 6, "h": 6 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_wind_direction{entity_id=~\"sensor.shelly_ws90_wind_direction.*\"} or on() vector(0)", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "deg", + "min": 0, + "max": 360, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "blue", "value": null } + ] + }, + "color": { "mode": "fixed" } + } + }, + "options": { + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] }, + "orientation": "auto", + "showThresholdLabels": true, + "showThresholdMarkers": true + } + }, + { + "id": 9, + "type": "gauge", + "title": "🌧️ Precipitation Rate", + "gridPos": { "x": 12, "y": 11, "w": 6, "h": 6 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_precipitation_intensity_mm_per_h{entity_id=~\"sensor.shelly_ws90_precipitation.*|sensor.shelly_ws90_rain.*\"} or on() vector(0)", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "lengthmm", + "min": 0, + "max": 50, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "green", "value": null }, + { "color": "blue", "value": 0.1 }, + { "color": "dark-blue", "value": 5 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] }, + "orientation": "auto", + "showThresholdLabels": true, + "showThresholdMarkers": true + } + }, + { + "id": 10, + "type": "gauge", + "title": "🔆 Solar Illuminance", + "gridPos": { "x": 18, "y": 11, "w": 6, "h": 6 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_illuminance_lux_lx{entity_id=\"sensor.shelly_ws90_illuminance_lux\"}", + "refId": "A" + } + ], + "fieldConfig": { + "defaults": { + "unit": "lux", + "min": 0, + "max": 100000, + "thresholds": { + "mode": "absolute", + "steps": [ + { "color": "blue", "value": null }, + { "color": "orange", "value": 1000 }, + { "color": "yellow", "value": 10000 } + ] + }, + "color": { "mode": "thresholds" } + } + }, + "options": { + "reduceOptions": { "values": false, "calcs": ["lastNotNull"] }, + "orientation": "auto", + "showThresholdLabels": true, + "showThresholdMarkers": true + } + }, + { + "id": 11, + "type": "timeseries", + "title": "📈 Temperature & Humidity History (24h)", + "gridPos": { "x": 0, "y": 17, "w": 12, "h": 8 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_temperature_celsius{entity_id=\"sensor.shelly_ws90_temperature\"}", + "legendFormat": "Temperature", + "refId": "A" + }, + { + "expr": "homeassistant_sensor_humidity_percent{entity_id=\"sensor.shelly_ws90_humidity\"}", + "legendFormat": "Humidity", + "refId": "B" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 10, + "spanNulls": true, + "showPoints": "never" + } + }, + "overrides": [ + { + "matcher": { "id": "byName", "options": "Temperature" }, + "properties": [ + { "id": "unit", "value": "celsius" }, + { "id": "color", "value": { "fixedColor": "orange", "mode": "fixed" } } + ] + }, + { + "matcher": { "id": "byName", "options": "Humidity" }, + "properties": [ + { "id": "unit", "value": "percent" }, + { "id": "color", "value": { "fixedColor": "blue", "mode": "fixed" } }, + { "id": "custom.axisPlacement", "value": "right" } + ] + } + ] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "bottom", + "calcs": ["lastNotNull", "min", "max", "mean"] + }, + "tooltip": { "mode": "multi", "sort": "desc" } + } + }, + { + "id": 12, + "type": "timeseries", + "title": "📉 Pressure & Precipitation History (24h)", + "gridPos": { "x": 12, "y": 17, "w": 12, "h": 8 }, + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "targets": [ + { + "expr": "homeassistant_sensor_pressure_kpa{entity_id=\"sensor.shelly_ws90_pressure\"} * 10", + "legendFormat": "Pressure", + "refId": "A" + }, + { + "expr": "homeassistant_sensor_precipitation_intensity_mm_per_h{entity_id=~\"sensor.shelly_ws90_precipitation.*|sensor.shelly_ws90_rain.*\"} or on() vector(0)", + "legendFormat": "Rain Intensity", + "refId": "B" + } + ], + "fieldConfig": { + "defaults": { + "custom": { + "lineWidth": 2, + "fillOpacity": 10, + "spanNulls": true, + "showPoints": "never" + } + }, + "overrides": [ + { + "matcher": { "id": "byName", "options": "Pressure" }, + "properties": [ + { "id": "unit", "value": "pressurehpa" }, + { "id": "color", "value": { "fixedColor": "purple", "mode": "fixed" } } + ] + }, + { + "matcher": { "id": "byName", "options": "Rain Intensity" }, + "properties": [ + { "id": "unit", "value": "lengthmm" }, + { "id": "color", "value": { "fixedColor": "dark-blue", "mode": "fixed" } }, + { "id": "custom.axisPlacement", "value": "right" } + ] + } + ] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "bottom", + "calcs": ["lastNotNull", "min", "max", "mean"] + }, + "tooltip": { "mode": "multi", "sort": "desc" } + } + } + ] + }