A lightweight Node.js service that:
- Receives EcoWitt weather station data via
POST /receiveEcowittData - Stores the latest payload verbatim to
data/ecowitt_latest.json - Uploads to Windy Stations v2 API every 60 seconds via a scheduled job
# 1. Copy the env template and add your Windy station password
cp .env.example .env
# → edit WINDY_STATION_PASSWORD in .env
# 2. Build and start
docker compose up -d
# 3. Verify it's running
curl http://localhost:8888/healthnpm install
cp .env.example .env # edit WINDY_STATION_PASSWORD
set -a && source .env && set +a
npm start| Variable | Description | Default |
|---|---|---|
PORT |
HTTP listen port | 8888 |
WINDY_STATION_ID |
Station hex ID from stations.windy.com | (required) |
WINDY_STATION_PASSWORD |
Station password from stations.windy.com | (required) |
DATA_DIR |
Directory for the data file | /app/data (Docker) or data/ (local) |
PUSHOVER_KEY |
Pushover User Key | (required for Pushover) |
PUSHOVER_APP_TOKEN |
Pushover Application API Token | (required for Pushover) |
SERVER_AUTH_TOKEN |
Shared secret to authorize the /sendPushoverNotification request |
(required for Pushover endpoint) |
In the WS View / WS View Plus app:
- Device List → [your device] → Weather Services → Customized
- Protocol:
Ecowitt - Server IP / hostname: your host running this service
- Path:
/receiveEcowittData - Port:
8888 - Upload interval: 60 s (or whatever you prefer – the proxy caches the latest value)
| EcoWitt field | Unit | Windy field | Unit |
|---|---|---|---|
tempf |
°F | temp |
°C |
humidity |
% | humidity |
% |
windspeedmph |
mph | wind |
m/s |
windgustmph |
mph | gust |
m/s |
winddir |
° | winddir |
° |
baromrelin |
inHg | mbar |
hPa |
hourlyrainin |
in | precip |
mm |
solarradiation |
W/m² | radiation |
W/m² |
uv |
index | uvi |
index |
dewptf |
°F | dewpoint |
°C |
| Method | Path | Description |
|---|---|---|
POST |
/receiveEcowittData |
Receives & stores EcoWitt payload |
GET |
/health |
Health check – returns {"status":"ok"} |
GET/POST |
/sendPushoverNotification |
Sends notification to Pushover |
The /sendPushoverNotification endpoint is a convenient utility and is not required for the core EcoWitt to Windy functionality.
It acts as a simple bridge to send formatted messages to Pushover for mobile notifications. This is particularly useful for integrating with local services like Home Assistant, Agent DVR security cameras, or other automation systems that need to send alerts to your devices.
To use this endpoint, you must provide the token query parameter or body field that matches your SERVER_AUTH_TOKEN.
data_proxy/
├── src/
│ ├── server.js # Express app + cron scheduler
│ ├── routes/
│ │ └── ecowitt.js # POST /receiveEcowittData handler
│ ├── converters/
│ │ └── ecowitt2windy.js # Unit conversion logic
│ ├── jobs/
│ │ └── windyUploader.js # 60-second scheduled upload job
│ └── utils/
│ └── logger.js # Simple structured logger
├── data/ # Runtime data directory (gitignored)
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── package.json