# aWATTar Binding

This binding provides access to the hourly prices for electricity for the German and Austrian provider aWATTar.

# Supported Things

There are three supported things.

# aWATTar Bridge

The bridge reads price data from the aWATTar API and stores the (optional) config values for VAT and energy base price.

# Prices Thing

The prices Thing provides todays and (after 14:00) tomorrows net and gross prices.

# Bestprice Thing

The bestprice Thing identifies the hours with the cheapest prices based on the given parameters.

Note: The Thing will schedule updates of the aWATTar API at 15:00, 18:00 and 21:00. If late updates occur, e.g. after 21:00, there is a chance that consecutive best prices will be rescheduled. As a consequence, a time schedule spanning over an update slot might be interrupted and rescheduled.

# Discovery

Auto discovery is not supported.

# Thing Configuration

# aWATTar Bridge

Parameter Description
vatPercent Percentage of the value added tax to apply to net prices. Optional, defaults to 19.
basePrice The net(!) base price you have to pay for every kWh. Optional, but you most probably want to set it based on you delivery contract.
timeZone The time zone the hour definitions of the things below refer to. Default is CET, as it corresponds to the aWATTar API. It is strongly recommended not to change this. However, if you do so, be aware that the prices delivered by the API will not cover a whole calendar day in this timezone. Advanced
country The country prices should be received for. Use DE for Germany or AT for Austria. DE is the default.

# Prices Thing

The prices thing does not need any configuration.

# Bestprice Thing

Parameter Description
rangeStart First hour of the time range the binding should search for the best prices. Default: 0
rangeDuration The duration of the time range the binding should search for best prices. Default: 24
length number of best price hours to find within the range. This value has to be at least 1 and below rangeDuration Default: 1
consecutive if true, the thing identifies the cheapest consecutive range of length hours within the lookup range. Otherwise, the thing contains the cheapest length hours within the lookup range. Default: true
inverted if true, the worst prices will be searched instead of the best. Does currently not work in combination with 'consecutive'. Default: false

# Limitations

The channels of a bestprice thing are only defined when the binding has enough data to compute them. The thing is recomputed after the end of the candidate time range for the next day, but only as soon as data for the next day is available from the aWATTar API, which is around 14:00. So for a bestprice thing with [ rangeStart=5, rangeDuration=5 ] all channels will be undefined from 10:00 to 14:00. Also, due to the time the aWATTar API delivers the data for the next day, it doesn't make sense to define a thing with [ rangeStart=12, rangeDuration=20 ] as the binding will be able to compute the channels only after 14:00.

# Channels

# Bridge

The bridge has two channels which support a time-series:

channel type description
market-net Number:EnergyPrice This net market price per kWh. This is directly taken from the price the aWATTar API delivers.
total-net Number:EnergyPrice Sum of net market price and configured base price

If you need gross prices, please use the VAT profile (opens new window).

# Prices Thing

For every hour, the prices thing provides the following prices:

channel type description
market-net Number This net market price per kWh. This is directly taken from the price the aWATTar API delivers.
market-gross Number The market price including VAT, using the defined VAT percentage.
total-net Number Sum of net market price and configured base price
total-gross Number Sum of market and base price with VAT applied. Most probably this is the final price you will have to pay for one kWh in a certain hour

All prices are available in each of the following channel groups:

channel group description
current The prices for the current hour
today00, today01, today02 ... today23 Hourly prices for today. today00 provides the price from 0:00 to 1:00, today01 from 1:00 to 02:00 and so on. As long as the API is working, this data should always be available
tomorrow00, tomorrow01, ... tomorrow23 Hourly prices for the next day. They should be available starting at 14:00.

# Bestprice Thing

channel type description
active Switch ON if the current time is within the bestprice period, OFF otherwise. If consecutive was set to false, this channel may change between ON and OFF multiple times within the bestprice period.
start DateTime The exact start time of the bestprice range. If consecutive was false, it is the start time of the first hour found.
end DateTime The exact end time of the bestprice range. If consecutive was false, it is the end time of the last hour found.
countdown Number:Time The time in minutes until start of the bestprice range. If start time passed. the channel will be set to UNDEFINED until the values for the next day are available.
remaining Number:Time The time in minutes until end of the bestprice range. If start time passed. the channel will be set to UNDEFINED until the values for the next day are available.
hours String A comma separated list of hours this bestprice period contains.

