Seite 1 von 2

Timer in OH3

Verfasst: 11. Jan 2021 10:22
von Markus_JE
GUten Morgen zusammen,

ich bin gerade dabei die Regeln in die neue UI zu übertragen.
Wie kann denn ein Timer in der neuen UI erstellt werden?

Anbei mein "alter Code".

Code: Alles auswählen

var Timer timer = null
    rule "Weihnachtsbeleuchtung"
when
       Time cron " 0 30 16 ? * * "
       //Item XXX changed to ON //FUNKTIONIERT
       //Channel "astro:sun:home:civilDusk#event" triggered START
       
then 

if (Weihnachtsbeleuchtung_Automatik.state != ON) return;  // wenn Schalter aus(nicht an) , keine Aktionen
        {
        logInfo("FILE", "Weihnachtsbeleuchtung EIN, Timer wird gestartet")
        SteckdoseBalkon.sendCommand(ON)
            timer = createTimer(now.plusMinutes(490), [|
            logInfo("FILE", "Timer abgelaufen Weihnachtsbeleuchtung wird ausgeschaltet")
            SteckdoseBalkon.sendCommand(OFF)
            timer = null
            ])
        }      
end

Re: Timer in OH3

Verfasst: 12. Jan 2021 14:28
von ThomasW
Hallo Markus,

du kannst den Timer ganz einfach in der UI erstellen:

lege eine neue Rule an
als trigger die Zeit auswählen und dann ein Script (Rule DSL)ausführen lassen

Code: Alles auswählen

if (Weihnachtsbeleuchtung_Automatik.state != ON) return;  // wenn Schalter aus(nicht an) , keine Aktionen
        {
        logInfo("FILE", "Weihnachtsbeleuchtung EIN, Timer wird gestartet")
        SteckdoseBalkon.sendCommand(ON)
           createTimer(now.plusMinutes(490), [|
            logInfo("FILE", "Timer abgelaufen Weihnachtsbeleuchtung wird ausgeschaltet")
            SteckdoseBalkon.sendCommand(OFF)
           
            ])
        }      

Re: Timer in OH3

Verfasst: 12. Jan 2021 16:22
von Markus_JE
ok das versuche ich gleich nochmals.
Meine Rules starten auch nicht von alleine. Was kann denn hier für eine Ursache sein?
Nach manuellem starten funktioniert es.

Ist eine andere Rule um Aussen Temp auf KNX zu bringen. Mit dem stet könnte etwas falsch sein vermute ich.

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: WetterAussenTemperature
      state: changed
      previousState: ""
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >-2
            if(WetterAussenTemperature.state instanceof Number)
                WetterAussenTemperature_knx.sendCommand((WetterAussenTemperature.state as Number).floatValue)
    type: script.ScriptAction

Re: Timer in OH3

Verfasst: 12. Jan 2021 18:03
von udo1toni
So wie ich es sehe darf previousState gar keinen Inhalt haben, sonst triggert die Rule nur, wenn das Status von "" auf etwas anderes wechselt.

Re: Timer in OH3

Verfasst: 12. Jan 2021 18:19
von Markus_JE
HAllo Udo,
ich meine irgendwo gelesen zu haben das der Timer auch anders gestezt werden muss.
Kannst du mir sagen wie?

Sollte doch nicht mehr
createTimer(now.plusMinutes(240) heissen sonders anders?!?

Re: Timer in OH3

Verfasst: 12. Jan 2021 18:38
von udo1toni
Doch, dieser Ausdruck müsste weiterhin so möglich sein.

Re: Timer in OH3

Verfasst: 12. Jan 2021 19:01
von ThomasW
Es geht weiterhin so über die Rule das benutze ich bei mir.

Du kannst alternativ im Item Add Metadata und da Expiration Timer verwenden dann schaltet sich dein Item nach der eingestellten Zeit auf den von dir gewünschten Wert

habe damit noch keine Erfahrung gemacht kann dir dazu nicht mehr sagen.

Re: Timer in OH3

Verfasst: 12. Jan 2021 19:07
von Markus_JE
aber ich bekomme seltsamerweisse diese Meldung im Logging.

{

logInfo("FILE", "Licht EIN, Timer wird gestartet")

BeleuchtungTreppeneingangHaus.sendCommand(ON)

timer = createTimer(now.plusMinutes(5), [|

logInfo("FILE", "Timer abgelaufen Licht wird ausgeschaltet")

BeleuchtungTreppeneingangHaus.sendCommand(OFF)

timer = null

])

}

Cannot refer to the non-final variable timer inside a lambda expression; line 8, column 338, length 5

Re: Timer in OH3

Verfasst: 12. Jan 2021 19:15
von ThomasW
Sehe deinen Fehler du musst entweder noch vorher die Variable ergenzen

Code: Alles auswählen

var Timer timer = null
oder in deinem code timer = entfernen

Re: Timer in OH3

Verfasst: 12. Jan 2021 19:19
von Markus_JE
Hi,

mein Script sieht nun so aus aber bekomme folgednde Fehlermeldung im Logging.

Code: Alles auswählen

 {
        logInfo("FILE", "Licht EIN, Timer wird gestartet")
        BeleuchtungTreppeneingangHaus.sendCommand(ON)
            timer = createTimer(now.plusMinutes(240), [|
            logInfo("FILE", "Timer abgelaufen Licht wird ausgeschaltet")
            BeleuchtungTreppeneingangHaus.sendCommand(OFF)
            ])
            }
Fehler:
2021-01-12 19:17:01.065 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Treppenbeleuchtung_Hauseingang' failed: {

logInfo("FILE", "Licht EIN, Timer wird gestartet")

BeleuchtungTreppeneingangHaus.sendCommand(ON)

timer = createTimer(now.plusMinutes(240), [|

logInfo("FILE", "Timer abgelaufen Licht wird ausgeschaltet")

BeleuchtungTreppeneingangHaus.sendCommand(OFF)

])

}

The method timer(Timer) is undefined; line 4, column 128, length 5