val String filename = "astro.rules"
rule "OpenHAB system started - astro"
when
System started
then
createTimer(now.plusSeconds(180)) [|
logInfo(filename, "--> astro init")
if (now.isAfter((Sunset_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli) ||
now.isBefore((Sunrise_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
) {
Night_State.postUpdate(ON)
} else {
Night_State.postUpdate(OFF)
}
]
end
rule "Update Night_State"
when
Item Sun_Elevation changed
then
if (Sun_Elevation.state > 0) {
if (Night_State.state != OFF) Night_State.postUpdate(OFF)
} else {
if (Night_State.state != ON) Night_State.postUpdate(ON)
}
end
rule "Calculate time of day state"
when
System started or
Channel 'astro:sun:home:rise#event' triggered START or
Channel 'astro:sun:home:set#event' triggered START or
Channel 'astro:sun:minus90:set#event' triggered START or
Time cron "0 0 6,23,0 * * ? *"
then
//Thread::sleep(1000) // make sure we are a tad past midnight to give Astro a chance to recalculate DateTimes for today
val long morning_start = now.withTimeAtStartOfDay.plusHours(6).millis
val long day_start = (Sunrise_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
val long afternoon_start = (Evening_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
val long evening_start = (Sunset_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
val long night_start = now.withTimeAtStartOfDay.plusHours(23).millis
val long bed_start = now.withTimeAtStartOfDay.millis
var curr = switch now {
case now.isAfter(morning_start) && now.isBefore(day_start): "MORNING"
case now.isAfter(day_start) && now.isBefore(afternoon_start): "DAY"
case now.isAfter(afternoon_start) && now.isBefore(evening_start): "AFTERNOON"
case now.isAfter(evening_start) && now.isBefore(night_start): "EVENING"
case now.isAfter(night_start): "NIGHT"
case now.isAfter(bed_start) && now.isBefore(morning_start): "BED"
}
if (Time_Of_Day.state.toString != curr) {
logInfo(filename, "Current time of day is now " + curr)
Time_Of_Day.postUpdate(curr)
}
end
habe den zweiten teil der rule schonmal probiert und diese geht auch soweit
Unbenannt.PNG
Unbenannt1.PNG
weiß aber nicht genau wie ich die anderen beiden machen könnte.
wenn ich die astro.rule so 1 zu 1 auf OH3 ziehe funktioniert diese nicht
deswegen ist der plan es neu zumachen
Hallo @SIDE22,
ich habe deine Rules unabhängig von Struktur und Logik (dazu hatten udo1toni und Cyrelian ja schon geschrieben) einfach mal so verändert, dass sie unter OH3 wieder laufen müssten. Ich hatte da in den letzten Tagen auch so einiges bei mir ändern müssen. Vielleicht hilft es dir ja...
Man sieht daran vielleicht auch, was bezüglich DateTime so zu ändern ist, manches vereinfacht sich. Viel Erfolg.
val String filename = "astro.rules"
rule "OpenHAB system started - astro"
when
System started //Rule ist eigentlich überflüssig, siehe vorherige Kommentare/Antworten
then
createTimer(now.plusSeconds(180)) [|
logInfo(filename, "--> astro init")
if (now.isAfter((Sunset_Time.state as DateTimeType).zonedDateTime) ||
now.isBefore((Sunrise_Time.state as DateTimeType).zonedDateTime))
{
Night_State.postUpdate(ON)
} else {
Night_State.postUpdate(OFF)
}
]
end
rule "Update Night_State"
when
Item Sun_Elevation changed
then
if (Sun_Elevation.state > 0) {
if (Night_State.state != OFF) Night_State.postUpdate(OFF)
} else {
if (Night_State.state != ON) Night_State.postUpdate(ON)
}
end
rule "Calculate time of day state"
when
System started or
Channel 'astro:sun:home:rise#event' triggered START or
Channel 'astro:sun:home:set#event' triggered START or
Channel 'astro:sun:minus90:set#event' triggered START or
Time cron "0 0 6,23,0 * * ? *"
then
//Thread::sleep(1000) // make sure we are a tad past midnight to give Astro a chance to recalculate DateTimes for today
val morning_start = now.with(LocalTime.MIDNIGHT).plusHours(6)
val day_start = (Sunrise_Time.state as DateTimeType).zonedDateTime
val afternoon_start = (Evening_Time.state as DateTimeType).zonedDateTime
val evening_start = (Sunset_Time.state as DateTimeType).zonedDateTime
val night_start = now.with(LocalTime.MIDNIGHT).plusHours(23)
val bed_start = now.with(LocalTime.MIDNIGHT)
var curr = switch now {
case now.isAfter(morning_start) && now.isBefore(day_start): "MORNING"
case now.isAfter(day_start) && now.isBefore(afternoon_start): "DAY"
case now.isAfter(afternoon_start) && now.isBefore(evening_start): "AFTERNOON"
case now.isAfter(evening_start) && now.isBefore(night_start): "EVENING"
case now.isAfter(night_start): "NIGHT"
case now.isAfter(bed_start) && now.isBefore(morning_start): "BED"
}
if (Time_Of_Day.state.toString != curr) {
logInfo(filename, "Current time of day is now " + curr)
Time_Of_Day.postUpdate(curr)
}
end
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)
Hey,
kennt sich damit den einer aus ? ..
und könnte ggf helfen ?
LG
Florian
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)
Also, die System started Rule ist sinnlos. Der Status vom Item wird gesetzt, sobald sich elevation ändert, das ist der Fall, wenn Astro initialisiert wird.
Gesendet von meinem SM-G973F mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
rule "IsDay"
when
Channel 'astro:sun:home:daylight#event' triggered START
then
IsDay.sendCommand(ON)
IsTwilight.sendCommand(OFF)
IsNight.sendCommand(OFF)
end
rule "IsTwilight"
when
Channel 'astro:sun:home:set#event' triggered END
then
IsDay.sendCommand(OFF)
IsTwilight.sendCommand(ON)
IsNight.sendCommand(OFF)
end
rule "IsNight"
when
Channel 'astro:sun:home:civilDusk#event' triggered END
then
IsDay.sendCommand(OFF)
IsTwilight.sendCommand(OFF)
IsNight.sendCommand(ON)
end
Nur mal so als Idee. Man kann die Rules auch zusammenfassen mit den verschiedenen Triggern. Das mit dem System Started macht da wirklich keinen Sinn. Das Astro Binding hat über den Tag viele Trigger die deine Rule 3 ersetzen können. Z.b.
Hallo @SIDE22,
ich habe deine Rules unabhängig von Struktur und Logik (dazu hatten udo1toni und Cyrelian ja schon geschrieben) einfach mal so verändert, dass sie unter OH3 wieder laufen müssten. Ich hatte da in den letzten Tagen auch so einiges bei mir ändern müssen. Vielleicht hilft es dir ja...
Man sieht daran vielleicht auch, was bezüglich DateTime so zu ändern ist, manches vereinfacht sich. Viel Erfolg.
val String filename = "astro.rules"
rule "OpenHAB system started - astro"
when
System started //Rule ist eigentlich überflüssig, siehe vorherige Kommentare/Antworten
then
createTimer(now.plusSeconds(180)) [|
logInfo(filename, "--> astro init")
if (now.isAfter((Sunset_Time.state as DateTimeType).zonedDateTime) ||
now.isBefore((Sunrise_Time.state as DateTimeType).zonedDateTime))
{
Night_State.postUpdate(ON)
} else {
Night_State.postUpdate(OFF)
}
]
end
rule "Update Night_State"
when
Item Sun_Elevation changed
then
if (Sun_Elevation.state > 0) {
if (Night_State.state != OFF) Night_State.postUpdate(OFF)
} else {
if (Night_State.state != ON) Night_State.postUpdate(ON)
}
end
rule "Calculate time of day state"
when
System started or
Channel 'astro:sun:home:rise#event' triggered START or
Channel 'astro:sun:home:set#event' triggered START or
Channel 'astro:sun:minus90:set#event' triggered START or
Time cron "0 0 6,23,0 * * ? *"
then
//Thread::sleep(1000) // make sure we are a tad past midnight to give Astro a chance to recalculate DateTimes for today
val morning_start = now.with(LocalTime.MIDNIGHT).plusHours(6)
val day_start = (Sunrise_Time.state as DateTimeType).zonedDateTime
val afternoon_start = (Evening_Time.state as DateTimeType).zonedDateTime
val evening_start = (Sunset_Time.state as DateTimeType).zonedDateTime
val night_start = now.with(LocalTime.MIDNIGHT).plusHours(23)
val bed_start = now.with(LocalTime.MIDNIGHT)
var curr = switch now {
case now.isAfter(morning_start) && now.isBefore(day_start): "MORNING"
case now.isAfter(day_start) && now.isBefore(afternoon_start): "DAY"
case now.isAfter(afternoon_start) && now.isBefore(evening_start): "AFTERNOON"
case now.isAfter(evening_start) && now.isBefore(night_start): "EVENING"
case now.isAfter(night_start): "NIGHT"
case now.isAfter(bed_start) && now.isBefore(morning_start): "BED"
}
if (Time_Of_Day.state.toString != curr) {
logInfo(filename, "Current time of day is now " + curr)
Time_Of_Day.postUpdate(curr)
}
end
Hallo,
danke euch aufjedenfall ja der erste Rule mit dem start da gebe ich euch wohl recht ^^
und danke dir LCN-User habe die rule mal übernommen und es scheint zu gehen
habe die mit dem systemstart auch weggelassen
danke für eure hilfe
aber dann ist man langsam mit den rules vertraut und hat das smarthome soweit fertig und dann kommt OH3 und man fängt nebenbei wieder von vorne an
LG
Florian
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)