API de energía en tiempo real
Carpeta: realtime-energy-api/ · Puerto: 3002
· Swagger: http://localhost:3002/api-docs · Tecnología: Express
Servicio ligero que expone los datos de energía instantánea que consultan los contadores y las integraciones externas. Comparte base de datos con la API de Zertipower.
Qué hace
| Ruta | Para qué |
|---|---|
GET /is-alive | Comprobación de vida |
GET /version | Versión del servicio |
POST /tokens | Canjea un token temporal, emitido por la API de Zertipower, por uno permanente |
/cups | Datos de los puntos de suministro. Protegida con el token permanente. |
/communities | Datos de comunidades |
/api-docs | Documentación Swagger |
El esquema de dos tokens existe para que un dispositivo pueda quedarse autenticado mucho tiempo sin manejar credenciales: pide una vez el permanente y lo usa a partir de entonces.
Configuración
| Variable | Qué es | Valor |
|---|---|---|
DATABASE_URL | Conexión, la misma base que la API de Zertipower | mysql://root:…@mariadb:3306/zertipower-dev |
PORT | Puerto interno | 3000 (publicado como 3002) |
JWT_SECRET | Debe coincidir con el de la API de Zertipower | secreto |
BASE_URL | URL pública propia, sólo para el «Try it out» de Swagger | http://localhost:3002 |
JWT_SECRET tiene que ser el mismoEste servicio verifica en /tokens un token temporal emitido por la API de
Zertipower, y protege /cups con el permanente que entrega a cambio. Si las
claves no coinciden, todas esas llamadas responden 401.
Durante un tiempo el compose no le pasaba esta variable en absoluto, con lo que
jwt.verify recibía un valor indefinido y esas rutas fallaban siempre.
Limitación de peticiones
El servicio limita a 100 peticiones cada 5 minutos por IP, identificando al
cliente por su dirección real y no por la del proxy. Al superarlo responde
Ip blocked for security.
Cómo comprobar que está vivo
curl http://localhost:3002/is-alive
Y sin token, /cups debe responder que falta:
curl http://localhost:3002/cups