# Sager Weathercaster Binding

The Sager Weathercaster is a scientific instrument for accurate prediction of the weather.

## Limitations

- To operate, this binding will need to use channel values provided by other means (e.g. Weather Binding, Netatmo, a 1-Wire personal weather station...).

- This binding buffers readings for some hours before producing weather forecasts (wind direction and sea level pressure).

For these reasons, this binding is not a binding in the usual sense.

## Discovery

A default `sagercaster` Thing will be automatically discovered, based on system location.

## Binding Configuration

The binding itself does not require any configuration.

## Thing Configuration

### SagerCaster

| Name         | Type     | Description                                            |
| ------------ | -------- | ------------------------------------------------------ |
| location (*) | Location | Latitude and longitude of the desired weather forecast |

(*) Only latitude is used by the algorithm.

## Channels

The binding will use some input channels, that can be configured directly with profiles (sample below).

| Name                | Group  | Type                 | Description                                                           |
| ------------------- | ------ | -------------------- | --------------------------------------------------------------------- |
| is-raining (*)      | input  | Switch               | On if it is raining, else Off.                                        |
| rain-qtty  (*)      | input  | Number               | Any value that gives indication of a current rain volume.             |
|        or           | input  | Number:Speed         | Any value that gives indication of a current rain volume eg mm/h      |
|        or           | input  | Number:Length        | Any value that gives indication of a current rain volume eg mm        |
| cloudiness          | input  | Number:Dimensionless | Cloud cover percentage.                                               |
| wind-speed-beaufort | input  | Number               | Wind speed expressed using the Beaufort scale.                        |
| pressure            | input  | Number:Pressure      | Sea level pressure.                                                   |
| wind-angle          | input  | Number:Angle         | Wind direction.                                                       |
| temperature         | input  | Number:Temperature   | Outside temperature.                                                  |
| timestamp           | output | DateTime             | Timestamp of the last forecast update.                                |
| forecast            | output | String               | Description of the weather forecast.                                  |
| velocity            | output | String               | Description of the expected wind evolution.                           |
| velocity-beaufort   | output | Number               | Expected wind evolution using the Beaufort scale.                     |
| wind-from           | output | String               | Expected wind orientation.                                            |
| wind-to             | output | String               | Evolution of the expected wind orientation.                           |
| wind-evolution      | output | String               | Wind orientation evolution over observation period.                   |
| pressure-trend      | output | String               | Pressure evolution over observation period.                           |
| temperature-trend   | output | String               | Temperature evolution over observation period.                        |
| reliability         | output | Number:Dimensionless | Algorithm efficiency toward buffered data, grows during first 6 hours |

(*) You may use either is-raining or rain-qtty depending upon the data available in your system.

## Full Example

### Things

```java
sagercaster:sagercaster:triel "Sager Triel" @ "Outside" [location="48,2"]
```

### Items

Input channel can be updated via profiles in versions of OH > 2.4.

```java
Number:Pressure NWS_Abs_Pressure "Pression absolue" <pressure> {channel="netatmo:NAMain:home:insidews:AbsolutePressure", channel="sagercaster:sagercaster:triel:input#pressure" [profile="follow"]}
Number:Angle NWS_wind_angle   "Orientation [%d°]"  {channel="netatmo:NAModule2:home:anemometre:WindAngle", channel="sagercaster:sagercaster:triel:input#wind-angle" [profile="follow"]}
Number:Dimensionless OWM_Cloudiness "Cloudiness [%d %unit%]" <clouds> {channel="openweathermap:weather-and-forecast:api:local:current#cloudiness", channel="sagercaster:sagercaster:triel:input#cloudiness" [profile="follow"] }
Number Synop_beaufort "Beaufort [%d]" <beaufort> {channel="synopanalyzer:synopanalyzer:orly:wind-speed-beaufort", channel="sagercaster:sagercaster:triel:input#wind-speed-beaufort" [profile="follow"] }
Number:Length NWS_rain_1h "Précipitation 1h [%.2f %unit%]" <rain> {channel="netatmo:NAModule3:home:pluviometre:SumRain1", channel="sagercaster:sagercaster:triel:input#rain-qtty" [profile="follow"]}
```

Here is the definition of output channels

```java
// Items directly derived from inputs
String  SWC_windevolution       "Wind Evolution"                        (gSager)                {channel="sagercaster:sagercaster:triel:output#wind-evolution"}
String  SWC_presstrend          "Pressure Trend"                        (gSager)                {channel="sagercaster:sagercaster:triel:output#pressure-trend"}

// SagerWeatherCaster Forecast Items
String  SWC_forecast            "Weather Forecast"                      (gSager)                {channel="sagercaster:sagercaster:triel:output#forecast"}
String  SWC_velocity            "Wind Velocity"                         (gSager)                {channel="sagercaster:sagercaster:triel:output#velocity"}
String  SWC_windfrom            "Wind from"                             (gSager)                {channel="sagercaster:sagercaster:triel:output#wind-from"}

DateTime SWC_ObservationTime    "Timestamp [%1$tH:%1$tM]"       <time>  (gSager, gTrackAge)     {channel="sagercaster:sagercaster:triel:output#timestamp" }
```
