feat(openclaw): add shopping, supermarket deals, geizhals, and ebay MCP tools
This commit is contained in:
Binary file not shown.
@@ -15,7 +15,7 @@ data:
|
||||
"tags": ["home", "weather", "outdoor", "prometheus"],
|
||||
"timezone": "browser",
|
||||
"schemaVersion": 39,
|
||||
"version": 3,
|
||||
"version": 4,
|
||||
"refresh": "30s",
|
||||
"editable": false,
|
||||
"graphTooltip": 2,
|
||||
@@ -29,7 +29,7 @@ data:
|
||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||
"targets": [
|
||||
{
|
||||
"expr": "homeassistant_sensor_unit_lqi{entity=\"sensor.shelly_ws90_linkquality\"}",
|
||||
"expr": "homeassistant_sensor_unit_lqi{entity=\"sensor.0xfc4d6afffe246794_linkquality\"}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
@@ -65,7 +65,7 @@ data:
|
||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||
"targets": [
|
||||
{
|
||||
"expr": "homeassistant_sensor_battery_percent{entity=\"sensor.shelly_ws90_batterie\"}",
|
||||
"expr": "homeassistant_sensor_battery_percent{entity=\"sensor.shelly_ws90_battery\"}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
@@ -100,7 +100,7 @@ data:
|
||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||
"targets": [
|
||||
{
|
||||
"expr": "homeassistant_sensor_atmospheric_pressure_hpa{entity=\"sensor.shelly_ws90_atmospharischer_druck\"}",
|
||||
"expr": "homeassistant_sensor_atmospheric_pressure_hpa{entity=\"sensor.shelly_ws90_pressure\"}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
@@ -166,7 +166,7 @@ data:
|
||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||
"targets": [
|
||||
{
|
||||
"expr": "homeassistant_sensor_temperature_celsius{entity=\"sensor.shelly_ws90_temperatur\"}",
|
||||
"expr": "homeassistant_sensor_temperature_celsius{entity=\"sensor.shelly_ws90_temperature\"}",
|
||||
"legendFormat": "Temperature",
|
||||
"refId": "A"
|
||||
},
|
||||
@@ -191,7 +191,7 @@ data:
|
||||
"refId": "E"
|
||||
},
|
||||
{
|
||||
"expr": "homeassistant_sensor_humidity_percent{entity=\"sensor.shelly_ws90_luftfeuchtigkeit\"}",
|
||||
"expr": "homeassistant_sensor_humidity_percent{entity=\"sensor.shelly_ws90_humidity\"}",
|
||||
"legendFormat": "Relative Humidity",
|
||||
"refId": "F"
|
||||
},
|
||||
@@ -472,7 +472,7 @@ data:
|
||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||
"targets": [
|
||||
{
|
||||
"expr": "homeassistant_sensor_atmospheric_pressure_hpa{entity=\"sensor.shelly_ws90_atmospharischer_druck\"}",
|
||||
"expr": "homeassistant_sensor_atmospheric_pressure_hpa{entity=\"sensor.shelly_ws90_pressure\"}",
|
||||
"legendFormat": "Pressure",
|
||||
"refId": "A"
|
||||
},
|
||||
|
||||
@@ -12,10 +12,10 @@ data:
|
||||
{
|
||||
"uid": "taupi-fan",
|
||||
"title": "💨 Cellar Fan (TAUPI)",
|
||||
"tags": ["climate", "fan", "cellar", "prometheus"],
|
||||
"tags": ["climate", "fan", "cellar", "taupi", "prometheus"],
|
||||
"timezone": "browser",
|
||||
"schemaVersion": 39,
|
||||
"version": 3,
|
||||
"schemaVersion": 41,
|
||||
"version": 5,
|
||||
"refresh": "30s",
|
||||
"editable": false,
|
||||
"graphTooltip": 2,
|
||||
@@ -23,22 +23,39 @@ data:
|
||||
"from": "now-24h",
|
||||
"to": "now"
|
||||
},
|
||||
"templating": {
|
||||
"list": [
|
||||
{
|
||||
"name": "datasource",
|
||||
"type": "datasource",
|
||||
"pluginId": "prometheus",
|
||||
"includeAll": false,
|
||||
"label": "Prometheus",
|
||||
"current": {
|
||||
"selected": true,
|
||||
"text": "prometheus",
|
||||
"value": "prometheus"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"panels": [
|
||||
{
|
||||
"title": "⚡ Status & Controls",
|
||||
"title": "⚡ Status & Real-Time KPIs",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 0},
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Fan Power Relay",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 0, "y": 1},
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 0, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"mappings": [
|
||||
{"type": "value", "options": {"0": {"text": "OFF", "color": "blue"}, "1": {"text": "ON", "color": "orange"}}}
|
||||
{"type": "value", "options": {"0": {"text": "OFF (Idle)", "color": "blue"}, "1": {"text": "VENTILATING", "color": "orange"}}}
|
||||
],
|
||||
"color": {"mode": "thresholds"}
|
||||
}
|
||||
@@ -50,18 +67,86 @@ data:
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_relay_status", "legendFormat": "Fan Status", "refId": "A"}
|
||||
{"expr": "taupi_relay_status", "legendFormat": "Relay", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Mold Danger Status",
|
||||
"id": 2,
|
||||
"title": "Drying Quality Score",
|
||||
"description": "Calculated 0-100 score based on Dewpoint Spread. Higher score allows longer continuous ventilation runtime.",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 6, "y": 1},
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 4, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "none",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"color": {"mode": "thresholds"},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "gray", "value": null},
|
||||
{"color": "yellow", "value": 40},
|
||||
{"color": "green", "value": 70},
|
||||
{"color": "purple", "value": 90}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"graphMode": "none",
|
||||
"colorMode": "background",
|
||||
"textMode": "auto",
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_quality_score", "legendFormat": "Quality Score", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Dewpoint Drying Spread",
|
||||
"description": "Indoor Dewpoint − Outdoor Dewpoint. Must be > 2.0°C for drying.",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 8, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "celsius",
|
||||
"decimals": 1,
|
||||
"color": {"mode": "thresholds"},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "red", "value": null},
|
||||
{"color": "yellow", "value": 0},
|
||||
{"color": "green", "value": 2.0}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"graphMode": "none",
|
||||
"colorMode": "background",
|
||||
"textMode": "auto",
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_dewpoint_spread_celsius", "legendFormat": "Dewpoint Spread", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "Thermal Governor State",
|
||||
"description": "Thermal operating regime (Warm Cooling, Comfort 14-20°C, Cold Restricted, Frost Floor)",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 12, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"mappings": [
|
||||
{"type": "value", "options": {"0": {"text": "SAFE", "color": "green"}, "1": {"text": "CRITICAL", "color": "red"}}}
|
||||
{"type": "value", "options": {"0": {"text": "INIT", "color": "gray"}, "1": {"text": "FROST FLOOR", "color": "blue"}, "2": {"text": "COMFORT (14-20°)", "color": "green"}, "3": {"text": "WARM (Cooling)", "color": "orange"}, "4": {"text": "COLD RESTRICTED", "color": "purple"}}}
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -72,19 +157,30 @@ data:
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_is_critical", "legendFormat": "Mold Danger", "refId": "A"}
|
||||
{"expr": "taupi_thermal_governor_state", "legendFormat": "Governor", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Activation Criteria Met",
|
||||
"id": 5,
|
||||
"title": "Dynamic Max Burst Runtime",
|
||||
"description": "Dynamic max continuous runtime allowed based on drying quality",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 12, "y": 1},
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 16, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"mappings": [
|
||||
{"type": "value", "options": {"0": {"text": "NO", "color": "gray"}, "1": {"text": "YES", "color": "green"}}}
|
||||
]
|
||||
"unit": "m",
|
||||
"decimals": 0,
|
||||
"color": {"mode": "thresholds"},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "gray", "value": null},
|
||||
{"color": "yellow", "value": 20},
|
||||
{"color": "green", "value": 45},
|
||||
{"color": "purple", "value": 90}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
@@ -94,14 +190,15 @@ data:
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_would_fan_activate", "legendFormat": "Dewpoint Condition", "refId": "A"}
|
||||
{"expr": "taupi_max_allowed_runtime_minutes", "legendFormat": "Max Runtime", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Shelly Plug Reachability",
|
||||
"id": 6,
|
||||
"title": "Controller Connectivity",
|
||||
"type": "stat",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 4, "w": 6, "x": 18, "y": 1},
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 4, "w": 4, "x": 20, "y": 1},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"mappings": [
|
||||
@@ -116,23 +213,113 @@ data:
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "up{job=\"taupi-fan\"}", "legendFormat": "Connectivity", "refId": "A"}
|
||||
{"expr": "up{job=\"taupi-fan\"}", "legendFormat": "Shelly Scrape", "refId": "A"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "📊 Climate Correlation",
|
||||
"title": "🎯 PRIMARY GOAL: Humidity Reduction vs. Fan Operation",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 5},
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": "🎯 Primary Goal: Humidity High ➔ Fan Runs ➔ Humidity Drops",
|
||||
"description": "Visual validation of cellar drying: When Indoor Humidity rises above target, the orange Fan Active band engages until Indoor Humidity drops back down.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 12, "w": 24, "x": 0, "y": 6},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 0,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never"
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Fan Active (Running)"},
|
||||
"properties": [
|
||||
{"id": "color", "value": {"fixedColor": "#FF9800", "mode": "fixed"}},
|
||||
{"id": "custom.axisPlacement", "value": "hidden"},
|
||||
{"id": "custom.drawStyle", "value": "line"},
|
||||
{"id": "custom.lineInterpolation", "value": "stepAfter"},
|
||||
{"id": "custom.lineWidth", "value": 0},
|
||||
{"id": "custom.fillOpacity", "value": 25},
|
||||
{"id": "min", "value": 0},
|
||||
{"id": "max", "value": 1},
|
||||
{"id": "decimals", "value": 0},
|
||||
{"id": "mappings", "value": [{"type": "value", "options": {"0": {"text": "OFF"}, "1": {"text": "ON"}}}]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Indoor Humidity (Cellar)"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "color", "value": {"fixedColor": "#00E5FF", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 3},
|
||||
{"id": "custom.fillOpacity", "value": 12}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Target Setpoint"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "color", "value": {"fixedColor": "#E040FB", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [6, 4]}},
|
||||
{"id": "custom.lineWidth", "value": 2}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Mold Risk Limit (Sedlbauer)"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "color", "value": {"fixedColor": "#FF1744", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [10, 5]}},
|
||||
{"id": "custom.lineWidth", "value": 1.5}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Outdoor Humidity"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "color", "value": {"fixedColor": "#448AFF", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 1.5},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dot", "dash": [2, 4]}}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["lastNotNull", "min", "max", "mean"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_relay_status", "legendFormat": "Fan Active (Running)", "refId": "A"},
|
||||
{"expr": "taupi_humidity_percent_innen", "legendFormat": "Indoor Humidity (Cellar)", "refId": "B"},
|
||||
{"expr": "taupi_target_humidity_percent", "legendFormat": "Target Setpoint", "refId": "C"},
|
||||
{"expr": "taupi_critical_humidity_threshold_percent", "legendFormat": "Mold Risk Limit (Sedlbauer)", "refId": "D"},
|
||||
{"expr": "taupi_humidity_percent_aussen", "legendFormat": "Outdoor Humidity", "refId": "E"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "📊 Full Climate & Fan Correlation",
|
||||
"description": "All metrics in one view. Left axis: temperatures & dewpoints (°C). Right axis: humidity & mold threshold (%). Colored background bands: orange = fan running, red = mold critical, green = activation criteria met. Hover anywhere to read all values at that timestamp.",
|
||||
"title": "📊 Complete Climate & Psychrometric Correlation",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 18},
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "📊 Full Telemetry Overview (Temperatures, Dewpoints, Humidity & Fan)",
|
||||
"description": "Comprehensive correlation: Left axis (°C) = Temperatures & Dewpoints. Right axis (%) = Humidity, Setpoint & Mold Limit. Orange shaded band = Fan Relay ON.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 14, "w": 24, "x": 0, "y": 6},
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 13, "w": 24, "x": 0, "y": 19},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {
|
||||
@@ -151,43 +338,13 @@ data:
|
||||
{"id": "custom.drawStyle", "value": "line"},
|
||||
{"id": "custom.lineInterpolation", "value": "stepAfter"},
|
||||
{"id": "custom.lineWidth", "value": 0},
|
||||
{"id": "custom.fillOpacity", "value": 15},
|
||||
{"id": "custom.fillOpacity", "value": 20},
|
||||
{"id": "min", "value": 0},
|
||||
{"id": "max", "value": 1},
|
||||
{"id": "decimals", "value": 0},
|
||||
{"id": "mappings", "value": [{"type": "value", "options": {"0": {"text": "OFF"}, "1": {"text": "ON"}}}]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Mold Critical"},
|
||||
"properties": [
|
||||
{"id": "color", "value": {"fixedColor": "#F44336", "mode": "fixed"}},
|
||||
{"id": "custom.axisPlacement", "value": "hidden"},
|
||||
{"id": "custom.drawStyle", "value": "line"},
|
||||
{"id": "custom.lineInterpolation", "value": "stepAfter"},
|
||||
{"id": "custom.lineWidth", "value": 0},
|
||||
{"id": "custom.fillOpacity", "value": 10},
|
||||
{"id": "min", "value": 0},
|
||||
{"id": "max", "value": 1},
|
||||
{"id": "decimals", "value": 0},
|
||||
{"id": "mappings", "value": [{"type": "value", "options": {"0": {"text": "SAFE"}, "1": {"text": "CRITICAL"}}}]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Activation Criteria"},
|
||||
"properties": [
|
||||
{"id": "color", "value": {"fixedColor": "#4CAF50", "mode": "fixed"}},
|
||||
{"id": "custom.axisPlacement", "value": "hidden"},
|
||||
{"id": "custom.drawStyle", "value": "line"},
|
||||
{"id": "custom.lineInterpolation", "value": "stepAfter"},
|
||||
{"id": "custom.lineWidth", "value": 0},
|
||||
{"id": "custom.fillOpacity", "value": 8},
|
||||
{"id": "min", "value": 0},
|
||||
{"id": "max", "value": 1},
|
||||
{"id": "decimals", "value": 0},
|
||||
{"id": "mappings", "value": [{"type": "value", "options": {"0": {"text": "NO"}, "1": {"text": "YES"}}}]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Indoor Temp"},
|
||||
"properties": [
|
||||
@@ -211,9 +368,9 @@ data:
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "unit", "value": "celsius"},
|
||||
{"id": "color", "value": {"fixedColor": "#FF6D00", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [10, 5]}},
|
||||
{"id": "custom.lineWidth", "value": 1}
|
||||
{"id": "color", "value": {"fixedColor": "#FFB74D", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [8, 4]}},
|
||||
{"id": "custom.lineWidth", "value": 1.5}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -221,9 +378,9 @@ data:
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "unit", "value": "celsius"},
|
||||
{"id": "color", "value": {"fixedColor": "#2979FF", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [10, 5]}},
|
||||
{"id": "custom.lineWidth", "value": 1}
|
||||
{"id": "color", "value": {"fixedColor": "#90CAF9", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [8, 4]}},
|
||||
{"id": "custom.lineWidth", "value": 1.5}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -231,9 +388,8 @@ data:
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "right"},
|
||||
{"id": "unit", "value": "percent"},
|
||||
{"id": "color", "value": {"fixedColor": "#00BFA5", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 2},
|
||||
{"id": "custom.fillOpacity", "value": 5}
|
||||
{"id": "color", "value": {"fixedColor": "#00E5FF", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 2.5}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -245,260 +401,203 @@ data:
|
||||
{"id": "custom.lineWidth", "value": 1}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Target Setpoint"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "right"},
|
||||
{"id": "unit", "value": "percent"},
|
||||
{"id": "color", "value": {"fixedColor": "#E040FB", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [6, 4]}},
|
||||
{"id": "custom.lineWidth", "value": 1.5}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Mold Threshold"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "right"},
|
||||
{"id": "unit", "value": "percent"},
|
||||
{"id": "color", "value": {"fixedColor": "#F44336", "mode": "fixed"}},
|
||||
{"id": "color", "value": {"fixedColor": "#FF1744", "mode": "fixed"}},
|
||||
{"id": "custom.lineStyle", "value": {"fill": "dash", "dash": [10, 5]}},
|
||||
{"id": "custom.lineWidth", "value": 1}
|
||||
{"id": "custom.lineWidth", "value": 1.5}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["lastNotNull", "min", "max"]},
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["lastNotNull", "min", "max", "mean"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_relay_status", "legendFormat": "Fan Active", "refId": "A"},
|
||||
{"expr": "taupi_is_critical", "legendFormat": "Mold Critical", "refId": "B"},
|
||||
{"expr": "taupi_would_fan_activate", "legendFormat": "Activation Criteria", "refId": "C"},
|
||||
{"expr": "taupi_temperature_celsius_innen", "legendFormat": "Indoor Temp", "refId": "D"},
|
||||
{"expr": "taupi_temperature_celsius_aussen", "legendFormat": "Outdoor Temp", "refId": "E"},
|
||||
{"expr": "taupi_dewpoint_celsius_innen", "legendFormat": "Indoor Dewpoint", "refId": "F"},
|
||||
{"expr": "taupi_dewpoint_celsius_aussen", "legendFormat": "Outdoor Dewpoint", "refId": "G"},
|
||||
{"expr": "taupi_humidity_percent_innen", "legendFormat": "Indoor Humidity", "refId": "H"},
|
||||
{"expr": "taupi_humidity_percent_aussen", "legendFormat": "Outdoor Humidity", "refId": "I"},
|
||||
{"expr": "taupi_critical_humidity_threshold_percent", "legendFormat": "Mold Threshold", "refId": "J"}
|
||||
{"expr": "taupi_temperature_celsius_innen", "legendFormat": "Indoor Temp", "refId": "B"},
|
||||
{"expr": "taupi_temperature_celsius_aussen", "legendFormat": "Outdoor Temp", "refId": "C"},
|
||||
{"expr": "taupi_dewpoint_celsius_innen", "legendFormat": "Indoor Dewpoint", "refId": "D"},
|
||||
{"expr": "taupi_dewpoint_celsius_aussen", "legendFormat": "Outdoor Dewpoint", "refId": "E"},
|
||||
{"expr": "taupi_humidity_percent_innen", "legendFormat": "Indoor Humidity", "refId": "F"},
|
||||
{"expr": "taupi_humidity_percent_aussen", "legendFormat": "Outdoor Humidity", "refId": "G"},
|
||||
{"expr": "taupi_target_humidity_percent", "legendFormat": "Target Setpoint", "refId": "H"},
|
||||
{"expr": "taupi_critical_humidity_threshold_percent", "legendFormat": "Mold Threshold", "refId": "I"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "📈 Deep Dive",
|
||||
"title": "💧 Psychrometric Deltas & Safety Gates",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 16},
|
||||
"collapsed": true,
|
||||
"panels": [
|
||||
{
|
||||
"title": "🌡️ Temperature Differential (Indoor − Outdoor)",
|
||||
"description": "Positive = cellar warmer than outside (normal). Large delta means the fan can effectively dry the cellar air by exchanging it with drier outside air.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 17},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "celsius",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 10,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never",
|
||||
"gradientMode": "scheme",
|
||||
"thresholdsStyle": {"mode": "area"}
|
||||
},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "blue", "value": null},
|
||||
{"color": "green", "value": 0},
|
||||
{"color": "orange", "value": 5}
|
||||
]
|
||||
}
|
||||
}
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 32},
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "💧 Dew Point Spread (Indoor − Outdoor) — Physical Drying Potential",
|
||||
"description": "Calculates physical moisture removal capacity. When Spread > 2.0°C (Green zone), outside air is dry enough to absorb moisture from the cellar.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 33},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "celsius",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 15,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never",
|
||||
"gradientMode": "scheme",
|
||||
"thresholdsStyle": {"mode": "area"}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "#F44336", "value": null},
|
||||
{"color": "#FFC107", "value": 0},
|
||||
{"color": "#4CAF50", "value": 2.0}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_dewpoint_spread_celsius", "legendFormat": "Dewpoint Spread (In − Out)", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"title": "🌡️ Temperature Delta (Indoor − Outdoor) & Heating Prevention",
|
||||
"description": "Positive = cellar warmer than outside. Summer heating rule: Fan blocked if Outdoor Temp > 20°C (or > Indoor Temp).",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 33},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "celsius",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 10,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never",
|
||||
"gradientMode": "scheme",
|
||||
"thresholdsStyle": {"mode": "area"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_temperature_celsius_innen - taupi_temperature_celsius_aussen", "legendFormat": "Temp Delta (In − Out)", "refId": "A"}
|
||||
]
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "#2196F3", "value": null},
|
||||
{"color": "#4CAF50", "value": 0},
|
||||
{"color": "#FF9800", "value": 5}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_temperature_celsius_innen - taupi_temperature_celsius_aussen", "legendFormat": "Temp Delta (In − Out)", "refId": "A"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "🔋 Hardware Diagnostics & Safety Timers",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 41},
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "🔋 BLU Sensor Batteries",
|
||||
"type": "gauge",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 7, "w": 12, "x": 0, "y": 42},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "red", "value": null},
|
||||
{"color": "orange", "value": 20},
|
||||
{"color": "green", "value": 50}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]},
|
||||
"showThresholdLabels": false,
|
||||
"showThresholdMarkers": true
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_battery_percent_innen", "legendFormat": "Indoor Sensor Battery", "refId": "A"},
|
||||
{"expr": "taupi_battery_percent_aussen", "legendFormat": "Outdoor Sensor Battery", "refId": "B"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "⏱️ Duty Cycle & Staleness Timers",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "${datasource}"},
|
||||
"gridPos": {"h": 7, "w": 12, "x": 12, "y": 42},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "s",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 5,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "💧 Dewpoint Spread (Indoor − Outdoor)",
|
||||
"description": "When indoor dewpoint exceeds outdoor dewpoint, running the fan helps: outside air can absorb moisture. Negative = fan would make things worse.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 17},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "celsius",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 10,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never",
|
||||
"gradientMode": "scheme",
|
||||
"thresholdsStyle": {"mode": "area"}
|
||||
},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "red", "value": null},
|
||||
{"color": "green", "value": 0},
|
||||
{"color": "super-light-green", "value": 3}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_dewpoint_celsius_innen - taupi_dewpoint_celsius_aussen", "legendFormat": "Dewpoint Delta (In − Out)", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "💧 Humidity Delta (Indoor − Outdoor)",
|
||||
"description": "How much more humid the cellar is compared to outside. High positive values indicate the fan can effectively remove moisture.",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 25},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 10,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never",
|
||||
"gradientMode": "scheme",
|
||||
"thresholdsStyle": {"mode": "area"}
|
||||
},
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "blue", "value": null},
|
||||
{"color": "green", "value": 0},
|
||||
{"color": "orange", "value": 15}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_humidity_percent_innen - taupi_humidity_percent_aussen", "legendFormat": "Humidity Delta (In − Out)", "refId": "A"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "📉 Indoor Humidity vs Fan Runtime",
|
||||
"description": "Overlay of indoor humidity (left axis) and fan state (right axis). Shows the direct effect: when the orange fan-on band appears, does the teal humidity line drop?",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 25},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never"
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Indoor Humidity"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "left"},
|
||||
{"id": "unit", "value": "percent"},
|
||||
{"id": "color", "value": {"fixedColor": "#00BFA5", "mode": "fixed"}},
|
||||
{"id": "custom.fillOpacity", "value": 10}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Fan Active"},
|
||||
"properties": [
|
||||
{"id": "custom.axisPlacement", "value": "right"},
|
||||
{"id": "custom.drawStyle", "value": "line"},
|
||||
{"id": "custom.lineInterpolation", "value": "stepAfter"},
|
||||
{"id": "custom.fillOpacity", "value": 30},
|
||||
{"id": "color", "value": {"fixedColor": "orange", "mode": "fixed"}},
|
||||
{"id": "min", "value": 0},
|
||||
{"id": "max", "value": 1},
|
||||
{"id": "decimals", "value": 0},
|
||||
{"id": "mappings", "value": [{"type": "value", "options": {"0": {"text": "OFF"}, "1": {"text": "ON"}}}]}
|
||||
]
|
||||
}
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Fan Running Time"},
|
||||
"properties": [
|
||||
{"id": "color", "value": {"fixedColor": "#FF9800", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 2}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["min", "max", "mean", "lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_humidity_percent_innen", "legendFormat": "Indoor Humidity", "refId": "A"},
|
||||
{"expr": "taupi_relay_status", "legendFormat": "Fan Active", "refId": "B"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"title": "🔋 BLE Sensors Diagnostic",
|
||||
"type": "row",
|
||||
"gridPos": {"h": 1, "w": 24, "x": 0, "y": 17},
|
||||
"collapsed": true,
|
||||
"panels": [
|
||||
{
|
||||
"title": "Sensor Batteries",
|
||||
"type": "gauge",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 6, "w": 12, "x": 0, "y": 18},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "percent",
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{"color": "red", "value": null},
|
||||
{"color": "orange", "value": 20},
|
||||
{"color": "green", "value": 50}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"reduceOptions": {"values": false, "calcs": ["lastNotNull"]},
|
||||
"showThresholdLabels": false,
|
||||
"showThresholdMarkers": true
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_battery_percent_innen", "legendFormat": "Indoor Sensor Battery", "refId": "A"},
|
||||
{"expr": "taupi_battery_percent_aussen", "legendFormat": "Outdoor Sensor Battery", "refId": "B"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Sensor Connection Age (Staleness)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "prometheus", "uid": "prometheus"},
|
||||
"gridPos": {"h": 6, "w": 12, "x": 12, "y": 18},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "s",
|
||||
"custom": {
|
||||
"lineWidth": 2,
|
||||
"fillOpacity": 5,
|
||||
"spanNulls": true,
|
||||
"showPoints": "never"
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["lastNotNull"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_lost_connection_seconds_innen", "legendFormat": "Indoor Connection Stale Time", "refId": "A"},
|
||||
{"expr": "taupi_lost_connection_seconds_aussen", "legendFormat": "Outdoor Connection Stale Time", "refId": "B"}
|
||||
]
|
||||
}
|
||||
{
|
||||
"matcher": {"id": "byName", "options": "Cooldown Pause Remaining"},
|
||||
"properties": [
|
||||
{"id": "color", "value": {"fixedColor": "#AB47BC", "mode": "fixed"}},
|
||||
{"id": "custom.lineWidth", "value": 2}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"legend": {"displayMode": "table", "placement": "bottom", "calcs": ["lastNotNull", "max"]},
|
||||
"tooltip": {"mode": "multi", "sort": "desc"}
|
||||
},
|
||||
"targets": [
|
||||
{"expr": "taupi_fan_running_seconds", "legendFormat": "Fan Running Time", "refId": "A"},
|
||||
{"expr": "taupi_fan_pause_remaining_seconds", "legendFormat": "Cooldown Pause Remaining", "refId": "B"},
|
||||
{"expr": "taupi_lost_connection_seconds_innen", "legendFormat": "Indoor Signal Age", "refId": "C"},
|
||||
{"expr": "taupi_lost_connection_seconds_aussen", "legendFormat": "Outdoor Signal Age", "refId": "D"}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user