Updated external content (Jenkins build 2293)

pull/2380/head
openHAB Build Server 2024-09-12 04:55:10 +00:00
parent f9f94ca2f6
commit 6353111528
9 changed files with 557 additions and 24 deletions

File diff suppressed because one or more lines are too long

View File

@ -158,7 +158,7 @@ The binding has no configuration options, all configuration is done at `bridge`,
## Actions
:::tip Warning
:::warning
Battery control uses the battery management's time-dependent battery control settings of the inverter settings and therefore overrides user-specified time of use settings.
Please note that user-specified time of use plans cannot be used together with battery control, as battery control will override the user-specified time of use settings.
:::

View File

@ -20,15 +20,6 @@ Devices that use [Home Assistant MQTT Discovery](https://www.home-assistant.io/i
Components that share a common `device.identifiers` will automatically be grouped together as a single Thing.
Each component will be represented as a Channel Group, with the attributes of that component being individual channels.
## Requirements
The Home Assistant MQTT binding requires two transformations to be installed:
- JINJA-Transformations
- JSONPath-Transformations
These can be installed under `Settings` → `Addon` → `Transformations`
## Discovery
Any device that publishes the component configuration under the `homeassistant` prefix in MQTT will have their components automatically discovered and added to the Inbox.
@ -45,14 +36,14 @@ You can also manually create a Thing, and provide the individual component topic
- [Cover](https://www.home-assistant.io/integrations/cover.mqtt/)
- [Device Trigger](https://www.home-assistant.io/integrations/device_trigger.mqtt/)
- [Fan](https://www.home-assistant.io/integrations/fan.mqtt/)<br>
Only ON/OFF is supported. JSON attributes are not supported.
- [Light](https://www.home-assistant.io/integrations/light.mqtt/)<br>
Template schema is not supported. Command templates only have access to the `value` variable.
JSON attributes are not supported.
- [Light](https://www.home-assistant.io/integrations/light.mqtt/)
- [Lock](https://www.home-assistant.io/integrations/lock.mqtt/)
- [Number](https://www.home-assistant.io/integrations/number.mqtt/)
- [Scene](https://www.home-assistant.io/integrations/scene.mqtt/)
- [Select](https://www.home-assistant.io/integrations/select.mqtt/)
- [Sensor](https://www.home-assistant.io/integrations/sensor.mqtt/)
- [Sensor](https://www.home-assistant.io/integrations/sensor.mqtt/)<br>
JSON attributes are not supported.
- [Switch](https://www.home-assistant.io/integrations/switch.mqtt/)
- [Update](https://www.home-assistant.io/integrations/update.mqtt/)<br>
This is a special component, that will show up as additional properties on the Thing, and add a button on the Thing to initiate an OTA update.

View File

@ -583,7 +583,7 @@ Warnings:
| signal | strength | Number | Read-only | Signal strength (0 for no signal, 1 for weak...) |
| signal | value | Number:Power | Read-only | Signal strength in dBm |
| presence | floodlight | String | Read-write | Sets the floodlight to ON/OFF/AUTO |
| presence | siren | Switch | Read-write | Status of the siren, if silent or emitting an alarm |
| presence | siren | Switch | Read-only | Status of the siren, if silent or emitting an alarm |
| last-event | type | String | Read-only | Type of event |
| last-event | subtype | String | Read-only | Sub-type of event |
| last-event | time | DateTime | Read-only | Time of occurrence of event |

View File

@ -70,16 +70,23 @@ See [DateTime](#date-time) section for more information.
### Solcast Plane Configuration
| Name | Type | Description | Default | Required | Advanced |
|-----------------|---------|--------------------------------------------------------|-----------------|----------|----------|
| resourceId | text | Resource Id of Solcast rooftop site | N/A | yes | no |
| refreshInterval | integer | Forecast Refresh Interval in minutes | 120 | yes | no |
| Name | Type | Description | Default | Required | Advanced |
|-----------------|---------|--------------------------------------------------------------------------|-----------------|----------|----------|
| resourceId | text | Resource Id of Solcast rooftop site | N/A | yes | no |
| refreshInterval | integer | Forecast Refresh Interval in minutes (0 = disable automatic refresh) | 120 | yes | no |
`resourceId` for each plane can be obtained in your [Rooftop Sites](https://toolkit.solcast.com.au/rooftop-sites)
`refreshInterval` of forecast data needs to respect the throttling of the Solcast service.
If you have 25 free calls per day, each plane needs 2 calls per update a refresh interval of 120 minutes will result in 24 calls per day.
With `refreshInterval = 0` the forecast data will not be updated by binding.
This gives the user the possibility to define an own update strategy in rules.
See [manual update rule example](#solcast-manual-update) to update Solcast forecast data
- after startup
- every 2 hours only during daytime using [Astro Binding](https://www.openhab.org/addons/bindings/astro/)
## Solcast Channels
Each `sc-plane` reports its own values including a `json` channel holding JSON content.
@ -369,3 +376,33 @@ rule "Solcast Actions"
logInfo("SF Tests","Optimist energy {}",energyOptimistic)
end
```
### Solcast manual update
```java
rule "Daylight End"
when
Channel "astro:sun:local:daylight#event" triggered END
then
PV_Daytime.postUpdate(OFF) // switch item holding daytime state
end
rule "Daylight Start"
when
Channel "astro:sun:local:daylight#event" triggered START
then
PV_Daytime.postUpdate(ON)
end
rule "Solacast Updates"
when
Thing "solarforecast:sc-plane:homeSouthWest" changed to INITIALIZING or // Thing status changed to INITIALIZING
Time cron "0 30 0/2 ? * * *" // every 2 hours at minute 30
then
if(PV_Daytime.state == ON) {
val solarforecastActions = getActions("solarforecast","solarforecast:sc-plane:homeSouthWest")
solarforecastActions.triggerUpdate
} // reject updates during night
end
```

View File

@ -0,0 +1,216 @@
---
id: sunsynk
label: SunSynk
title: SunSynk - Bindings
type: binding
description: "This binding integrates the [Sun Synk Connect web services](https://www.sunsynk.net/)."
since: 3x
install: manual
---
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
{% include base.html %}
# SunSynk Binding
This binding integrates the [Sun Synk Connect web services](https://www.sunsynk.net/).
This binding is used to connect your openHAB system with Sun Synk Connect (where you log in and find Your Inverters).
From the binding, you will get status of your inverters and also command channels where you can control them.
Since the binding uses a polling mechanism, there may be some latency depending on your setting regarding refresh time.
## Introduction
You will require to have installed a Sun Synk inverter with a WiFi [Data logger](https://www.sunsynk.org/remote-monitoring) (or [e-linter](https://www.e-linter.com/)) connected to the Sun Synk App or Connect.
See [Data Logger set up](https://www.sunsynk.org/_files/ugd/39fbfb_a325b6884e684c4ba1a3ad80afd5da20.pdf) or [Sun Synk Web](https://www.sunsynk.org/remote-monitoring).
It is recommended, but not necessary that the "data interval" of your Gateway is set via Sun Synk Connect to 60s for best latency.
If you do not have that setting available you can request it set via Sun Synk, your installer or you can ask for an [User Level Access Change Request](https://www.sunsynk.org/remote-monitoring)
This binding uses your Sun Synk Connect credentials to access Sun Synk's web services via an openHAB Bridge (SunSynk Account).
The bridge manages the account authentication and the discovery of SunSynk Inverter Things. Only the Inverter Thing is currently supported.
Acknowledgements:
- [Power Forum](https://powerforum.co.za/topic/12604-sunsynk-wifi-dongle-hacking/page/3/)
- [AsTheSeaRises](https://github.com/AsTheSeaRises/SunSynk_API)
- [jamesridgway](https://github.com/jamesridgway/sunsynk-api-client/tree/main)
- [kellerza](https://github.com/kellerza/sunsynk)
## Supported Things
|Name | Thing type | Thing Id |
|----------------|---------------|------------|
|SunSynk Account | Bridge Thing | account |
|SunSynk Inverter| Thing | inverter |
## Discovery
The binding supports discovery via configuring your login and password in an openHAB bridge.
1. Add the sunsynk binding.
1. Add a new thing of type SunSynk Account via the SunSynk Binding and configure with username and password.
1. Go to Inbox press \[+\] and via the SunSynk Account start discovery \[Scan\] of inverters.
1. Inverters should appear in your inbox!
The SunSynk Account bridge thing will discover connected inverters through the UI Scan service.
When using the UI Scan service all the parameters for an Inverter Thing are discovered.
- Inverter Serial maps to the Sun Synk Connect inverter serial number
- Inverter Name maps to the Sun Synk Connect inverter alias
- Refresh time (advanced) default 60s; determines the interval between polls of Sun Synk Connect. A value above 60 is enforced. When setting this remember your inverter values are only published by Sun Synk Connect at the rate set by "data interval".
The refresh rate is limited to once every 60s to prevent too many requests from the Sun Synk Connect API, although there is no rate limit, the Sun Synk data is fully refreshed at the "data interval" set in Sun Synk Connect, at best that is every 60s.
This can mean the data in openHAB is more than 1 minute delayed from real-time.
Commands sent (from openHAB) to Sun Synk are buffered up until the next refresh interval and as they take a while to propagate through to your inverter, some channels are not refreshed (read back) from Sun Synk Connect until the next minute.
The SunSynk Account requires the user e-mail address and password used to login to Sun Synk Connect.
## Thing Configuration
### `sunsynk:account` Bridge Thing Configuration
| Name | Type | Description | Default | Required | Advanced |
|-----------------|---------|-------------------------------------------------|---------|----------|----------|
| email | text | Email address used to login Sun Synk Connect | N/A | yes | no |
| password | text | Password to access the Sun Synk Connect account | N/A | yes | no |
### `sunsynk:inverter:` Thing Configuration
| Name | Type | Description | Default | Required | Advanced |
|--------------|---------|---------------------------------------------|---------|----------|----------|
| alias | text | The Sun Synk Connect inverter alias | N/A | yes | no |
| serialnumber | text | The Sun Synk Connect inverter serial number | N/A | yes | no |
| refresh | integer | Interval the device is polled in sec | 60 | yes | yes |
## Channels
The SunSynk Account has no channels.
The SunSynk Inverter has the following channels.
| Channel | Type | R/W | Description | Advanced |
|--------------------------------|-------------------------|-----|-----------------------------------|----------|
|battery-soc |Number:Dimensionless | R | Inverter battery % charge | no |
|battery-grid-voltage |Number:ElectricPotential | R | Battery dc electric-voltage | no |
|battery-grid-current |Number:ElectricCurrent | R | Battery dc electric-current | no |
|battery-grid-power |Number:Power | R | Battery dc electric-power | no |
|battery-temperature |Number:Temperature | R | Battery temperature | no |
|inverter-ac-temperature |Number:Temperature | R | Inverter ac temperature | no |
|inverter-dc-temperature |Number:Temperature | R | Inverter dc temperature | no |
|inverter-grid-power |Number:Power | R | Inverter ac electric-power | no |
|inverter-grid-voltage |Number:ElectricPotential | R | Inverter ac electric-voltage | no |
|inverter-grid-current |Number:ElectricCurrent | R | Inverter ac electric-current | no |
|inverter-solar-energy-today |Number:Energy | R | Solar dc energy generated today | no |
|inverter-solar-energy-total |Number:Energy | R | Solar dc energy generated to date | no |
|inverter-solar-power-now |Number:Power | R | Solar dc electric-current | no |
|interval-1-grid-charge |Switch | R/W | Interval 1 grid charge on/off | yes |
|interval-1-grid-time |DateTime | R/W | Interval 1 start grid charge time | yes |
|interval-1-grid-capacity |Number:Dimensionless | R/W | Interval 1 battery charge target | yes |
|interval-1-grid-power-limit |Number:Power | R/W | Interval 1 charge power limit | yes |
|interval-2-grid-charge |Switch | R/W | Interval 2 grid charge on/off | yes |
|interval-2-grid-time |DateTime | R/W | Interval 2 start grid charge time | yes |
|interval-2-grid-capacity |Number:Dimensionless | R/W | Interval 2 battery charge target | yes |
|interval-2-grid-power-limit |Number:Power | R/W | Interval 2 charge power limit | yes |
|interval-3-grid-charge |Switch | R/W | Interval 3 grid charge on/off | yes |
|interval-3-grid-time |DateTime | R/W | Interval 3 start grid charge time | yes |
|interval-3-grid-capacity |Number:Dimensionless | R/W | Interval 3 battery charge target | yes |
|interval-3-grid-power-limit |Number:Power | R/W | Interval 3 charge power limit | yes |
|interval-4-grid-charge |Switch | R/W | Interval 4 grid charge on/off | yes |
|interval-4-grid-time |DateTime | R/W | Interval 4 start grid charge time | yes |
|interval-4-grid-capacity |Number:Dimensionless | R/W | Interval 4 battery charge target | yes |
|interval-4-grid-power-limit |Number:Power | R/W | Interval 4 charge power limit | yes |
|interval-5-grid-charge |Switch | R/W | Interval 5 grid charge on/off | yes |
|interval-5-grid-time |DateTime | R/W | Interval 5 start grid charge time | yes |
|interval-5-grid-capacity |Number:Dimensionless | R/W | Interval 5 battery charge target | yes |
|interval-5-grid-power-limit |Number:Power | R/W | Interval 5 charge power limit | yes |
|interval-6-grid-charge |Switch | R/W | Interval 6 grid charge on/off | yes |
|interval-6-grid-time |DateTime | R/W | Interval 6 start grid charge time | yes |
|interval-6-grid-capacity |Number:Dimensionless | R/W | Interval 6 battery charge target | yes |
|interval-6-grid-power-limit |Number:Power | R/W | Interval 6 charge power limit | yes |
|interval-1-gen-charge |Switch | R/W | Interval 1 generator charge on/of | yes |
|interval-2-gen-charge |Switch | R/W | Interval 2 generator charge on/of | yes |
|interval-3-gen-charge |Switch | R/W | Interval 3 generator charge on/of | yes |
|interval-4-gen-charge |Switch | R/W | Interval 4 generator charge on/of | yes |
|interval-5-gen-charge |Switch | R/W | Interval 5 generator charge on/of | yes |
|interval-6-gen-charge |Switch | R/W | Interval 6 generator charge on/of | yes |
|inverter-control-timer |Switch | R/W | Inverter control timer on/off | yes |
|inverter-control-work-mode |String | R/W | Inverter work mode 1, 2 or 3 | yes |
|inverter-control-energy-pattern |String | R/W | Inverter energy pattern 1 or 2 | yes |
### Full Example
#### sunsynk.things
```java
Bridge sunsynk:account:xxx @ "Loft" [email= "user.symbol@domain.", password="somepassword"]{
Thing inverter E1234567R1231234567890 @ "Loft" [alias= "My Inverter", serialnumber= "1234567890", refresh= 60]
}
```
#### sunsynk.items
```java
Switch Interval1GridCharge "Switch on Grid Charge for Interval 1" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-1-grid-charge"}
Switch Interval2GridCharge "Switch on Grid Charge for Interval 2" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-2-grid-charge"}
Switch Interval3GridCharge "Switch on Grid Charge for Interval 3" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-3-grid-charge"}
Switch Interval4GridCharge "Switch on Grid Charge for Interval 4" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-4-grid-charge"}
Switch Interval5GridCharge "Switch on Grid Charge for Interval 5" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-5-grid-charge"}
Switch Interval6GridCharge "Switch on Grid Charge for Interval 6" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-6-grid-charge"}
Switch Interval1GenCharge "Switch on Generator Charge for Interval 1" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-1-gen-charge"}
Switch Interval2GenCharge "Switch on Generator Charge for Interval 2" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-2-gen-charge"}
Switch Interval3GenCharge "Switch on Generator Charge for Interval 3" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-3-gen-charge"}
Switch Interval4GenCharge "Switch on Generator Charge for Interval 4" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-4-gen-charge"}
Switch Interval5GenCharge "Switch on Generator Charge for Interval 5" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-5-gen-charge"}
Switch Interval6GenCharge "Switch on Generator Charge for Interval 6" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-6-gen-charge"}
DateTime Interval1GridTime "Time for Interval 1" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-1-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
DateTime Interval2GridTime "Time for Interval 2" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-2-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
DateTime Interval3GridTime "Time for Interval 3" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-3-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
DateTime Interval4GridTime "Time for Interval 4" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-4-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
DateTime Interval5GridTime "Time for Interval 5" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-5-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
DateTime Interval6GridTime "Time for Interval 6" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-6-grid-time", widget="widget:rlk_datetime_standalone"[label="Time Picker"]}
Number:Dimensionless Interval1GridCapacity "Charge Target Interval 1" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-1-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Dimensionless Interval2GridCapacity "Charge Target Interval 2" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-2-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Dimensionless Interval3GridCapacity "Charge Target Interval 3" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-3-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Dimensionless Interval4GridCapacity "Charge Target Interval 4" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-4-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Dimensionless Interval5GridCapacity "Charge Target Interval 5" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-5-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Dimensionless Interval6GridCapacity "Charge Target Interval 6" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-6-grid-capacity", widget="oh-slider-card",listWidget="oh-slider-item"[title="Target SOC",subtitle="Set % SOC"]}
Number:Power Interval1GridPowerLimit "Max Charge Power Interval 1" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-1-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Power Interval2GridPowerLimit "Max Charge Power Interval 2" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-2-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Power Interval3GridPowerLimit "Max Charge Power Interval 3" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-3-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Power Interval4GridPowerLimit "Max Charge Power Interval 4" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-4-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Power Interval5GridPowerLimit "Max Charge Power Interval 5" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-5-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Power Interval6GridPowerLimit "Max Charge Power Interval 6" {channel="sunsynk:inverter:xxx:1234567R1231234567890:interval-6-grid-power-limit", listWidget="oh-slider-item"[title="Target Power Limit",subtitle="Set Limit in Watts", min=0, max=8000,step=1000]}
Number:Dimensionless BatterySOC "Battery SOC [%s]" {channel ="sunsynk:inverter:xxx:1234567R1231234567890:battery-soc"}
Number:ElectricPotential BatteryGridVoltage "Battery Grid Voltage" {channel="sunsynk:inverter:xxx:1234567R1231234567890:battery-grid-voltage"}
Number:ElectricCurrent BatteryGridCurrent "Battery Grid Current" {channel="sunsynk:inverter:xxx:1234567R1231234567890:battery-grid-current"}
Number:Power BatteryGridPdower "Battery Grid Power" {channel="sunsynk:inverter:xxx:1234567R1231234567890:battery-grid-power"}
Number:Temperature BatteryTemperature "Battery Temperatue " {channel="sunsynk:inverter:xxx:1234567R1231234567890:battery-temperature"}
Number:Temperature InverterACTemperature "Inverter AC Temperature" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-ac-temperature"}
Number:Temperature InverterDCTemperature "Inverter DC Temperature" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-dc-temperature"}
Number:Power InverterGridPower "Inverter Grid Power" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-grid-power"}
Number:ElectricPotential InverterGridVoltage "Inverter Grid Voltage" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-grid-voltage"}
Number:ElectricCurrent InverterGridCurrent "Inverter Grid Current" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-grid-current"}
Number:Energy InverterSolarEnergyToday "Inverter Energy Today" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-solar-energy-today"}
Number:Energy InverterSolarEnergyTotal "Inverter Enery Gross" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-solar-energy-total"}
Number:Power InverterSolarPowerNow "Inverter Power" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-solar-power-now"}
Switch Interval6ControlTimer "Switch on System Mode Timer" {channel="sunsynk:inverter:xxx:1234567R1231234567890:inverter-control-timer"}
String InverterControlWorkMode "System Work Mode 0, 1 or 2" {channel="sunsynk:inverter:a1a6340bc0:E4701229R3312211229948:inverter-control-work-mode"}
String InverterControlPattern "System Mode Energy Pattern 0 or 1" {channel="sunsynk:inverter:a1a6340bc0:E4701229R3312211229948:inverter-control-energy-pattern"}
```
## DateTime Widget
The items file above adds Metadata: Default Standalone widget: [rlk_datetime_standalone](https://community.openhab.org/t/datetime-standalone-widget/127966) to the DateTime items. Only the time portion of the DateTime item is important.
Be sure to understand the time zone set up for the inverter, this can either be synchronised with Sun Synk servers, which in the UK at least applies daylight saving, or free-wheeling locally.
The times set in the DateTime items using the widget are not adjusted to any time zone and are sent to the SunSynk API as Strings where they will be applied directly to your inverter.
This is in contrast to other solar / energy APIs that use Zulu (GMT) time.
## Debugging
After installation, to gain further information on any issues you encounter you can turn on Debug [Logging](https://www.openhab.org/docs/administration/logging.html) either through the [karaf console](https://www.openhab.org/docs/administration/console.html) or through the openHAB UI.

View File

@ -36,11 +36,20 @@ To organize the various transformations one might use subfolders.
## Inline Map
Instead of providing the file name from which to load, the mapping table can be specified inline by prefixing it with the `|` character.
The "key=value" pairs are separated with a semicolon (`;`) or a newline character.
Instead of providing the file name from which to load, the mapping table can be specified inline by prefixing it with the pipe character `|` .
The inline map entries are delimited with semicolons (`;`) by default.
For example, the following map function translates open/closed to ON/OFF: `|open=ON; closed=OFF`
The delimiters can be changed by adding `?delimiter=` immediately after the pipe character `|`.
Some examples of changing to different delimiters:
- `|?delimiter=,online=ON,offline=OFF`
- `|?delimiter=|online=ON|offline=OFF`
- `|?delimiter=##online=ON##offline=OFF`
To use `?delimiter` as an actual map key, do not place it at the beginning of the map.
## Example
transform/binary.map:
@ -69,7 +78,7 @@ The functionality of this `TransformationService` can be used in a `Profile` on
To do so, it can be configured in the `.items` file as follows:
```java
String <itemName> { channel="<channelUID>"[profile="transform:MAP", function="<filename>", sourceFormat="<valueFormat>"]}
String <itemName> { channel="<channelUID>" [profile="transform:MAP", function="<filename>", sourceFormat="<valueFormat>" ] }
```
The mapping filename (within the `transform` folder) has to be set in the `function` parameter.
@ -77,3 +86,9 @@ The parameter `sourceFormat` is optional and can be used to format the input val
If omitted the default is `%s`, so the input value will be put into the transformation without any format changes.
Please note: This profile is a one-way transformation, i.e. only values from a device towards the item are changed, the other direction is left untouched.
To use an inline map in the profile:
```java
String <itemName> { channel="<channelUID>" [ profile="transform:MAP", function="|open=ON;closed=OFF" ] }
```

View File

@ -225,7 +225,7 @@
<channel-group-type id="presence">
<label>Presence Camera</label>
<channels>
<channel id="siren" typeId="siren-status-rw"/>
<channel id="siren" typeId="siren-status"/>
<channel id="floodlight" typeId="floodlight-mode"/>
</channels>
</channel-group-type>

View File

@ -0,0 +1,274 @@
<?xml version="1.0" encoding="UTF-8"?>
<thing:thing-descriptions bindingId="sunsynk"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
<bridge-type id="account">
<label>SunSynk Account</label>
<description>Access to SunSynk Account. Used to discover plants and inverters tied to account.</description>
<properties>
<property name="vendor">SunSynk</property>
</properties>
<config-description>
<parameter name="email" type="text" required="true">
<label>E-mail Address</label>
<description>E-mail address for your SunSynk Connect account.</description>
<context>email</context>
</parameter>
<parameter name="password" type="text" required="true">
<label>Password</label>
<description>Password for your SunSynk Connect account.</description>
<context>password</context>
</parameter>
</config-description>
</bridge-type>
<thing-type id="inverter">
<supported-bridge-type-refs>
<bridge-type-ref id="account"/>
</supported-bridge-type-refs>
<label>SunSynk Inverter</label>
<description>Inverter thing for SunSynk Binding.</description>
<channels>
<channel id="interval-1-grid-charge" typeId="grid-charge">
<label>Interval 1 Grid Charge</label>
</channel>
<channel id="interval-1-grid-time" typeId="grid-time">
<label>Interval 1 Start Time</label>
</channel>
<channel id="interval-1-grid-capacity" typeId="battery-target">
<label>Interval 1 Charge Target</label>
</channel>
<channel id="interval-1-grid-power-limit" typeId="power-charge-limit">
<label>Interval 1 Maximum Charge Rate</label>
</channel>
<channel id="interval-2-grid-charge" typeId="grid-charge">
<label>Interval 2 Grid Charge </label>
</channel>
<channel id="interval-2-grid-time" typeId="grid-time">
<label>Interval 2 Start Time</label>
</channel>
<channel id="interval-2-grid-capacity" typeId="battery-target">
<label>Interval 2 Charge Target</label>
</channel>
<channel id="interval-2-grid-power-limit" typeId="power-charge-limit">
<label>Interval 2 Maximum Charge Rate</label>
</channel>
<channel id="interval-3-grid-charge" typeId="grid-charge">
<label>Interval 3 Grid Charge</label>
</channel>
<channel id="interval-3-grid-time" typeId="grid-time">
<label>Interval 3 Start Time</label>
</channel>
<channel id="interval-3-grid-capacity" typeId="battery-target">
<label>Interval 3 Charge Target</label>
</channel>
<channel id="interval-3-grid-power-limit" typeId="power-charge-limit">
<label>Interval 3 Maximum Charge Rate</label>
</channel>
<channel id="interval-4-grid-charge" typeId="grid-charge">
<label>Interval 4 Grid Charge</label>
</channel>
<channel id="interval-4-grid-time" typeId="grid-time">
<label>Interval 4 Start Time</label>
</channel>
<channel id="interval-4-grid-capacity" typeId="battery-target">
<label>Interval 4 Charge Target</label>
</channel>
<channel id="interval-4-grid-power-limit" typeId="power-charge-limit">
<label>Interval 4 Maximum Charge Rate</label>
</channel>
<channel id="interval-5-grid-charge" typeId="grid-charge">
<label>Interval 5 Grid Charge</label>
</channel>
<channel id="interval-5-grid-time" typeId="grid-time">
<label>Interval 5 Start Time</label>
</channel>
<channel id="interval-5-grid-capacity" typeId="battery-target">
<label>Interval 5 Charge Target</label>
</channel>
<channel id="interval-5-grid-power-limit" typeId="power-charge-limit">
<label>Interval 5 Maximum Charge Rate</label>
</channel>
<channel id="interval-6-grid-charge" typeId="grid-charge">
<label>Interval 6 Grid Charge</label>
</channel>
<channel id="interval-6-grid-time" typeId="grid-time">
<label>Interval 6 Start Time</label>
</channel>
<channel id="interval-6-grid-capacity" typeId="battery-target">
<label>Interval 6 Charge Target</label>
</channel>
<channel id="interval-6-grid-power-limit" typeId="power-charge-limit">
<label>Interval 6 Maximum Charge Rate</label>
</channel>
<channel id="interval-1-gen-charge" typeId="gen-charge">
<label>Interval 1 Generator Charge</label>
</channel>
<channel id="interval-2-gen-charge" typeId="gen-charge">
<label>Interval 2 Generator Charge</label>
</channel>
<channel id="interval-3-gen-charge" typeId="gen-charge">
<label>Interval 3 Generator Charge</label>
</channel>
<channel id="interval-4-gen-charge" typeId="gen-charge">
<label>Interval 4 Generator Charge</label>
</channel>
<channel id="interval-5-gen-charge" typeId="gen-charge">
<label>Interval 5 Generator Charge</label>
</channel>
<channel id="interval-6-gen-charge" typeId="gen-charge">
<label>Interval 6 Generator Charge</label>
</channel>
<channel id="battery-soc" typeId="system.battery-level"/>
<channel id="battery-dc-voltage" typeId="system.electric-voltage">
<label>Battery Voltage</label>
<description>Measured voltage of the battery.</description>
</channel>
<channel id="battery-dc-current" typeId="system.electric-current">
<label>Battery Current</label>
<description>Measured current of the battery.</description>
</channel>
<channel id="battery-dc-power" typeId="system.electric-power">
<label>Battery Power</label>
<description>Measured power of the battery.</description>
</channel>
<channel id="battery-temperature" typeId="system.indoor-temperature">
<label>Battery Temperature</label>
<description>Temperature of the battery reported by the BMS.</description>
</channel>
<channel id="inverter-ac-temperature" typeId="system.indoor-temperature">
<label>Inverter AC Temperature</label>
<description>Temperature of the inverter ac side.</description>
</channel>
<channel id="inverter-dc-temperature" typeId="system.indoor-temperature">
<label>Inverter DC Temperature</label>
<description>Temperature of the inverter dc side.</description>
</channel>
<channel id="inverter-grid-power" typeId="system.electric-power">
<label>Grid Power</label>
<description>Grid power import/export.</description>
</channel>
<channel id="inverter-grid-voltage" typeId="system.electric-voltage">
<label>Grid Voltage</label>
<description>Measured voltage of the grid.</description>
</channel>
<channel id="inverter-grid-current" typeId="system.electric-current">
<label>Grid Current</label>
<description>Measured current of the grid.</description>
</channel>
<channel id="inverter-solar-energy-today" typeId="system.electric-energy">
<label>Solar Energy Today</label>
<description>Solar energy generted today.</description>
</channel>
<channel id="inverter-solar-energy-total" typeId="system.electric-energy">
<label>Solar Energy Total</label>
<description>Total solar energy generted.</description>
</channel>
<channel id="inverter-solar-power-now" typeId="system.electric-current">
<label>Solar Power</label>
<description>Solar power being generted.</description>
</channel>
<channel id="inverter-control-timer" typeId="control-timer"/>
<channel id="inverter-control-energy-pattern" typeId="control-pattern"/>
<channel id="inverter-control-work-mode" typeId="control-work-mode"/>
</channels>
<properties>
<property name="vendor">SunSynk</property>
</properties>
<representation-property>serialnumber</representation-property>
<config-description>
<parameter name="serialnumber" type="text" required="true">
<label>Inverter Serial Number</label>
<description>Serial number of the inverter from Sun Synk Connect.</description>
</parameter>
<parameter name="alias" type="text" required="true">
<label>Inverter Name</label>
<description>Name of inverter from Sun Synk Connect.</description>
</parameter>
<parameter name="refresh" type="integer" required="true">
<label>Refresh Interval</label>
<description>Time in seconds to retrieve status from Sun Synk Connect services. Greater than 60 seconds.</description>
<default>60</default>
<advanced>true</advanced>
</parameter>
</config-description>
</thing-type>
<channel-type id="grid-time" advanced="true">
<item-type>DateTime</item-type>
<label>Grid Charge Time</label>
<description>"Grid charging interval start time. Use 24hr time. 00:00 to 23:55 are valid in 5 min increments with
leading zero on the hour and minute. Interval times must be in ascending order."</description>
<state readOnly="false" pattern="%1$tH:%1$tM"/>
</channel-type>
<channel-type id="grid-charge" advanced="true">
<item-type>Switch</item-type>
<label>Grid Charge</label>
<description>Charge the inverter battery from the grid during this interval.</description>
<state readOnly="false"/>
</channel-type>
<channel-type id="gen-charge" advanced="true">
<item-type>Switch</item-type>
<label>Generator (AUX) Charge</label>
<description>Charge the inverter battery from the generator (auxilary) during this interval.</description>
<state readOnly="false"/>
</channel-type>
<channel-type id="battery-target" advanced="true">
<item-type>Number:Dimensionless</item-type>
<label>Target Charge Level</label>
<description>The desired charge level of the battery (%).</description>
<category>Battery</category>
<state min="0" max="100" step="1" pattern="%d %%" readOnly="false"/>
</channel-type>
<channel-type id="power-charge-limit" advanced="true">
<item-type>Number:Power</item-type>
<label>Maximum Charge Rate</label>
<description>maximum charge power desired (limited by inverter capability).</description>
<category>Inverter</category>
<state pattern="%d %unit%" readOnly="false"/>
</channel-type>
<channel-type id="control-timer" advanced="true">
<item-type>Switch</item-type>
<label>System Timer</label>
<description>Use the system mode timer to control battery charge discharge.</description>
<state readOnly="false"/>
</channel-type>
<channel-type id="control-pattern" advanced="true">
<item-type>String</item-type>
<label>System Energy Pattern</label>
<description>Set the system mode energy pattern to '0' Priority Battery or '1' Priority Load.</description>
<command>
<options>
<option value="0">Priority Battery</option>
<option value="1">Priority Load</option>
</options>
</command>
</channel-type>
<channel-type id="control-work-mode" advanced="true">
<item-type>String</item-type>
<label>System Work Mode</label>
<description>Set the work mode to '0' Selling First; '1' Zero-Export + Limted to Load or '2' Limited to Home.</description>
<command>
<options>
<option value="0">Selling First</option>
<option value="1">"Zero-Export + Limted to Load"</option>
<option value="2">Limited to Home</option>
</options>
</command>
</channel-type>
</thing:thing-descriptions>