UPDATE
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
from datetime import timedelta
|
||||
import uuid
|
||||
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
|
||||
from farm_hub.models import FarmSensor
|
||||
from farm_hub.seeds import seed_admin_farm
|
||||
from sensor_catalog.models import SensorCatalog
|
||||
from sensor_external_api.models import 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),
|
||||
}
|
||||
Reference in New Issue
Block a user