Diese Bibliothek ist nicht mit der SMA Solar Technology AG oder einer ihrer Tochtergesellschaften oder verbundenen Unternehmen verbunden, verbunden, autorisiert, unterstützt oder in irgendeiner Weise offiziell mit ihnen verbunden.
SMA-Speedwire ist eine API zur Kommunikation mit SMA-Produkten über Ethernet mithilfe der Speedwire-Schnittstelle.
Es ermöglicht das Abhören der zwischen Ihren Geräten ausgetauschten Daten und das Protokollieren von Zählerständen.
Technische Dokumente zu Speedwire finden Sie unter:
SMA Energiezähler
Sunny Home Manager (2.0)
...
Ich überlege, weitere Produkte zu implementieren, aber dafür brauche ich Ihre Hilfe!
Tragen Sie zu einer Telegram-Implementierung für Ihr Gerät bei, indem Sie eine Pull-Anfrage öffnen, oder helfen Sie beim Entwicklungsprozess, indem Sie Paketerfassungen teilen. Öffnen Sie ein Problem mit Ihrem Gerät, um loszulegen.
Speedwire verwendet UDP als Transportprotokoll zum Senden von Paketen an Multicast-Gruppen.
Daher müssen Sie sicherstellen, dass die Router zwischen dem Gerät, mit dem Sie kommunizieren möchten, und Ihrem Gerät die Multicast-Weiterleitung aktiviert haben.
Es ist auch bekannt, dass einige billige Switches Probleme mit Multicast verursachen (z. B. indem sie zufällige Gruppen blockieren oder überhaupt nicht zulassen). Stellen Sie daher sicher, dass Ihre Hardware dies unterstützt.
Ich würde Ihnen raten, den Verbindungsaufbau zunächst mit dem DeviceDiscovery-Beispiel zu testen.
Eingehende Daten von einem SMA Energy Meter / SMA Sunny Home Manager auslesen:
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 ();
Weitere Informationen finden Sie im gut dokumentierten Javadoc oder in den Beispielen.
Diese Bibliothek ist auf Maven Central verfügbar. Fügen Sie einfach Folgendes zu Ihren Abhängigkeiten hinzu:
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
Diese Open-Source-Bibliotheken wurden zum Erstellen dieser API verwendet: