calendar.timeInMillis Konvertierung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

calendar.timeInMillis Konvertierung

Beitrag von shuo »

Hallo zusammen,
ich habe eine Rule bei der ich den Status eines Items von Nacht auf Tag (und umgekehrt) abhängig von Astro umschalte.
Die Rule schaut folgendermaßen aus:

Code: Alles auswählen

rule "OpenHAB system started - astro"
when
    System started
then
    createTimer(now.plusSeconds(180)) [ |
        logInfo("RULE", "--> astro init")
        if (now.isAfter((Sunset_Time.state as DateTimeType).calendar.timeInMillis) ||
            now.isBefore((Sunrise_Time.state as DateTimeType).calendar.timeInMillis)
        ) {
            logInfo("RULE", "--> Night_State ON")
            postUpdate(Night_State, ON)
        } else {
            logInfo("RULE", "--> Night_State OFF")
            postUpdate(Night_State, OFF)
        }
    ]
end
Allerdings bekomme ich immer folgenden Fehler angezeigt:

Code: Alles auswählen

The method or field calendar is undefined for the type DateTimeType
Ich habe dann irgendwo in einer Hilfe gefunden, dass ich zonedDateTime.toInstant.toEpochMilli verwenden sollte.
Allerdings ein

Code: Alles auswählen

(now.isAfter((Sunset_Time.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
bringt den Fehler:

Code: Alles auswählen

Type mismatch: cannot convert from long to ChronoZonedDateTime<?>(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
Hat jemand eine Idee was ich falsch mache und ich es beheben kann?

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

Re: calendar.timeInMillis Konvertierung

Beitrag von udo1toni »

Ich möchte empfehlen, komplett anders an das Problem heranzugehen:

Code: Alles auswählen

rule "Tag oder Nacht"
when
    Item AstroElevation changed
then
    var Nacht = OFF
    if((AstroElevation.state as Number).intValue < -3) 
        Nacht = ON
    if(Night_State.state != Nacht)
        Night_State.postUpdate(Nacht.toString)
end
Die Rule benötigt ein Item (AstroElevation), welches mit dem Channel astro:sun:local:position#elevation verbunden ist. Die Rule triggert bei jeder Aktualisierung von astro, was auch beim Systemstart geschieht ;) Wenn die Sonne unterhalb des festgelegten Grenzwertes liegt, wird der Status entsprechend gekippt. Der Status wird nur gesetzt, wenn dies notwendig ist.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: calendar.timeInMillis Konvertierung

Beitrag von shuo »

Hi Udo,
danke für die Rückmeldung.
Ich habe bereits eine zweite Rule die sowas wie Du vorgeschlagen hast abdeckt:

Code: Alles auswählen

rule "Update NightState"
when
    Item Sun_Elevation changed
then
    if(Sun_Elevation.state >  0){
        if(Night_State.state != OFF) postUpdate(Night_State, OFF)
    } else {
        if(Night_State.state != ON) postUpdate(Night_State, ON)
    }
end
Die erste Rule "system started" hatte ich eingebunden um bei einem Neustart den richtigen Zustand zu haben, sodass wir nicht auf ein update von Sun Evelation warten müssen.

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

Re: calendar.timeInMillis Konvertierung

Beitrag von udo1toni »

Der Punkt ist, dass Du die Rule für System started gar nicht brauchst. Sun_Elevation wird ja gesetzt, sobald astro online geht. Das dürfte wesentlich früher geschehen als 3 Minuten nach dem Start der Rules Engine.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: calendar.timeInMillis Konvertierung

Beitrag von shuo »

Hi Udo. Klassischer Fall von Overengineering. Danke für die Antwort

Nachtrag: Aber aus reinem Interesse: Was habe ich denn oben in der Rule falsch gemacht?
Zuletzt geändert von shuo am 16. Mär 2021 23:34, insgesamt 1-mal geändert.

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

Re: calendar.timeInMillis Konvertierung

Beitrag von udo1toni »

:)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten