How djazil4ik/solar-inverter-monitoring works
Solar Inverters Monitoring polls configured Deye and DAH Solar devices, stores readings as time-series data, and presents live, historical, and energy-stat views to authenticated users. The main path is inverter polling → register decoding → persistence and WebSocket dispatch → dashboard; REST endpoints provide inverter lists, history, and stats. The README documents the API capabilities, while sampled source confirms the polling, persistence, dispatch, dashboard requests, and JWT client behavior. Views, serializers, and WebSocket consumer internals were not sampled, so their detailed wiring is limited to documented behavior.
Main entry points: run_polling.py Polling loop · views.py REST views · Dashboard.jsx Monitoring dashboard · api.js API client
Components 21
Inverter ingestion
- Polling loop
backend/monitoring/management/commands/run_polling.py - Modbus reader
backend/monitoring/inverter_reader.py - Register maps
backend/monitoring/configs
Backend data services
- Inverter registry
backend/monitoring/models.py - Reading models
backend/monitoring/models.py - API routes
backend/monitoring/urls.py - REST views
backend/monitoring/views.py - Response serializers
backend/monitoring/serializers.py - JWT authentication
backend/core/urls.py
Web dashboard
- Login screen
frontend/src/components/Login.jsx - Route protection
frontend/src/components/ProtectedRoute.jsx - React routes
frontend/src/App.jsx - API client
frontend/src/services/api.js - Monitoring dashboard
frontend/src/components/Dashboard.jsx
Live delivery
- Channel layer
backend/core/settings.py - WebSocket consumer
backend/monitoring/consumers.py - WebSocket routes
backend/monitoring/routing.py
Other components
- User
- Solar inverter
- TimescaleDB
- Redis
Connections 26
- Polling loop → Inverter registry: loads active
- Polling loop → Modbus reader: polls through
- Modbus reader → Register maps: parses using
- Modbus reader → Solar inverter: reads registers
- Polling loop → Reading models: writes readings
- Inverter registry → TimescaleDB: reads registry
- Reading models → TimescaleDB: stores time series
- Polling loop → Channel layer: dispatches updates
- Channel layer → Redis: uses
- WebSocket routes → WebSocket consumer: routes sockets
- WebSocket consumer → Channel layer: receives updates
- User → React routes: opens dashboard
- React routes → Login screen: routes to
- React routes → Route protection: protects dashboard
- Route protection → Monitoring dashboard: allows access
- Login screen → API client: requests tokens
- Monitoring dashboard → API client: requests data
- API client → API routes: calls REST API
- API routes → REST views: routes requests
- REST views → Reading models: queries readings
- REST views → Inverter registry: lists inverters
- REST views → Response serializers: formats responses
- Response serializers → API client: returns JSON
- API routes → JWT authentication: routes token requests
- Monitoring dashboard → WebSocket routes: connects live
- WebSocket consumer → Monitoring dashboard: pushes readings