Ankündigung

Einklappen
Keine Ankündigung bisher.

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