OH3 Rule Probleme

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
CrazyTuner
Beiträge: 19
Registriert: 16. Mär 2022 19:35
Wohnort: Franken

OH3 Rule Probleme

Beitrag von CrazyTuner »

Ich habe endlich, nach langem, umgestellt auf OH3.

Nachdem ich alles Neu gemacht habe, bzw diesmal alle Items in Textform angelegt habe, und den rest auch so ziemlich eingerichtet/portiert habe,
komme ich mit einigen fehlern nicht weiter.
Ich habe für eine andere Rule eine precense gruppe die über die bewegungsmelderRule mit aktiviert wird.
Jedoch funktioniert das nicht. alle Items bei Precense bleiben bei NULL und ich bekomme einen fehler im Log.

Code: Alles auswählen

rule "Diele Präsenz"
when
    Item BWM_Diehle changed from OFF to ON
then
var sunset = new DateTime(Sunset_Time.state.toString)
var sunrise = new DateTime(Sunrise_Time.state.toString)
DielePrecense.sendCommand(ON)
if(BWM_Automatik.state == ON)  {
   if(DieleManuell.state == ON)  {
    if(sunrise.isAfterNow() || sunset.isBeforeNow()) {
        if(DieleTimer.state == OFF) {
            if(Darkmode.state == ON) {
                MobileRGB1_LEDStat.sendCommand(ON)
            }
            else {
                SonoffS_EssZiLi3.sendCommand(ON)
            }}
        DieleTimer.sendCommand(ON)
    }}}
end

rule "Diele Präsenz MyTimer Ende"
when
    Item DieleTimer received command OFF
then
if(BWM_Automatik.state == ON)  {
    if(DieleManuell.state == ON)  {
        sendCommand(SonoffS_EssZiLi3, OFF)
        if(Darkmode.state == ON) {
            MobileRGB1_LEDStat.sendCommand(OFF)
        }
    }}
end
Ich arbeite mit MS VSC. dort wird mir das Item "DielePrecense" in der Rule bei "DielePrecense.sendCommand(ON)" schon garnicht farblich hinterlegt, wenn ich aber ein leerzeichen davor mache schon. (bug im VSC?)

Code: Alles auswählen

// ------------ Presänz ------------ //
Group:Switch:AND(OFF, ON) gPrecense
Switch KuechePrecense  (gPrecense)   { expire="15m,command=OFF" }
Switch DielePrecense   (gPrecense)   { expire="15m,command=OFF" }
Switch WoZiPrecense    (gPrecense)   { expire="15m,command=OFF" }
Switch BadPrecense     (gPrecense)   { expire="15m,command=OFF" }
Switch EssZiPrecense   (gPrecense)   { expire="15m,command=OFF" }
Switch EssZi2Precense                { expire="15m,command=OFF" }
Switch BuroPrecense    (gPrecense)   { expire="15m,command=OFF" }
Switch SchlaziPrecense (gPrecense)   { expire="15m,command=OFF" } 

Code: Alles auswählen

Switch BWM_Kueche       {channel="mqtt:topic:9897e44b96:7581805bdd:Kueche",                         expire="1s,command=OFF" }
Switch BWM_Bad          {channel="mqtt:topic:9897e44b96:496c53e0e9:Bad",                            expire="1s,command=OFF" }
Switch BWM_Diehle       {channel="mqtt:topic:9897e44b96:0797aa73a9:Diele",                          expire="1s,command=OFF" }
Switch BWM_EssZimmer    {channel="mqtt:topic:9897e44b96:0797aa73a9:EssZimmer",                      expire="1s,command=OFF" }
Switch BWM_EssZimmer2   {channel="mqtt:topic:9897e44b96:0797aa73a9:EssZimmer2",                     expire="1s,command=OFF" }
Switch BWM_WoZi         {channel="mqtt:topic:9897e44b96:ee60b2acee:BWM_WoZi",                         expire="1s,command=OFF" }
Switch BWM_Buero        {channel="mqtt:topic:9897e44b96:2cc832c2c8:BWM_Buro",                       expire="1s,command=OFF" }
Switch BWM_SchlaZi      {channel="mqtt:topic:9897e44b96:017a23e301:BewegungsmelderSchlafZimmer",    expire="1s,command=OFF" }
Wo liegt hier der fehler?
In OH2.5 ist das alles Problemlos gelaufen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
NEIN, ich beherrsche die deutsche Rechtschreibung, auch Groß- und Kleinschreibung, nur habe ich zu viel Angst vor der SHIFT-Taste 8-) 8-)

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

