Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu now.getDayOfWeek

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

    Frage zu now.getDayOfWeek

    Hallo zusammen,

    ich schalte eine Squeezebox ein, sobald die Jalousie im Bad geöffnet wird.
    Das ist einfach und funktioniert. Jetzt möchte ich aber, dass die SB nur Mo-Fr eingschaltet wird, wenn die Jalousie hochfährt.
    Nach Suche hier im Forum hab ich versucht das Ganze per now.getDayOfWeek<=5 umzusetzen
    Ich gehe dabei davon aus, dass Mo=1 und So=7 ist und habe die Rule wie folgt gebaut

    Code:
    rule "Sb Radio ein bei Rollo Bad auf"
        when     
        Item knx_item_rollo_bad received command UP
        then
        if(now.getDayOfWeek<=5)
            sendCommand (radio_power, ON)
            sendCommand (radio_play, ON)
            sendCommand (radio_volume, 24)
        end
    Wenn die Regel funktionieren würde, dürfte das Radio heute ja nicht eingeschaltet werden, da Samstag ist.
    Sobald ich das Rollo hochfahre, schaltet sich die Squeezebox ein.
    Also hab ich versucht, die rule nur für einen Tag zu definieren

    Code:
     if(now.getDayOfWeek=5)
    Dann wirft OH diesen Fehler

    Code:
    2016-06-11 16:37:20.641 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Sb Radio ein bei Rollo Bad auf': org.eclipse.xtext.util.PolymorphicDispatcher$NoSuchMethodException: Couldn't find method ''_assignValue'' for objects [JvmVoid:  (eProxyURI: knx_sh.rules#xtextLink_::0.2.14.2.0.0.0::0::/2), <XFeatureCallImplCustom> getDayOfWeek <XNumberLiteralImpl>, 5, org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext@1c66ec0, org.eclipse.xtext.util.CancelIndicator$1@15deac3]
    Hat jemand einen Tipp für mich?
    Ist now.getDayOfWeek überhaupt der richtige Ansatz?

    Vielen Dank vorab


    #2
    var Number day2 = now.getDayOfWeek

    if (((day2 == 1)...

    Kommentar


      #3
      Vergleichsoperatoren innerhalb der if-Bedingung:

      == (ist gleich)
      >= (ist größer oder gleich
      <= (ist kleiner oder gleich)
      != (ist ungleich)
      < (ist kleine)
      > (ist größer)

      = ist ein Zuweisungsoperator, also z.B. a = 2 -> der Variablen a wird der Wert 2 zugewiesen
      Zuletzt geändert von udo1toni; 12.06.2016, 10:37. Grund: kleiner und größer ergänzt

      Kommentar


        #4
        Danke für Eure Antworten.
        Werde mich morgen mal versuchen.
        Kann now.getdayofweek nur über eine Variable genutzt werden, oder kann ich es direkt in eine rule einbauen?

        Kommentar


          #5
          Du kannst now.getDayOfWeek auch direkt verwenden.
          Code:
          if(now.getDayOfWeek <= 5) // Montag bis Freitag
          sollte gehen. Siehe auch DateTimeConstants, da sind die Konstanten aufgeführt (alphabetisch, nicht thematisch, die Wochentage sind also verstreut in der Tabelle).
          Wenn Du mehrere Befehle von der Funktion abhängig machen willst, musst Du diese als Codeblock markieren, if() überspringt die nächste Anweisung, falls die Bedingung nicht erfüllt ist. Also in Deinem Fall:
          Code:
          import org.joda.time.*                 // oder import org.joda.time.DateTime
          
          rule "Sb Radio ein bei Rollo Bad auf"
          when
             Item knx_item_rollo_bad received command UP
          then
             if(now.getDayOfWeek <= 5) {         //Montag bis Freitag, { öffnet einen Codeblock
                  radio_power.sendCommand(ON)
                  radio_play.sendCommand(ON)
                  radio_volume.sendCommand(24)
              }                                  // } schließt einen Codeblock
          end
          Ich habe in diesem Beispiel statt der Action die Methode genutzt, da sie bei mir weniger Ärger macht
          Außerdem ist der import oben wichtig, der muss am Anfang des Rule Files stehen (neben einigen anderen grundlegenden imports, die openHAB selbst betreffen)
          Zuletzt geändert von udo1toni; 12.06.2016, 13:16. Grund: Typo...

          Kommentar


            #6
            Hallo udo1toni.
            Das war's. Perfekt!
            Vielen Dank.
            Ich tu mir als Entwickler-Laie doch ziemlich schwer, die korrekte Syntax zu treffen...
            Werde mir ab sofort auch angewöhnen die Methoden zu nutzen.

            Kommentar

            Lädt...
            X