Komm nicht weiter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

Wenn ich in einer Rule die nur in der Nacht von 1 bis 6 Uhr triggern soll " if(now.getHour<1 || now.getHour > 6) return;" wird sie bis um 7 Uhr getriggert, Habe ich einen Denkfehler ?
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Komm nicht weiter

Beitrag von peter-pan »

Die If-Anweisung ist kein Trigger !!! Wie sieht denn die Rule aus ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

Sie hier........

var Timer TuerNachtPartyraum = null

rule "Nacht Türe Partyraum geöffnet"

when Item AussentuerePartyraum_TurFensterstatus changed

then
(if (AussentuerePartyraum_TurFensterstatus.state == OPEN){
if(now.getHour <1 || now.getHour >6) return;
MeldungTelegran.sendpostUpdate ("Die Außentüre im Partyraum ist geöffnet wurden")
LEDLeisteTreppenhaus_Schalter.sendCommand (ON)
LEDLeisteKuche_Schalter.sendCommand (ON)
StehleuchteWohnzimmer_Schalter.sendCommand (ON)

}
)
if (AussentuerePartyraum_TurFensterstatus.state == CLOSED){
if(now.getHour <1 || now.getHour >6) return;
TuerNachtPartyraum = createTimer(ZonedDateTime.now.plusMinutes(10),[|
LEDLeisteTreppenhaus_Schalter.sendCommand (OFF)
LEDLeisteKuche_Schalter.sendCommand (OFF)
StehleuchteWohnzimmer_Schalter.sendCommand (OFF)
])
}

end
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Komm nicht weiter

Beitrag von peter-pan »

Bitte Code immer in Code-Fenster, das ist einfach besser lesbar:

Code: Alles auswählen

var Timer TuerNachtPartyraum = null

rule "Nacht Türe Partyraum geöffnet"

when Item AussentuerePartyraum_TurFensterstatus changed

then
(if (AussentuerePartyraum_TurFensterstatus.state == OPEN){
if(now.getHour <1 || now.getHour >6) return;
MeldungTelegran.sendpostUpdate ("Die Außentüre im Partyraum ist geöffnet wurden")
LEDLeisteTreppenhaus_Schalter.sendCommand (ON)
LEDLeisteKuche_Schalter.sendCommand (ON)
StehleuchteWohnzimmer_Schalter.sendCommand (ON)

}
)
if (AussentuerePartyraum_TurFensterstatus.state == CLOSED){
if(now.getHour <1 || now.getHour >6) return;
TuerNachtPartyraum = createTimer(ZonedDateTime.now.plusMinutes(10),[|
LEDLeisteTreppenhaus_Schalter.sendCommand (OFF)
LEDLeisteKuche_Schalter.sendCommand (OFF)
StehleuchteWohnzimmer_Schalter.sendCommand (OFF)
])
}

end
Also, ohne den Code eingehender untersucht zu haben, fällt mir die (komplette) Klammerung der ersten IF-Anweisung auf. Außerdem fragst du 2-mal den Zeitraum ab. Das sollte eigentlich einmal, und zwar direkt nach "then" reichen.

Code: Alles auswählen

var Timer TuerNachtPartyraum = null

rule "Nacht Türe Partyraum geöffnet"

when 
  Item AussentuerePartyraum_TurFensterstatus changed

then
  if(now.getHour <1 || now.getHour >6) return;
  if (AussentuerePartyraum_TurFensterstatus.state == OPEN){
  MeldungTelegran.sendpostUpdate ("Die Außentüre im Partyraum ist geöffnet worden")
  LEDLeisteTreppenhaus_Schalter.sendCommand (ON)
  LEDLeisteKuche_Schalter.sendCommand (ON)
  StehleuchteWohnzimmer_Schalter.sendCommand (ON)
  }
  if (AussentuerePartyraum_TurFensterstatus.state == CLOSED){
  TuerNachtPartyraum = createTimer(ZonedDateTime.now.plusMinutes(10),[|
  LEDLeisteTreppenhaus_Schalter.sendCommand (OFF)
  LEDLeisteKuche_Schalter.sendCommand (OFF)
  StehleuchteWohnzimmer_Schalter.sendCommand (OFF)
  ])
  }
end
Der Trigger/Auslöser für die Regel ist hier die Statusänderung des Items AussentuerePartyraum_TurFensterstatus
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Komm nicht weiter

Beitrag von udo1toni »

Ja, Du hast einen Denkfehler. Die Grenze soll 6 Uhr sein, also um 6 Uhr nicht mehr ausführen, aber um 05:59:59 soll noch ausgeführt werden. Die zweite Abbruchbedingung muss also >5 heißen, now.getHour liefert einen Integer Wert, das ist exakt die Zahl vor dem ersten Doppelpunkt (um 05:59:59 also eine 5, um 06:00:00 eine 6)

Ansonsten hat peter-pan es ja schon erläutert...

Im ersten Teil hast Du außerdem ein sendpostUpdate drin stehen, das gibt es natürlich nicht. Sauber (und um unnötige Teile erleichtert) sieht die Rule so aus:

Code: Alles auswählen

var Timer TuerNachtPartyraum = null

rule "Nacht Türe Partyraum geöffnet"
when
    Item AussentuerePartyraum_TurFensterstatus changed
then
    if(now.getHour == 0 || now.getHour > 5) return;       // Abbruch vor 1 Uhr und nach 6 Uhr
    TuerNachtPartyraum?.cancel            // Falls ein Timer läuft: Abbruch
    if(AussentuerePartyraum_TurFensterstatus.state == OPEN) {  // Kontakt offen:
        MeldungTelegran.postUpdate("Die Außentüre im Partyraum ist geöffnet worden")
        LEDLeisteTreppenhaus_Schalter.sendCommand(ON)
        LEDLeisteKuche_Schalter.sendCommand(ON)
        StehleuchteWohnzimmer_Schalter.sendCommand(ON)
    } else                                 // Kontakt nicht offen (also geschlossen):
        TuerNachtPartyraum = createTimer(ZonedDateTime.now.plusMinutes(10), [|
            LEDLeisteTreppenhaus_Schalter.sendCommand(OFF)
            LEDLeisteKuche_Schalter.sendCommand(OFF)
            StehleuchteWohnzimmer_Schalter.sendCommand(OFF)
        ])
end
Achte bitte auch auf die Leerzeichen. Es mag an einigen Stellen keine Auswirkungen haben, hilft aber dabei, die Zusammenhänge zu verstehen.
Die Sache mit den Klammern...
eine bedingte Verzweigung wirkt nur auf den nächsten Befehl. Damit mehrere Befehle bedingt ausgeführt werden, muss man sie also "gruppieren", das geschieht mit den geschweiften Klammern. Alles von { bis } wird also als Block betrachtet. Der else-Teil wirkt ebenfalls nur auf den ersten Befehl. Dieser Befehl ist aber das createTimer(). Der Codeblock ist ein Parameter von createTimer, für else spielt dieser Teil also keine Rolle.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

udi
Beiträge: 26
Registriert: 31. Okt 2020 10:45
Answers: 0

Re: Komm nicht weiter

Beitrag von udi »

Hallo,

ich lesen und lerne hier im Forum begeistert mit! Wirklich klasse :)

Bei diesen Szenario hier komme ich leider nicht weiter. Ich arbeite mit VC Code und lege dort eine Rule für den Callmebot an. VS meckert bei "import java.net.URLEncoder". Missing EOF. Ich habe keine Ahnung und keinen Ansatz, wo das Problem liegt. Könnt ihr mir vielleicht einen Tipp geben?

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Komm nicht weiter

Beitrag von int5749 »

udi hat geschrieben: 13. Mär 2022 18:44 Hallo,

ich lesen und lerne hier im Forum begeistert mit! Wirklich klasse :)

Bei diesen Szenario hier komme ich leider nicht weiter. Ich arbeite mit VC Code und lege dort eine Rule für den Callmebot an. VS meckert bei "import java.net.URLEncoder". Missing EOF. Ich habe keine Ahnung und keinen Ansatz, wo das Problem liegt. Könnt ihr mir vielleicht einen Tipp geben?
Hallo und willkommen.

Ein anderes Thema zu anektieren ist meist nicht so optimal, gerade wenn der Titel so allgemein gültig ist.
Evtl. machst Du einen neuen Thread auf, und beschreibst in Titel und Text Dein Problem??
z.B. auch warum Du eine Java Libary importieren möchtest?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

udi
Beiträge: 26
Registriert: 31. Okt 2020 10:45
Answers: 0

Re: Komm nicht weiter

Beitrag von udi »

dsa gebe ich dir auch Recht. Da die Ausgangssituation für diesen Thread genau meiner entsprache, dachte ich aber ich klinke mich mal eben ein :)

Ich konnte das Problem heute Nacht nun nach 10 Stunden suchen und probieren selber lösen. Meine rules Datei beinhaltet eine Vielzahl an Regeln. Die betroffene Regel steht am Ende (zuletzt hinzugefügt). Die Zeile import java... darf nicht direkt über der betroffenen Regel stehen, sondern muss an den Anfang der Datei. Ich hoffe, ich bin der Einzige, der damit so viel Zeit verschwendet hat :D

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Komm nicht weiter

Beitrag von int5749 »

udi hat geschrieben: 14. Mär 2022 12:10 Die Zeile import java... darf nicht direkt über der betroffenen Regel stehen, sondern muss an den Anfang der Datei.
Genau, und ebenso globale Variblen ;-)
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

udi
Beiträge: 26
Registriert: 31. Okt 2020 10:45
Answers: 0

Re: Komm nicht weiter

Beitrag von udi »

Danke acuh für den Tipp! Ich stelle alle rules gerade um auf Anlage per Text Datei. Durch die Erstellung im Frontend von OH hat man ja nicht wirklich viel mit Java zu tun. Ich hoffe, ich quäle mich da erfolgreich durch :P

Antworten