fix: added energy-management
This commit is contained in:
37
energy-management/backend/src/env.ts
Normal file
37
energy-management/backend/src/env.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { config as loadDotenv } from "dotenv";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname, join } from "node:path";
|
||||
import { z } from "zod";
|
||||
|
||||
// In production (docker-compose) env vars are already injected via env_file;
|
||||
// this only fills gaps for local `npm run dev`, and is a no-op if the file is absent.
|
||||
loadDotenv({ path: join(dirname(fileURLToPath(import.meta.url)), "../../.env") });
|
||||
|
||||
const envSchema = z.object({
|
||||
PORT: z.coerce.number().default(3000),
|
||||
INFLUX_URL: z.string().url(),
|
||||
INFLUX_TOKEN: z.string().min(1),
|
||||
INFLUX_ORG: z.string().min(1),
|
||||
INFLUX_BUCKET: z.string().min(1),
|
||||
INFLUX_MEASUREMENT: z.string().default("power"),
|
||||
INFLUX_DOMAIN: z.string(),
|
||||
INFLUX_ENTITY_ID: z.string(),
|
||||
INFLUX_FIELD: z.string().default("value"),
|
||||
INFLUX_FIELD_UNIT: z.enum(["W", "kW"]).default("W"),
|
||||
HA_URL: z.string().url(),
|
||||
HA_TOKEN: z.string().min(1),
|
||||
TARGET_KW: z.coerce.number().positive(),
|
||||
DB_PATH: z.string().default("./data/energy.db"),
|
||||
CONTROL_LOOP_INTERVAL_MS: z.coerce.number().default(10_000),
|
||||
});
|
||||
|
||||
export type Env = z.infer<typeof envSchema>;
|
||||
|
||||
export function loadEnv(): Env {
|
||||
const parsed = envSchema.safeParse(process.env);
|
||||
if (!parsed.success) {
|
||||
console.error("Invalid environment configuration:", parsed.error.flatten().fieldErrors);
|
||||
process.exit(1);
|
||||
}
|
||||
return parsed.data;
|
||||
}
|
||||
Reference in New Issue
Block a user