OH3 Timer

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH3 Timer

Beitrag von udo1toni »

Grundsätzlich sehe ich erst mal keinen Fehler im Code des Timers, wobei mir noch nicht ganz klar ist, was die Steuerung vorne macht, aber das hat ja mit dem Problem erst mal nur am Rande zu tun.

Dennoch möchte ich den Timer Code leicht abgewandelt anbieten:

Code: Alles auswählen

    tAuto = createTimer(now.plusNanos(10000000), [|                                               // Timer initialisieren
        var Integer iOnTime = 10                                                                  // Default ON-Zeit
        if(Beduftung_Timer_Anzeit.state instanceof Number)                                        // falls gültiger Wert
            iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                           // übernimm ON-Zeit aus Item
        var Integer iOffTime = 290                                                                // Default OFF-Zeit
        if(Beduftung_Timer_Auszeit.state instanceof Number)                                       // falls gültiger Wert
            iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                         // übernimm OFF-Zeit aus Item
        logInfo("Beduftung","Timer initialisiert - iOnTime = {}, iOffTime = {}",iOnTime,iOffTime) // gewählte Zeiten ausgeben
        val Soll = if(Beduftungtempswitch.state != ON) ON else OFF                                // Nächster Zustand
        val SollTime = if(Soll == ON) iOnTime else iOffTime                                       // nächste Zeit
        val SollLog  = if(Soll == ON) "n" else "us"                                               // Teilstring für Meldung
        Beduftungtempswitch.sendCommand(Soll.toString)                                            // Befehl absetzen
        logInfo("beduftung", "Timer A{}zeit {} Sekunden", SollLog, SollTime)                      // loggen
        tAuto.reschedule(now.plusSeconds(SollTime))                                               // Timer erneut planen
    ])
Hauptunterschiede:
  • Die Initialisierung läuft immer vollständig. Dafür werden die Zeiten auch direkt geloggt.
  • Der neue Zustand wird abhängig vom aktuellen Zustand berechnet.
  • Davon abhängig wird die Zeit ausgewählt und ein Teilstring gesetzt.
  • Der Schalter wird gesetzt und passend dazu die Meldung generiert
  • Der Timer wird erneut geplant.
Grundsätzlich sollte ein Wechsel im Sekundentakt locker funktionieren, allerdings könnte es Seiteneffekte geben, die dazu führen, dass der Schaltbefehl zu spät ausgeführt wird. auch daran denken: Der Status eines Items wird gewöhnlich vom verknüpften Channel geliefert. Sollte dieses Gerät Probleme damit haben, einmal pro Sekunde geschaltet zu werden, wäre im Ergebnis dasselbe Holpern zu sehen. Mein erster Vorschalg wäre also (eben um dieses Risiko zu minimieren) eine längere Zeit zu wählen, z.B. zwei Sekunden. ;)

Die zweite Rule (die zum Abschalten) hat einen schwerwiegenden Fehler (if ohne nachfolgenden Befehl), es irritiert mich etwas, dass diese Rule nicht zu einem entsprechenden Fehler führt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Es holpert immer noch ...
Beide Zeiten auf 5 Sekunden gestellt:

Bild

10 Sekunden An und 10 Sekunden Aus Vergleich 1 Sekunde An und 1 Sekunde Aus

Bild
Es laüft auch kein zweiter Timer

Code: Alles auswählen

Switch     Beduftunghauptschalter    
Switch   Beduftungtempswitch

Code: Alles auswählen

    var Timer tAuto = null

rule "Timer Beduftung starten jetzt"
when
                                                           
    Item Beduftunghauptschalter received command ON 
