Files
2026-05-11 03:27:21 +03:30

61 lines
3.8 KiB
Python

from datetime import timedelta
import uuid
from django.db import transaction
from django.utils import timezone
from farm_hub.seeds import seed_admin_farm
from .models import DeviceCatalog, FarmDevice, SensorExternalRequestLog
SENSOR_7_IN_1_CATALOG_CODE = "sensor-7-in-1"
SENSOR_7_IN_1_DEVICE_UUID = uuid.UUID("77777777-7777-7777-7777-777777777777")
SENSOR_7_IN_1_LOG_SERIES = [
{"days_ago": 6, "payload": {"soil_moisture": 44.0, "soil_temperature": 20.6, "soil_ph": 6.3, "electrical_conductivity": 1.0, "nitrogen": 25.0, "phosphorus": 13.0, "potassium": 21.0}},
{"days_ago": 5, "payload": {"soil_moisture": 45.5, "soil_temperature": 21.1, "soil_ph": 6.4, "electrical_conductivity": 1.1, "nitrogen": 26.0, "phosphorus": 13.8, "potassium": 21.8}},
{"days_ago": 4, "payload": {"soil_moisture": 46.8, "soil_temperature": 21.7, "soil_ph": 6.5, "electrical_conductivity": 1.1, "nitrogen": 27.4, "phosphorus": 14.2, "potassium": 22.5}},
{"days_ago": 3, "payload": {"soil_moisture": 48.2, "soil_temperature": 22.0, "soil_ph": 6.6, "electrical_conductivity": 1.2, "nitrogen": 28.9, "phosphorus": 15.1, "potassium": 23.3}},
{"days_ago": 2, "payload": {"soil_moisture": 49.6, "soil_temperature": 22.4, "soil_ph": 6.6, "electrical_conductivity": 1.2, "nitrogen": 29.7, "phosphorus": 15.7, "potassium": 24.1}},
{"days_ago": 1, "payload": {"soil_moisture": 50.9, "soil_temperature": 22.8, "soil_ph": 6.7, "electrical_conductivity": 1.3, "nitrogen": 30.8, "phosphorus": 16.2, "potassium": 24.8}},
{"days_ago": 0, "payload": {"soil_moisture": 52.4, "soil_temperature": 23.1, "soil_ph": 6.8, "electrical_conductivity": 1.3, "nitrogen": 32.0, "phosphorus": 16.8, "potassium": 25.6}},
]
def seed_sensor_7_in_1_catalog():
sensor_catalog, created = DeviceCatalog.objects.update_or_create(
code=SENSOR_7_IN_1_CATALOG_CODE,
defaults={
"name": "Sensor 7 in 1 Soil Sensor",
"description": "Demo 7 in 1 soil sensor for dashboard summary and chart endpoints.",
"device_communication_type": "output_only",
"customizable_fields": [],
"supported_power_sources": ["solar", "battery", "direct_power"],
"returned_data_fields": ["soil_moisture", "soil_temperature", "soil_ph", "electrical_conductivity", "nitrogen", "phosphorus", "potassium"],
"sample_payload": SENSOR_7_IN_1_LOG_SERIES[-1]["payload"],
"is_active": True,
},
)
return sensor_catalog, created
@transaction.atomic
def seed_sensor_7_in_1_demo_data():
farm, _ = seed_admin_farm()
sensor_catalog, catalog_created = seed_sensor_7_in_1_catalog()
sensor, sensor_created = FarmDevice.objects.update_or_create(
farm=farm,
physical_device_uuid=SENSOR_7_IN_1_DEVICE_UUID,
defaults={"sensor_catalog": sensor_catalog, "name": "Sensor 7 in 1 Demo", "sensor_type": "soil_7_in_1", "is_active": True, "specifications": {"capabilities": sensor_catalog.returned_data_fields, "demo_seed": True}, "power_source": {"type": "solar"}},
)
SensorExternalRequestLog.objects.filter(farm_uuid=farm.farm_uuid, physical_device_uuid=sensor.physical_device_uuid).delete()
base_time = timezone.now().replace(hour=12, minute=0, second=0, microsecond=0)
created_logs = []
for item in SENSOR_7_IN_1_LOG_SERIES:
log = SensorExternalRequestLog.objects.create(farm_uuid=farm.farm_uuid, sensor_catalog_uuid=sensor_catalog.uuid, physical_device_uuid=sensor.physical_device_uuid, payload=item["payload"])
created_at = base_time - timedelta(days=item["days_ago"])
SensorExternalRequestLog.objects.filter(id=log.id).update(created_at=created_at)
log.created_at = created_at
created_logs.append(log)
return {"farm": farm, "sensor_catalog": sensor_catalog, "sensor": sensor, "catalog_created": catalog_created, "sensor_created": sensor_created, "log_count": len(created_logs)}