Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/j0b10/sma-speedwire
SMA-Speedwire is an api for communicating with SMA products over Ethernet using the speedwire interface.
https://github.com/j0b10/sma-speedwire
energy-meter multicast sma sma-em sma-solar smart-meter solar speedwire udp
Last synced: about 2 months ago
JSON representation
SMA-Speedwire is an api for communicating with SMA products over Ethernet using the speedwire interface.
- Host: GitHub
- URL: https://github.com/j0b10/sma-speedwire
- Owner: J0B10
- License: mit
- Created: 2021-03-15T19:33:55.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2023-02-27T11:58:17.000Z (almost 2 years ago)
- Last Synced: 2024-10-12T03:43:30.184Z (2 months ago)
- Topics: energy-meter, multicast, sma, sma-em, sma-solar, smart-meter, solar, speedwire, udp
- Language: Java
- Homepage:
- Size: 731 KB
- Stars: 17
- Watchers: 3
- Forks: 2
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SMA-Speedwire
![Java Version](https://img.shields.io/badge/java-1.11-red)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.joblo2213/sma.speedwire)](https://search.maven.org/artifact/io.github.joblo2213/sma.speedwire)
[![Javadoc](https://img.shields.io/badge/%F0%9F%93%96-javadoc-%23F8981D)](https://joblo2213.github.io/SMA-Speedwire/io/github/joblo2213/sma/speedwire/Speedwire.html)
[![GitHub](https://img.shields.io/github/license/joblo2213/SMA-Speedwire)](https://github.com/joblo2213/SMA-Speedwire/blob/master/LICENSE)
[![🏗️ Build & Deploy](https://github.com/joblo2213/SMA-Speedwire/actions/workflows/main.yml/badge.svg)](https://github.com/joblo2213/SMA-Speedwire/actions/workflows/main.yml)_This library is not affiliated, associated, authorized, endorsed by, or in any way officially connected with
SMA Solar Technology AG, or any of its subsidiaries or its affiliates._SMA-Speedwire is an api for communicating with SMA products over Ethernet using the speedwire interface.
It allows listening for exchanged data between your devices and logging meter readings.
Technical documents covering Speedwire can be found under:
* [Speedwire-TI-en-11.pdf](https://files.sma.de/downloads/Speedwire-TI-en-11.pdf) -
Speedwire technical information
* [EMETER-Protokoll-TI-en-10.pdf](https://www.sma.de/fileadmin/content/global/Partner/Documents/SMA_Labs/EMETER-Protokoll-TI-en-10.pdf) -
SMA Energy Meter Protocol
* [SpeedwireDD-TI-en-10.pdf](https://www.sma.de/fileadmin/content/global/Partner/Documents/sma_developer/SpeedwireDD-TI-en-10.pdf) -
Speedwire device discovery## Supported Products
* **SMA Energy Meter**
* **Sunny Home Manager (2.0)*** ...
I'm looking into implementing more products, but I need your help for this!
Contribute a Telegram implementation for your device by opening a Pull Request or help in the development process by
sharing packet captures.
Open an issue with your device to get started.## Known issues
Speedwire uses UDP as transport protocol for sending packets to multicast groups.
Therefore, you will need to make sure that routers between the device you want to communicate with, and your device have
multicast forwarding enabled.
Some cheap switches are also known to cause problems with multicast (like blocking random groups or not allowing it at all),
so make sure your hardware supports it.I would advise you to first test establishing a connection using the [DeviceDiscovery](samples/src/DeviceDiscovery.java) sample.
## Usage
Reading incoming data from an SMA Energy Meter / SMA Sunny Home Manager:```java
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 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 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();
```For more information read the well documented [javadoc](https://joblo2213.github.io/SMA-Speedwire/io/github/joblo2213/sma/speedwire/Speedwire.html)
or have a look at the [samples](samples/src).## Maven configuration
This library is available on maven central, just add the following to your dependencies:````xml
io.github.joblo2213
sma.speedwire
1.0.2````
## Libraries
These open source libraries were used to create this api:* [unitsofmeasurement/indriya](https://github.com/unitsofmeasurement/indriya) licensed under the following
[license](https://github.com/unitsofmeasurement/indriya/blob/master/LICENSE)