Seite 2 von 2

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

Verfasst: 22. Nov 2023 18:23
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


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

Verfasst: 22. Nov 2023 19:31
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 ;)

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

Verfasst: 22. Nov 2023 20:00
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 + ∞...

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

Verfasst: 24. Nov 2023 16:44
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



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

Verfasst: 24. Nov 2023 17:21
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.

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

Verfasst: 24. Nov 2023 18:19
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?

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

Verfasst: 25. Nov 2023 10:11
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

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

Verfasst: 25. Nov 2023 11:36
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.

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

Verfasst: 25. Nov 2023 15:04
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.