monitoring: force horizontal stat layout for power/climate panels

This commit is contained in:
Brad Stein 2026-04-12 19:04:35 -03:00
parent 75a992b829
commit 609cfcb696
5 changed files with 412 additions and 127 deletions

View File

@ -605,47 +605,43 @@ ANANKE_UPS_RUNTIME_BY_SOURCE = f"ananke_ups_runtime_seconds{{{ANANKE_SELECTOR}}}
ANANKE_UPS_LOAD_BY_SOURCE = f"ananke_ups_load_percent{{{ANANKE_SELECTOR}}}"
ANANKE_UPS_CHARGE_BY_SOURCE = f"ananke_ups_battery_charge_percent{{{ANANKE_SELECTOR}}}"
ANANKE_UPS_TRIGGER_BY_SOURCE = f"ananke_ups_trigger_active{{{ANANKE_SELECTOR}}}"
CLIMATE_SENSOR_COUNT = "count(atlas_climate_temperature_celsius) or on() vector(0)"
CLIMATE_TEMP_MAX = "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)"
CLIMATE_PRESSURE_CURRENT = "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)"
CLIMATE_HUMIDITY_MAX = "max(atlas_climate_humidity_percent) or on() vector(0)"
CLIMATE_TEMP_SERIES = "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)"
CLIMATE_PRESSURE_SERIES = "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)"
CLIMATE_SENSOR_COUNT = "count(typhon_temperature_celsius) or on() vector(0)"
CLIMATE_TEMP_MAX = "max(typhon_temperature_celsius) or on() vector(0)"
CLIMATE_PRESSURE_CURRENT = "max(typhon_vpd_kpa) or on() vector(0)"
CLIMATE_HUMIDITY_MAX = "max(typhon_relative_humidity_percent) or on() vector(0)"
CLIMATE_TEMP_SERIES = "typhon_temperature_celsius"
CLIMATE_PRESSURE_SERIES = "typhon_vpd_kpa"
CLIMATE_HUMIDITY_SERIES = "typhon_relative_humidity_percent"
CLIMATE_DEWPOINT_SERIES = (
"(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + "
"(17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / "
"(17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + "
"(17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))"
)
CLIMATE_DEWPOINT_CURRENT = f"max({CLIMATE_DEWPOINT_SERIES}) or on() vector(0)"
CLIMATE_FAN_OUTLET_CURRENT = (
'max(atlas_climate_fan_activity_level{fan_group="outlet"}) '
'or max(atlas_climate_fan_activity_level{position="outlet"}) '
"or on() vector(0)"
'max(typhon_fan_speed_level{fan_group="outlet"}) or on() vector(0)'
)
CLIMATE_FAN_INSIDE_INLET_CURRENT = (
'max(atlas_climate_fan_activity_level{fan_group="inside_inlet"}) '
'or max(atlas_climate_fan_activity_level{position="inside_inlet"}) '
"or on() vector(0)"
'max(typhon_fan_speed_level{fan_group="inside_inlet"}) or on() vector(0)'
)
CLIMATE_FAN_OUTSIDE_INLET_CURRENT = (
'max(atlas_climate_fan_activity_level{fan_group="outside_inlet"}) '
'or max(atlas_climate_fan_activity_level{position="outside_inlet"}) '
"or on() vector(0)"
'max(typhon_fan_speed_level{fan_group="outside_inlet"}) or on() vector(0)'
)
CLIMATE_FAN_INTERIOR_CURRENT = (
'max(atlas_climate_fan_activity_level{fan_group="interior"}) '
'or max(atlas_climate_fan_activity_level{position="interior"}) '
"or on() vector(0)"
'max(typhon_fan_speed_level{fan_group="interior"}) or on() vector(0)'
)
CLIMATE_FAN_OUTLET_SERIES = (
'(atlas_climate_fan_activity_level{fan_group="outlet"} '
'or atlas_climate_fan_activity_level{position="outlet"})'
'typhon_fan_speed_level{fan_group="outlet"}'
)
CLIMATE_FAN_INSIDE_INLET_SERIES = (
'(atlas_climate_fan_activity_level{fan_group="inside_inlet"} '
'or atlas_climate_fan_activity_level{position="inside_inlet"})'
'typhon_fan_speed_level{fan_group="inside_inlet"}'
)
CLIMATE_FAN_OUTSIDE_INLET_SERIES = (
'(atlas_climate_fan_activity_level{fan_group="outside_inlet"} '
'or atlas_climate_fan_activity_level{position="outside_inlet"})'
'typhon_fan_speed_level{fan_group="outside_inlet"}'
)
CLIMATE_FAN_INTERIOR_SERIES = (
'(atlas_climate_fan_activity_level{fan_group="interior"} '
'or atlas_climate_fan_activity_level{position="interior"})'
'typhon_fan_speed_level{fan_group="interior"}'
)
POSTGRES_CONN_USED = (
'label_replace(sum(pg_stat_activity_count), "conn", "used", "__name__", ".*") '
@ -1409,6 +1405,8 @@ def build_overview():
"properties": [{"id": "mappings", "value": status_mapping}, {"id": "description", "value": f"Attached node: {ANANKE_UPS_TETHYS_NODE}"}],
},
],
orientation="horizontal",
wide_layout=True,
links=link_to("atlas-power"),
description="Per-UPS live snapshot: current draw, discharge, and charging/discharging status.",
)
@ -1441,16 +1439,20 @@ def build_overview():
text_mode="value",
targets=[
{"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True},
{"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent Pressure (kPa)", "instant": True},
{"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent VPD (kPa)", "instant": True},
{"refId": "C", "expr": CLIMATE_HUMIDITY_MAX, "legendFormat": "Tent RH (%)", "instant": True},
{"refId": "D", "expr": CLIMATE_DEWPOINT_CURRENT, "legendFormat": "Dew Point (°C)", "instant": True},
],
field_overrides=[
{"matcher": {"id": "byName", "options": "Tent Temp (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]},
{"matcher": {"id": "byName", "options": "Tent Pressure (kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]},
{"matcher": {"id": "byName", "options": "Tent VPD (kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]},
{"matcher": {"id": "byName", "options": "Tent RH (%)"}, "properties": [{"id": "unit", "value": "percent"}]},
{"matcher": {"id": "byName", "options": "Dew Point (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]},
],
links=link_to("atlas-power"),
description="Current tent temperature and pressure.",
orientation="vertical",
wide_layout=False,
description="Current tent temperature, humidity, VPD, and dew point.",
orientation="horizontal",
wide_layout=True,
)
)
panels.append(
@ -1462,11 +1464,19 @@ def build_overview():
unit="celsius",
targets=[
{"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"},
{"refId": "B", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "Pressure (kPa)"},
{"refId": "B", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"},
{"refId": "C", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "VPD (kPa)"},
{"refId": "D", "expr": CLIMATE_DEWPOINT_SERIES, "legendFormat": "Dew Point (°C)"},
],
field_overrides=[
{
"matcher": {"id": "byName", "options": "Pressure (kPa)"},
"matcher": {"id": "byName", "options": "Humidity (%)"},
"properties": [
{"id": "unit", "value": "percent"},
],
},
{
"matcher": {"id": "byName", "options": "VPD (kPa)"},
"properties": [
{"id": "unit", "value": "none"},
{"id": "custom.axisPlacement", "value": "right"},
@ -1478,6 +1488,7 @@ def build_overview():
legend_display="list",
legend_placement="bottom",
links=link_to("atlas-power"),
description="Two-axis chart: tent temperature/humidity/dew point (left axis) and VPD in kPa (right axis).",
)
)
panels.append(
@ -1503,6 +1514,8 @@ def build_overview():
{"color": "red", "value": 9},
],
},
orientation="horizontal",
wide_layout=True,
links=link_to("atlas-power"),
)
)
@ -3189,6 +3202,8 @@ def build_power_dashboard():
"properties": [{"id": "mappings", "value": status_mapping}, {"id": "description", "value": f"Attached node: {ANANKE_UPS_TETHYS_NODE}"}],
},
],
orientation="horizontal",
wide_layout=True,
description=(
"Per-UPS live snapshot: current draw in watts, estimated battery runtime if discharge started now, and charging/discharging status."
),
@ -3222,13 +3237,19 @@ def build_power_dashboard():
text_mode="name_and_value",
targets=[
{"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True},
{"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent Pressure (kPa)", "instant": True},
{"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent VPD (kPa)", "instant": True},
{"refId": "C", "expr": CLIMATE_HUMIDITY_MAX, "legendFormat": "Tent RH (%)", "instant": True},
{"refId": "D", "expr": CLIMATE_DEWPOINT_CURRENT, "legendFormat": "Dew Point (°C)", "instant": True},
],
field_overrides=[
{"matcher": {"id": "byName", "options": "Tent Temp (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]},
{"matcher": {"id": "byName", "options": "Tent Pressure (kPa)"}, "properties": [{"id": "unit", "value": "none"}]},
{"matcher": {"id": "byName", "options": "Tent VPD (kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]},
{"matcher": {"id": "byName", "options": "Tent RH (%)"}, "properties": [{"id": "unit", "value": "percent"}]},
{"matcher": {"id": "byName", "options": "Dew Point (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]},
],
description="Current tent temperature and air pressure. These render once climate telemetry is online.",
orientation="horizontal",
wide_layout=True,
description="Current tent temperature, humidity, VPD, and dew point. These render once Typhon climate telemetry is online.",
)
)
panels.append(
@ -3240,11 +3261,19 @@ def build_power_dashboard():
unit="celsius",
targets=[
{"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"},
{"refId": "B", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "Pressure (kPa)"},
{"refId": "B", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"},
{"refId": "C", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "VPD (kPa)"},
{"refId": "D", "expr": CLIMATE_DEWPOINT_SERIES, "legendFormat": "Dew Point (°C)"},
],
field_overrides=[
{
"matcher": {"id": "byName", "options": "Pressure (kPa)"},
"matcher": {"id": "byName", "options": "Humidity (%)"},
"properties": [
{"id": "unit", "value": "percent"},
],
},
{
"matcher": {"id": "byName", "options": "VPD (kPa)"},
"properties": [
{"id": "unit", "value": "none"},
{"id": "custom.axisPlacement", "value": "right"},
@ -3255,7 +3284,7 @@ def build_power_dashboard():
],
legend_display="table",
legend_placement="right",
description="Two-axis chart: tent temperature (left axis) and tent pressure in kPa (right axis).",
description="Two-axis chart: tent temperature/humidity/dew point (left axis) and tent VPD in kPa (right axis).",
)
)
panels.append(
@ -3281,6 +3310,8 @@ def build_power_dashboard():
{"color": "red", "value": 9},
],
},
orientation="horizontal",
wide_layout=True,
description="Current fan activity levels (0-10): inside outlet, inside inlet, outside inlet, and interior fans.",
)
)

View File

@ -1281,7 +1281,9 @@
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1363,14 +1365,26 @@
"targets": [
{
"refId": "A",
"expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)",
"expr": "max(typhon_temperature_celsius) or on() vector(0)",
"legendFormat": "Tent Temp (\u00b0C)",
"instant": true
},
{
"refId": "B",
"expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)",
"legendFormat": "Tent Pressure (kPa)",
"expr": "max(typhon_vpd_kpa) or on() vector(0)",
"legendFormat": "Tent VPD (kPa)",
"instant": true
},
{
"refId": "C",
"expr": "max(typhon_relative_humidity_percent) or on() vector(0)",
"legendFormat": "Tent RH (%)",
"instant": true
},
{
"refId": "D",
"expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)",
"legendFormat": "Dew Point (\u00b0C)",
"instant": true
}
],
@ -1415,7 +1429,7 @@
{
"matcher": {
"id": "byName",
"options": "Tent Pressure (kPa)"
"options": "Tent VPD (kPa)"
},
"properties": [
{
@ -1423,6 +1437,30 @@
"value": "suffix:kPa"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Tent RH (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Dew Point (\u00b0C)"
},
"properties": [
{
"id": "unit",
"value": "celsius"
}
]
}
]
},
@ -1438,8 +1476,8 @@
"values": false
},
"textMode": "value",
"orientation": "vertical",
"wideLayout": false
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1448,7 +1486,7 @@
"targetBlank": true
}
],
"description": "Current tent temperature and pressure."
"description": "Current tent temperature, humidity, VPD, and dew point."
},
{
"id": 43,
@ -1467,13 +1505,23 @@
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)",
"expr": "typhon_temperature_celsius",
"legendFormat": "Temperature (\u00b0C)"
},
{
"refId": "B",
"expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)",
"legendFormat": "Pressure (kPa)"
"expr": "typhon_relative_humidity_percent",
"legendFormat": "Humidity (%)"
},
{
"refId": "C",
"expr": "typhon_vpd_kpa",
"legendFormat": "VPD (kPa)"
},
{
"refId": "D",
"expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))",
"legendFormat": "Dew Point (\u00b0C)"
}
],
"fieldConfig": {
@ -1484,7 +1532,19 @@
{
"matcher": {
"id": "byName",
"options": "Pressure (kPa)"
"options": "Humidity (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "VPD (kPa)"
},
"properties": [
{
@ -1522,7 +1582,8 @@
"url": "/d/atlas-power",
"targetBlank": true
}
]
],
"description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and VPD in kPa (right axis)."
},
{
"id": 140,
@ -1541,25 +1602,25 @@
"targets": [
{
"refId": "A",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))",
"legendFormat": "Inside Outlet",
"instant": true
},
{
"refId": "B",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))",
"legendFormat": "Inside Inlet",
"instant": true
},
{
"refId": "C",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))",
"legendFormat": "Outside Inlet",
"instant": true
},
{
"refId": "D",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))",
"legendFormat": "Interior Fans",
"instant": true
}
@ -1606,7 +1667,9 @@
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1633,22 +1696,22 @@
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outlet\"}",
"legendFormat": "Inside Outlet"
},
{
"refId": "B",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}",
"legendFormat": "Inside Inlet"
},
{
"refId": "C",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}",
"legendFormat": "Outside Inlet"
},
{
"refId": "D",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})",
"expr": "typhon_fan_speed_level{fan_group=\"interior\"}",
"legendFormat": "Interior Fans"
}
],

