Modbus Telemetry
OmilooS lee directamente las variables físicas de los inversores solares y baterías residenciales sin depender de los servidores cloud de los fabricantes. Esto se logra mediante el protocolo industrial Modbus TCP sobre la red local del usuario.
1. Protocolo de Conexión
La lectura de datos se realiza en la capa de datos a través de TelemetryModbusDatasource. La app inicia un cliente de Socket TCP (ModbusTcpClient) dirigido a la IP de red local del inversor (por defecto 192.168.1.150 en el puerto 502).
- Intervalo de Sondeo (Polling): Cada 2 segundos.
- Timeout de Conexión: 1.5 segundos (evita congelar el hilo de UI de Flutter si el inversor está desconectado).
- Mecanismo de Resiliencia (Fallback): Si ocurre una excepción de red (
SocketExceptiono timeout), el sistema conmuta automáticamente a un flujo simulado con variaciones aleatorias gaussianas para mantener la UI operativa.
2. Mapa de Registros (Estándar SunSpec)
OmilooS realiza peticiones de tipo Read Holding Registers (Function Code 03) y Read Input Registers (Function Code 04). El mapa base decodifica los siguientes registros industriales SunSpec estándar:
| Registro | Parámetro Físico | Tipo de Dato | Unidad |
|---|---|---|---|
| 40071 | Potencia CA de Salida Total | uint16 + Factor de Escala | Vatios (W) |
| 40083 | Voltaje Medio de Red de CA | uint16 + Factor de Escala | Voltios (V) |
| 40096 | Energía Acumulada Generada | uint32 | Vatios-hora (Wh) |
| 40120 | Estado de Carga de Batería (SoC) | uint16 | Porcentaje (%) |
| 40125 | Temperatura del Silicio del Inversor | int16 | Grados Celsius (°C) |
3. Renderizado Dinámico de Flujo de Potencia
La telemetría en tiempo real alimenta visualmente al widget PowerFlowCanvas ubicado en la pestaña principal de la aplicación.
- Tecnología de Dibujo: Implementado mediante un
CustomPainteren Flutter. - Algoritmo de Partículas: Se calculan ecuaciones diferenciales simples en base a los valores instantáneos de generación fotovoltaica, estado de carga de la batería y consumo de la vivienda. Las partículas se desplazan simulando la dirección real y velocidad de los electrones (p. ej., strings solares hacia el inversor, y excedentes saliendo hacia la red de vecinos).
- Interpolación y Suavizado: Se utiliza interpolación cúbica mediante la librería
fl_chartpara pintar el histórico de 24 horas sin dientes de sierra ni parpadeos.