Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule

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

    Rule

    Hallo, ich muss nochwas fragen..
    Ich habe folgenden Eintrag in den Items:
    Code:
    String Bluetooth_GF_Living  "Anwesend [MAP(bt.map):%s]"  { http="<[http://192.168.0.198/bluetooth.cgi:30000:REGEX((.*))]" }
    Mein Webserver liefert OPEN und CLOSED zurück.
    In der Map steht eine Umsetzung auf CLOSED=anwesend und OPEN=abwesend.

    Lt. Log kommt das auch so an:
    16:33:10.700 INFO runtime.busevents[:46] - Bluetooth_GF_Living state updated to CLOSED

    Folgender Regel dann, wenn der auf CLOSED steht soll das Licht angehen:
    Code:
    rule "Licht an wenn BT anwesend"
    when   
            Time cron "0 * * * * ?"         
    then            
            if (Bluetooth_GF_Living.state==CLOSED) {         
                    sendCommand(Light_GF_Living_switch1, ON)          
            }     
    end
    Licht geht aber nicht an
    Ohne die if-Abfrage funktioniert es, also Rules werden abgearbeitet und das Licht eingeschaltet.
    Sicher ein Anfängerfehler aber ich komm da nicht weiter...

    Holger

    #2
    Bist Du sicher, dass Du nur zur vollen Minute das Licht einschalten willst?
    Code:
    rule "Licht an wenn BT anwesend" 
    when
        Item Bluetooth_GF_Living received update 
    then
        if ((Light_GF_Living_switch1.state==OFF) && (Bluetooth_GF_Living.state==CLOSED))
            sendCommand(Light_GF_Living_switch1, ON)
    end
    würde doch vollkommen ausreichen?

    Kommentar


      #3
      Ich will natürlich nicht immer zur vollen Minute das Licht einschalten, da kommen noch weitere Abfragen drum herum.
      Das war nur ein gekürztes Beispiel welches eben nicht funktioniert.
      Ich hab es jetzt mal so übernommen, sitz aber immernoch im dunkeln...

      Diese Abfrage auf .state==CLOSED, was ist CLOSED eigentlich, der String direkt oder eine Konstante ? Hab das Gefühl das der Wert dahinter nicht stimmt.
      Kann ich mir .state ins Log ausgeben, wenn ja, wie ?

      Holger

      Kommentar


        #4
        Hab noch etwas getestet, es funktioniert mit
        Code:
        Bluetooth_GF_Living.state=="CLOSED"
        Holger

        Kommentar


          #5
          stimmt, ist ja ein String...

          .state kannst Du mit einem Konstrukt wie
          Code:
          logInfo("Rulename","Wert von Bluetooth_GF_Living.state ist: " + Bluetooth_GF_Living.state)
          ausgeben, wobei Rulename eine freie Überschrift ist, um die verschiedenen Infos auseinanderhalten zu können - kann ja sein, dass dasselbe Item von verschiedenen Regeln verändert wird.
          Abhängig von derArt des Items könnte eventuell noch ein .toString hinter .state helfen, wobei ich da auch noch nicht vollständig durchblicke :-)

          Kommentar


            #6
            Hi,

            OPEN und CLOSED sind Zustände des Typs OpenClosedType. Der Vergleich <>.state == CLOSED funktioniert aber nur dann, wenn der Typ Deines Items "Contact" ist. Da er aber in Deinem "String" ist, kann auch nur der gleich mit dem String "CLOSED" funktionieren.

            Deine Vermutung, dass der Typ der zu vergleichenden Objekte nicht stimmt, war also sehr richtig :-)

            Gruß,

            Thomas E.-E.
            Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

            Kommentar

            Lädt...
            X