Эта библиотека не является аффилированной, связанной, авторизованной, одобренной или каким-либо образом официально связанной с SMA Solar Technology AG или какой-либо из ее дочерних компаний или ее филиалов.
SMA-Speedwire — это API для связи с продуктами SMA через Ethernet с использованием интерфейса Speedwire.
Он позволяет прослушивать обмен данными между вашими устройствами и регистрировать показания счетчиков.
Техническую документацию по Speedwire можно найти по адресу:
СМА счетчик энергии
Солнечный домашний менеджер (2.0)
...
Я планирую внедрить больше продуктов, но для этого мне нужна ваша помощь!
Внесите свой вклад в реализацию Telegram для своего устройства, открыв запрос на включение, или помогите в процессе разработки, поделившись перехваченными пакетами. Чтобы начать, откройте проблему с вашим устройством.
Speedwire использует UDP в качестве транспортного протокола для отправки пакетов группам многоадресной рассылки.
Поэтому вам необходимо убедиться, что на маршрутизаторах между устройством, с которым вы хотите установить связь, и вашим устройством включена многоадресная переадресация.
Также известно, что некоторые дешевые коммутаторы вызывают проблемы с многоадресной рассылкой (например, блокируют случайные группы или вообще не разрешают ее), поэтому убедитесь, что ваше оборудование поддерживает ее.
Я бы посоветовал вам сначала протестировать установление соединения с помощью образца DeviceDiscovery.
Чтение входящих данных со счетчика энергии SMA / 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 ();
Для получения дополнительной информации прочтите хорошо документированную документацию Javadoc или просмотрите примеры.
Эта библиотека доступна в maven Central, просто добавьте в свои зависимости следующее:
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
Для создания этого API использовались следующие библиотеки с открытым исходным кодом: