Sunrise / Sunset EventΒΆ

Description

This rule executes when the sun sets or rises.

Devices

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
  "devices": {
    "currentdatetime": {
      "protocol": [ "datetime" ],
      "id": [{
        "longitude": 1.2345,
        "latitude": 12.3456
      }],
      "year": 2015,
      "month": 1,
      "day": 27,
      "hour": 14,
      "minute": 37,
      "second": 8,
      "weekday": 3,
      "dst": 1
    },
    "sunrisesetdevice": {
      "protocol": [ "sunriseset" ],
      "id": [{
        "longitude": 1.234567,
        "latitude": 12.123456
      }],
      "sunrise": 6.40,
      "sunset": 18.50,
      "sun": "rise"
    },
    "light": {
      "protocol": [ "kaku_switch" ],
      "id": [{
        "id": 123456,
        "unit": 0
      }],
      "state": "off"
    }
  }
}

Rule

By using math

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "sunset": {
    "rule": "IF ((sunrisesetdevice.sunset == (currentdatetime.hour + (currentdatetime.minute / 100)) AND light.state IS off) AND currentdatetime.second == 0) THEN switch DEVICE light TO on",
    "active": 1
  },
  "sunrise": {
    "rule": "IF ((sunrisesetdevice.sunrise == (currentdatetime.hour + (currentdatetime.minute / 100)) AND light.state IS off) AND currentdatetime.second == 0) THEN switch DEVICE light TO on",
    "active": 1
  }
}

By using the DATE_FORMAT function

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "sunset": {
    "rule": "IF (sunrisesetdevice.sunset == DATE_FORMAT(currentdatetime, %H.%M)) AND light.state IS off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  },
  "sunrise": {
    "rule": "IF (sunrisesetdevice.sunrise == DATE_FORMAT(currentdatetime, %H.%M)) AND light.state IS off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  }
}

Or an hour before the sun sets:

1
2
3
4
5
6
{
  "sunset": {
    "rule": "IF (sunrisesetdevice.sunset == DATE_FORMAT(DATE_ADD(currentdatetime, +1 HOUR), \"%Y-%m-%d %H:%M:%S\", %H.%M)) AND light.state IS off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  }
}

Changed in version 8.1.0.

By using math

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "sunset": {
    "rule": "IF ((sunrisesetdevice.sunset == (currentdatetime.hour + (currentdatetime.minute / 100)) AND light.state == off) AND currentdatetime.second == 0) THEN switch DEVICE light TO on",
    "active": 1
  },
  "sunrise": {
    "rule": "IF ((sunrisesetdevice.sunrise == (currentdatetime.hour + (currentdatetime.minute / 100)) AND light.state == off) AND currentdatetime.second == 0) THEN switch DEVICE light TO on",
    "active": 1
  }
}

By using the DATE_FORMAT function

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "sunset": {
    "rule": "IF (sunrisesetdevice.sunset == DATE_FORMAT(currentdatetime, %H.%M)) AND light.state == off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  },
  "sunrise": {
    "rule": "IF (sunrisesetdevice.sunrise == DATE_FORMAT(currentdatetime, %H.%M)) AND light.state == off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  }
}

Or an hour before the sun sets:

1
2
3
4
5
6
{
  "sunset": {
    "rule": "IF (sunrisesetdevice.sunset == DATE_FORMAT(DATE_ADD(currentdatetime, '+1 HOUR'), '%Y-%m-%d %H:%M:%S', %H.%M)) AND light.state == off AND currentdatetime.second == 0 THEN switch DEVICE light TO on",
    "active": 1
  }
}