Re: OH3 Rule Probleme

Beitrag von udo1toni »

Es gibt einen großen Unterschied zwischen openHAB2 und openHAB3, das betrifft die Zeit-Funktionen. openHAB2 hat Joda Time verwendet, openHAB3 verwendet JavaTime. Joda Time wurde entwickelt, weil Java keine entsprechenden Funktionen mitbrachte. Seit Java 8 ist aber JavaTime mit an Bord. In Java 11 sind auch alle Funktionen verfügbar, die man so mit Zeit in openHAB braucht.
Aber die Namen der Funktionen lauten anders. Außerdem ist es eher umständlich, Zeit und Datum aus einem DateTime Item auszulesen und dann auf die Grenzen zu testen. Ich möchte empfehlen, ein Switch Item isNight anzulegen. Dieses Item wird nicht verlinkt, sondern durch zwei Rules geschaltet.
Die Rules lösen über die beiden RangeEvent Channel astro:sun:local:rise#event und astro:sun:local:set#event aus, die eine Rule schaltet isNight auf ON, die andere schaltet es auf OFF. Nun kannst Du in der Rule einfach abfragen, ob isNight ON oder OFF ist.
Einziger Nachteil: das Item wird exakt zu den beiden Zeitpunkten geschaltet, aber nicht, wenn Du openHAB startest. Man kann sich natürlich noch eine System started Rule bauen, die das abfängt, ist aber eher umständlich. Man kann das Item persistieren (mapDB ist Dein Freund) und per restoreOnStartup automatisch setzen lassen. Es kommt ja nicht so oft vor, dass man openHAB über den Tag/Nacht-Wechsel hinaus anhält.

Das englische Wort für Anwesenheit heißt übrigens Presence, nicht Precense ;)

Weiterhin ist es sinnvoll, wenn möglich Schachtelungen zu vermeiden (dabei geht es vor allem um die Lesbarkeit von Code). Statt also einen Codeblock nur auszuführen, wenn eine Bedingung erfüllt ist, brechen wir die Rule ab, wenn die Bedingung nicht erfüllt ist (das geht natürlich nur, wenn nicht stattdessen anderer Code auszuführen ist).

Die Rules sähen dann so aus:

Code: Alles auswählen

rule "aktiviere Nacht"
when
    Channel 'astro:sun:local:set#event' triggered START
then
    isNight.postUpdate(ON)
end

rule "deaktiviere Nacht"
when
    Channel 'astro:sun:local:rise#event' triggered START
then
    isNight.postUpdate(OFF)
end

rule "Diele Präsenz"
when
    Item BWM_Diehle changed from OFF to ON
then
    DielePrecense.sendCommand(ON)

    if(BWM_Automatik.state != ON)
        return;
    if(DieleManuell.state != ON)
        return;
    if(isNight.state != ON)
        return;

    if(DieleTimer.state == OFF) {
        if(Darkmode.state == ON) {
            MobileRGB1_LEDStat.sendCommand(ON)
        } else {
            SonoffS_EssZiLi3.sendCommand(ON)
        }
    }
    DieleTimer.postUpdate(ON)
end

rule "Diele Präsenz MyTimer Ende"
when
    Item DieleTimer received command OFF
then
    if(BWM_Automatik.state != ON)
        return;
    if(DieleManuell.state == ON)  {
        SonoffS_EssZiLi3.sendCommand(OFF)
        if(Darkmode.state == ON) {
            MobileRGB1_LEDStat.sendCommand(OFF)
        }
    }
end
Hat es einen besonderen Grund, warum Du beim Abschalten anders vorgehst als beim Anschalten? (bei Darkmode ON wird nur ein Licht eingeschaltet, aber beide Lichter werden ausgeschaltet, bei Darkmode OFF wird nur das eine Licht ein- und ausgeschaltet)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

CrazyTuner
Beiträge: 19
Registriert: 16. Mär 2022 19:35
Wohnort: Franken

Re: OH3 Rule Probleme

Beitrag von CrazyTuner »

@udo1toni Danke, hat geklappt. hat leider entwas mit der antwort gedauert, da ich ALLES neu aufgesetzt habe und dann doch ohne restore alles neu erstellt habe. Hat sich doch einiges verändert von OH2 auf OH3, da ich mit vielen weiteren rules probleme hatte, die ich nun auch lösen konnte.
NEIN, ich beherrsche die deutsche Rechtschreibung, auch Groß- und Kleinschreibung, nur habe ich zu viel Angst vor der SHIFT-Taste 8-) 8-)

Antworten