Seite 1 von 1

Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 15:35
von MRudolph
Hallo
ich komme hier nicht weiter:
ich habe mehrere item im Format DateTime
z.B
DateTime LocalWeatherForecastHours03TimeStamp "Vorhersage zeit" {channel="openweathermap:weather-and-forecast:api:local:forecastHours03#time-stamp"}

nun möchte ich in einer Regel vergleichen ob die Stunde des Items zwischen 20 und 6 Uhr liegt.

hier mein Versuch, der offensichtlich nicht klappt

Code: Alles auswählen

rule "update hourly forcastconditioID"
when 
    Time cron "*/10 * * * * ?"
then 
    val	Hours03 = (LocalWeatherForecastHours03TimeStamp.state as Number).intValue
    val mySTD03 = (Hours03 / (60*60)) % 24
    
    if (mySTD03 > 20 || mySTD03 < 6
    ) {
        owmConditionFormatedH3.postUpdate(transform("MAP", "openweathermap_night.map", LocalWeatherForecastHours03ConditionId.state.toString()))
    } else {
        owmConditionFormatedH3.postUpdate(transform("MAP", "openweathermap_day.map", LocalWeatherForecastHours03ConditionId.state.toString()))
    }
end
wo liegt mein Fehler?

Danke im Voraus

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 16:41
von SchneckenBlitzer
Hallo,

hast du schonmal probiert, die Zahlen manuell auszugeben, sodass du überprüfen kannst, ob sie überhaupt das gewünschte Format haben?
Probiere Mal folgenden Code:

Code: Alles auswählen

rule "update hourly forcastconditioID"
when 
    Time cron "*/10 * * * * ?"
then 
    val	Hours03 = (LocalWeatherForecastHours03TimeStamp.state as Number).intValue
    val mySTD03 = (Hours03 / (60*60)) % 24

logDebug("Zeiten", "Vorhersage:  "+ Hours03 + ", umgewandelte Zeit:  "+ mySTD03)
    
    if (mySTD03 > 20 || mySTD03 < 6
    ) {
        owmConditionFormatedH3.postUpdate(transform("MAP", "openweathermap_night.map", LocalWeatherForecastHours03ConditionId.state.toString()))
    } else {
        owmConditionFormatedH3.postUpdate(transform("MAP", "openweathermap_day.map", LocalWeatherForecastHours03ConditionId.state.toString()))
    }

end
Was wird da denn dann ausgegeben?

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 16:57
von MRudolph
das Script wird gar nicht ausgeführt
im Log bekomme ich
Error during the execution of rule 'update hourly forcastconditioID': Could not cast 2020-11-22T19:00:00.000+0100 to java.lang.Number;

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 17:01
von SchneckenBlitzer
Oh ok, dann würde ich es nochmal mit .toString nach den Variablennamen probieren...

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 17:05
von MRudolph
und wie bekomme ich dann aus dem String eine Number?
Number('123') funktioniert nicht

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 17:07
von SchneckenBlitzer
Achso, ich meinte jetzt in der Log Nachricht .toString, also so:

Code: Alles auswählen

logDebug("Zeiten", "Vorhersage:  "+ Hours03.toString + ", umgewandelte Zeit:  "+ mySTD03.toString)

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 17:30
von MRudolph
und wo sehe ich das Ergebnis?
in VSC? oder im Log von Openhabian?

sorry...bin noch ganz frisch mit Openhab
Danke für deine Gedult :)

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 18:34
von MRudolph
habe es jetzt so hinbekommen
val mySTD03 = (Float::parseFloat(String::format("%s",LocalWeatherForecastHours03TimeStamp.state.format("%1$tH").toString).replace(',','.')))

Re: Stunde aus DateTime vergleichen

Verfasst: 22. Nov 2020 22:18
von SchneckenBlitzer
Super 👍. Ich hatte mir schon gedacht, dass es etwas mit dem Format der Werte zu tun hat...

Die Ergebnisse wenn du eine Ausgabe in einer Rule platzierst würdest du übrigens im Log sehen, also unter http://openhabianpi:9001/