then
 
    
    
    
    tAuto = createTimer(now.plusNanos(10000000), [|                                               // Timer initialisieren
        var Integer iOnTime = 10                                                                  // Default ON-Zeit
        if(Beduftung_Timer_Anzeit.state instanceof Number)                                        // falls gültiger Wert
            iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                           // übernimm ON-Zeit aus Item
        var Integer iOffTime = 290                                                                // Default OFF-Zeit
        if(Beduftung_Timer_Auszeit.state instanceof Number)                                       // falls gültiger Wert
            iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                         // übernimm OFF-Zeit aus Item
        logInfo("Beduftung","Timer initialisiert - iOnTime = {}, iOffTime = {}",iOnTime,iOffTime) // gewählte Zeiten ausgeben
        logInfo("beduftung", "switch=" + Beduftungtempswitch)
        val Soll = if(Beduftungtempswitch.state != ON) ON else OFF                                // Nächster Zustand
        val SollTime = if(Soll == ON) iOnTime else iOffTime                                       // nächste Zeit
        val SollLog  = if(Soll == ON) "n" else "us"                                               // Teilstring für Meldung
        Beduftungtempswitch.sendCommand(Soll.toString)                                            // Befehl absetzen
        logInfo("beduftung", "Timer A{}zeit {} Sekunden", SollLog, SollTime)                      // loggen
        logInfo("beduftung", "switch=" + Beduftungtempswitch)
        tAuto.reschedule(now.plusSeconds(iOnTime))                                                // Timer erneut planen
    ])



end

Code: Alles auswählen

2023-01-06 13:13:09.082 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:09.083 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:09.085 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:09.088 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:14.092 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:14.093 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:14.098 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:13:14.100 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:19.109 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:19.109 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:19.111 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:19.111 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:24.125 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:24.127 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:24.129 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:13:24.130 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:29.153 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:29.154 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:29.162 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:29.163 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:34.186 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:34.187 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:34.189 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:13:34.191 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:39.208 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:39.213 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:39.217 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:39.217 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:44.233 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:44.235 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:44.240 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:13:44.241 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:49.254 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:49.256 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:49.259 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:49.260 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:54.275 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:54.275 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:13:54.283 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:13:54.284 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:59.290 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:13:59.291 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:13:59.293 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:13:59.294 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:04.308 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:04.308 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:04.309 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:04.310 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:09.325 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:09.326 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:09.332 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:09.333 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:14.344 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:14.345 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:14.347 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:14.348 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:19.355 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:19.359 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:19.375 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:19.376 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:24.391 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:24.392 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:24.395 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:24.395 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:29.397 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:29.398 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:29.400 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:29.401 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:34.408 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:34.409 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:34.411 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:34.414 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:39.417 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:39.417 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:39.418 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:39.419 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:44.421 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:44.422 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:44.423 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:44.423 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:49.425 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:49.426 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:49.427 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:49.427 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:54.432 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:54.433 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:54.434 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:14:54.436 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:14:59.440 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:14:59.440 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:14:59.442 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:14:59.442 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:04.456 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:15:04.458 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:04.461 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:15:04.462 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:15:09.467 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:15:09.469 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:15:09.470 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:15:09.471 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:15:14.475 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:15:14.476 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:14.481 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:15:14.483 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:15:19.485 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:15:19.485 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-01-06 13:15:19.487 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 5 Sekunden
2023-01-06 13:15:19.488 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:24.504 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5
2023-01-06 13:15:24.505 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:24.506 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 5 Sekunden
2023-01-06 13:15:24.506 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-01-06 13:15:29.512 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 5, iOffTime = 5

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH3 Timer

Beitrag von udo1toni »

Mach doch bitte die unsinnige Zeile weg:

Code: Alles auswählen

logInfo("beduftung", "switch=" + Beduftungtempswitch)
die bringt Dir nichts.
Innerhalb der Rule den Switch zu betrachten (so von wegen: da steht der Status...) ist Quatsch, die Rule ist dafür viel zu schnell.
openHAB arbeitet asynchron, das heißt, wenn Du einen Befehl Item.postUpdate() oder item.sendCommand() absetzt, dann wird openHAB das irgendwann ausführen, aber sicherlich nicht innerhalb von Mikrosekunden. Vom Initialisieren bis zum letzten log vergehen gerade mal 3 Millisekunden.
Es bringt also gar nichts, das auf diese Weise auszulesen.

