openHAB führt keine rules mehr aus

openHAB - open Home Automation Bus

Moderator: Co-Administratoren

Antworten
echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

openHAB führt keine rules mehr aus

Beitrag von echicor » 02.09.2017, 08:03

Hallo zusammen,

ich bin noch relativ neu im Thema openHAB und versuche gerade meine Programme von der CCU2 Stück für Stück auf openHAB2 zu übertragen. Das hat auch am Anfang relativ gut funktioniert bis ich auf meinem Ubuntu16.04LTS System openHAB wegen eines Fehlers neu installieren musste. Bis dahin wurden die rules auch immer ausgeführt. Allerdings wird nun seit der Neuinstallation von openHAB keine rule mehr ausgeführt, auch nicht neue rules welche ich testweise angelegt habe.

Eine rule, welche vorher immer funktioniert hat ist für einen programmierten Wecker und sieht wie folgt aus:

Code: Alles auswählen

//////////////////////////////////////////////////////////////////////////////////
// Enhält alle notwendigen Regeln zum Steuern des Weckers im Schlafzimmer		//
//////////////////////////////////////////////////////////////////////////////////
import	org.openhab.core.library.types.*
import	org.openhab.core.persistence.*
import	org.openhab.model.script.actions.*
import	org.openhab.action.squeezebox.*
import	org.joda.time.*
import	java.nio.channels.Channel
//////////////////////////////////////////////////////////////////////////////////
// Muss nur temporär benutzt werden für erstes Initialisieren von Items			//
// da diese ab erstmaliger Benutzung in der mapDB gespeichert werden. Werden 	//
// die nicht persistiert hier Defaultwerte hinterlegen							//
//////////////////////////////////////////////////////////////////////////////////
rule "Initialization Wecker"
when 
	System started
then
    postUpdate(weckerZeitStunde,     	06)
    postUpdate(weckerZeitMinute,     	00)
    postUpdate(weckerMontag,         	ON)
    postUpdate(weckerDienstag,       	ON)
    postUpdate(weckerMittwoch,       	ON)
    postUpdate(weckerDonnerstag,     	OFF)
    postUpdate(weckerFreitag,        	ON)
    postUpdate(weckerSamstag,        	ON)
    postUpdate(weckerSonntag,        	OFF)
    postUpdate(weckerMaxHelligkeit,		100)
    postUpdate(weckerDimmerSleep,		5)
end
///////////////////////////////////////////////////////////////////////////////
rule "Wecker - Aenderung der Konfiguration"
when
    Item	weckerZeitStunde	received update or
    Item	weckerZeitMinute	received update 
then
    var		weckerStunde		=	weckerZeitStunde.state	as	DecimalType
    var		weckerMinute		=	weckerZeitMinute.state	as	DecimalType
    
    var		String weckerText	=	''
    if		(weckerStunde.intValue < 10) weckerText = '0'
    weckerText = weckerText + weckerStunde.intValue + ':'
    if		(weckerMinute.intValue < 10) weckerText = weckerText + '0'
    weckerText = weckerText + weckerMinute.intValue
    
    postUpdate(weckerZeitMessage, weckerText)
end
///////////////////////////////////////////////////////////////////////////////
rule "Wecker - prüfen"
when 
    Time cron "0 0/1 * * * ?"   // minütlicher Aufruf
then
    var weckerStunde 		=			(weckerZeitStunde.state		as	DecimalType).intValue
    var weckerMinute 		=			(weckerZeitMinute.state		as	DecimalType).intValue
    var weckerHelligkeit 	=			(weckerMaxHelligkeit.state	as	DecimalType).intValue
    var weckerWartezeit 	=	1000 *	(weckerDimmerSleep.state	as	DecimalType).intValue
    //logInfo('rules','helligkeit: ' + weckerHelligkeit +' wartezeit ' + weckerWartezeit)

    if (
        (now.getHourOfDay.intValue == weckerStunde) && (now.getMinuteOfHour.intValue == weckerMinute)
        && (
            ((weckerMontag.state		==	ON)	&&	now.getDayOfWeek.intValue	==	1)	||
            ((weckerDienstag.state		==	ON)	&&	now.getDayOfWeek.intValue	==	2)	||
            ((weckerMittwoch.state		==	ON)	&&	now.getDayOfWeek.intValue	==	3)	||
            ((weckerDonnerstag.state	==	ON)	&&	now.getDayOfWeek.intValue	==	4)	||
            ((weckerFreitag.state		==	ON)	&&	now.getDayOfWeek.intValue	==	5)	||
            ((weckerSamstag.state		==	ON)	&&	now.getDayOfWeek.intValue	==	6)	||
            ((weckerSonntag.state 		==	ON)	&&	now.getDayOfWeek.intValue	==	7)
            ) 
    ) {
        logInfo ('rules','Wecker wird aktiviert...')
        // Wecker nur notwendig, wenn Licht aus ist
        if (Licht_OG_Schlafzimmer.state < weckerHelligkeit) {
            var Number dimmer = 0
            while (dimmer < weckerHelligkeit) {
                // Licht auf Dimmstufe schalten
                sendCommand(Licht_OG_Schlafzimmer, dimmer.intValue)
                createTimer(now.plusSeconds(1))[|sendCommand (TV_OG_Schlafzimmer,ON)]
                // Konfigurierte Anzahl an Sekunden warten
                Thread::sleep(weckerWartezeit)
                // prüfen ob zwischenzeitlich Dimmerhelligkeit manuell veraendert wurde und damit der Wecker ausgemacht wurde
                var dimmerStatus = (Licht_OG_Schlafzimmer.state as DecimalType).intValue
                if (dimmer == dimmerStatus) {
                    dimmer = dimmer + 1
                    logInfo('rules', 'Wecker: Dimmer plus 1 gesetzt auf ' + dimmer)
                } else {
                    dimmer = 100 // Abbruchbedingung
                    logInfo('rules', 'Wecker: Abbruch durch Tastendruck')
                }
            }
            logInfo('rules', 'Wecker abgeschlossen, Zielhelligkeit erreicht')
        } else {
            logInfo('rules', 'Wecker nicht gestartet da Licht bereits heller als Ziel-Helligkeit des Weckers. Helligkeit Licht: ' + Licht_OG_Schlafzimmer.state)
        }
    } else {
        logInfo('rules','Wecker nicht aktiviert, Bedingung für Wecker trifft nicht zu')
    }
end
Aber auch eine Testrule, welche so simple wie möglich gehalten wurde, wird gar nicht ausgeführt:

Code: Alles auswählen

import	org.openhab.core.library.types.*
import	org.openhab.core.persistence.*
import	org.openhab.model.script.actions.*
import	org.openhab.action.squeezebox.*
import	org.joda.time.*
import	java.nio.channels.Channel
///////////////////////////////////////////////////////////////////////////////
rule	"Test"
when	Item Licht_Esszimmer_TV changed from OFF to ON
then	sendCommand(Licht_Esszimmer_Wandleuchten, ON)
end
Leider erkenne ich nicht woran der Fehler liegt und wäre hier für Hilfe äußerst dankbar.

Danke

ptweety
Beiträge: 522
Registriert: 07.01.2017, 16:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 66 Mal

Re: openHAB führt keine rules mehr aus

Beitrag von ptweety » 02.09.2017, 09:17

Hi echicor,
die ganzen imports am Anfang (import org.openhab.*) sind m.E. bei OH2 überflüssig bis kontraproduktiv. Weiterhin kannst du mal ins log reinschauen und die Fehlermeldungen posten.

echicor
Beiträge: 42
Registriert: 24.09.2016, 06:45
Wohnort: Bad Zwischenahn

Re: openHAB führt keine rules mehr aus

Beitrag von echicor » 02.09.2017, 10:01

Hi ptweety,

danke für die Tipp mit den Imports.
Ich habe sie gerade auskommentiert (alle) und nun läuft die Test.rules und auch schon die Anwesenheitssteuerung wieder. Komisch ist nur, dass es vor der Neuinstallation von openHAB2 mit den imports lief.
Werde nun alle rules so testen die ich schon habe um zu schauen ob sie nun alle laufen - viele sind es imho noch nicht...

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: openHAB führt keine rules mehr aus

Beitrag von eiGelbGeek » 19.09.2017, 12:26

echicor hat geschrieben:Hi ptweety,

danke für die Tipp mit den Imports.
Ich habe sie gerade auskommentiert (alle) und nun läuft die Test.rules und auch schon die Anwesenheitssteuerung wieder. Komisch ist nur, dass es vor der Neuinstallation von openHAB2 mit den imports lief.
Werde nun alle rules so testen die ich schon habe um zu schauen ob sie nun alle laufen - viele sind es imho noch nicht...
Ich vermute du hattest vor dem Crash OH 2.0 und nach dem Crash OH 2.1 ?

In OpenHAB 2.1 werden die rules genauer "geprüft" überflüssige Imports werden als fehlerhafte Rule interpretiert und fehlerhafte Rules funktionieren eben nicht ;-)

Ich empfehle dir immer die Karaf Konsole offen zu haben, wenn du eine Rule einspielst/änderst :-)

iTerm kann ich dafür sehr empfehlen :D
Bildschirmfoto 2017-09-19 um 12.26.10.png
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Antworten

Zurück zu „openHAB“