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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag 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.

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag 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!

Hoggle
Beiträge: 217
Registriert: 16. Dez 2017 10:49
Answers: 0

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

Beitrag 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
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

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

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag 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.

Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

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

Beitrag 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?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag 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.

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag 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


Benutzeravatar
udo1toni
Beiträge: 13982
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

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

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Baha77
Beiträge: 8
Registriert: 23. Nov 2018 10:36
Answers: 0

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

Beitrag von Baha77 »

Vielen dank, wäre nie darauf gekommen.

Antworten