# Full Example

# Things

awattar.things:

Bridge awattar:bridge:bridge1 "aWATTar Bridge" [ country="DE", vatPercent="19", basePrice="17.22"] {
 Thing prices price1 "aWATTar Price" []
// The car should be loaded for 4 hours during the night
 Thing bestprice carloader "Car Loader" [ rangeStart="22", rangeDuration="8", length="4", consecutive="true" ]
// In the cheapest hour of the night the garden should be watered
 Thing bestprice water "Water timer" [ rangeStart="19", rangeDuration="12", length="1" ]
// The heatpump should run the 12 cheapest hours per day
 Thing bestprice heatpump "Heat pump" [ length="12", consecutive="false" ]
}

# Items

awattar.items:

Number:Dimensionless currentnet "Current price [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:current#market-net" }
Number:Dimensionless currentgross "Current price [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:current#market-gross" }
Number:Dimensionless totalnet "Current price [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:current#total-net" }
Number:Dimensionless totalgross "Current price [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:current#total-gross" }
Number:Dimensionless totalgross "Current price [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:current#total-gross" }

Number:Dimensionless today00 "Today 00-01 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today00#total-gross" }
Number:Dimensionless today01 "Today 01-02 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today01#total-gross" }
Number:Dimensionless today02 "Today 02-03 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today02#total-gross" }
Number:Dimensionless today03 "Today 03-04 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today03#total-gross" }
Number:Dimensionless today04 "Today 04-05 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today04#total-gross" }
Number:Dimensionless today05 "Today 05-06 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today05#total-gross" }
Number:Dimensionless today06 "Today 06-07 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today06#total-gross" }
Number:Dimensionless today07 "Today 07-08 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today07#total-gross" }
Number:Dimensionless today08 "Today 08-09 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today08#total-gross" }
Number:Dimensionless today09 "Today 09-10 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today09#total-gross" }
Number:Dimensionless today10 "Today 10-11 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today10#total-gross" }
Number:Dimensionless today11 "Today 11-12 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today11#total-gross" }
Number:Dimensionless today12 "Today 12-13 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today12#total-gross" }
Number:Dimensionless today13 "Today 13-14 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today13#total-gross" }
Number:Dimensionless today14 "Today 14-15 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today14#total-gross" }
Number:Dimensionless today15 "Today 15-16 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today15#total-gross" }
Number:Dimensionless today16 "Today 16-17 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today16#total-gross" }
Number:Dimensionless today17 "Today 17-18 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today17#total-gross" }
Number:Dimensionless today18 "Today 18-19 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today18#total-gross" }
Number:Dimensionless today19 "Today 19-20 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today19#total-gross" }
Number:Dimensionless today20 "Today 20-21 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today20#total-gross" }
Number:Dimensionless today21 "Today 21-22 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today21#total-gross" }
Number:Dimensionless today22 "Today 22-23 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today22#total-gross" }
Number:Dimensionless today23 "Today 23-00 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:today23#total-gross" }

