From a3d2ee8ad4d6c568f5f04ddd764f5ea2c5af78b9 Mon Sep 17 00:00:00 2001 From: Myx Date: Sun, 20 Jul 2025 17:46:17 +0200 Subject: [PATCH] More info --- .../ESPSCREEN/ESPSCREEN.ino | 0 .../INFOSCREEN_WITH_INTERVAL.ino | 0 HomeApi.sln | 7 ++ HomeApi/HomeApi.csproj | 1 + README.md | 103 ++++++++++++++++++ compose.yaml | 20 ++-- 6 files changed, 122 insertions(+), 9 deletions(-) rename {ClientMachineCode => Esp32_Code}/ESPSCREEN/ESPSCREEN.ino (100%) rename {ClientMachineCode => Esp32_Code}/INFOSCREEN_WITH_INTERVAL/INFOSCREEN_WITH_INTERVAL.ino (100%) diff --git a/ClientMachineCode/ESPSCREEN/ESPSCREEN.ino b/Esp32_Code/ESPSCREEN/ESPSCREEN.ino similarity index 100% rename from ClientMachineCode/ESPSCREEN/ESPSCREEN.ino rename to Esp32_Code/ESPSCREEN/ESPSCREEN.ino diff --git a/ClientMachineCode/INFOSCREEN_WITH_INTERVAL/INFOSCREEN_WITH_INTERVAL.ino b/Esp32_Code/INFOSCREEN_WITH_INTERVAL/INFOSCREEN_WITH_INTERVAL.ino similarity index 100% rename from ClientMachineCode/INFOSCREEN_WITH_INTERVAL/INFOSCREEN_WITH_INTERVAL.ino rename to Esp32_Code/INFOSCREEN_WITH_INTERVAL/INFOSCREEN_WITH_INTERVAL.ino diff --git a/HomeApi.sln b/HomeApi.sln index 50d3401..e74e669 100644 --- a/HomeApi.sln +++ b/HomeApi.sln @@ -7,6 +7,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HomeApi", "HomeApi\HomeApi.csproj", "{0F340BDE-7B8E-4ACD-8A24-5B5BFFB424F4}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ESP32_CODE", "ESP32_CODE", "{B3BCE85B-5021-4D4D-8758-CA7AAFF86C2D}" + ProjectSection(SolutionItems) = preProject + Esp32_Code\ESPSCREEN\ESPSCREEN.ino = Esp32_Code\ESPSCREEN\ESPSCREEN.ino + Esp32_Code\INFOSCREEN_WITH_INTERVAL\INFOSCREEN_WITH_INTERVAL.ino = Esp32_Code\INFOSCREEN_WITH_INTERVAL\INFOSCREEN_WITH_INTERVAL.ino + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -20,5 +26,6 @@ Global EndGlobalSection GlobalSection(NestedProjects) = preSolution {0F340BDE-7B8E-4ACD-8A24-5B5BFFB424F4} = {FF03E920-D5E9-4BE0-AA6F-DB2E9287D3E4} + {B3BCE85B-5021-4D4D-8758-CA7AAFF86C2D} = {FF03E920-D5E9-4BE0-AA6F-DB2E9287D3E4} EndGlobalSection EndGlobal diff --git a/HomeApi/HomeApi.csproj b/HomeApi/HomeApi.csproj index 0d348c1..23610eb 100644 --- a/HomeApi/HomeApi.csproj +++ b/HomeApi/HomeApi.csproj @@ -20,6 +20,7 @@ + .dockerignore diff --git a/README.md b/README.md index 12bc26a..13de115 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,106 @@ Core api and Esp32 code for displaying weather data and public transport information on a e-ink display. image + +## Features +- Display current weather data +- Display public transport information +- Display time and date + +## Requirements +- ESP32 board +- E-ink display (e.g. Waveshare 7.5 inch) + +# Installation + +This section provides instructions for setting up and running the HomeApi project. + +## Prerequisites + +- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0) or later +- Docker (optional, for containerized deployment) +- Git (to clone the repository) + +## Option 1: Local Development Setup + +1. Clone the repository: + ```bash + git clone https://github.com/Myxelium/HomeScreen.git + cd HomeApi + ``` + +2. Restore dependencies: + ```bash + dotnet restore + ``` + +3. Build the project: + ```bash + dotnet build + ``` + +4. Run the application: + ```bash + dotnet run + ``` + +The API will be available at `http://localhost:5000`. + +## Option 2: Docker Deployment + +1. Build the Docker image: + ```bash + docker build -t homeapi . + ``` + +2. Run the container: + ```bash + docker run -d -p 5000 --name homeapi homeapi + ``` + +The API will be accessible at `http://localhost:5000`. + +## Configuration + +The application uses the standard .NET configuration system. You can modify settings in: + +- `appsettings.json` - Default configuration +- `appsettings.Development.json` - Development environment configuration + +API endpoints: +- Weather data: GET `/home` +- Generated image: GET `/home/default.jpg` +- Configuration data: GET `/home/configuration` +- Departure board: GET `/home/departure-board` + +## API Documentation + +When running, API documentation is available through Scalar at `/scalar`. + +flowchart TD +subgraph ESP32 Device +ESP[ESP32 E-Ink Display] +ESP -->|HTTP GET /home/configuration| API +ESP -->|HTTP GET /home/default.jpg| API +end + + subgraph HomeApi + API[HomeController (API)] + API -->|MediatR| Handlers + Handlers -->|Service Calls| Services + Services -->|Refit Clients| Clients + Clients -->|External APIs| ExtAPIs + API -->|Returns JSON/JPEG| ESP + end + + subgraph ExternalAPIs + WeatherAPI[Weather API] + AuroraAPI[Aurora API] + NominatimAPI[Nominatim API] + ResRobotAPI[ResRobot API] + end + + ExtAPIs -.-> WeatherAPI + ExtAPIs -.-> AuroraAPI + ExtAPIs -.-> NominatimAPI + ExtAPIs -.-> ResRobotAPI \ No newline at end of file diff --git a/compose.yaml b/compose.yaml index 3467ea6..b70462d 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,13 +1,15 @@ -services: - homeapi: - image: homeapi - build: - context: . - dockerfile: Dockerfile +version: '3.8' - homeapi-1: - image: homeapi-1 +services: + homeapi: build: context: . dockerfile: HomeApi/Dockerfile - + image: homeapi:latest + ports: + - "5000:5000" + environment: + - ASPNETCORE_ENVIRONMENT=Development + volumes: + - ./HomeApi/appsettings.Development.json:/app/appsettings.Development.json:ro + restart: unless-stopped \ No newline at end of file