This commit is contained in:
2026-04-06 23:50:24 +03:30
parent a67236d45c
commit ff464cb4a5
140 changed files with 2061 additions and 2702 deletions
+6 -12
View File
@@ -3,7 +3,7 @@ from __future__ import annotations
from math import sqrt
from typing import Any
from sensor_data.models import SensorData, SensorDataHistory
from farm_data.models import SensorData
QUALITY_REAL = "REAL"
@@ -61,9 +61,9 @@ def _latest_sensor_measurement(sensor: Any, histories: list[Any]) -> dict[str, A
series = _sensor_time_series(sensor, histories)
latest = series[-1] if series else {"timestamp": None, "value": None, "quality_flag": QUALITY_MISSING}
return {
"sensor_id": str(sensor.uuid_sensor),
"latitude": float(sensor.location.latitude),
"longitude": float(sensor.location.longitude),
"sensor_id": str(sensor.farm_uuid),
"latitude": float(sensor.center_location.latitude),
"longitude": float(sensor.center_location.longitude),
"depth": None,
"timestamp": latest["timestamp"],
"soil_moisture_value": latest["value"],
@@ -99,7 +99,7 @@ def _grid_axis(min_value: float, max_value: float) -> list[float]:
def _load_sensor_network(current_sensor: Any) -> list[Any]:
plant_ids = list(current_sensor.plants.values_list("id", flat=True))
queryset = SensorData.objects.select_related("location").prefetch_related("plants")
queryset = SensorData.objects.select_related("center_location").prefetch_related("plants")
if plant_ids:
queryset = queryset.filter(plants__id__in=plant_ids).distinct()
return list(queryset)
@@ -118,14 +118,8 @@ def build_soil_moisture_heatmap(sensor_id: str, context: dict | None = None, ai_
}
sensors = _load_sensor_network(current_sensor)
sensor_ids = [sensor.uuid_sensor for sensor in sensors]
history_rows = SensorDataHistory.objects.filter(uuid_sensor__in=sensor_ids).order_by("-recorded_at")[:200]
history_map: dict[Any, list[Any]] = {}
for row in history_rows:
history_map.setdefault(row.uuid_sensor, []).append(row)
sensor_points = [
_latest_sensor_measurement(sensor, history_map.get(sensor.uuid_sensor, []))
_latest_sensor_measurement(sensor, [])
for sensor in sensors
]
valid_sensor_points = [point for point in sensor_points if point["soil_moisture_value"] is not None]