Number:Dimensionless tomorrow00 "Tomorrow 00-01 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow00#total-gross" }
Number:Dimensionless tomorrow01 "Tomorrow 01-02 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow01#total-gross" }
Number:Dimensionless tomorrow02 "Tomorrow 02-03 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow02#total-gross" }
Number:Dimensionless tomorrow03 "Tomorrow 03-04 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow03#total-gross" }
Number:Dimensionless tomorrow04 "Tomorrow 04-05 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow04#total-gross" }
Number:Dimensionless tomorrow05 "Tomorrow 05-06 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow05#total-gross" }
Number:Dimensionless tomorrow06 "Tomorrow 06-07 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow06#total-gross" }
Number:Dimensionless tomorrow07 "Tomorrow 07-08 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow07#total-gross" }
Number:Dimensionless tomorrow08 "Tomorrow 08-09 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow08#total-gross" }
Number:Dimensionless tomorrow09 "Tomorrow 09-10 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow09#total-gross" }
Number:Dimensionless tomorrow10 "Tomorrow 10-11 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow10#total-gross" }
Number:Dimensionless tomorrow11 "Tomorrow 11-12 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow11#total-gross" }
Number:Dimensionless tomorrow12 "Tomorrow 12-13 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow12#total-gross" }
Number:Dimensionless tomorrow13 "Tomorrow 13-14 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow13#total-gross" }
Number:Dimensionless tomorrow14 "Tomorrow 14-15 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow14#total-gross" }
Number:Dimensionless tomorrow15 "Tomorrow 15-16 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow15#total-gross" }
Number:Dimensionless tomorrow16 "Tomorrow 16-17 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow16#total-gross" }
Number:Dimensionless tomorrow17 "Tomorrow 17-18 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow17#total-gross" }
Number:Dimensionless tomorrow18 "Tomorrow 18-19 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow18#total-gross" }
Number:Dimensionless tomorrow19 "Tomorrow 19-20 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow19#total-gross" }
Number:Dimensionless tomorrow20 "Tomorrow 20-21 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow20#total-gross" }
Number:Dimensionless tomorrow21 "Tomorrow 21-22 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow21#total-gross" }
Number:Dimensionless tomorrow22 "Tomorrow 22-23 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow22#total-gross" }
Number:Dimensionless tomorrow23 "Tomorrow 23-00 [%2.2f ct/kWh]"  { channel="awattar:prices:bridge1:price1:tomorrow23#total-gross" }

DateTime CarStart "Start car loader [%1$tH:%1$tM]"  { channel="awattar:bestprice:bridge1:carloader:start" }
DateTime CarEnd "End car loader [%1$tH:%1$tM]"  { channel="awattar:bestprice:bridge1:carloader:end" }
String CarCountdown "Countdown for car loader [%s]"  { channel="awattar:bestprice:bridge1:carloader:countdown" }
String CarHours "Hours for car loader [%s]"  { channel="awattar:bestprice:bridge1:carloader:hours" }
Switch CarActive { channel="awattar:bestprice:bridge1:carloader:active" }

Switch WaterActive { channel="awattar:bestprice:bridge1:water:active" }
Switch HeatpumpActive { channel="awattar:bestprice:bridge1:heatpump:active" }

# Sitemap

sitemap default label="aWATTar Sitemap"
{
 Frame label="Car Loader" {
  Switch item=CarActive
  Text item=CarCountdown
  Text item=CarStart
  Text item=CarEnd
  Text item=CarHours
 }
 Frame label="Current Prices" {
  Text label="Current Net" item=currentnet
  Text label="Current Gross" item=currentgross
  Text label="Total Net" item=totalnet
  Text label="Total Gross" item=totalgross
 }
 Frame label="Todays Prices (total gross)" {
  Text item=today00
  Text item=today01
  Text item=today02
  Text item=today03
  Text item=today04
  Text item=today05
  Text item=today06
  Text item=today07
  Text item=today08
  Text item=today09
  Text item=today10
  Text item=today11
  Text item=today12
  Text item=today13
  Text item=today14
  Text item=today15
  Text item=today16
  Text item=today17
  Text item=today18
  Text item=today19
  Text item=today20
  Text item=today21
  Text item=today22
  Text item=today23
 }
 Frame label="Tomorrows Prices (total gross)" {
  Text item=tomorrow00
  Text item=tomorrow01
  Text item=tomorrow02
  Text item=tomorrow03
  Text item=tomorrow04
  Text item=tomorrow05
  Text item=tomorrow06
  Text item=tomorrow07
  Text item=tomorrow08
  Text item=tomorrow09
  Text item=tomorrow10
  Text item=tomorrow11
  Text item=tomorrow12
  Text item=tomorrow13
  Text item=tomorrow14
  Text item=tomorrow15
  Text item=tomorrow16
  Text item=tomorrow17
  Text item=tomorrow18
  Text item=tomorrow19
  Text item=tomorrow20
  Text item=tomorrow21
  Text item=tomorrow22
  Text item=tomorrow23
 }
}

# Usage hints

The idea of this binding is to support both automated and non automated components of your home. For automated components, just decide when and how long you want to power them on and use the active switch of the bestprice thing to do so. Many non automated components still allow some kind of locally programmed start and end times, e.g. washing machines or dishwashers. So if you know your dishwasher needs less than 3 hour for one run and you want it to be done the next morning, use either the countdown or the remaining channel of a bestprice thing to determine the best start or end time to select.