Zurück   KNX-User-Forum > Supportforen > openHAB
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 16.01.2013, 20:14
Erfahrener Benutzer
 
Registriert seit: 28.10.2009
Ort: NRW
Beiträge: 537
Jockel ist zur Zeit noch ein unbeschriebenes Blatt
Beitrag Typen Joda DateTime

Hallo zusammen,

ich hab folgende Regel definiert:

Code:
import org.openhab.core.library.types.*
import java.util.Calendar
import java.util.Date
import java.util.TimeZone

val int PorchDelay = 20 //Sekunden

rule "Switch off lamps house when alarm is turned on"
when
	Item Alarmanlage_scharf changed from OFF to ON
then	
             
             ...

	//Windfang
	createTimer(now.plusSeconds(PorchDelay)) [|
		if ((Alarmanlage_scharf.state == ON) && (Licht_Windfang_Einbaustrahler_Schalten.state == ON)) {
			sendCommand(Licht_Windfang_Einbaustrahler_Schalten, OFF)
			logInfo("lampes_house rules", "Switch porch lamp off")
		}
	]
	
end
Das hat beim ersten Test auch problemlos funktioniert, seit ein paar Tagen finde ich allerdings den folgenden Fehler im Log (jeweils mit aktuellem Datum natürlich):

2013-01-16 17:27:36.995 ERROR o.o.c.s.ScriptExecutionThread[:70]- Error during the execution of rule 'Switch off lamps house when alarm is turned on': Could not invoke method: org.joda.time.DateTime.plusSeconds(int) on instance: 2013-01-16T17:27:36.994+01:00
Geändert habe ich an der Regel zwischenzeitlich aber nichts. Beim Testen habe ich jetzt probeweise den createTimer Aufruf zu createTimer(now.plusSeconds(PorchDelay.intValue)) geändert: Funktioniert.

Allerdings funktionierte danach auch wieder die Gegenprobe mit der ursprünglichen Variante ohne .intValue. Einen Unterschied sollte das ja eh nicht machen...

Ich bin da gerade etwas verwirrt, ev. ein Bug?

Viele Grüße,
Jockel
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 18.01.2013, 21:04
Benutzerbild von kkreuzer
Benutzer
 
Registriert seit: 18.04.2008
Ort: Ober-Ramstadt
Beiträge: 378
kkreuzer ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, schwer zu sagen. Evtl. wurde das Rulefile neu geladen (warum wüsste ich aber auch nicht) und der Wert von PorchDelay war dadurch erstmal wieder null - das könnte zu einem solchen Fehler führen.
Kleiner Tipp am Rande: Benenne Variablen lieber mit Kleinbuchstaben ("porchDelay"), dann kann man sie auch besser von Items unterscheiden

Grüße,
Kai
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 19.01.2013, 13:02
Erfahrener Benutzer
 
Registriert seit: 28.10.2009
Ort: NRW
Beiträge: 537
Jockel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, schwer zu sagen. Evtl. wurde das Rulefile neu geladen (warum wüsste ich aber auch nicht) und der Wert von PorchDelay war dadurch erstmal wieder null - das könnte zu einem solchen Fehler führen.
Das kann ich mir eigentlich nur schwer vorstellen, der Fehler war ein paar mal in den Logs, bei dem kurzen Intervall wäre das schon ein extremer Zufall. Außerdem hätte ich dann ja eigentlich einen entsprechenden Logeintrag sehen müssen?!

Ich hab jetzt den Zahlenwert direkt in den Timeraufruf geschrieben und werde mal beobachten, was passiert!

Kleiner Tipp am Rande: Benenne Variablen lieber mit Kleinbuchstaben ("porchDelay"), dann kann man sie auch besser von Items unterscheidenv
Alte Gewohnheiten sind halt schwer abzulegen
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 25.01.2013, 21:05
Erfahrener Benutzer
 
Registriert seit: 28.10.2009
Ort: NRW
Beiträge: 537
Jockel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So, der Fehler ist wieder aufgetaucht ohne das das Rules-File geändert wurde:

2013-01-25 16:57:23.101 ERROR o.o.c.s.ScriptExecutionThread[:70]- Error during the execution of rule 'Switch off lamps house when alarm is turned on': Cannot cast org.openhab.core.types.UnDefType to org.openhab.core.library.types.DecimalType
Inzwischen habe ich sogar einen festen Wert im createTimer()

Code:
//Windfang
	createTimer(now.plusSeconds(20)) [|
		if ((Alarmanlage_scharf.state == ON) && (Licht_Windfang_Einbaustrahler_Schalten.state == ON)) {
			sendCommand(Licht_Windfang_Einbaustrahler_Schalten, OFF)
			logInfo("lampes_house rules", "Switch porch lamp off")
		}
	]
Ev. hängt auch dieses Verhalten mit dem erneuten Laden der Items und/oder Rules zusammen. Was mich allerdings wundert: Ich setze einige Timer ein und dies ist der eintige Aufruf mit diesem Problem.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 26.01.2013, 00:15
Erfahrener Benutzer
 
Registriert seit: 28.10.2009
Ort: NRW
Beiträge: 537
Jockel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, falscher Alarm! Da war zwar ein Laufzeitfehler in der Regel, aber nicht durch den Timer! Ich sollte die Meldungen lieber mal genau lesen...
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
misterhouse - EIS Typen 3 und 4 RaK KNX EIB Forum 0 04.07.2007 23:45


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:54 Uhr.



SEO by vBSEO