Cette bibliothèque n'est pas affiliée, associée, autorisée, approuvée par ou officiellement liée de quelque manière que ce soit à SMA Solar Technology AG, ou à l'une de ses filiales ou sociétés affiliées.
SMA-Speedwire est une API permettant de communiquer avec les produits SMA via Ethernet à l'aide de l'interface speedwire.
Il permet d'écouter les données échangées entre vos appareils et d'enregistrer les relevés de compteurs.
Les documents techniques couvrant Speedwire peuvent être trouvés sous :
Compteur d'énergie SMA
Gestionnaire de maison ensoleillée (2.0)
...
Je cherche à implémenter plus de produits, mais j'ai besoin de votre aide pour cela !
Contribuez à l'implémentation de Telegram pour votre appareil en ouvrant une Pull Request ou aidez au processus de développement en partageant des captures de paquets. Ouvrez un problème avec votre appareil pour commencer.
Speedwire utilise UDP comme protocole de transport pour envoyer des paquets aux groupes de multidiffusion.
Par conséquent, vous devrez vous assurer que les routeurs entre l'appareil avec lequel vous souhaitez communiquer et votre appareil ont activé le transfert multidiffusion.
Certains commutateurs bon marché sont également connus pour causer des problèmes de multidiffusion (comme bloquer des groupes aléatoires ou ne pas l'autoriser du tout), alors assurez-vous que votre matériel le prend en charge.
Je vous conseillerais de tester d’abord l’établissement d’une connexion à l’aide de l’exemple DeviceDiscovery.
Lecture des données entrantes d'un 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 ();
Pour plus d'informations, lisez le javadoc bien documenté ou jetez un œil aux exemples.
Cette bibliothèque est disponible sur maven central, ajoutez simplement ce qui suit à vos dépendances :
< dependency >
< groupId >io.github.joblo2213</ groupId >
< artifactId >sma.speedwire</ artifactId >
< version >1.0.2</ version >
</ dependency >
Ces bibliothèques open source ont été utilisées pour créer cette API :