Implements detailed tracking of soil composition, nutrients, climate, lighting, and surrounding environment to help understand plant success and optimize growing conditions. Environmental Data Types (lib/environment/types.ts): - Soil composition (type, pH, texture, drainage, organic matter) - Soil amendments (compost, perlite, amendments tracking) - Nutrient profiles (NPK, secondary nutrients, micronutrients, EC, TDS) - Fertilizer applications (type, schedule, NPK values) - Lighting conditions (natural/artificial, hours, spectrum, PPFD/DLI) - Climate tracking (temperature, humidity, airflow, CO2, USDA zones) - Growing location (indoor/outdoor/greenhouse with details) - Container information (type, material, size, drainage) - Watering schedule (method, frequency, water quality/pH) - Surrounding environment (companion plants, pests, diseases, ecosystem) - Growth metrics (measurements, health scores, vigor tracking) Environmental Analysis (lib/environment/analysis.ts): - Compare environments with similarity scoring (0-100) - Generate personalized growing recommendations - Calculate environmental health scores - Find plants with similar conditions - Analyze growth correlations across network - Identify optimal growing conditions API Endpoints: - /api/environment/recommendations - Get plant-specific advice - /api/environment/similar - Find plants with similar conditions - /api/environment/compare - Compare two plants environments - /api/environment/analysis - Network-wide growth correlation Features: - Comprehensive soil tracking (pH, texture, drainage, amendments) - Full NPK and micronutrient monitoring - Sunlight exposure and artificial light tracking - Temperature and humidity ranges - Water quality monitoring (pH, TDS, chlorine) - Pest and disease tracking - Companion planting recommendations - Environmental health scoring with priority-based recommendations - Growth success analysis across similar environments Integration: - Updated PlantData type to include environment and growthMetrics - Compatible with existing blockchain structure - Optional environmental data (backward compatible) Use Cases: - Track what works for your plants - Learn from successful growers with similar conditions - Get personalized recommendations based on your setup - Compare your environment with thriving plants - Optimize conditions for better yield/health - Share growing knowledge with the community - Research optimal conditions by species This enables growers to: - Understand why plants thrive or struggle - Replicate successful growing conditions - Make data-driven decisions - Learn from the collective experience - Improve propagation success rates
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
/**
|
|
* API Route: Get environmental recommendations for a plant
|
|
* GET /api/environment/recommendations?plantId=xyz
|
|
*/
|
|
|
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
|
import { getBlockchain } from '../../../lib/blockchain/manager';
|
|
import {
|
|
generateRecommendations,
|
|
calculateEnvironmentalHealth,
|
|
} from '../../../lib/environment/analysis';
|
|
|
|
export default async function handler(
|
|
req: NextApiRequest,
|
|
res: NextApiResponse
|
|
) {
|
|
if (req.method !== 'GET') {
|
|
return res.status(405).json({ error: 'Method not allowed' });
|
|
}
|
|
|
|
try {
|
|
const { plantId } = req.query;
|
|
|
|
if (!plantId || typeof plantId !== 'string') {
|
|
return res.status(400).json({ error: 'Missing plantId parameter' });
|
|
}
|
|
|
|
const blockchain = getBlockchain();
|
|
const plant = blockchain.getPlant(plantId);
|
|
|
|
if (!plant) {
|
|
return res.status(404).json({ error: 'Plant not found' });
|
|
}
|
|
|
|
const recommendations = generateRecommendations(plant);
|
|
|
|
const healthScore = plant.environment
|
|
? calculateEnvironmentalHealth(plant.environment)
|
|
: null;
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
plant: {
|
|
id: plant.id,
|
|
commonName: plant.commonName,
|
|
scientificName: plant.scientificName,
|
|
},
|
|
environmentalHealth: healthScore,
|
|
recommendations,
|
|
summary: {
|
|
criticalIssues: recommendations.filter(r => r.priority === 'critical').length,
|
|
highPriority: recommendations.filter(r => r.priority === 'high').length,
|
|
mediumPriority: recommendations.filter(r => r.priority === 'medium').length,
|
|
lowPriority: recommendations.filter(r => r.priority === 'low').length,
|
|
},
|
|
});
|
|
} catch (error: any) {
|
|
console.error('Error generating recommendations:', error);
|
|
res.status(500).json({ error: error.message || 'Internal server error' });
|
|
}
|
|
}
|