Du kannst aber anhand des restlichen Loggings sehr schön sehen, dass der Schalter sauber zwischen Aus und An wechselt. Das Wording ist direkt abhängig vom neuen Soll Status, der immer das Gegenteil vom aktuellen Status ist. Somit ist bewiesen, dass der Status ganz sauber toggelt, alle 5 Sekunden + 10 Millisekunden (Reaktionszeit und Ausführungszeit Timerschleife komplett) - plus Varianz - das ist die Systemlast drum rum.

Welche Persistence verwendest Du denn als Grundlage? Eventuell ist der Fehler tatsächlich in der Auswertung zu suchen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

SeppK1984
Beiträge: 2
Registriert: 20. Jan 2023 17:21
Answers: 0

Re: OH3 Timer

Beitrag von SeppK1984 »

Hallo zusammen,

sorry wenn ich dazwischen funke, habe den Thread gefunden und bin ziemlich ratlos. Ich suche eine „Übersetzung“ die im ECMA-JavaScript funktioniert für folgenden Befehl:

Code: Alles auswählen

createTimer(now.plusSeconds(305)) [| ItemName.sendCommand(ON) ]
Kann mir jemand sagen wie die Syntax für den Befehl in ECMA-JavaScript aussehen muss???

Sorry, wahrscheinlich eine doofe Frage, aber ich bin absoluter OH3-Neuling und verzweifel gerade.
Danke für Eure Hilfe.

LG, SeppK1984

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH3 Timer

Beitrag von udo1toni »

Mit ECMA kann ich leider nicht dienen. Du kannst ein entsprechendes Code-Snippet aber leicht von openHAB generieren lassen, denn Blockly erzeugt ECMA Code. das heißt, Du legst eine einfache Blockly Rule an und speicherst diese. Anschließend wechselst Du in die Code-Ansicht und kopierst Dir dort den Code unterhalb des script-Tags raus.

Und bei der Gelegenheit erkennst Du dann auch, warum ich lieber die komplizierte DSL verwende, statt des einfachen JavaScript. ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

J-N-K
Beiträge: 126
Registriert: 20. Jun 2020 12:21
Answers: 4
Wohnort: Gelsenkirchen, NRW

Re: OH3 Timer

Beitrag von J-N-K »

Fairerweise: was Blockly erzeugt ist nicht unbedingt immer die eleganteste Variante das in JS zu lösen 😀
openHAB 4.0.0-SNAPSHOT - - local build -
APU2, 4GB RAM, 32GB SSD, Debian Buster
openHAB Core/Distro/Addons & SmartHome/J Maintainer

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH3 Timer

Beitrag von udo1toni »

Das hoffe ich sehr :) So kurz wie in der DSL wird es aber nicht werden :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

nach ewigen hin und her probieren bekomme ich es nicht hin.
Der Timer läuft zwar aber man kann bei der Ausszeit einstellen was man will, es ist immer die eingestellten Anzeit.

Code: Alles auswählen

var Timer tAuto = null




rule "Timer Beduftung starten"
when
                                                           
    Item Beduftunghauptschalter received command ON 
then

    
    tAuto = createTimer(now.plusNanos(10000000), [|                                               // Timer initialisieren
        var Integer iOnTime = 10                                                                  // Default ON-Zeit
        if(Beduftung_Timer_Anzeit.state instanceof Number)                                        // falls gültiger Wert
            iOnTime = (Beduftung_Timer_Anzeit.state as Number).intValue                           // übernimm ON-Zeit aus Item
        var Integer iOffTime = 290                                                                // Default OFF-Zeit
        if(Beduftung_Timer_Auszeit.state instanceof Number)                                       // falls gültiger Wert
            iOffTime = (Beduftung_Timer_Auszeit.state as Number).intValue                         // übernimm OFF-Zeit aus Item
        logInfo("Beduftung","Timer initialisiert - iOnTime = {}, iOffTime = {}",iOnTime,iOffTime) // gewählte Zeiten ausgeben
        logInfo("beduftung", "switch=" + Beduftungtempswitch)
        val Soll = if(Beduftungtempswitch.state != ON) ON else OFF                                // Nächster Zustand
        val SollTime = if(Soll == ON) iOnTime else iOffTime                                       // nächste Zeit
        val SollLog  = if(Soll == ON) "n" else "us"                                               // Teilstring für Meldung
        Beduftungtempswitch.sendCommand(Soll.toString)                                            // Befehl absetzen
        logInfo("beduftung", "Timer A{}zeit {} Sekunden", SollLog, SollTime)                      // loggen
        tAuto.reschedule(now.plusSeconds(iOnTime))                                                // Timer erneut planen
    ])



