Esta biblioteca não é afiliada, associada, autorizada, endossada ou de qualquer forma oficialmente ligada à SMA Solar Technology AG, ou a qualquer uma das suas subsidiárias ou afiliadas.
SMA-Speedwire é uma API para comunicação com produtos SMA via Ethernet usando a interface speedwire.
Ele permite ouvir dados trocados entre seus dispositivos e registrar leituras de medidores.
Os documentos técnicos que cobrem o Speedwire podem ser encontrados em:
Medidor de Energia SMA
Gerenciador de casa ensolarado (2.0)
...
Estou pensando em implementar mais produtos, mas preciso da sua ajuda para isso!
Contribua com uma implementação do Telegram para o seu dispositivo abrindo um Pull Request ou ajude no processo de desenvolvimento compartilhando capturas de pacotes. Abra um problema com seu dispositivo para começar.
Speedwire usa UDP como protocolo de transporte para enviar pacotes para grupos multicast.
Portanto, você precisará certificar-se de que os roteadores entre o dispositivo com o qual deseja se comunicar e o seu dispositivo tenham o encaminhamento multicast ativado.
Alguns switches baratos também são conhecidos por causar problemas com multicast (como bloquear grupos aleatórios ou não permitir isso), portanto, certifique-se de que seu hardware suporte isso.
Aconselho você a testar primeiro o estabelecimento de uma conexão usando o exemplo DeviceDiscovery.
Ler dados recebidos de um 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 obter mais informações, leia o javadoc bem documentado ou dê uma olhada nos exemplos.
Esta biblioteca está disponível no maven central, basta adicionar o seguinte às suas dependências:
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
Estas bibliotecas de código aberto foram usadas para criar esta API: