Seite 1 von 1

regel bleibt ohne Fehler hängen

Verfasst: 23. Dez 2018 12:17
von Caddy
Hallo,

wie kann ich das logging für Regeln erhöhen wenn eine Regel ohne Fehler hängen bleibt ?

seit dem update auf die 2.4 bleibt meine Regel bei

if(CivilDusk_StartDate.state == NULL)

hängen, gibt aber keine Fehlermeldung aus.
Alle Versuche mit anderem Binding, Neustart etc haben bisher zu keinem Erfolg geführt.
Nehme ich den Block raus läuft die Regel durch

Hat jemand eine Idee ?

Danke Caddy

Re: regel bleibt ohne Fehler hängen

Verfasst: 23. Dez 2018 12:48
von udo1toni
Die Frage ist ja, was Du in dem Block machst. Du könntest versuchsweise selbst Logger einbauen, um zu sehen, wo exakt der Fehler auftritt. Die if-Zeile sieht jedenfalls unverdächtig aus. Ich gehe davon aus, dass Du ein Item CivilDusk_StartDate hast.

Re: regel bleibt ohne Fehler hängen

Verfasst: 23. Dez 2018 13:15
von Caddy
Habe ich alles schon hinter mir ..... jetzt habe ich sie einmal neu geschrieben jetzt geht es wieder ?!?!?!!?!?

Komisch .....

Code: Alles auswählen

rule "Automatic Aussenbeleuchtung"
when
    System started or
    Time cron "1 0 6 * * ?" or
    Time cron "1 0 23 * * ?" or
    Channel 'astro:sun:home:civilDawn#event' triggered START or
    Channel 'astro:sun:home:civilDusk#event' triggered START
then
	logInfo("Rule.autoABeleuchtung","autoABeleuchtung wird gestartet")
	var mySwitch = OFF
	var Number hour = now.getHourOfDay
	var cDusk = now.withTimeAtStartOfDay.plusHours(20).millis
	var cDawn = now.withTimeAtStartOfDay.plusHours(7).millis
	if(CivilDusk_StartTime.state !== NULL) { 
	  cDusk = (CivilDusk_StartTime.state as DateTimeType).calendar.timeInMillis }
	if(CivilDawn_StartDate.state !== NULL) {
		cDawn = (CivilDawn_StartDate.state as DateTimeType).calendar.timeInMillis }
	if(hour<6 || hour>22) {
		mySwitch = OFF}
    else if (now.isAfter(cDawn) && now.isBefore(cDusk)) {	
		mySwitch = OFF}
    else {
		mySwitch = ON}
    gNachtLicht.sendCommand(mySwitch)
    logInfo("Rule.autoABeleuchtung","autoABeleuchtung {}",mySwitch)	
	sendTelegram("bot1", "autoABeleuchtung %s",mySwitch)	
	logInfo("Rule.autoABeleuchtung","autoABeleuchtung beendet")
end

case solved :-)

Re: regel bleibt ohne Fehler hängen

Verfasst: 23. Dez 2018 13:34
von udo1toni
Du schreibst da !==, nicht !=, das ist ein erheblicher Unterschied.

== -> Vergleich auf "ist gleich"
=== -> Vergleich auf "ist identisch"
entsprechend
!= -> Vergleich auf "ist nicht gleich"
!== -> Vergleich auf "ist nicht identisch"

Der Unterschied zwischen "identisch" und "gleich" ist etwas schwieriger zu erklären. Grob gesagt geht es um Verweise im Speicher.
Stell Dir vor, in einer Speicherzelle steht ein Wert, der verglichen wird. Bei "identisch" muss der Zeiger auf diese Speicherzelle verweisen (das wäre z.B. beim Vergleich auf null der Fall, da null immer auf eine bestimmte Speicherzelle verweist. Man könnte auch in einer Speichzelle die Zahl 5 stehen haben. Solange der Vergleich nun tatsächlich auf die gleiche Speicherzelle verweist, ist der Vergleich auch identisch.
Wenn nun in einer anderen Speicherzelle auch eine 5 steht, liefert der Vergleich auf "identisch" aber falsch, da die beiden Werte zwar gleich, aber nicht identisch sind.
Nun kommt der Knackpunkt. NULL ist nicht identisch mit null. Streng genommen müsste es sogar eine Fehlermeldung geben, weil der Vergleich auf identisch mit NULL gar nicht zulässig sein dürfte.