Esta biblioteca no está afiliada, asociada, autorizada, respaldada ni conectada oficialmente de ninguna manera con SMA Solar Technology AG, ni con ninguna de sus subsidiarias o afiliados.
SMA-Speedwire es una API para comunicarse con productos SMA a través de Ethernet utilizando la interfaz Speedwire.
Permite escuchar los datos intercambiados entre sus dispositivos y registrar lecturas de medidores.
Los documentos técnicos que cubren Speedwire se pueden encontrar en:
Medidor de energía SMA
Administrador de casa soleado (2.0)
...
Estoy pensando en implementar más productos, ¡pero necesito tu ayuda para esto!
Contribuya con una implementación de Telegram para su dispositivo abriendo una solicitud de extracción o ayude en el proceso de desarrollo compartiendo capturas de paquetes. Abra un problema con su dispositivo para comenzar.
Speedwire utiliza UDP como protocolo de transporte para enviar paquetes a grupos de multidifusión.
Por lo tanto, deberá asegurarse de que los enrutadores entre el dispositivo con el que desea comunicarse y su dispositivo tengan habilitado el reenvío de multidifusión.
También se sabe que algunos conmutadores baratos causan problemas con la multidifusión (como bloquear grupos aleatorios o no permitirlo en absoluto), así que asegúrese de que su hardware lo admita.
Le recomendaría que primero pruebe a establecer una conexión utilizando el ejemplo DeviceDiscovery.
Leer los datos entrantes de un SMA Energy Meter / SMA Sunny Home Manager:
Speedwire speedwire = new Speedwire ();
speedwire . onError ( Exception :: printStackTrace );
speedwire . onTimeout (() -> System . err . println ( "speedwire timeout" ));
speedwire . onData ( data -> {
if ( data instanceof EnergyMeterTelegram ) {
EnergyMeterTelegram em = ( EnergyMeterTelegram ) data ;
//device information
int SUSyID = em . getSUSyID ();
long SerNo = em . getSerNo (). longValueExact ();
String ip = em . getOrigin (). getHostAddress ();
System . out . printf ( "Device %d %d on port %s%n" , SUSyID , SerNo , ip );
//current power draw (in W)
Quantity < Power > w = em . getData ( EnergyMeterChannels . TOTAL_P_IN ). to ( Units . WATT );
System . out . printf ( "Ingress Power: %s%n" , w );
//energy meter total power reading (in kWh)
Quantity < Energy > powerReading = em . getData ( EnergyMeterChannels . TOTAL_P_IN_SUM )
. to ( MetricPrefix . KILO ( Units . WATT ). multiply ( Units . HOUR ). asType ( Energy . class ));
System . out . printf ( "Total power reading: %s%n" , powerReading );
}
});
speedwire . start ();
Para obtener más información, lea el javadoc bien documentado o eche un vistazo a los ejemplos.
Esta biblioteca está disponible en maven central, simplemente agregue lo siguiente a sus dependencias:
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
Estas bibliotecas de código abierto se utilizaron para crear esta API: