2026-05-05 00:56:05 +03:30
from datetime import timedelta
import uuid
from django . db import transaction
from django . utils import timezone
from farm_hub . seeds import seed_admin_farm
2026-05-05 01:32:27 +03:30
from . models import DeviceCatalog , FarmDevice , SensorExternalRequestLog
2026-05-05 00:56:05 +03:30
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 ( ) :
2026-05-05 01:32:27 +03:30
sensor_catalog , created = DeviceCatalog . objects . update_or_create (
2026-05-05 00:56:05 +03:30
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. " ,
2026-05-05 01:32:27 +03:30
" device_communication_type " : " output_only " ,
2026-05-05 00:56:05 +03:30
" 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 ( )
2026-05-05 01:32:27 +03:30
sensor , sensor_created = FarmDevice . objects . update_or_create (
2026-05-05 00:56:05 +03:30
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 ) }