View File

@ -215,7 +215,9 @@
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Per-UPS live snapshot: current draw in watts, estimated battery runtime if discharge started now, and charging/discharging status."
},
@ -284,14 +286,26 @@
"targets": [
{
"refId": "A",
"expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)",
"expr": "max(typhon_temperature_celsius) or on() vector(0)",
"legendFormat": "Tent Temp (\u00b0C)",
"instant": true
},
{
"refId": "B",
"expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)",
"legendFormat": "Tent Pressure (kPa)",
"expr": "max(typhon_vpd_kpa) or on() vector(0)",
"legendFormat": "Tent VPD (kPa)",
"instant": true
},
{
"refId": "C",
"expr": "max(typhon_relative_humidity_percent) or on() vector(0)",
"legendFormat": "Tent RH (%)",
"instant": true
},
{
"refId": "D",
"expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)",
"legendFormat": "Dew Point (\u00b0C)",
"instant": true
}
],
@ -336,12 +350,36 @@
{
"matcher": {
"id": "byName",
"options": "Tent Pressure (kPa)"
"options": "Tent VPD (kPa)"
},
"properties": [
{
"id": "unit",
"value": "none"
"value": "suffix:kPa"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Tent RH (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Dew Point (\u00b0C)"
},
"properties": [
{
"id": "unit",
"value": "celsius"
}
]
}
@ -358,9 +396,11 @@
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Current tent temperature and air pressure. These render once climate telemetry is online."
"description": "Current tent temperature, humidity, VPD, and dew point. These render once Typhon climate telemetry is online."
},
{
"id": 4,
@ -379,13 +419,23 @@
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)",
"expr": "typhon_temperature_celsius",
"legendFormat": "Temperature (\u00b0C)"
},
{
"refId": "B",
"expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)",
"legendFormat": "Pressure (kPa)"
"expr": "typhon_relative_humidity_percent",
"legendFormat": "Humidity (%)"
},
{
"refId": "C",
"expr": "typhon_vpd_kpa",
"legendFormat": "VPD (kPa)"
},
{
"refId": "D",
"expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))",
"legendFormat": "Dew Point (\u00b0C)"
}
],
"fieldConfig": {
@ -396,7 +446,19 @@
{
"matcher": {
"id": "byName",
"options": "Pressure (kPa)"
"options": "Humidity (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "VPD (kPa)"
},
"properties": [
{
@ -428,7 +490,7 @@
"mode": "multi"
}
},
"description": "Two-axis chart: tent temperature (left axis) and tent pressure in kPa (right axis)."
"description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and tent VPD in kPa (right axis)."
},
{
"id": 5,
@ -447,25 +509,25 @@
"targets": [
{
"refId": "A",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))",
"legendFormat": "Inside Outlet",
"instant": true
},
{
"refId": "B",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))",
"legendFormat": "Inside Inlet",
"instant": true
},
{
"refId": "C",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))",
"legendFormat": "Outside Inlet",
"instant": true
},
{
"refId": "D",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))",
"legendFormat": "Interior Fans",
"instant": true
}
@ -512,7 +574,9 @@
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Current fan activity levels (0-10): inside outlet, inside inlet, outside inlet, and interior fans."
},
@ -533,22 +597,22 @@
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outlet\"}",
"legendFormat": "Inside Outlet"
},
{
"refId": "B",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}",
"legendFormat": "Inside Inlet"
},
{
"refId": "C",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}",
"legendFormat": "Outside Inlet"
},
{
"refId": "D",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})",
"expr": "typhon_fan_speed_level{fan_group=\"interior\"}",
"legendFormat": "Interior Fans"
}
],

