Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

OH Rules Aktion nur zu einer bestimmten Zeit ausführen

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

    OH Rules Aktion nur zu einer bestimmten Zeit ausführen

    Hallo,
    ich möchte einige Aktionen zu einer bestimmten Zeit ausführen lassen. Hierzu gibt es ein Beispiel:

    "
    var boolean temphigh = false
    rule "rollershutterdown-if-hot-and-between-9-and-3"
    when
    Item Netatmo_Aussen_Temperatur received update
    then
    if(Netatmo_Aussen_Temperatur.state <= 21)
    {
    temphigh = false
    }

    else
    {
    if (temphigh == false)
    {
    // create timer - for a timecheck - 15.30 today.
    var DateTime heiss_bis = new DateTime(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), 15, 30, 0)
    // create timer - today 8.30pm
    var DateTime heiss_von = new DateTime(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), 8, 30, 0)
    // check if allready marked as hightemperature and in the time between
    if(now.isBefore(heiss_bis) && (now.isAfter(heiss_von)) && (temphigh == false))
    {
    // Shutdown all rollershutter in the Group Jalousien_SONNE
    Jalousien_Sonne?.members.forEach(item,i|createTime r(now.plusSeconds(i)) [|sendCommand(item, DOWN)])
    // set global variable
    temphigh = true
    }
    }
    }
    end
    "

    Nur funktioniert das unter OH2 nicht. Hätte jemand ein funktionierendes Beispiel ?

    Gruß
    Frank

    #2
    Das wird weder unter OH1 noch unter OH2 funktionieren, weil schon das erste if-Statement falsch ist. Statt
    Code:
    if(Netatmo_Aussen_Temperatur.state <= 21)
    muss es
    Code:
    if([COLOR=#FF0000]([/COLOR]Netatmo_Aussen_Temperatur.state [COLOR=#FF0000]as DecimalType)[/COLOR]<= 21)
    heißen. Ein state ist ein state, keine Zahl, also kann auch nicht auf <= geprüft werden.
    Der Rest sieht für mich erstmal in Ordnung aus, das muss aber nichts heißen, ich verwende solche Datumskonstrukte nur ungern, stattdessen vergleiche ich die Zeit sebst:
    Code:
    if(now.getMinuteOfDay > 8*60 + 29 && now.getMinuteOfDay < 15*60 + 31 && temphigh == false) {...}

    Kommentar


      #3
      Vielen Dank für deine Hilfe, genau so geht es. Wie gesagt ich habe es aus den Wiki Demo Rules.

      Kommentar

      Lädt...
      X