Hi,
maybe the following example can help you:
I have an irrigation system consisting of four (4) lines (Strang1, Strang2, Vordergarten, BlumenHinten).
I have also a cistern with a pump as well a a humidity sensor in the lawn.
Note that switches (weekdays from Montag/Monday to Sonntag/Sunday) and Numbers (Stunde/hours and Minute/minutes) per line are also defined.
My item file Looks like this:
// ### Bewaesserungstimer ##################################################################################################################
String Bewaesserungstimer “[%s]”
Switch weckerMontag “Montag” (gWeckerWochentage)
Switch weckerDienstag “Dienstag” (gWeckerWochentage)
Switch weckerMittwoch “Mittwoch” (gWeckerWochentage)
Switch weckerDonnerstag “Donnerstag” (gWeckerWochentage)
Switch weckerFreitag “Freitag” (gWeckerWochentage)
Switch weckerSamstag “Samstag” (gWeckerWochentage)
Switch weckerSonntag “Sonntag” (gWeckerWochentage)
String weckerZeitMessage “%s”
Number weckerZeitStunde “Stunde [%d]” (gWeckerZeit)
Number weckerZeitMinute “Minute [%d]” (gWeckerZeit)
Number weckerZeitMinuteTimer “Minute [%d]” (gWeckerZeit)
Number weckerZeitStundeTimer “Minute [%d]” (gWeckerZeit)
Number weckerZeitDauerStrang1 “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerTimerStrang1 “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerStrang2 “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerTimerStrang2 “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerTerrasse “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerTimerTerrasse “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerVorne “Dauer in Minuten [%d]” (gWeckerZeit)
Number weckerZeitDauerTimerVorne “Dauer in Minuten [%d]” (gWeckerZeit)
Number ZeitHelp “ZeitHelp [%d]”
Dimmer Strang1 “Strang 1 [%d %%]” (Steckdose, Garten, Bewaesserung) { rwe=“id=25de4c34-66fb-4fc5-a5ba-a006228439fb,param=dimmer” }
Dimmer Strang2 “Strang 2 [%d %%]” (Steckdose, Garten, Bewaesserung) { rwe=“id=3276a4bc-1cb9-4e56-9e77-6d8fd139eff4,param=dimmer” }
Dimmer Vordergarten “Vordergarten [%d %%]” (Steckdose, Garten, Bewaesserung) { rwe=“id=ce6863fa-a67d-4219-8047-505e060aada7,param=dimmer” }
Dimmer BlumenHinten “Blumen Hinten [%d %%]” (Steckdose, Garten, Bewaesserung) { rwe=“id=aa20a890-2647-47c0-9b8e-6408bbbe03c2,param=dimmer” }
Number Bewaesserung_Chart_Period “Bewaesserung_Chart_Period”
Switch Zisternenpumpe “Zisternenpumpe” (Steckdose, Garten) {rwe=“id=f607806f-7360-4c68-bdc5-a854f273f8b4,param=switch”}
Number Bewaesserungszeit “Bewaesserungszeit”
Number Countdown “Countdown [%.0f]”
Number FeuchteRasen1 “Feuchte Rasen1 [%.0f]” (Garten, Bodenfeuchte) { exec="<[/data/OpenHab/NETAVRIO.sh:60000:REGEX((.*?))]" }
Number FeuchteRasen_Chart_Period “Bewaesserung_Chart_Period”
Based on the example presented here “https://github.com/openhab/openhab/wiki/Samples-Rules#irrigation-controller” I have adopted the rule to the follwing:
// ### Zeit Minuten ################################################################################################################
rule “Zeit Minuten”
when
Item weckerZeitMinuteTimer received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitMinute, 0}
case 1 : {postUpdate(weckerZeitMinute, 5}
case 2 : {postUpdate(weckerZeitMinute, 10}
case 3 : {postUpdate(weckerZeitMinute, 15}
case 4 : {postUpdate(weckerZeitMinute, 20}
case 5 : {postUpdate(weckerZeitMinute, 25}
case 6 : {postUpdate(weckerZeitMinute, 30}
case 7 : {postUpdate(weckerZeitMinute, 35}
case 8 : {postUpdate(weckerZeitMinute, 40}
case 9 : {postUpdate(weckerZeitMinute, 45}
case 10 : {postUpdate(weckerZeitMinute, 50}
case 11 : {postUpdate(weckerZeitMinute, 55}
}
end
// ### Zeit Stunden ################################################################################################################
rule “Zeit Stunden”
when
Item weckerZeitStundeTimer received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitStunde, 0}
case 1 : {postUpdate(weckerZeitStunde, 1}
case 2 : {postUpdate(weckerZeitStunde, 2}
case 3 : {postUpdate(weckerZeitStunde, 3}
case 4 : {postUpdate(weckerZeitStunde, 4}
case 5 : {postUpdate(weckerZeitStunde, 5}
case 6 : {postUpdate(weckerZeitStunde, 6}
case 7 : {postUpdate(weckerZeitStunde, 7}
case 8 : {postUpdate(weckerZeitStunde, 8}
case 9 : {postUpdate(weckerZeitStunde, 9}
case 10 : {postUpdate(weckerZeitStunde, 10}
case 11 : {postUpdate(weckerZeitStunde, 11}
case 12 : {postUpdate(weckerZeitStunde, 12}
case 13 : {postUpdate(weckerZeitStunde, 13}
case 14 : {postUpdate(weckerZeitStunde, 14}
case 15 : {postUpdate(weckerZeitStunde, 15}
case 16 : {postUpdate(weckerZeitStunde, 16}
case 17 : {postUpdate(weckerZeitStunde, 17}
case 18 : {postUpdate(weckerZeitStunde, 18}
case 19 : {postUpdate(weckerZeitStunde, 19}
case 20 : {postUpdate(weckerZeitStunde, 20}
case 21 : {postUpdate(weckerZeitStunde, 21}
case 22 : {postUpdate(weckerZeitStunde, 22}
case 23 : {postUpdate(weckerZeitStunde, 23}
}
end
// ### Zeit Dauer Strang 1 ################################################################################################################
rule “Zeit Dauer Strang 1”
when
Item weckerZeitDauerTimerStrang1 received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitDauerStrang1, 0}
case 1 : {postUpdate(weckerZeitDauerStrang1, 5}
case 2 : {postUpdate(weckerZeitDauerStrang1, 10}
case 3 : {postUpdate(weckerZeitDauerStrang1, 15}
case 4 : {postUpdate(weckerZeitDauerStrang1, 20}
case 5 : {postUpdate(weckerZeitDauerStrang1, 25}
case 6 : {postUpdate(weckerZeitDauerStrang1, 30}
case 7 : {postUpdate(weckerZeitDauerStrang1, 35}
case 8 : {postUpdate(weckerZeitDauerStrang1, 40}
case 9 : {postUpdate(weckerZeitDauerStrang1, 45}
case 10 : {postUpdate(weckerZeitDauerStrang1, 50}
case 11 : {postUpdate(weckerZeitDauerStrang1, 55}
}
end
// ### Zeit Dauer Strang 2 ################################################################################################################
rule “Zeit Dauer Strang 2”
when
Item weckerZeitDauerTimerStrang2 received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitDauerStrang2, 0}
case 1 : {postUpdate(weckerZeitDauerStrang2, 5}
case 2 : {postUpdate(weckerZeitDauerStrang2, 10}
case 3 : {postUpdate(weckerZeitDauerStrang2, 15}
case 4 : {postUpdate(weckerZeitDauerStrang2, 20}
case 5 : {postUpdate(weckerZeitDauerStrang2, 25}
case 6 : {postUpdate(weckerZeitDauerStrang2, 30}
case 7 : {postUpdate(weckerZeitDauerStrang2, 35}
case 8 : {postUpdate(weckerZeitDauerStrang2, 40}
case 9 : {postUpdate(weckerZeitDauerStrang2, 45}
case 10 : {postUpdate(weckerZeitDauerStrang2, 50}
case 11 : {postUpdate(weckerZeitDauerStrang2, 55}
}
end
// ### Zeit Dauer Terrasse ################################################################################################################
rule “Zeit Dauer Terrasse”
when
Item weckerZeitDauerTimerTerrasse received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitDauerTerrasse, 0}
case 1 : {postUpdate(weckerZeitDauerTerrasse, 5}
case 2 : {postUpdate(weckerZeitDauerTerrasse, 10}
case 3 : {postUpdate(weckerZeitDauerTerrasse, 15}
case 4 : {postUpdate(weckerZeitDauerTerrasse, 20}
case 5 : {postUpdate(weckerZeitDauerTerrasse, 25}
case 6 : {postUpdate(weckerZeitDauerTerrasse, 30}
case 7 : {postUpdate(weckerZeitDauerTerrasse, 35}
case 8 : {postUpdate(weckerZeitDauerTerrasse, 40}
case 9 : {postUpdate(weckerZeitDauerTerrasse, 45}
case 10 : {postUpdate(weckerZeitDauerTerrasse, 50}
case 11 : {postUpdate(weckerZeitDauerTerrasse, 55}
}
end
// ### Zeit Dauer Vorne ################################################################################################################
rule “Zeit Dauer Vorne”
when
Item weckerZeitDauerTimerVorne received command
then
switch (receivedCommand) {
case 0 : {postUpdate(weckerZeitDauerVorne, 0}
case 1 : {postUpdate(weckerZeitDauerVorne, 5}
case 2 : {postUpdate(weckerZeitDauerVorne, 10}
case 3 : {postUpdate(weckerZeitDauerVorne, 15}
case 4 : {postUpdate(weckerZeitDauerVorne, 20}
case 5 : {postUpdate(weckerZeitDauerVorne, 25}
case 6 : {postUpdate(weckerZeitDauerVorne, 30}
case 7 : {postUpdate(weckerZeitDauerVorne, 35}
case 8 : {postUpdate(weckerZeitDauerVorne, 40}
case 9 : {postUpdate(weckerZeitDauerVorne, 45}
case 10 : {postUpdate(weckerZeitDauerVorne, 50}
case 11 : {postUpdate(weckerZeitDauerVorne, 55}
}
end
// ### BEWAESSERUNGSTIMER ###########################################################################################################################
rule “Initialization”
when
System started
then
postUpdate(weckerZeitStundeTimer, 0)
postUpdate(weckerZeitMinuteTimer, 0)
postUpdate(weckerZeitDauerTimerStrang1, 0)
postUpdate(weckerZeitDauerTimerStrang2, 0)
postUpdate(weckerZeitDauerTimerTerrasse, 0)
postUpdate(weckerZeitDauerTimerVorne, 0)
postUpdate(weckerZeitStunde, 0)
postUpdate(weckerZeitMinute, 0)
postUpdate(weckerZeitDauerStrang1, 0)
postUpdate(weckerZeitDauerStrang2, 0)
postUpdate(weckerZeitDauerTerrasse, 0)
postUpdate(weckerZeitDauerVorne, 0)
postUpdate(weckerMontag, OFF)
postUpdate(weckerDienstag, OFF)
postUpdate(weckerMittwoch, OFF)
postUpdate(weckerDonnerstag, OFF)
postUpdate(weckerFreitag, OFF)
postUpdate(weckerSamstag, OFF)
postUpdate(weckerSonntag, OFF)
postUpdate(weckerZeitMessage, “OFF”)
postUpdate(Bewaesserungstimer, “OFF”)
end
rule “Weckzeit”
when
Item weckerMontag changed or
Item weckerDienstag changed or
Item weckerMittwoch changed or
Item weckerDonnerstag changed or
Item weckerFreitag changed or
Item weckerSamstag changed or
Item weckerSonntag changed or
Item weckerZeitStunde changed or
Item weckerZeitMinute changed
then
postUpdate(Bewaesserungstimer, “ON”)
if ((weckerMontag.state == OFF) && (weckerDienstag.state == OFF) && (weckerMittwoch.state == OFF) && (weckerDonnerstag.state == OFF) && (weckerFreitag.state == OFF) && (weckerSamstag.state == OFF) && (weckerSonntag.state == OFF)) {
postUpdate(weckerZeitStundeTimer, 0)
postUpdate(weckerZeitMinuteTimer, 0)
postUpdate(weckerZeitDauerTimerStrang1, 0)
postUpdate(weckerZeitDauerTimerStrang2, 0)
postUpdate(weckerZeitDauerTimerTerrasse, 0)
postUpdate(weckerZeitDauerTimerVorne, 0)
postUpdate(weckerZeitStunde, 0)
postUpdate(weckerZeitMinute, 0)
postUpdate(weckerZeitDauerStrang1, 0)
postUpdate(weckerZeitDauerStrang2, 0)
postUpdate(weckerZeitDauerTerrasse, 0)
postUpdate(weckerZeitDauerVorne, 0)
postUpdate(weckerZeitMessage, “OFF”)
postUpdate(Bewaesserungstimer, “OFF”)
}
var String msg = ""
// Copy the Alarm-Time from the UI to local variables
var stunde = weckerZeitStunde.state as DecimalType
var minute = weckerZeitMinute.state as DecimalType
// Combine the hour and minutes to one string to be displayed in the
// user interface
if (stunde < 10) { msg = "0" }
msg = msg + weckerZeitStunde.state.format("%d") + ":"
if (minute < 10) { msg = msg + "0" }
msg = msg + weckerZeitMinute.state.format("%d")
postUpdate(weckerZeitMessage,msg)
// calculate the alarm time [min]
var int weckzeit1
weckzeit1 = (weckerZeitStunde.state as DecimalType).intValue * 60 +
(weckerZeitMinute.state as DecimalType).intValue
weckzeit1 = weckzeit1.intValue
// calculate current time [min]
var int jetzt1
jetzt1 = now.getMinuteOfDay
jetzt1 = jetzt1.intValue
// calculate the difference between the requested alarm time and
// current time (again in minutes)
var int delta1
delta1 = (weckzeit1 - jetzt1)
delta1 = delta1.intValue
// add one day (1440 minutes) if alarm time for today already passed
if (jetzt1 > weckzeit1) { delta1 = delta1 + 1440 }
// check if there is already an alarm timer; cancel it if present
if (timer1 != null) {
timer1.cancel
timer1 = null
}
var int endtimeStrang1
endtimeStrang1 = (weckerZeitDauerStrang1.state as DecimalType).intValue * 60 * 1000
endtimeStrang1 = endtimeStrang1.intValue
var int endtimeStrang2
endtimeStrang2 = (weckerZeitDauerStrang2.state as DecimalType).intValue * 60 * 1000
endtimeStrang2 = endtimeStrang2.intValue
var int endtimeTerrasse
endtimeTerrasse = (weckerZeitDauerTerrasse.state as DecimalType).intValue * 60 * 1000
endtimeTerrasse = endtimeTerrasse.intValue
var int endtimeVorne
endtimeVorne = (weckerZeitDauerVorne.state as DecimalType).intValue * 60 * 1000
endtimeVorne = endtimeVorne.intValue
// create a new timer using the calculated delta [min]
timer1 = createTimer(now.plusMinutes(delta1)) [|
// This code will be executed if the timer triggers
// ************************************************
// check if alarm clock is armed for this weekday
var Number day = now.getDayOfWeek
if (((day == 1) && (weckerMontag.state == ON)) ||
((day == 2) && (weckerDienstag.state == ON)) ||
((day == 3) && (weckerMittwoch.state == ON)) ||
((day == 4) && (weckerDonnerstag.state == ON)) ||
((day == 5) && (weckerFreitag.state == ON)) ||
((day == 6) && (weckerSamstag.state == ON)) ||
((day == 7) && (weckerSonntag.state == ON))) {
// The things to do if the alarm clock is enabled for this day of week:
// ...
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
if (endtimeStrang1>0) {
sendCommand(HueOfen, ON)
sendCommand(Strang1, "100")
// ##############################
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
Thread::sleep(endtimeStrang1)
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
sendCommand(HueOfen, OFF)
sendCommand(Strang1, "0")
}
if (endtimeStrang2>0) {
sendCommand(HueRegalLinks, ON)
sendCommand(Strang2, "100")
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
Thread::sleep(endtimeStrang2)
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
sendCommand(HueRegalLinks, OFF)
sendCommand(Strang2, "0")
}
if (endtimeTerrasse>0) {
sendCommand(HueRegalRechts, ON)
sendCommand(Vordergarten, "100")
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
Thread::sleep(endtimeTerrasse)
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
sendCommand(HueRegalRechts, OFF)
sendCommand(Vordergarten, "0")
}
if (endtimeVorne>0) {
sendCommand(HueKlavier, ON)
sendCommand(BlumenHinten, "100")
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
Thread::sleep(endtimeVorne)
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
sendCommand(HueKlavier, OFF)
sendCommand(BlumenHinten, "0")
}
Strang1.persist
Strang2.persist
Vordergarten.persist
BlumenHinten.persist
// ##############################
]
}
// Re-Arm the timer to trigger again tomorrow (same time)
timer1.reschedule(now.plusHours(24))
// ************************************************
// Here the code ends that executes once the timer triggers
]
Finally my sitemap Looks like the follwing:
Group item=Garten icon=“Pflanzen”{
Frame item=Markise
{
Slider item=MarkiseRechts icon=“Markise”
Slider item=MarkiseLinks icon=“Markise”
}
Frame item=Licht
{
Switch item=Gartenbeleuchtung icon=“Gartenbeleuchtung”
}
Frame label=Bewaesserung icon=“GartenHinten”
{
Slider item=Strang1 icon=“Irrigation1” switchSupport
Slider item=Strang2 icon=“Irrigation1” switchSupport
Slider item=BlumenHinten icon=“Irrigation1” switchSupport
Slider item=Vordergarten icon=“Irrigation1” switchSupport
}
Frame label=“Bewaesserungszeiten” {
Text label=“Bewässerungstimer [%s]” item=Bewaesserungstimer icon=“Irrigation1” {
Frame label=“Startzeit” {
Selection label=“Stunde” icon=“clock” item=weckerZeitStundeTimer mappings=[0=“00 h”, 1=“01 h”, 2=“02 h”, 3=“03 h”, 4=“04 h”, 5=“05 h”, 6=“06 h”, 7=“07 h”, 8=“08 h”, 9=“09 h”, 10=“10 h”, 11=“11 h”, 12=“12 h”, 13=“13 h”, 14=“14 h”, 15=“15 h”, 16=“16 h”, 17=“17 h”, 18=“18 h”, 19=“19 h”, 20=“20 h”, 21=“21 h”, 22=“22 h”, 23=“23 h”]
Selection label=“Minute” icon=“clock” item=weckerZeitMinuteTimer mappings=[0=“0 min”, 1=“5 min”, 2=“10 min”, 3=“15 min”, 4=“20 min”, 5=“25 min”, 6=“30 min”, 7=“35 min”, 8=“40 min”, 9=“45 min”, 10=“50 min”, 11=“55 min”]
}
Frame label=“Beregnungsdauern” {
Selection label=“Strang 1 (min)” icon=“clock” item=weckerZeitDauerTimerStrang1 mappings=[0=“OFF”, 1=“5 min”, 2=“10 min”, 3=“15 min”, 4=“20 min”, 5=“25 min”, 6=“30 min”, 7=“35 min”, 8=“40 min”, 9=“45 min”, 10=“50 min”, 11=“55 min”]
Selection label=“Strang 2 (min)” icon=“clock” item=weckerZeitDauerTimerStrang2 mappings=[0=“OFF”, 1=“5 min”, 2=“10 min”, 3=“15 min”, 4=“20 min”, 5=“25 min”, 6=“30 min”, 7=“35 min”, 8=“40 min”, 9=“45 min”, 10=“50 min”, 11=“55 min”]
Selection label=“Terrasse (min)” icon=“clock” item=weckerZeitDauerTimerTerrasse mappings=[0=“OFF”, 1=“5 min”, 2=“10 min”, 3=“15 min”, 4=“20 min”, 5=“25 min”, 6=“30 min”, 7=“35 min”, 8=“40 min”, 9=“45 min”, 10=“50 min”, 11=“55 min”]
Selection label=“Vordergarten (min)” icon=“clock” item=weckerZeitDauerTimerVorne mappings=[0=“OFF”, 1=“5 min”, 2=“10 min”, 3=“15 min”, 4=“20 min”, 5=“25 min”, 6=“30 min”, 7=“35 min”, 8=“40 min”, 9=“45 min”, 10=“50 min”, 11=“55 min”]
}
Frame label=“Wochentage” {
Switch item=weckerMontag
Switch item=weckerDienstag
Switch item=weckerMittwoch
Switch item=weckerDonnerstag
Switch item=weckerFreitag
Switch item=weckerSamstag
Switch item=weckerSonntag
}
}
Text label=“Start Bewässerung [%s]” item=weckerZeitMessage icon=“Irrigation1”
Text label=“Bewässerungszeit Strang 1 [%s]” item=weckerZeitDauerStrang1 icon=“Irrigation1”
Text label=“Bewässerungszeit Strang 2 [%s]” item=weckerZeitDauerStrang2 icon=“Irrigation1”
Text label=“Bewässerungszeit Terrasse [%s]” item=weckerZeitDauerTerrasse icon=“Irrigation1”
Text label=“Bewässerungszeit Vorne [%s]” item=weckerZeitDauerVorne icon=“Irrigation1”
}
Frame label=Zisterne icon=“Zisterne1”
{
Switch item=Zisternenpumpe icon=“Zisterne1”
}
Frame label=Rasenzustand icon=“Luftfeuchte”
{
Text item=FeuchteRasen1 icon=“Luftfeuchte”
Switch item=FeuchteRasen_Chart_Period icon=“clock-on” label=“Chart Period” mappings=[0=“D”, 1=“W”, 2=“M”]
Chart item=Bodenfeuchte label="%" period=D refresh=100000 service=“mysql” visibility=[FeuchteRasen_Chart_Period==0]
Chart item=Bodenfeuchte label="%" period=W refresh=100000 service=“mysql” visibility=[FeuchteRasen_Chart_Period==1, FeuchteRasen_Chart_Period==“Uninitialized”]
Chart item=Bodenfeuchte label="%" period=M refresh=100000 service=“mysql” visibility=[FeuchteRasen_Chart_Period==2]
}
Frame label=“Bewaesserungszeiten”{
Switch item=Bewaesserung_Chart_Period icon=“clock-on” label=“Chart Period” mappings=[0=“h”, 1=“4h”, 2=“D”, 3=“W”, 4=“M”]
Chart item=Bewaesserung label=“h” period=h refresh=100000 service=“mysql” visibility=[Bewaesserung_Chart_Period==0, Bewaesserung_Chart_Period==“Uninitialized”]
Chart item=Bewaesserung label=“h” period=4h refresh=100000 service=“mysql” visibility=[Bewaesserung_Chart_Period==1]
Chart item=Bewaesserung label=“h” period=D refresh=100000 service=“mysql” visibility=[Bewaesserung_Chart_Period==2]
Chart item=Bewaesserung label=“h” period=W refresh=100000 service=“mysql” visibility=[Bewaesserung_Chart_Period==3]
Chart item=Bewaesserung label=“h” period=M refresh=100000 service=“mysql” visibility=[Bewaesserung_Chart_Period==4]
}
}
Finally it looks on level 1 GUI like that:
If you press on "Bewässerungstimer " to set the times you see the following:
And behind the Stunde and the Minute as well as behind the time of the lines you see the following:
Cheers