Ankündigung

Einklappen
Keine Ankündigung bisher.

Timer Rule

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

    Timer Rule

    Hi,

    bin gerade an einer Timer Rule, ich meine das alles soweit stimmt aber es wird nichts ausgeführt:


    Variante 1 (Designer mekert bei der var Missing EOF?):
    Code:
    import org.openhab.core.library.types.*
     
    import org.openhab.model.script.actions.*
     
    import org.joda.time.*
    
    var
    Timer entryTimer = null
     
    var
    Timer toiletTimer = null
    
      
    rule
    "Licht Aus"
     
    when
     
    Item Light_Esszimmer_Flur changedto ON
     
    then
     
    if(Light_Esszimmer_Flur.state == ON)
     
    {
     
    entryTimer = createTimer(now.plusSeconds(
     
    50)) [|
    sendCommand(Light_Esszimmer_Flur, OFF) 
    ]
     
    }
     end
    Variante 2 aus openhab BSP (Designer mekert bei der var Missing EOF?):
    Code:
    import org.openhab.core.library.types.*
     
    import org.openhab.model.script.actions.*
     
    import org.joda.time.*
    
    var Timer timer
    
    rule "Zeit"
    when
            Item Light_Esszimmer_Flur changed
    then
            if(Light_Esszimmer_Flur.state==ON) {
                    timer = createTimer(now.plusSeconds(50)) [|
                     sendCommand(Light_Esszimmer_Flur, OFF)       // do something! 
                    ]
            } else {
                    if(timer!=null) {
                            timer.cancel
                            timer = null
                    }
            }
    end
    Woran kanns liegen ? Einfach Rules laufen, wie z.B. :

    Code:
    rule "Zeitschaltuhr 1 Ein"
    when   
    Time cron "0 58 12 ? * *"       
    then   
               sendCommand(Light_Esszimmer_Flur, ON)
    end
    
    
    rule "Zeitschaltuhr 1 Aus"
    when   
    Time cron "0 59 12 ? * *"       
    then   
               sendCommand(Light_Esszimmer_Flur, OFF)
    end
    Schon mal Danke für Eure Hilfe .....!

    Gruß Jürgen

    #2
    Hi Jürgen,

    kenne deine Rulesdatei nicht - aber wenn zwischen dem Import und der VAR noch andere Regeln sind meckert er. Die Variablen welche ausserhalb der Regeln gelten müssen am ANFANG der datei stehen.

    Versuhe mal ein neues .rules file und kopiere das so rein wie du es unten zeigst - da funktioniert es.

    Grüsse
    Karsten

    Kommentar


      #3
      Typo?

      changedto vs changed to

      Kommentar


        #4
        Hallo Karsten,

        Danke für den Tipp, das wars, mir war nicht bewußt das die Rules nicht zusammen in einer Datei stehen dürfen, und ich hab mich schon gewundert warum da gar nichts mehr geht, ich hab die Rules jetzt auf verschiedene Dateien aufgeteilt und es lief sofort.

        Der Timer sieht nun so aus:
        Code:
        import org.openhab.core.library.types.*
         
        import org.openhab.model.script.actions.*
         
        import org.joda.time.*
        
          
        var Timer timer
        
        rule "Zeit"
        when
                Time cron "0 * 23-6 ? * *"
        then
                if(Light_Kind2.state==ON) {
                        timer = createTimer(now.plusSeconds(300)) [|
                         sendCommand(Light_Kind2, OFF)       // do something! 
                        ]
                } else {
                        if(timer!=null) {
                                timer.cancel
                                timer = null
                        }
                }
        end
        Gruß Jürgen

        Kommentar


          #5
          Hallo Jürgen,

          dürfen sie schon nur die zentralen Variablen müssen alle am Anfang der RULES datei stehen.

          Grüsse
          Karsten

          Kommentar


            #6
            Hallo,

            das triggern über Time-Cron verursacht Probleme beim erneuten starten des Timers, deshalb hier eine bessere Lösung:

            Code:
            import org.openhab.core.library.types.*
             
            import org.openhab.model.script.actions.*
             
            
            var Timer timer_Flur = null
            
            rule "Zeit1"
            when
                Item Light_Esszimmer_Flur changed
            then
                if (now.getHourOfDay() >= 23 || now.getHourOfDay() <=5) {
                    if (timer_Flur != null) 
                        timer_Flur.cancel()
                    if (Light_Esszimmer_Flur.state == ON) {
                        createTimer(now.plusMinutes(5)) [| Light_Esszimmer_Flur.sendCommand(OFF) ]
            
                    } 
                }  
            end
            Gruß, Jürgen

            Kommentar

            Lädt...
            X