35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from dashboard_data.card_utils import safe_number
|
|
|
|
|
|
def build_anomaly_detection_card(sensor_id: str, context: dict | None = None, ai_bundle: dict | None = None) -> dict:
|
|
sensor = (context or {}).get("sensor")
|
|
if sensor is None:
|
|
return {"anomalies": []}
|
|
|
|
anomalies = []
|
|
moisture = safe_number(sensor.soil_moisture, 0)
|
|
if moisture < 45:
|
|
anomalies.append(
|
|
{
|
|
"sensor": "رطوبت خاک",
|
|
"value": f"{round(moisture)}%",
|
|
"expected": "45-65%",
|
|
"deviation": f"{round(moisture - 55)}%",
|
|
"severity": "warning",
|
|
}
|
|
)
|
|
|
|
soil_ph = safe_number(sensor.soil_ph, 7)
|
|
if soil_ph < 6 or soil_ph > 7:
|
|
anomalies.append(
|
|
{
|
|
"sensor": "pH خاک",
|
|
"value": f"{soil_ph:.1f}",
|
|
"expected": "6.0-7.0",
|
|
"deviation": f"{round(soil_ph - 6.5, 1)}",
|
|
"severity": "error" if soil_ph < 5.5 or soil_ph > 7.5 else "warning",
|
|
}
|
|
)
|
|
|
|
return {"anomalies": anomalies}
|