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: