Seite 1 von 1

Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 06:41
von Tentazione
Moin...

gerade im Log entdeckt. Wie kann ich den Fehler in einer Rule vermeiden?

Ich würde schätzen das der Fehler aus dieser Zeile herrührt
var Date cx = sdf1.parse(CGeburtsStart.state.toString)
Grüßle

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 08:29
von peter-pan
Moin,moin

Ich möchte das nicht beschwören, aber ich meine var Date gibt es nicht.

Hier ein paar Code-Snippets aus dem Internet mit denen ich auch manchmal herum experimentiere:

Code: Alles auswählen

var day0DateTime1 = new DateTime(localLastMeasurement.state.toString).toString("EEEE, yyyyMMdd HH e w h a")
logInfo ("owm.test_date1", "Current-DateTime1-Item(dayname, date, hour, day of week, week of the year, hour am/pm, AM/PM ): {}", day0DateTime1)

// see here for further options - https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html - not all will work(e.g. "V")

var day0 = new DateTime(localLastMeasurement.state.toString).toString("yyyyMMdd")
logInfo ("owm.test_date1", "day 0-Time-Item: {}", day0)
Da ist auch noch eine Web-Seite drin, die du ansteuern kannst, wenn dir einzelne Formatierungen unklar sind.

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 11:03
von udo1toni
Vermeiden lässt sich der Fehler, indem Du ihn vorher abfragst:

Code: Alles auswählen

...
if(CGeburtsStart.state.toString != "UNDEF") {
    var DateTime cx = sdf1.parse(CGeburtsStart.state.toString)
}
Natürlich kann es auch sein, dass der String leer oder NULL ist, das muss halt alles in die Abfrage rein.

Falls CGeburtsStart ein DateTime Item ist, kannst Du auch so testen (und das ist sicher eleganter):

Code: Alles auswählen

...
if(CGeburtsStart.state instanceof DateTime) {
    var DateTime cx = sdf1.parse(CGeburtsStart.state.toString)
}
Die erste Frage wäre also eigentlich: Welches Format hat CGeburtsStart und woher wird es befüllt?

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 16:34
von Tentazione
Die erste Frage wäre also eigentlich: Welches Format hat CGeburtsStart und woher wird es befüllt?
Es handelt sich um einen String. Befüllt wird er aus dem CalDav-Binding. Damit experimentiere ich gerade ein wenig rum ;-)

Code: Alles auswählen

String		CGeburtsStart  	"[%1$td.%1$tm.%1$tY]"					<calendar>	{caldavPersonal="calendar:xxx type:EVENT  eventNr:1 value:START"}
Als DateItem kriege ich das da irgendwie nicht sauber hin.

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 22:34
von peter-pan
Diese Formatierung wird bei einem String Item wohl nicht klappen. Versuch es mal mit [%s]. Ausserdem solltest du eine Warnung im Logger sehen, die etwa so aussieht:

Code: Alles auswählen

2019-03-27 22:28:21.734 [WARN ] [ui.internal.items.ItemUIRegistryImpl] - Exception while formatting value '6.4.1(release-sonoff)' of item EG_Kind2_Licht_Version with format ' %1$tH:%1$tM': H != java.lang.String


Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 27. Mär 2019 23:10
von Tentazione
Diese Formatierung wird bei einem String Item wohl nicht klappen. Versuch es mal mit [%s]. Ausserdem solltest du eine Warnung im Logger sehen, die etwa so aussieht:
Probiere ich gerne.

Und... nein. Ich bekomme kein Warning. und seit ich die if-Abfrage drin habe...kommt der Fehler auch nicht mehr. Aber bekanntlich führen ganz viele Wege nach Rom...und meiner muss nicht der beste sein. Deshalb... gerne Verbesserungsvorschläge

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 28. Mär 2019 00:42
von udo1toni
Eigentlich sollte es doch möglich sein, den Termin als DateTime Item anzulegen.
Ich nutze das Caldav Binding selbst nicht, lese das aber aus der Doku heraus.

Re: Rule 'xxx': Unparseable date: "UNDEF"

Verfasst: 28. Mär 2019 19:04
von Tentazione
@udo1toni: Ja...scheinbar funzt das auch mit dem DateTime-Item..... #froi

Danke