Seite 1 von 2

Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 10:56
von Baha77
Hi,
bin schon seid 1 Jahr dran an Openhab, normales schalten, Alexa und Harmony funktionieren.

Jetzt versuche ich mich an den regeln mit der Zeitschaltuhr.

Ich muß dazu sagen bin ein wenig verzweifelt. Ich verstehe nicht wie ich Timecron dazubekommen soll, nur zwischen 24:00 und 07:00 zu funktionieren.

Meine Item sind folgende:

floor_Praezenzmelder
Led_2Etage
Led_kl_Treppe

Ich möchte zwischen 07_00 Uhr und 24:00 Uhr wie bisher das der Präsenzmelder bei Bewegung und natürlich zu wenig Licht(das mit dem Licht regelt der Präzensmelder) das Item Led_2Etage schaltet. Nach 24:00 Uhr will ich mit der rule nur noch, das Item LED_kl_Treppe schalten.

Über Tips und Hilfe wäre ich sehr dankbar. Google suche hat mich leider nicht weitergebracht.

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 11:41
von Baha77
Hi,
habe mich an den ersten Part versucht.

rule "LED Flur Licht nur von 07:00- 01:00"
when
Item floor_Praezenzmelder received command
then
if (receivedCommand == ON)
if (now.getHourofDay >=01 || now.getHourofDay <7)
{
sendCommand(floor_Led_kl_Treppe, ON)
}

else if (receivedCommand == OFF)

{
sendCommand(floor_Led_kl_Treppe, OFF)
}

end

Bekomme aber folgende Fehlermeldung

018-11-23 12:02:44.201 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'regeln.rules'
2018-11-23 12:02:44.203 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'regeln.rules' is either empty or cannot be parsed correctly!

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 12:29
von Hoggle
Hallo.
Mit meinem Halbwissen mal eine Idee.
Mach doch einen Switch (SW_Nachtschaltung, oder so)und mach 2 einfache Rules:

Code: Alles auswählen

rule "Licht im Flur auf Nachtschaltung anschalten"
    when
        Time cron "0 59 23 1/1 * ? *"
    then
        SW_Nachtschaltung.sendCommand(ON)
	end

rule "Licht im Flur auf Nachtschaltung ausschalten"
    when
        Time cron "	0 0 7 1/1 * ? *"
    then
       SW_Nachtschaltung.sendCommand(OFF)
	end
Und dann fragst du in deiner Rule einfach den Status deines Switch ab, ob der On oder Off ist.

ich hoffe, ich bekomme keine Schimpfe, wenn das total falsch sein sollte :o

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 14:06
von udo1toni
Der Ansatz von @Hoggle sollte so funktionieren. es gibt im englischen Forum auch eine etwas ausgefeiltere Rule, die hier einem Item verschiedene Status zuordnet, und zwar in der Form ItemTageszeit [Nacht|Vormittag|Mittag|Nachmittag|Abend], dieses Item kann man dann für verschiedene tageszeitabhängige Automatismen verwenden. Die Rule verwendet dann allerdings Items des Astro Bindings, anstatt sich an starren Uhrzeiten zu orientieren ;)

Der Time cron Ausdruck ist noch weiter zu vereinfachen, nämlich Time cron "0 0 7 * * ?" für "morgens um 7 Uhr" und Time cron "0 0 0 * * ?" für "um 0 bzw. 24 Uhr"

Der direkte Ansatz aus der ursprünglichen Rule geht aber genauso, nur muss man die Methode korrekt schreiben und nutzen:

Code: Alles auswählen

rule "LED Flur Licht nur von 01:00- 07:00"
when
    Item floor_Praezenzmelder received command
then
    if (receivedCommand == ON) {                  // Schaltbefehl ON
        if (now.getHourOfDay < 7)                 // zwischen 0 und 7 Uhr
            floor_Led_kl_Treppe.sendCommand(ON)
        else                                      // zwischen 7 und 0 (gemeint ist 24) Uhr
            Led_2Etage.sendCommand(ON)
    } else {                                      // Schaltbefehl OFF
        floor_Led_kl_Treppe.sendCommand(OFF)
        Led_2Etage.sendCommand(OFF)
    }
end
Die Methode heißt also getHourOfDay, nicht getHourofDay. Da die Grenze 0 bis 7 Uhr ist, reicht es, die Obergrenze zu prüfen. Ginge es um einen Zeitraum 1 Uhr bis 7 Uhr, wäre die Abfrage if(now.getHourOfDay > 0 && now.getHourOfDay < 7), also das logische UND, nicht das logische ODER. Wäre der andere Zeitraum gemeint, also von 7 Uhr bis 1 Uhr, wäre es genau anders herum, nämlich if(now.getHourOfDay < 1 || now.getHourOfDay > 6) also entweder vor 1 Uhr oder nach 7 Uhr (genauer: nach 6:59:59 Uhr)
Beim logischen Verknüpfen passieren oft Fehler, die sich leicht vermeiden lassen, z.B. if(now.getHourOfDay < 1 && now.getHourOfDay > 6) wird niemals true liefern, weil eine rationale Zahl niemals gleichzeitig kleiner als eine kleine positiver Zahl und größer als eine große positive Zahl sein kann.
Warum schaltet die Rule immer beide Leuchten aus? Weil es Denkbar ist, dass der Präsenzmelder um 6:59:55 ON meldet, und um 7:00:15 OFF (gleiches gilt sinngemäß für die andere Grenze), Du möchtest sicher nicht, dass die Leuchte dauerhaft bis zum nächsten Zeitfenster leuchtet.
Ein weiteres Problem könnte auch auftauchen, wenn es hell wird. Sendet der Präsenzmelder dann zuverlässig ein OFF-Signal?
Falls das nicht der Fall ist, müsste man hier einen anderen Ansatz suchen oder eine weitere Rule anlegen, die bei Überschreiten des Helligkeits-Grenzwertes die Leuchten abschaltet.

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 16:06
von Baha77
Vielen Dank udo1toni:

Habe die Logik teilweise verstanden (Wahrscheinlich eher nicht:( ) und auch umgesetzt. Ich möchte ja nach 01:00 : 06:59 das Kleine Licht schalten.

rule "LED Flur Licht nur von 01:00- 07:00"
when
Item floor_Praezenzmelder received command
then
if (receivedCommand == ON) { // Schaltbefehl ON
if (now.getHourOfDay > 1 && now.getHourOfDay < 7) // zwischen 1 und 7 Uhr
floor_Led_kl_Treppe.sendCommand(ON)
else // zwischen 7 und 1 (gemeint ist 24) Uhr
floor_Led_2Etage.sendCommand(ON)
}

else { // Schaltbefehl OFF
floor_Led_kl_Treppe.sendCommand(OFF)
floor_Led_2Etage.sendCommand(OFF)
}

end

Irgendwie berücksichtigt er die Uhrzeit nicht.

Er schaltet immer beide Lichter an.
2018-11-23 15:58:13.197 [ome.event.ItemCommandEvent] - Item 'floor_Led_2Etage' received command ON
2018-11-23 15:58:13.354 [vent.ItemStateChangedEvent] - floor_Led_2Etage changed from OFF to ON
2018-11-23 15:58:13.403 [vent.ItemStateChangedEvent] - floor_Led_kl_Treppe changed from OFF to ON

Mit der Zeit Formel

(now.getHourOfDay < 7)

funktioniert es.

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 23. Nov 2018 20:32
von udo1toni
Bitte, wenn Du Code postest, diesen als Code markieren. now.getHourOfDay liefert die aktuelle Stunde, um 01:13 Uhr z.B. 1. Entsprechend musst Du für "zwischen 1 und 7" auf now.getHourOfDay > 0 && now.getHourOfDay < 7 testen.

Wenn die Rule nicht vorhanden ist, was passiert dann? Sprich: Kann es sein, dass Du auf Busseite eine Verknüpfung hast, so dass der Präsenzmelder die Leuchten direkt steuert?

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 24. Nov 2018 08:21
von Baha77
Die Regel funktioniert perfekt, vielen Dank.
Habe noch eine Anpassung gemacht das auch das floor_kl_Treppe zwischen 7 und 1 zusätzlich an geht.

Code: Alles auswählen

rule "LED Flur Licht nur von 01:00- 07:00"
when
    Item floor_Praezenzmelder received command
then
    if (receivedCommand == ON) {                  // Schaltbefehl ON
        if (now.getHourOfDay > 0 && now.getHourOfDay < 7)                // zwischen 1 und 7 Uhr
            floor_Led_kl_Treppe.sendCommand(ON)
        else                                      // zwischen 7 und 1 (gemeint ist 24) Uhr
            floor_Led_2Etage.sendCommand(ON)
            floor_Led_kl_Treppe.sendCommand(ON)
    } 
    
    else {                                      // Schaltbefehl OFF
        floor_Led_kl_Treppe.sendCommand(OFF)
        floor_Led_2Etage.sendCommand(OFF)
    }

    end
Wenn die Rule nicht vorhanden ist, was passiert dann? Sprich: Kann es sein, dass Du auf Busseite eine Verknüpfung hast, so dass der Präsenzmelder die Leuchten direkt steuert?
Habe Zur Zeit dem Präsenzmelder ein neue GA gegeben, falls Openhab ausfällt bleibt es dunkel. Ich müßte eigentlich eine Logik einbauen und abfragen ob Openhab erreichbar ist. Ehrlich gesagt weiß ich nicht, wie ich das anstellen soll.

Es ist aber auch noch ein Lichtaster vorhanden, mit dem man das Licht manuell einschalten kann.

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 11. Dez 2018 09:21
von Baha77
Hi,
es ist etwas Zeit vergangen und meine Kinder fangen an zu meckern.

Ich müsste das Licht am besten um 06:30 einschalten.

Wäre der Code so richtig?

Code: Alles auswählen

if (now.getHourOfDay > 0 && now.getHourOfDay < 7 && now.getMinuteOfHour <31


Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 11. Dez 2018 09:41
von udo1toni
Nein, das ist nicht richtig.
Korrekt ist für den Zeitraum 1 Uhr bis 6 Uhr 30:

Code: Alles auswählen

if(now.getHourOfDay > 0 && now.getMinuteOfDay < 391) // 391 = 6 * 60 + 31
Jede Stunde hat als Minute 0 bis 59, das Licht ginge also immer nur bis 30 an, sonst nicht.

Re: Regel Flurpräsenzmelder soll Licht_1 nicht zwichen 24:00 und 07:00 schalten, nur Licht_2 schalten.

Verfasst: 11. Dez 2018 10:43
von Baha77
Vielen dank, wäre nie darauf gekommen.