demeter
Autonomous Hydroponic Intelligencegit clone https://github.com/maydayv7/demeter
backend/node_server/schema/cropSchema.js (1449B)
1const mongoose = require("mongoose");
2
3const sensorSchema = new mongoose.Schema(
4 {
5 pH: [Number],
6 EC: [Number],
7 temp: [Number],
8 humidity: [Number],
9 },
10 { _id: false },
11);
12
13const sensorIdsSchema = new mongoose.Schema(
14 {
15 ph_sensor: { type: String, default: "" },
16 ec_sensor: { type: String, default: "" },
17 temp_sensor: { type: String, default: "" },
18 humidity_sensor: { type: String, default: "" },
19 },
20 { _id: false },
21);
22
23const cropStateSchema = new mongoose.Schema({
24 crop_id: { type: String, required: true, unique: true },
25 crop: String,
26 stage: String,
27 sequence_number: { type: Number, default: 0 },
28 cycle_duration_hours: { type: Number, default: 1 },
29 total_crop_lifetime_days: { type: Number, default: 0 },
30 simulated_age_hours: { type: Number, default: 0 },
31 planted_at: { type: Date, default: Date.now },
32 last_updated: { type: Date, default: Date.now },
33
34 sensors: sensorSchema,
35
36 sensor_ids: { type: sensorIdsSchema, default: () => ({}) },
37 location: { type: String, default: "" },
38 notes: { type: String, default: "" },
39 image_url: { type: String, default: "" },
40
41 action_taken: mongoose.Schema.Types.Mixed,
42 outcome: String,
43 explanation_log: String,
44 bandit_action_id: Number,
45 strategic_intent: String,
46 reward_score: Number,
47 visual_diagnosis: String,
48
49 schema_version: { type: String, default: "1.2" },
50});
51
52module.exports = mongoose.model("CropState", cropStateSchema);