View File

@ -1290,7 +1290,9 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1372,14 +1374,26 @@ data:
"targets": [
{
"refId": "A",
"expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)",
"expr": "max(typhon_temperature_celsius) or on() vector(0)",
"legendFormat": "Tent Temp (\u00b0C)",
"instant": true
},
{
"refId": "B",
"expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)",
"legendFormat": "Tent Pressure (kPa)",
"expr": "max(typhon_vpd_kpa) or on() vector(0)",
"legendFormat": "Tent VPD (kPa)",
"instant": true
},
{
"refId": "C",
"expr": "max(typhon_relative_humidity_percent) or on() vector(0)",
"legendFormat": "Tent RH (%)",
"instant": true
},
{
"refId": "D",
"expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)",
"legendFormat": "Dew Point (\u00b0C)",
"instant": true
}
],
@ -1424,7 +1438,7 @@ data:
{
"matcher": {
"id": "byName",
"options": "Tent Pressure (kPa)"
"options": "Tent VPD (kPa)"
},
"properties": [
{
@ -1432,6 +1446,30 @@ data:
"value": "suffix:kPa"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Tent RH (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Dew Point (\u00b0C)"
},
"properties": [
{
"id": "unit",
"value": "celsius"
}
]
}
]
},
@ -1447,8 +1485,8 @@ data:
"values": false
},
"textMode": "value",
"orientation": "vertical",
"wideLayout": false
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1457,7 +1495,7 @@ data:
"targetBlank": true
}
],
"description": "Current tent temperature and pressure."
"description": "Current tent temperature, humidity, VPD, and dew point."
},
{
"id": 43,
@ -1476,13 +1514,23 @@ data:
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)",
"expr": "typhon_temperature_celsius",
"legendFormat": "Temperature (\u00b0C)"
},
{
"refId": "B",
"expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)",
"legendFormat": "Pressure (kPa)"
"expr": "typhon_relative_humidity_percent",
"legendFormat": "Humidity (%)"
},
{
"refId": "C",
"expr": "typhon_vpd_kpa",
"legendFormat": "VPD (kPa)"
},
{
"refId": "D",
"expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))",
"legendFormat": "Dew Point (\u00b0C)"
}
],
"fieldConfig": {
@ -1493,7 +1541,19 @@ data:
{
"matcher": {
"id": "byName",
"options": "Pressure (kPa)"
"options": "Humidity (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "VPD (kPa)"
},
"properties": [
{
@ -1531,7 +1591,8 @@ data:
"url": "/d/atlas-power",
"targetBlank": true
}
]
],
"description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and VPD in kPa (right axis)."
},
{
"id": 140,
@ -1550,25 +1611,25 @@ data:
"targets": [
{
"refId": "A",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))",
"legendFormat": "Inside Outlet",
"instant": true
},
{
"refId": "B",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))",
"legendFormat": "Inside Inlet",
"instant": true
},
{
"refId": "C",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))",
"legendFormat": "Outside Inlet",
"instant": true
},
{
"refId": "D",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))",
"legendFormat": "Interior Fans",
"instant": true
}
@ -1615,7 +1676,9 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"links": [
{
@ -1642,22 +1705,22 @@ data:
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outlet\"}",
"legendFormat": "Inside Outlet"
},
{
"refId": "B",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}",
"legendFormat": "Inside Inlet"
},
{
"refId": "C",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}",
"legendFormat": "Outside Inlet"
},
{
"refId": "D",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})",
"expr": "typhon_fan_speed_level{fan_group=\"interior\"}",
"legendFormat": "Interior Fans"
}
],

