Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Hoggle »

Hallo zusammen.
Leider zu früh gefreut.
Ich bekomme jetzt immer eine Telegram Meldung, wenn die Garage aufgeht(immer die Meldung: Die Garage ist nach 17 Uhr geöffnet)
Gibt es eine Möglichkeit, Log-einträge ohne den front-tail anzuschauen?
Ich bin halt bis spät Abends "auf Arbeit" und meine Frau ist Nachmittags schon daheim.
Wenn ich im front-tail nachschauen, dann kann ich ja nur "etwas" in die Vergangenheit schauen, würde aber gerne einmal sehen, was zum Zeitpunkt der Öffnung geloggt wird.

Gesendet von meinem SM-G998B mit Tapatalk

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

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Harka »

Moin,
mir fällt da jetzt keine einfache Lösung ein. Wenn ich das aber richtig sehe, benötigt dein Timer noch eine Abbruchoption, wenn das Tor innerhalb der 5 min geschlossen wurde. Sollte reichen den cancel-Block vor dem ersten if zu platzieren.

E: und den Hinweis von Udo mit dem AND beachten ;)
Zuletzt geändert von Harka am 22. Nov 2023 20:13, insgesamt 2-mal geändert.

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

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von udo1toni »

Du musst halt Zugriff auf den Rechner haben, auf dem openHAB läuft. Die Logs liegen auf einem GNU/Linux System gewöhnlich unter /var/log/openhab/, die aktuellen Daten in events.log und openhab.log, die letzten 7 Dateien werden gepackt aufgehoben, die muss man notfalls entpacken, um sie betrachten zu können (gunzip <datei>)


Ansonsten musst Du halt für den Abend das OR in ein AND ändern. Die Bedingung A >= 17 ODER A < 21 gilt halt für alle Zahlen von - ∞ bis + ∞...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Hoggle »


udo1toni hat geschrieben:...


Ansonsten musst Du halt für den Abend das OR in ein AND ändern. Die Bedingung A >= 17 ODER A < 21 gilt halt für alle Zahlen von - ∞ bis + ∞...
Habe leider kein Emoji gefunden, was sich mit der flachen Hand auf die Stirn haut.

Danke für die Tipps.
Frage zum "cancel": Muss ich das wirklich machen?
Prüft die if nicht nach der Zeit den aktuellen Wert?

Gesendet von meinem SM-G998B mit Tapatalk


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

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Harka »

Hoggle hat geschrieben: 24. Nov 2023 16:44 Frage zum "cancel": Muss ich das wirklich machen?
Prüft die if nicht nach der Zeit den aktuellen Wert?
Mmmh, jain? Nicht direkt. Aber beim Schließen des Tors wird die Rule, und damit auch der Timer, neu gestartet sowie der neue Wert von Tor gespeichert. Von daher ist Deine Frage berechtigt. Bin mir gerade nicht sicher. Selbst würde ich es sicherheitshalber testen und im Zweifel den cancel mit rein nehmen.

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

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von udo1toni »

Hoggle hat geschrieben: 24. Nov 2023 16:44 Frage zum "cancel": Muss ich das wirklich machen?
Wie sieht der Code der Rule denn konkret aus?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Hoggle »

Code: Alles auswählen

var Abend, Nacht, Tor;

var things = Java.type('org.openhab.core.model.script.actions.Things');


Abend = ((time.ZonedDateTime.now()).hour()) >= 17 && ((time.ZonedDateTime.now()).hour()) < 21;
Nacht = ((time.ZonedDateTime.now()).hour()) >= 21 && ((time.ZonedDateTime.now()).hour()) < 6;
Tor = items.getItem('Garagentor_Status').numericState;
if (items.getItem('R_Urlaub').state == 'ON') {
  if (Tor != 100) {
    console.info('Urlaubsschaltung und Garagentor ist offen --> Telegram');
    things.getActions('telegram', 'telegram:telegramBot:TelegramBot').sendTelegram(24452824, 'Die Urlaubsschaltung ist an und das Garagentor ist offen oder wird gerade geöffnet!');
  }
} else {
  if (cache.private.exists('Garagentor') === false || cache.private.get('Garagentor').hasTerminated()) {
    cache.private.put('Garagentor', actions.ScriptExecution.createTimer('Garagentor', time.ZonedDateTime.now().plusMinutes(15), function () {
      if (Tor != 100) {
        console.info('Das Garagentor ist noch offen');
        if (Abend) {
          things.getActions('telegram', 'telegram:telegramBot:TelegramBot').sendTelegram(244528224, 'Das Garagentor ist nach 17.00 Uhr noch offen');
          console.info('Und es ist zwischen 17.00 und 21.00 Uhr');
        } else if (Nacht) {
          console.info('Und es ist nach 21.00 Uhr');
          things.getActions('telegram', 'telegram:telegramBot:TelegramBot').sendTelegram(244528224, 'Das Garagentor ist nach 21.00 Uhr noch offen');
        }
      }
      }));
  };
}
Gesendet von meinem SM-G998B mit Tapatalk
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: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von udo1toni »

Also, es gibt da ein paar Haken und Ösen...

1. ein cache.private.get('Garagentor').cancel() brauchst Du nicht zwingend, denn Du prüfst ja auf hasTerminated.

Gewöhnlich wird man einen laufenden Timer löschen und den Zeiger zurücksetzen, denn so, wie Deine Rule gebaut ist, legt openHAB jedes Mal einen Timer an, wenn die Rule getriggert wird und Urlaub inaktiv ist, und zwar unabhängig davon, ob das nun notwendig wäre oder nicht.
Der Timer wird niemals entfernt, das bedeutet, wenn du das Tor öffnest und gleich wieder schließt, nur um es nach (z.B.) zehn Minuten wieder zu öffnen, wird es nach weniger als 5 Minuten Alarm geben (mal vorausgesetzt, wir befinden und im passenden Zeitfenster).
Und Damit nicht genug, eine Viertelstunde nach dem Öffnen gibt es einen zweiten Alarm, weil ja ein zweiter Timer angelegt wird. Dass dafür die selbe Variable (bzw. der selbe Private Cache) genutzt wird, ändert daran nichts, Du verlierst lediglich den Zugriff auf den ersten Timer.

2. Du greifst innerhalb des Timer Blocks auf die lokalen Variablen Abend und Nacht zu. Diese werden initialisiert, wenn die Rule ausgeführt wird.
Es mag sein, dass die Variablen tatsächlich im Timer zur Verfügung stehen (wetten würde ich nicht drauf, denn die Rule ist zu dem Zeitpunkt schon beendet), aber sie enthalten jedenfalls keine Hinweis auf den aktuellen Zeitpunkt, sondern nur auf den Zeitpunkt, zu dem die Rule zuletzt ausgeführt wurde.

3. Die Variable Nacht wird niemals wahr werden, denn eine Integer Zahl kann nicht gleichzeitig größer (oder gleich) 21 UND kleiner als 6 sein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Blockly Zeit zwischen 21-6 Uhr in if-Abfrag3

Beitrag von Harka »

Ergänzung meinerseits..
zu 1.) der vorgeschlagene Cancel-Befehl von Blockly sollte das imho verhindern.

Code: Alles auswählen

if (cache.private.exists('Garagentor')) { cache.private.remove('Garagentor').cancel(); };
Hoggle -wenn Du den Timer eine Ebene tiefer legst (nach if Tor ungleich 100) sollte das schon besser aussehen.

zu 2.) die Variablen stehen innerhalb des Timers unter Javascript noch zur Verfügung. Habe es extra noch mal getestet.

Antworten