end


rule "Timer Beduftung Test stoppen"
when
    Time cron "0 0 21 * * ?"                                                                  // täglich um 21 Uhr

                                                   
then
if(Beduftunghauptschalter.state != ON)
{
   logInfo("Beduftung","Regel abgebrochen nicht alle Zustaende erreicht stoppen")
    Beduftung_An_Aus.sendCommand(OFF)                                                             // Beduftung abschalten
    tAuto?.cancel  

}
                                                                               // und Timer stopppen
end

Code: Alles auswählen

2023-03-27 17:36:35.531 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 10 Sekunden
2023-03-27 17:36:45.538 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 10, iOffTime = 60
2023-03-27 17:36:45.540 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-03-27 17:36:45.543 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 60 Sekunden
2023-03-27 17:36:55.603 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 10, iOffTime = 60
2023-03-27 17:36:55.603 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=OFF, Label=null, Category=null)
2023-03-27 17:36:55.619 [INFO ] [.openhab.core.model.script.beduftung] - Timer Anzeit 10 Sekunden
2023-03-27 17:37:05.636 [INFO ] [.openhab.core.model.script.Beduftung] - Timer initialisiert - iOnTime = 10, iOffTime = 60
2023-03-27 17:37:05.639 [INFO ] [.openhab.core.model.script.beduftung] - switch=Beduftungtempswitch (Type=SwitchItem, State=ON, Label=null, Category=null)
2023-03-27 17:37:05.642 [INFO ] [.openhab.core.model.script.beduftung] - Timer Auszeit 60 Sekunden
Wer kann mir noch einen Tip geben?

Vielen Dank!
Gruß Dirk

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: OH3 Timer

Beitrag von udo1toni »

Ja, da ist auch noch ein kleiner Bug drin... :)
Ändere bitte die Zeile

Code: Alles auswählen

        tAuto.reschedule(now.plusSeconds(iOnTime))                                                // Timer erneut planen
in

Code: Alles auswählen

        tAuto.reschedule(now.plusSeconds(SollTime))                                                // Timer erneut planen
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hulda
Beiträge: 68
Registriert: 13. Jan 2018 19:43
Answers: 0

Re: OH3 Timer

Beitrag von hulda »

Super funktioniert jetzt... :D
Nun kommt aber noch von Zeit zu Zeit folgende Fehlermeldung:

Code: Alles auswählen

2023-03-28 07:46:56.141 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job failed and stopped
java.lang.reflect.UndeclaredThrowableException: null
	at com.sun.proxy.$Proxy108017.apply(Unknown Source) ~[?:?]
	at org.openhab.core.model.script.actions.ScriptExecution.lambda$0(ScriptExecution.java:82) ~[?:?]
	at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:184) ~[?:?]
	at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:87) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: org.openhab.core.model.script.engine.ScriptExecutionException: The name '<unkown>' cannot be resolved to an item or type; line 0, column 0
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:141) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1008) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:971) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:247) ~[?:?]
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:874) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:243) ~[?:?]
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:924) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:269) ~[?:?]
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:486) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:267) ~[?:?]
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]
	at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
	... 10 more
Hat das was mit dem timer zu tun?
Wenn ja wie kann man den Fehler beseitigen?
Mein System:
OH 3 Version 3.4.2
Windows 10


Gruß Dirk

Antworten