SMA Speedwire
Release 1.0.2
本庫不隸屬於 SMA Solar Technology AG 或其任何子公司或附屬公司,也不受其關聯、授權、認可或以任何方式正式關聯。
SMA-Speedwire 是一種 API,用於使用 speedwire 介面透過乙太網路與 SMA 產品進行通訊。
它允許監聽設備之間交換的數據並記錄儀表讀數。
有關 Speedwire 的技術文件可在以下位置找到:
SMA能量計
陽光家庭管家 (2.0)
……
我正在考慮實施更多產品,但我需要您的幫助!
透過開啟 Pull 請求為您的裝置貢獻 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: