이 라이브러리는 SMA Solar Technology AG 또는 그 자회사 또는 계열사와 제휴, 연관, 승인, 보증 또는 어떤 방식으로든 공식적으로 연결되어 있지 않습니다.
SMA-Speedwire는 speedwire 인터페이스를 사용하여 이더넷을 통해 SMA 제품과 통신하기 위한 API입니다.
이를 통해 장치 간에 교환된 데이터를 수신하고 측정기 판독값을 기록할 수 있습니다.
Speedwire를 다루는 기술 문서는 다음에서 찾을 수 있습니다.
SMA 에너지 미터
써니홈 매니저(2.0)
...
더 많은 제품을 구현하려고 하는데 이를 위해서는 여러분의 도움이 필요합니다!
끌어오기 요청을 열어 장치에 대한 Telegram 구현에 기여하거나 패킷 캡처를 공유하여 개발 프로세스에 도움을 주세요. 시작하려면 기기 관련 문제를 여세요.
Speedwire는 멀티캐스트 그룹에 패킷을 보내기 위한 전송 프로토콜로 UDP를 사용합니다.
따라서 통신하려는 장치와 장치 사이의 라우터에 멀티캐스트 전달이 활성화되어 있는지 확인해야 합니다.
일부 값싼 스위치는 멀티캐스트 문제(임의의 그룹을 차단하거나 전혀 허용하지 않는 등)를 일으키는 것으로 알려져 있으므로 하드웨어가 이를 지원하는지 확인하세요.
먼저 DeviceDiscovery 샘플을 사용하여 연결 설정을 테스트해 보시기 바랍니다.
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 ();
자세한 내용은 잘 문서화된 javadoc을 읽거나 샘플을 살펴보세요.
이 라이브러리는 Maven Central에서 사용할 수 있습니다. 종속 항목에 다음을 추가하면 됩니다.
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
이 API를 생성하는 데 다음 오픈 소스 라이브러리가 사용되었습니다.