View File

@ -224,7 +224,9 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Per-UPS live snapshot: current draw in watts, estimated battery runtime if discharge started now, and charging/discharging status."
},
@ -293,14 +295,26 @@ data:
"targets": [
{
"refId": "A",
"expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)",
"expr": "max(typhon_temperature_celsius) or on() vector(0)",
"legendFormat": "Tent Temp (\u00b0C)",
"instant": true
},
{
"refId": "B",
"expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)",
"legendFormat": "Tent Pressure (kPa)",
"expr": "max(typhon_vpd_kpa) or on() vector(0)",
"legendFormat": "Tent VPD (kPa)",
"instant": true
},
{
"refId": "C",
"expr": "max(typhon_relative_humidity_percent) or on() vector(0)",
"legendFormat": "Tent RH (%)",
"instant": true
},
{
"refId": "D",
"expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)",
"legendFormat": "Dew Point (\u00b0C)",
"instant": true
}
],
@ -345,12 +359,36 @@ data:
{
"matcher": {
"id": "byName",
"options": "Tent Pressure (kPa)"
"options": "Tent VPD (kPa)"
},
"properties": [
{
"id": "unit",
"value": "none"
"value": "suffix:kPa"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Tent RH (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Dew Point (\u00b0C)"
},
"properties": [
{
"id": "unit",
"value": "celsius"
}
]
}
@ -367,9 +405,11 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Current tent temperature and air pressure. These render once climate telemetry is online."
"description": "Current tent temperature, humidity, VPD, and dew point. These render once Typhon climate telemetry is online."
},
{
"id": 4,
@ -388,13 +428,23 @@ data:
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)",
"expr": "typhon_temperature_celsius",
"legendFormat": "Temperature (\u00b0C)"
},
{
"refId": "B",
"expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)",
"legendFormat": "Pressure (kPa)"
"expr": "typhon_relative_humidity_percent",
"legendFormat": "Humidity (%)"
},
{
"refId": "C",
"expr": "typhon_vpd_kpa",
"legendFormat": "VPD (kPa)"
},
{
"refId": "D",
"expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))",
"legendFormat": "Dew Point (\u00b0C)"
}
],
"fieldConfig": {
@ -405,7 +455,19 @@ data:
{
"matcher": {
"id": "byName",
"options": "Pressure (kPa)"
"options": "Humidity (%)"
},
"properties": [
{
"id": "unit",
"value": "percent"
}
]
},
{
"matcher": {
"id": "byName",
"options": "VPD (kPa)"
},
"properties": [
{
@ -437,7 +499,7 @@ data:
"mode": "multi"
}
},
"description": "Two-axis chart: tent temperature (left axis) and tent pressure in kPa (right axis)."
"description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and tent VPD in kPa (right axis)."
},
{
"id": 5,
@ -456,25 +518,25 @@ data:
"targets": [
{
"refId": "A",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))",
"legendFormat": "Inside Outlet",
"instant": true
},
{
"refId": "B",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))",
"legendFormat": "Inside Inlet",
"instant": true
},
{
"refId": "C",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))",
"legendFormat": "Outside Inlet",
"instant": true
},
{
"refId": "D",
"expr": "round(max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0))",
"expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))",
"legendFormat": "Interior Fans",
"instant": true
}
@ -521,7 +583,9 @@ data:
"fields": "",
"values": false
},
"textMode": "name_and_value"
"textMode": "name_and_value",
"orientation": "horizontal",
"wideLayout": true
},
"description": "Current fan activity levels (0-10): inside outlet, inside inlet, outside inlet, and interior fans."
},
@ -542,22 +606,22 @@ data:
"targets": [
{
"refId": "A",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outlet\"}",
"legendFormat": "Inside Outlet"
},
{
"refId": "B",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}",
"legendFormat": "Inside Inlet"
},
{
"refId": "C",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})",
"expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}",
"legendFormat": "Outside Inlet"
},
{
"refId": "D",
"expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})",
"expr": "typhon_fan_speed_level{fan_group=\"interior\"}",
"legendFormat": "Interior Fans"
}
],