60 lines
3.8 KiB
Python
60 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 FarmSensor, SensorCatalog, 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 = SensorCatalog.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.",
|
|
"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 = FarmSensor.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)}
|