Ctrl K
ComunidadGuías…

dashboard.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  "dashboard": {
    "uid": "airgradient-bano",
    "title": "Air Quality - Ba\u00f1o",
    "description": "AirGradient ONE indoor air quality monitor \u2014 bathroom environment with extractor fan correlation",
    "tags": [
      "airgradient",
      "air-quality",
      "bano",
      "home-assistant"
    ],
    "timezone": "browser",
    "refresh": "30s",
    "time": {
      "from": "now-24h",
      "to": "now"
    },
    "schemaVersion": 39,
    "pluginVersion": "13.0.1",
    "editable": true,
    "fiscalYearStartMonth": 0,
    "graphTooltip": 1,
    "liveNow": false,
    "panels": [
      {
        "id": 1,
        "type": "text",
        "title": "",
        "gridPos": {
          "h": 2,
          "w": 24,
          "x": 0,
          "y": 0
        },
        "transparent": true,
        "options": {
          "mode": "markdown",
          "content": "# AirGradient ONE  /  Ba\u00f1o\nCO2 / PM / VOC / NOx / Temperature / Humidity  ---  Extractor fan correlation  ---  24h window",
          "code": {
            "language": "plaintext",
            "showLineNumbers": false,
            "showMiniMap": false
          }
        },
        "datasource": {
          "type": "datasource",
          "uid": "-- Dashboard --"
        }
      },
      {
        "id": 2,
        "type": "gauge",
        "title": "CO\u2082",
        "description": "Carbon dioxide concentration. <600 excellent, 600-800 good, 800-1000 fair, >1000 poor, >1500 bad.",
        "gridPos": {
          "h": 7,
          "w": 6,
          "x": 0,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "ppm",
            "min": 0,
            "max": 3000,
            "decimals": 0,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#73BF69",
                  "value": null
                },
                {
                  "color": "#5794F2",
                  "value": 600
                },
                {
                  "color": "#FADE2A",
                  "value": 800
                },
                {
                  "color": "#FF9830",
                  "value": 1000
                },
                {
                  "color": "#F2495C",
                  "value": 1500
                },
                {
                  "color": "#C4162A",
                  "value": 2000
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "showThresholdLabels": false,
          "showThresholdMarkers": true,
          "sizing": "auto",
          "minVizWidth": 75,
          "minVizHeight": 75
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_carbon_dioxide_ppm{entity=\"sensor.i_9psl_carbon_dioxide\"}",
            "legendFormat": "CO\u2082",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 3,
        "type": "gauge",
        "title": "PM2.5",
        "description": "Fine particulate matter. WHO 24h guideline: 15 \u00b5g/m\u00b3. <5 excellent, 5-12 good, 12-35 moderate, >35 unhealthy.",
        "gridPos": {
          "h": 7,
          "w": 4,
          "x": 6,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "\u00b5g/m\u00b3",
            "min": 0,
            "max": 150,
            "decimals": 1,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#73BF69",
                  "value": null
                },
                {
                  "color": "#96D98D",
                  "value": 5
                },
                {
                  "color": "#FADE2A",
                  "value": 12
                },
                {
                  "color": "#FF9830",
                  "value": 35
                },
                {
                  "color": "#F2495C",
                  "value": 55
                },
                {
                  "color": "#8F3BB8",
                  "value": 125
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "showThresholdLabels": false,
          "showThresholdMarkers": true,
          "sizing": "auto",
          "minVizWidth": 75,
          "minVizHeight": 75
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_pm25_u0xb5g_per_mu0xb3{entity=\"sensor.i_9psl_pm2_5\"}",
            "legendFormat": "PM2.5",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 4,
        "type": "gauge",
        "title": "VOC Index",
        "description": "Volatile organic compounds Sensirion index. 100 = baseline, <100 improving, >100 worsening. Max 500.",
        "gridPos": {
          "h": 7,
          "w": 4,
          "x": 10,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "min": 0,
            "max": 500,
            "decimals": 0,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#73BF69",
                  "value": null
                },
                {
                  "color": "#5794F2",
                  "value": 100
                },
                {
                  "color": "#FADE2A",
                  "value": 150
                },
                {
                  "color": "#FF9830",
                  "value": 250
                },
                {
                  "color": "#F2495C",
                  "value": 400
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "showThresholdLabels": false,
          "showThresholdMarkers": true,
          "sizing": "auto",
          "minVizWidth": 75,
          "minVizHeight": 75
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_state{entity=\"sensor.i_9psl_voc_index\"}",
            "legendFormat": "VOC",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 5,
        "type": "gauge",
        "title": "NOx Index",
        "description": "Nitrogen oxides Sensirion index. <20 clean, 20-50 moderate, >100 high. Bathroom-relevant from combustion or external sources.",
        "gridPos": {
          "h": 7,
          "w": 4,
          "x": 14,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "min": 0,
            "max": 500,
            "decimals": 0,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#73BF69",
                  "value": null
                },
                {
                  "color": "#FADE2A",
                  "value": 20
                },
                {
                  "color": "#FF9830",
                  "value": 50
                },
                {
                  "color": "#F2495C",
                  "value": 100
                },
                {
                  "color": "#C4162A",
                  "value": 300
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "showThresholdLabels": false,
          "showThresholdMarkers": true,
          "sizing": "auto",
          "minVizWidth": 75,
          "minVizHeight": 75
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_state{entity=\"sensor.i_9psl_nox_index\"}",
            "legendFormat": "NOx",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 6,
        "type": "stat",
        "title": "Temperature",
        "description": "Ambient temperature from AirGradient ONE SHT4x sensor.",
        "gridPos": {
          "h": 7,
          "w": 3,
          "x": 18,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "celsius",
            "min": 10,
            "max": 40,
            "decimals": 1,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#5794F2",
                  "value": null
                },
                {
                  "color": "#73BF69",
                  "value": 18
                },
                {
                  "color": "#FADE2A",
                  "value": 26
                },
                {
                  "color": "#FF9830",
                  "value": 30
                },
                {
                  "color": "#F2495C",
                  "value": 35
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "graphMode": "area",
          "textMode": "auto",
          "wideLayout": true,
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "colorMode": "value",
          "justifyMode": "auto",
          "showPercentChange": false,
          "orientation": "auto"
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_temperature_celsius{entity=\"sensor.i_9psl_temperature\"}",
            "legendFormat": "Temp",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 7,
        "type": "stat",
        "title": "Humidity",
        "description": "Relative humidity from AirGradient ONE SHT4x sensor. 40-55% optimal for bathrooms.",
        "gridPos": {
          "h": 7,
          "w": 3,
          "x": 21,
          "y": 2
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "percent",
            "min": 0,
            "max": 100,
            "decimals": 1,
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#F2495C",
                  "value": null
                },
                {
                  "color": "#FF9830",
                  "value": 25
                },
                {
                  "color": "#FADE2A",
                  "value": 30
                },
                {
                  "color": "#73BF69",
                  "value": 40
                },
                {
                  "color": "#FADE2A",
                  "value": 55
                },
                {
                  "color": "#FF9830",
                  "value": 60
                },
                {
                  "color": "#F2495C",
                  "value": 70
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "graphMode": "area",
          "textMode": "auto",
          "wideLayout": true,
          "reduceOptions": {
            "values": false,
            "calcs": [
              "lastNotNull"
            ],
            "fields": ""
          },
          "colorMode": "value",
          "justifyMode": "auto",
          "showPercentChange": false,
          "orientation": "auto"
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_humidity_percent{entity=\"sensor.i_9psl_humidity\"}",
            "legendFormat": "Humidity",
            "refId": "A",
            "instant": true,
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 8,
        "type": "state-timeline",
        "title": "Extractor Fan",
        "description": "Bathroom extractor fan ON/OFF state over time.",
        "gridPos": {
          "h": 3,
          "w": 24,
          "x": 0,
          "y": 9
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "custom": {
              "fillOpacity": 80,
              "lineWidth": 0
            },
            "color": {
              "mode": "thresholds"
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#2C3235",
                  "value": null
                },
                {
                  "color": "#73BF69",
                  "value": 1
                }
              ]
            },
            "mappings": [
              {
                "type": "value",
                "options": {
                  "0": {
                    "text": "OFF",
                    "color": "#2C3235"
                  },
                  "1": {
                    "text": "ON",
                    "color": "#73BF69"
                  }
                }
              }
            ]
          },
          "overrides": []
        },
        "options": {
          "mergeValues": true,
          "showValue": "auto",
          "alignValue": "center",
          "rowHeight": 0.85,
          "legend": {
            "displayMode": "hidden",
            "placement": "bottom"
          },
          "tooltip": {
            "mode": "single",
            "sort": "none"
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_switch_state{entity=\"switch.extractor_bano_extractor_bano\"}",
            "legendFormat": "Extractor",
            "refId": "A",
            "format": "time_series",
            "instant": false,
            "range": true,
            "intervalMs": 15000
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 9,
        "type": "timeseries",
        "title": "CO\u2082 Concentration",
        "description": "CO2 with extractor fan overlay. When the extractor is ON, an orange dashed line appears at 700 ppm for visual correlation.",
        "gridPos": {
          "h": 8,
          "w": 24,
          "x": 0,
          "y": 12
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "ppm",
            "decimals": 0,
            "custom": {
              "fillOpacity": 15,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "axisCenteredZero": false,
              "axisColorMode": "text",
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "line"
              }
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "transparent",
                  "value": null
                },
                {
                  "color": "#FADE2A",
                  "value": 800
                },
                {
                  "color": "#F2495C",
                  "value": 1000
                }
              ]
            },
            "color": {
              "mode": "palette-classic"
            }
          },
          "overrides": [
            {
              "matcher": {
                "id": "byName",
                "options": "CO\u2082"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#73BF69"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 20
                },
                {
                  "id": "custom.lineWidth",
                  "value": 2
                },
                {
                  "id": "custom.gradientMode",
                  "value": "scheme"
                }
              ]
            },
            {
              "matcher": {
                "id": "byName",
                "options": "Extractor (700=ON)"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#FF9830"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 5
                },
                {
                  "id": "custom.lineWidth",
                  "value": 2
                },
                {
                  "id": "custom.lineStyle",
                  "value": {
                    "fill": "dash",
                    "dash": [
                      10,
                      8
                    ]
                  }
                },
                {
                  "id": "custom.thresholdsStyle",
                  "value": {
                    "mode": "off"
                  }
                }
              ]
            }
          ]
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_carbon_dioxide_ppm{entity=\"sensor.i_9psl_carbon_dioxide\"}",
            "legendFormat": "CO\u2082",
            "refId": "A",
            "format": "time_series"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_switch_state{entity=\"switch.extractor_bano_extractor_bano\"} * 500",
            "legendFormat": "Extractor (500=ON)",
            "refId": "B",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 10,
        "type": "timeseries",
        "title": "Particulate Matter",
        "description": "PM1, PM2.5, and PM10 as stacked area. WHO 24h guidelines: PM2.5 <15, PM10 <45 \u00b5g/m\u00b3.",
        "gridPos": {
          "h": 7,
          "w": 12,
          "x": 0,
          "y": 20
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "\u00b5g/m\u00b3",
            "decimals": 1,
            "custom": {
              "fillOpacity": 25,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "stacking": {
                "mode": "normal",
                "group": "A"
              },
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "off"
              }
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "green",
                  "value": null
                }
              ]
            },
            "color": {
              "mode": "palette-classic"
            }
          },
          "overrides": [
            {
              "matcher": {
                "id": "byName",
                "options": "PM1"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#8AB8FF"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 30
                }
              ]
            },
            {
              "matcher": {
                "id": "byName",
                "options": "PM2.5"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#FF9830"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 25
                }
              ]
            },
            {
              "matcher": {
                "id": "byName",
                "options": "PM10"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#F2495C"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 20
                }
              ]
            }
          ]
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_pm1_u0xb5g_per_mu0xb3{entity=\"sensor.i_9psl_pm1\"}",
            "legendFormat": "PM1",
            "refId": "A",
            "format": "time_series"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_pm25_u0xb5g_per_mu0xb3{entity=\"sensor.i_9psl_pm2_5\"}",
            "legendFormat": "PM2.5",
            "refId": "B",
            "format": "time_series"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_pm10_u0xb5g_per_mu0xb3{entity=\"sensor.i_9psl_pm10\"}",
            "legendFormat": "PM10",
            "refId": "C",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 11,
        "type": "timeseries",
        "title": "VOC & NOx Index",
        "description": "Sensirion SGP41 gas indices. Baseline is 100 for VOC, 1 for NOx. Values above baseline indicate worsening air quality.",
        "gridPos": {
          "h": 7,
          "w": 12,
          "x": 12,
          "y": 20
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "decimals": 0,
            "custom": {
              "fillOpacity": 15,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "off"
              }
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "green",
                  "value": null
                }
              ]
            },
            "color": {
              "mode": "palette-classic"
            },
            "min": 0,
            "max": 500
          },
          "overrides": [
            {
              "matcher": {
                "id": "byName",
                "options": "VOC Index"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#B877D9"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 18
                },
                {
                  "id": "custom.gradientMode",
                  "value": "scheme"
                }
              ]
            },
            {
              "matcher": {
                "id": "byName",
                "options": "NOx Index"
              },
              "properties": [
                {
                  "id": "color",
                  "value": {
                    "mode": "fixed",
                    "fixedColor": "#FF6D00"
                  }
                },
                {
                  "id": "custom.fillOpacity",
                  "value": 12
                },
                {
                  "id": "custom.axisPlacement",
                  "value": "right"
                },
                {
                  "id": "custom.axisSoftMax",
                  "value": 150
                }
              ]
            }
          ]
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_state{entity=\"sensor.i_9psl_voc_index\"}",
            "legendFormat": "VOC Index",
            "refId": "A",
            "format": "time_series"
          },
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_state{entity=\"sensor.i_9psl_nox_index\"}",
            "legendFormat": "NOx Index",
            "refId": "B",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 12,
        "type": "timeseries",
        "title": "Temperature",
        "description": "Bathroom ambient temperature with comfort zone thresholds. 18-26\u00b0C optimal.",
        "gridPos": {
          "h": 7,
          "w": 12,
          "x": 0,
          "y": 27
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "celsius",
            "decimals": 1,
            "custom": {
              "fillOpacity": 15,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "line"
              },
              "gradientMode": "scheme"
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#5794F2",
                  "value": null
                },
                {
                  "color": "#73BF69",
                  "value": 18
                },
                {
                  "color": "#FADE2A",
                  "value": 26
                },
                {
                  "color": "#FF9830",
                  "value": 30
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            }
          },
          "overrides": []
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "min",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_temperature_celsius{entity=\"sensor.i_9psl_temperature\"}",
            "legendFormat": "Temperature",
            "refId": "A",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 13,
        "type": "timeseries",
        "title": "Humidity",
        "description": "Relative humidity with mold-risk and comfort thresholds. 40-60% optimal for bathrooms, >70% mold risk.",
        "gridPos": {
          "h": 7,
          "w": 12,
          "x": 12,
          "y": 27
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "percent",
            "decimals": 1,
            "custom": {
              "fillOpacity": 15,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "line+area"
              },
              "gradientMode": "scheme"
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#F2495C",
                  "value": null
                },
                {
                  "color": "#FF9830",
                  "value": 30
                },
                {
                  "color": "#73BF69",
                  "value": 40
                },
                {
                  "color": "#FF9830",
                  "value": 60
                },
                {
                  "color": "#F2495C",
                  "value": 70
                }
              ]
            },
            "color": {
              "mode": "thresholds"
            },
            "min": 0,
            "max": 100
          },
          "overrides": []
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "min",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_humidity_percent{entity=\"sensor.i_9psl_humidity\"}",
            "legendFormat": "Humidity",
            "refId": "A",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 14,
        "type": "timeseries",
        "title": "PM0.3 Particle Count",
        "description": "Ultra-fine particles (0.3\u00b5m). Most sensitive indicator of air quality changes and filtration effectiveness.",
        "gridPos": {
          "h": 5,
          "w": 16,
          "x": 0,
          "y": 34
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "unit": "short",
            "decimals": 0,
            "custom": {
              "fillOpacity": 18,
              "lineWidth": 2,
              "spanNulls": true,
              "pointSize": 5,
              "showPoints": "never",
              "lineInterpolation": "smooth",
              "axisPlacement": "auto",
              "axisBorderShow": false,
              "axisLabel": "particles/dL",
              "scaleDistribution": {
                "type": "linear"
              },
              "hideFrom": {
                "tooltip": false,
                "viz": false,
                "legend": false
              },
              "thresholdsStyle": {
                "mode": "off"
              },
              "gradientMode": "opacity"
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#73BF69",
                  "value": null
                }
              ]
            },
            "color": {
              "mode": "fixed",
              "fixedColor": "#8AB8FF"
            }
          },
          "overrides": []
        },
        "options": {
          "tooltip": {
            "mode": "multi",
            "sort": "desc"
          },
          "legend": {
            "displayMode": "list",
            "placement": "bottom",
            "calcs": [
              "mean",
              "max",
              "lastNotNull"
            ]
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_sensor_unit_particles_per_dl{entity=\"sensor.i_9psl_pm0_3\"}",
            "legendFormat": "PM0.3 particles/dL",
            "refId": "A",
            "format": "time_series"
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      },
      {
        "id": 15,
        "type": "state-timeline",
        "title": "Physical Switch Input",
        "description": "Hardware switch state on the extractor fan relay (Shelly input_0). Shows when the physical wall switch is toggled.",
        "gridPos": {
          "h": 5,
          "w": 8,
          "x": 16,
          "y": 34
        },
        "transparent": true,
        "fieldConfig": {
          "defaults": {
            "custom": {
              "fillOpacity": 80,
              "lineWidth": 0
            },
            "color": {
              "mode": "thresholds"
            },
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "#2C3235",
                  "value": null
                },
                {
                  "color": "#5794F2",
                  "value": 1
                }
              ]
            },
            "mappings": [
              {
                "type": "value",
                "options": {
                  "0": {
                    "text": "OFF",
                    "color": "#2C3235"
                  },
                  "1": {
                    "text": "ON",
                    "color": "#5794F2"
                  }
                }
              }
            ]
          },
          "overrides": []
        },
        "options": {
          "mergeValues": true,
          "showValue": "auto",
          "alignValue": "center",
          "rowHeight": 0.85,
          "legend": {
            "displayMode": "hidden",
            "placement": "bottom"
          },
          "tooltip": {
            "mode": "single",
            "sort": "none"
          }
        },
        "targets": [
          {
            "datasource": {
              "type": "prometheus",
              "uid": "ds_prometheus"
            },
            "expr": "hass_binary_sensor_state{entity=\"binary_sensor.extractor_bano_input_0\"}",
            "legendFormat": "Physical Switch",
            "refId": "A",
            "format": "time_series",
            "instant": false,
            "range": true,
            "intervalMs": 15000
          }
        ],
        "datasource": {
          "type": "prometheus",
          "uid": "ds_prometheus"
        }
      }
    ],
    "templating": {
      "list": []
    },
    "annotations": {
      "list": []
    },
    "links": []
  },
  "overwrite": true
}