better env vars

This commit is contained in:
Shautvast 2025-10-08 13:56:13 +02:00
parent 8316bc297a
commit 8aff75e26b

View file

@ -1,4 +1,7 @@
use std::sync::{Arc, RwLock}; use std::{
env,
sync::{Arc, LazyLock, RwLock},
};
use axum::{ use axum::{
Json, Router, Json, Router,
@ -11,7 +14,15 @@ use dotenv::dotenv;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tower::ServiceBuilder; use tower::ServiceBuilder;
use tower_http::services::ServeDir; use tower_http::services::ServeDir;
// use tower_livereload::LiveReloadLayer;
pub const PUSHOVER_USER_ID: LazyLock<String> =
LazyLock::new(|| env::var("PUSHOVER_USER_ID").unwrap());
pub const PUSHOVER_API_KEY: LazyLock<String> =
LazyLock::new(|| env::var("PUSHOVER_API_KEY").unwrap());
pub const SOLAREDGE_SITE_ID: LazyLock<String> =
LazyLock::new(|| env::var("SOLAREDGE_SITE_ID").unwrap());
pub const SOLAREDGE_API_KEY: LazyLock<String> =
LazyLock::new(|| env::var("SOLAREDGE_API_KEY").unwrap());
type CachedAppState = Arc<RwLock<AppState>>; type CachedAppState = Arc<RwLock<AppState>>;
@ -25,6 +36,8 @@ struct AppState {
#[tokio::main] #[tokio::main]
async fn main() -> anyhow::Result<()> { async fn main() -> anyhow::Result<()> {
dotenv().ok(); dotenv().ok();
let bind_addr = env::var("BIND_ADDR").expect("BIND_ADDR");
let app_state: CachedAppState = Arc::new(RwLock::new(AppState { let app_state: CachedAppState = Arc::new(RwLock::new(AppState {
values: EnergyResponse { values: EnergyResponse {
energy: Energy { energy: Energy {
@ -47,7 +60,7 @@ async fn main() -> anyhow::Result<()> {
); );
// .layer(LiveReloadLayer::new()); // .layer(LiveReloadLayer::new());
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); let listener = tokio::net::TcpListener::bind(bind_addr).await.unwrap();
println!("server on {}", listener.local_addr().unwrap()); println!("server on {}", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap(); axum::serve(listener, app).await.unwrap();
Ok(()) Ok(())
@ -105,13 +118,10 @@ async fn check_energy(
Ok(()) Ok(())
} }
async fn report() -> axum::response::Result<(), ErrorResponse> { async fn report() -> axum::response::Result<(), ErrorResponse> {
let user_id = std::env::var("PUSHOVER_USER_ID").unwrap();
let api_key = std::env::var("PUSHOVER_API_KEY").unwrap();
let url = "https://api.pushover.net/1/messages.json"; let url = "https://api.pushover.net/1/messages.json";
let form = reqwest::multipart::Form::new() let form = reqwest::multipart::Form::new()
.text("token", api_key) .text("token", PUSHOVER_API_KEY.to_string())
.text("user", user_id) .text("user", PUSHOVER_USER_ID.to_string())
.text("message", "No energy measured on the solar panels"); .text("message", "No energy measured on the solar panels");
let client = reqwest::Client::new(); let client = reqwest::Client::new();
@ -129,15 +139,13 @@ async fn fetch_energy_response(state: CachedAppState) -> axum::response::Result<
let now = Utc::now(); let now = Utc::now();
if now.signed_duration_since(reset_ts).as_seconds_f32() > 300.0 { if now.signed_duration_since(reset_ts).as_seconds_f32() > 300.0 {
state.write().unwrap().cache_reset = now; state.write().unwrap().cache_reset = now;
let site_id = std::env::var("SOLAREDGE_SITE_ID").unwrap();
let api_key = std::env::var("SOLAREDGE_API_KEY").unwrap();
let url = format!( let url = format!(
"https://monitoringapi.solaredge.com/site/{}/energy?timeUnit=QUARTER_OF_AN_HOUR&endDate={}&startDate={}&api_key={}", "https://monitoringapi.solaredge.com/site/{}/energy?timeUnit=QUARTER_OF_AN_HOUR&endDate={}&startDate={}&api_key={}",
site_id, SOLAREDGE_SITE_ID.as_str(),
now.date_naive(), now.date_naive(),
now.date_naive(), now.date_naive(),
api_key, SOLAREDGE_API_KEY.as_str(),
); );
let mut energy_response = reqwest::get(url) let mut energy_response = reqwest::get(url)