Skip to main content

Constants Reference

Static Values, Enumerations & Well-Known Keys

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";
}
KeyUsed ByPurpose
PostgreSqlEF Core, SourceValidatorPrimary connection string
MongoDbMongoDB driverTelemetry data store connection
RedisStackExchange.RedisCache and ML job tracking
MinIOMinIO SDKObject storage configuration section
MqttBrokerMQTT auth, connection stringsBroker configuration section
SendGridEmailServiceEmail delivery configuration
FrontendUrlCORS, email linksSPA origin URL
MlServiceUrlPredictionServicePython microservice base URL
InternalApiKeyMqttAuthControllerHeader-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

RoleCan Manage UsersCan Assign RolesSees All Data
OverseerYesAll rolesYes
AdminYesUser onlyOwn data only
UserNoNoOwn 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";
}
CollectionDocument TypeWriterReader
normalized_sun_source_dataNormalizedSunSourceDataMQTT Worker, Debug ProcessMetrics Service, Data Service, ML Trainer
predictionsPrediction resultsML PredictorPrediction Service
model_metadataTrained model infoML TrainerPrediction Service
weather_data8-day forecastsWeather ServiceWeather 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 PatternTTLPurpose
ampra:ml:job:{jobId}VariesTracks ML training/prediction job status
ampra:ml:active:{sourceId}:{type}VariesPrevents duplicate concurrent jobs per source
ampra:debug-process:{sourceId}VariesTracks 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";
}
HeaderUsed OnPurpose
X-Api-KeyWebhook endpointDevice webhook authentication
X-Internal-Api-KeyMQTT auth endpointInternal 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.