Add Go server with POST LDR to Sqlite3 and GET graphs of historic data
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Chicken Coop LDR Monitor Server
|
||||
|
||||
This is a Go server that receives and stores LDR (Light Dependent Resistor) readings from the ESP8266 and provides a web interface to visualize the data.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Go 1.16 or later
|
||||
- SQLite3 development libraries
|
||||
|
||||
On Ubuntu/Debian, install SQLite3 development libraries with:
|
||||
```bash
|
||||
sudo apt-get install libsqlite3-dev
|
||||
```
|
||||
|
||||
## Setup
|
||||
|
||||
1. Install Go dependencies:
|
||||
```bash
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
2. Update the ESP8266 code with your Go server's IP address:
|
||||
- Open `ESP8266/ESP8266.ino`
|
||||
- Change the `goServerHost` value to your Go server's IP address
|
||||
|
||||
## Running the Server
|
||||
|
||||
1. Start the server:
|
||||
```bash
|
||||
go run main.go
|
||||
```
|
||||
|
||||
2. Access the web interface at `http://localhost:8080`
|
||||
|
||||
The server will:
|
||||
- Listen for LDR readings on `/api/ldr` endpoint
|
||||
- Store readings in a SQLite database
|
||||
- Provide a web interface with charts showing LDR values over time
|
||||
- Support different time ranges (day, week, month, all time)
|
||||
|
||||
## Importing Historical Data
|
||||
|
||||
If you have a Telegram export file (`tg_export.json`) with historical LDR readings, you can import them into the database:
|
||||
|
||||
1. Make sure the Telegram export file is in the root directory of the project
|
||||
2. Run the import script:
|
||||
```bash
|
||||
cd cmd/import_history
|
||||
go run main.go
|
||||
```
|
||||
|
||||
The script will:
|
||||
- Read the Telegram export file
|
||||
- Extract LDR readings from messages
|
||||
- Import them into the SQLite database
|
||||
- Show the number of readings imported
|
||||
|
||||
## API Endpoints
|
||||
|
||||
- `POST /api/ldr` - Receive LDR readings
|
||||
- Body: `{"value": 123, "timestamp": "2024-03-14T12:00:00Z"}`
|
||||
- Note: timestamp is optional, server will use current time if not provided
|
||||
|
||||
- `GET /api/readings?period=day|week|month|all` - Get LDR readings
|
||||
- Returns JSON array of readings with timestamps
|
||||
|
||||
## Web Interface
|
||||
|
||||
The web interface provides:
|
||||
- Line chart of LDR values over time
|
||||
- Time range selector (24h, week, month, all time)
|
||||
- Auto-refresh every 5 minutes
|
||||
Reference in New Issue
Block a user