Ankündigung

Einklappen
Keine Ankündigung bisher.

OH2 Problem mit Rule bzw. Status eines Items

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    OH2 Problem mit Rule bzw. Status eines Items

    Hallo zusammen,

    nachdem ich bereits einige Zeit auf OH2 bin, habe ich immer noch Probleme mit einer Regel, welches prüft ob im Schlafzimmer das letzte Licht im Schlafzimmer vom Bett betätigt wurde Unter OH1 lief dies bislang ohne Probleme.

    Die Rule
    Code:
    [SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055][B]rule[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Sleepy[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]when[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    Item[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Lampe_OG_Schlafz_Bett_links [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]received command[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]or[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    Item[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Lampe_OG_Schlafz_Bett_rechts [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]received command[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]then[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    [SIZE=2][I]    println[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"**Schalter am Bett betätigt- "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
    [SIZE=2][I]    logInfo[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"sleepy"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Lampe_OG_Schlafz_Decke ist {}"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Decke[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state)[/SIZE]
    [SIZE=2][I]logInfo[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"sleepy"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Lampe_OG_Schlafz_Bett_links ist {}"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Bett_links[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state)[/SIZE]
    [SIZE=2][I]logInfo[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"sleepy"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Lampe_OG_Schlafz_Bett_rechts ist {}"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Bett_rechts[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state)[/SIZE]
    [SIZE=2][I]logInfo[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"sleepy"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"SleepMode ist {}"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]SleepMode[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state)[/SIZE]
    
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (receivedCommand==[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]OFF[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] && ([I]now[/I].getHourOfDay >= [/SIZE][SIZE=2][COLOR=#7d7d7d][SIZE=2][COLOR=#7d7d7d]21[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] || [I]now[/I].getHourOfDay <= [/SIZE][SIZE=2][COLOR=#7d7d7d][SIZE=2][COLOR=#7d7d7d]4[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) && [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Decke[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state == [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]OFF[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] && [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Bett_links[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state == [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]OFF[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] && [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]Lampe_OG_Schlafz_Bett_rechts[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state == [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]OFF[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] && [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]SleepMode[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].state == [/SIZE][SIZE=2][COLOR=#7d7d7d][SIZE=2][COLOR=#7d7d7d]0[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {[/SIZE]
    
    [SIZE=2][I]    println[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"**Nun wird geschlafen"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
    
    [I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]    SleepMode[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].[/SIZE][I][SIZE=2][COLOR=#ab3000][SIZE=2][COLOR=#ab3000]postUpdate[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]([/SIZE][SIZE=2][COLOR=#7d7d7d][SIZE=2][COLOR=#7d7d7d]1[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
    [I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]    Rollo_1[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].[/SIZE][I][SIZE=2][COLOR=#ab3000][SIZE=2][COLOR=#ab3000]sendCommand[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]([/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]DOWN[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2])[/SIZE]
    
    [I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]    Lampe_1[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].[/SIZE][I][SIZE=2][COLOR=#ab3000][SIZE=2][COLOR=#ab3000]sendCommand[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]([/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]OFF[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2])[/SIZE]
    [SIZE=2]    }[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]end[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    In die zweite If-Schleife komme ich nicht einmal rein.

    Die Log-Einträge
    Code:
    22:27:44.619 [INFO ] [smarthome.event.ItemCommandEvent    ] - Item 'Lampe_OG_Schlafz_Bett_rechts' received command OFF
    **Schalter am Bett betätigt-
    22:27:44.634 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Decke ist OFF
    22:27:44.636 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_links ist OFF
    22:27:44.642 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_rechts ist ON
    22:27:44.643 [INFO ] [clipse.smarthome.model.script.sleepy] - SleepMode ist 0
    22:27:44.688 [INFO ] [marthome.event.ItemStateChangedEvent] - Lampe_OG_Schlafz_Bett_rechts changed from ON to OFF
    
    22:29:07.687 [INFO ] [smarthome.event.ItemCommandEvent    ] - Item 'Lampe_OG_Schlafz_Bett_rechts' received command ON
    **Schalter am Bett betätigt-
    22:29:07.701 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Decke ist OFF
    22:29:07.702 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_links ist OFF
    22:29:07.703 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_rechts ist OFF
    22:29:07.705 [INFO ] [clipse.smarthome.model.script.sleepy] - SleepMode ist 0
    22:29:07.753 [INFO ] [marthome.event.ItemStateChangedEvent] - Lampe_OG_Schlafz_Bett_rechts changed from OFF to ON
    
    22:29:14.533 [INFO ] [smarthome.event.ItemCommandEvent    ] - Item 'Lampe_OG_Schlafz_Bett_rechts' received command OFF
    **Schalter am Bett betätigt-
    22:29:14.553 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Decke ist OFF
    22:29:14.555 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_links ist OFF
    22:29:14.563 [INFO ] [clipse.smarthome.model.script.sleepy] - Lampe_OG_Schlafz_Bett_rechts ist ON
    22:29:14.565 [INFO ] [clipse.smarthome.model.script.sleepy] - SleepMode ist 0
    22:29:14.626 [INFO ] [marthome.event.ItemStateChangedEvent] - Lampe_OG_Schlafz_Bett_rechts changed from ON to OFF
    Demnach scheint es mir, dass die Rule den Statuswechsel nicht mitbekommt

    Kann/Muss ich evtl einen anderen Befehl nehmen??

    Gruß
    Jörg

    #2
    Ist das "received commandor" in der ersten Zeile ein C&P-Fehler? Da fehlt sonst ein Leerzeichen.

    Hast du bei den now.getHourOfDay-Kommandos mal leere Werte-Klammern probiert? Also now.getHourOfDay() >=21..? Oder vielleicht mal diese Zeitabfrage ganz aus der IF-Überprüfung rauslassen und schauen, ob es zeitunabhängig funktioniert?

    Ansonsten mal prüfen, ob noch irgendwelche Bibliotheken für die Rule benötigt werden und die vorher importieren.

    Oder du postest mal die item-Definitionen der hier verwendeten Items. Vielleicht gibt es da irgendwo ein Problem? OH2 ist da etwas weniger fehlerverzeihend mit states usw.

    Hast du das Log mal im DEBUG-Modus laufen lassen und geschaut, was da für Fehler für die Rule ausgeworfen werden?

    Kommentar


      #3
      Da offensichtlich die if-Abfrage aus irgendeinem Grund nie erfüllt ist, empfehle ich, diese mal in mehrere kleine if-Abfragen aufzuteilen und mit entsprechendem Log zu versehen, dann kannst Du den Fehler eingrenzen.
      Auf den ersten Blick fällt mir SleepMode.state == 0 ins Auge, 0 ist kein gültiger State. Mag sein, dass openHAB unter bestimmten Voraussetzungen eine korrekte Typumwandlung durchführt, dennoch wäre die korrekte Formulierung eher
      (SleepMode.state as DecimalType).intValue == 0

      Kommentar


        #4
        jaydee73 Ja, "received commandor" ist Formatierungsfehler und in der Rule steht natürlich "command or"

        udo1toni Hmm, werde ich auch mal testen, ich hatte aber auch schon SleepMode aus der Regel entfernt.

        Aber: In den Logs kommt ja der Status von den Lampen am Bett offensichtlich zu "spät". Beim durchlaufen der Regel "wenn eben ein Schalter betätigt wurde" ergibt die darauffolgende Abfrage des status noch den alten Wert. Daher die Vermutung, das OH2 hier langsamer arbeitet als OH1. Kann ich anstatt
        Item Lampe_OG_Schlafz_Bett_links received Command
        auch
        Item Lampe_OG_Schlafz_Bett_links changed to OFF
        verwenden?

        Kommentar


          #5
          Ja, sicher. Dann triggert die Rule natürlich nur, wenn der entsprechende Schalter vorher einen anderen Status als OFF hatte. Weiterhin musst Du natürlich darauf achten, dass beim Trigger changed kein receivedCommand zur Verfügung steht.

          Kommentar


            #6
            Danke für den Schubs, ich vermute wie gesagt immer noch ein etwas langsameres OH2 als Ursache, habe dies aber nur wie folgt gelöst.

            Code:
            rule Sleepy
            when
             Item Lampe_OG_Schlafz_Bett_links changed from ON to OFF or
             Item Lampe_OG_Schlafz_Bett_rechts changed from ON to OFF
            then
             println("**Schalter am Bett betätigt- ")
            
             if ((now.getHourOfDay >= 21 || now.getHourOfDay <= 4) &&
              Lampe_OG_Schlafz_Decke.state == OFF && Lampe_OG_Schlafz_Bett_links.state == OFF &&
              Lampe_OG_Schlafz_Bett_rechts.state == OFF && SleepMode.state == 0)  {
              println("**Nun wird geschlafen")
              SleepMode.postUpdate(1)
            
              Rollo_1.sendCommand(DOWN)
              Rollo_2.sendCommand(DOWN)
            
              Lampe_1.sendCommand(OFF)
              Lampe_2.sendCommand(OFF)
             }
            end
            Da die Regel eh nur aktiv sein soll, wenn das Licht ausgeschaltet wird, ist dies für mich OK. Das einzige "Risiko" wäre ein undefinierter Zustand, aber ich habe den Staus der Item persistiert um dies zu umgehen.

            VG
            Jörg

            Nachtrag: Hintergrund der Regel ist es, einfach noch einmal alle Rollos wirklich zu schließen und alle Lichter auszuschalten, wenn die Eltern dann mal ins Bett gehen
            Zuletzt geändert von JoergA; 10.06.2017, 13:17. Grund: Nachtrag

            Kommentar

            Lädt...
            X