Constants Reference
Overview
All constants reside in Ampra.Core/Constants/ and are referenced by every .NET module. This page provides a complete inventory of every value.
ConfigKeys
Configuration section and connection-string keys used throughout Startup.cs and service registrations.
public static class ConfigKeys
{
public const string PostgreSql = "PostgreSql";
public const string MongoDb = "MongoDb";
public const string Redis = "Redis";
public const string MinIO = "MinIO";
public const string MqttBroker = "MqttBroker";
public const string SendGrid = "SendGrid";
public const string SendGridApiKey = "SendGrid:ApiKey";
public const string SendGridFrom = "SendGrid:FromEmail";
public const string SendGridFromName = "SendGrid:FromName";
public const string FrontendUrl = "FrontendUrl";
public const string MlServiceUrl = "MlServiceUrl";
public const string InternalApiKey = "InternalApiKey";
}
| Key | Used By | Purpose |
|---|---|---|
PostgreSql | EF Core, SourceValidator | Primary connection string |
MongoDb | MongoDB driver | Telemetry data store connection |
Redis | StackExchange.Redis | Cache and ML job tracking |
MinIO | MinIO SDK | Object storage configuration section |
MqttBroker | MQTT auth, connection strings | Broker configuration section |
SendGrid | EmailService | Email delivery configuration |
FrontendUrl | CORS, email links | SPA origin URL |
MlServiceUrl | PredictionService | Python microservice base URL |
InternalApiKey | MqttAuthController | Header-based internal API security |
Defaults
Fallback values when no explicit configuration is provided.
public static class Defaults
{
public const string Currency = "EUR";
public const string DatabaseName = "ampradb";
}
Roles
The three identity roles in the platform, registered during application startup.
public static class Roles
{
public const string Overseer = "Overseer"; // Platform super-administrator
public const string Admin = "Admin"; // Tenant administrator
public const string User = "User"; // Standard user
}
Role hierarchy: Overseer > Admin > User
| Role | Can Manage Users | Can Assign Roles | Sees All Data |
|---|---|---|---|
| Overseer | Yes | All roles | Yes |
| Admin | Yes | User only | Own data only |
| User | No | No | Own data only |
Policies
Authorization policies registered in the ASP.NET Core pipeline.
public static class Policies
{
public const string Omni = "Omni";
}
The Omni policy requires either the Admin or Overseer role. Applied to all administrative endpoints via [Authorize(Policy = Policies.Omni)].
PolicyNames
Named CORS and middleware policies.
public static class PolicyNames
{
public const string CorsPolicy = "AllowFrontend";
}
The AllowFrontend CORS policy permits requests from the configured FrontendUrl with credentials, all headers, and all standard HTTP methods.
DeviceStatuses
Well-known device status strings returned in telemetry data.
public static class DeviceStatuses
{
public const string Normal = "Normal";
public const string LowBattery = "Low Battery";
public const string HighTempWarning = "High Temp Warning";
public const string HighLoad = "High Load";
}
OperatingModes
Predefined inverter operating modes used for classification and display.
public static class OperatingModes
{
public const string Solar = "Solar";
public const string SolarOffGrid = "Solar Off-Grid";
public const string Hybrid = "Hybrid";
public const string Battery = "Battery";
public const string BatteryOffGrid = "Battery Off-Grid";
public const string Grid = "Grid";
}
MongoCollections
MongoDB collection name constants ensuring consistency across all data access points.
public static class MongoCollections
{
public const string NormalizedSunSourceData = "normalized_sun_source_data";
public const string Predictions = "predictions";
public const string ModelMetadata = "model_metadata";
public const string WeatherData = "weather_data";
}
| Collection | Document Type | Writer | Reader |
|---|---|---|---|
normalized_sun_source_data | NormalizedSunSourceData | MQTT Worker, Debug Process | Metrics Service, Data Service, ML Trainer |
predictions | Prediction results | ML Predictor | Prediction Service |
model_metadata | Trained model info | ML Trainer | Prediction Service |
weather_data | 8-day forecasts | Weather Service | Weather Service, ML Predictor |
MqttTopics
Topic patterns for the MQTT telemetry protocol.
public static class MqttTopics
{
public const string SourceDataPrefix = "ampra/sources/";
public const string SourceDataSuffix = "/data";
public const string ClientIdPrefix = "ampra-device-";
public static string ForSource(Guid sourceId)
=> $"{SourceDataPrefix}{sourceId}{SourceDataSuffix}";
}
Topic format: ampra/sources/{sunSourceId}/data
Each device publishes to its unique topic. The MQTT Worker subscribes to the wildcard ampra/sources/+/data and extracts the source ID segment for validation.
MlEndpoints
HTTP endpoints exposed by the Python ML microservice.
public static class MlEndpoints
{
public const string Train = "/train";
public const string Predict = "/predict";
}
RedisKeys
Redis key patterns for ML job tracking and debug process state.
public static class RedisKeys
{
public const string MlJobPrefix = "ampra:ml:job:";
public const string MlActivePrefix = "ampra:ml:active:";
public const string DebugProcessPrefix = "ampra:debug-process:";
public static string MlJob(string jobId)
=> $"{MlJobPrefix}{jobId}";
public static string MlActive(Guid sunSourceId, string type)
=> $"{MlActivePrefix}{sunSourceId}:{type}";
public static string DebugProcess(Guid sunSourceId)
=> $"{DebugProcessPrefix}{sunSourceId}";
}
| Key Pattern | TTL | Purpose |
|---|---|---|
ampra:ml:job:{jobId} | Varies | Tracks ML training/prediction job status |
ampra:ml:active:{sourceId}:{type} | Varies | Prevents duplicate concurrent jobs per source |
ampra:debug-process:{sourceId} | Varies | Tracks simulated MQTT data generation |
HttpContentTypes
MIME type constants for API responses.
public static class HttpContentTypes
{
public const string Json = "application/json";
public const string Csv = "text/csv";
public const string Excel = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
}
HttpHeaderNames
Custom HTTP header names.
public static class HttpHeaderNames
{
public const string ApiKey = "X-Api-Key";
public const string InternalApiKey = "X-Internal-Api-Key";
}
| Header | Used On | Purpose |
|---|---|---|
X-Api-Key | Webhook endpoint | Device webhook authentication |
X-Internal-Api-Key | MQTT auth endpoint | Internal service-to-service security |
Enumerations
SettingType
public enum SettingType
{
TemperatureUnit = 1,
AutoUpdateWeatherData = 2,
AutoRunPredictions = 3
}
Stored as an integer in the UserSetting table. Each user has at most one row per setting type.
TemperatureUnit
public enum TemperatureUnit
{
Metric = 0, // Celsius
Imperial = 1 // Fahrenheit
}
Controls temperature display in the UI and the unit parameter sent to the Open-Meteo API.