33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
from dashboard_data.card_utils import safe_number
|
|
|
|
|
|
def build_soil_moisture_heatmap(sensor_id: str, context: dict | None = None, ai_bundle: dict | None = None) -> dict:
|
|
context = context or {}
|
|
sensor = context.get("sensor")
|
|
depths = context.get("depths", [])
|
|
if sensor is None:
|
|
return {"zones": [], "hours": [], "series": []}
|
|
|
|
hours = ["۶ ص", "۸ ص", "۱۰ ص", "۱۲ ظ", "۱۴ ع", "۱۶ ع", "۱۸ ع"]
|
|
base_moisture = safe_number(sensor.soil_moisture, 0)
|
|
series = []
|
|
zones = []
|
|
|
|
if not depths:
|
|
depths = [None, None]
|
|
|
|
for index, depth in enumerate(depths[:7], start=1):
|
|
zones.append(f"زون {index}")
|
|
depth_offset = 0 if depth is None else round(safe_number(getattr(depth, "wv0033", None), 0) / 10)
|
|
data = []
|
|
for hour_index, hour in enumerate(hours):
|
|
value = max(0, min(100, round(base_moisture + depth_offset - abs(3 - hour_index) * 2)))
|
|
data.append({"x": hour, "y": value})
|
|
series.append({"name": f"زون {index}", "data": data})
|
|
|
|
return {
|
|
"zones": zones,
|
|
"hours": hours,
|
|
"series": series,
|
|
}
|