Binding Request SMA SEMP Protocol

Hey there,
I am new to Openhab and I’m actually researching anything regarding the SMA Sunny Home Manager.
I am actually running this device in combination with my solar plant and I would be interested in a binding, to integrate this device and its capabilities into openhab.
For me it would be nice to use openhab as a Gateway for the SunnyHomeManager to switch devices in dependence of the actuall energy production and the estimated production of the weather forecast published by the SHM.

Does anybody have some experience in these devices or even a project running?

Thank you for your help.


I don’t know if you have made any progress here, but I’m doing the same research, and would also be interested in this.

I’m about to install pv on a house I just built with knx and openHAB controls

I wrote a SEMP service for OpenHab and it would be great if someone would test it. Depending on how many people are testing it I would try to get it to the default installation. I share the software under the Eclipse Public License 1.



openHAB SEMP Service

This service implements the SEMP protocol for openHAB


  • UPNP automatic discovery
  • Full SEMP Support
  • Support ON/OFF and Decimal item types


After the activation of this plugin and the configuration it (e.g. in PaperUI) and of the consumer(s) the upnp service will start immediately. After some minutes you can start a device search in the SMA Sunny Portal. It will detect the device(s) and you will be able to add it to your device list.


An UUID (Universal Unique Identifier) is a 128-bit number used to uniquely identify some object or entity on the Internet. Usually it’s a mac and time based V1 UUID but it is possible to use a random generated UUID, too. There are some generators in the internet available.
Important: if you change it then you have to recreate the consumers in SMA Sunny Portal.


(Optional) For systems with multiple IP addresses the IP to use for UPNP may be specified, otherwise the first non loopback address will be used.


(Optional) Some SEMP applications require a different port (80) then what openHAB runs on by default (8080). This option will only advertise a different port then what we are listening on. Useful if you have an iptables rule redirect traffic from this port to the openHAB port.


Persistence (Optional)

Usually this plugin will send the devices status every minute. But there is the possibility to send values up to the last 10 minutes, too. If you want to use this feature then you have to configure persistence for this item. If your persistence is supporting a step smaller then one minute then this plugin will determine additional values like min, max or average from the last 60 seconds.

Device Tagging

The SEMP service supports multiple consumers. Every SEMP consumer needs exact two items and is mapped inside one group. This two items are a switch item (on/off) and a number item (power).
The identification of a SEMP consumer is a group-tag [“Consumer”]. The identification for the consumers items is a tag with the name of the consumers group.

Consumer Configuration

The consumer need some configuration parameters. This parameters are tags for the group item, too.

All tags are formatted like this:


For example:


If you’ve defined your Items in .items files, tags can be added using:

[ "mytag" ]

syntax (after the (Groups) and before the {channel}).
If you created your items another way, e.g. using the Paper UI, HABmin allows you to modify the tags.

Tag: device_id

The device ID is represented by a 92 bit integer which consists of the following components:
Device ID (92 bits):

Vendor ID type (4 bits)  + Vendor ID (32 bits)  + Serial-number (48 bits) + Sub-device ID (8 bits) 

Required: no

Default: auto-generated from consumers name



Tag: device_vendor

Name of the device’s vendor.

Required: no

Default: Unknown



Tag: device_type

Type of device. One of the values predefined in the SEMP XSD should be used:


Required: no

Default: Other



Tag: device_serial

A serial number that is known by the user so that he is able
to identify the device. If available use the vendor specific serial number which is printed on
the device.

Required: yes



Tag: max_power

Maximum power consumption of the device (in W).

Required: yes



Tag: min_off_time

When switched off (or paused), the device has to remain off for at least the given amount
of seconds.

Required: no

Default: 0



Tag: min_on_time

When switched on (or un-paused), the device has to remain on for at least the given
amount of seconds.

Required: no

Default: 0



Tag: inter_alowed

Specifies whether the device can be interrupted (paused) during runtime. This
allows a more flexible energy management for the device. For instance the EM
can interrupt a device in case of unpredictable bad weather conditions or when
the user switches on a device with conflicting energy needs and restart the inter-
rupted device afterwards.

Should be set to “true”. Set to “false” only if the device operation cannot be
paused, e.g. for some program based devices.

Required: no

Default: true



Tag: earliest_start

Specifies the earliest start time [in minutes from midnight] of the device.

Required: yes


600->every day at 10am

If you want multiple time frames then you need to separate them with":"


Tag: latest_end

Specifies the end of the planning range. This is the latest possible time the device opera-
tion has to be finished. [in minutes from midnight]

Required: yes


660->every day at 11am

If you want multiple time frames then you need to separate them with":"


Tag: min_running_time

The minimum amount of time the device needs to run in the time range specified by Earli-
estStart and LatestEnd. It will be assigned to device by the EM even if there is no PV-
production so that grid-energy has to be used to power the device. Note: If set to “0”
all of the energy is optional and should only be allocated to the device if certain
conditions are fulfilled (e.g. cheap PV-energy available). [in minutes]

Required: yes



If you want multiple time frames then you need to separate them with":"


Tag: max_running_time

The maximum amount of time the device needs to run in the time range specified by Earli-
estStart and LatestEnd. The difference between MaxRunningTime and MinRunningTime is
the optional runtime that can be assigned to the device by the EM if cheap energy (e.g.
excess PV-energy) is available. [in minutes]

Required: yes



If you want multiple time frames then you need to separate them with":"




Group PwrSwitchMedia    "PowerSwitchMedia"    ["Consumer","semp:device_serial:abc123456789","semp:max_power:1400","semp:earliest_start:600","semp:latest_end:1000","semp:min_running_time:0","semp:max_running_time:300"] 

Switch Media_Switch   "Media center switch" (PwrSwitchMedia) { knx="<3/1/4" }
Number Media_Power    "Media center power" (PwrSwitchMedia)  { channel="edimax:sp2101w:29a0126d:power"} 
1 Like

I am currently trying to get this working with Openhab 2.4 and Sunny Home Manager
Unfortunately the service is restarting all the time.

Someone still out there using this?


I got it working. I made the mistake to define it as a binding :slight_smile:
Just copy to addons is enough.
The only issue I can see so far is that the device type is always reported as Other.
Not sure if this makes any difference for Home Manager.