Seite 2 von 2

Re: tado

Verfasst: 21. Okt 2019 19:49
von Paddy1902
Eben ist wieder passiert, hab mal im Log nachgesehen:

Code: Alles auswählen

2019-10-21 19:27:02.161 [vent.ItemStateChangedEvent] - Kinderzimmerfenster changed from CLOSED to OPEN
Aber der Rest der Rule wird nicht ausgeführt...

Code: Alles auswählen

rule "Heizung aus bei offenem Fenster"
when
    Item Kinderzimmerfenster changed
then
    if(Kinderzimmerfenster.state == OPEN) {
        HvacModeKinderzimmer.sendCommand("OFF")
        OperationModeKinderzimmer.sendCommand("MANUAL")
    } else {
        HvacModeKinderzimmer.sendCommand("HEAT") 
        OperationModeKinderzimmer.sendCommand("SCHEDULE")
    }
end
Bin etwas ratlos...

Hier noch das vom Schlafzimmer kurz vorher, das lief ohne Probleme

Code: Alles auswählen

2019-10-21 19:24:46.800 [vent.ItemStateChangedEvent] - Schlafzimmerfenster changed from CLOSED to OPEN

2019-10-21 19:24:47.050 [ome.event.ItemCommandEvent] - Item 'HvacModeSchlafzimmer' received command OFF

2019-10-21 19:24:47.054 [ome.event.ItemCommandEvent] - Item 'OperationModeSchlafzimmer' received command MANUAL

2019-10-21 19:24:47.056 [nt.ItemStatePredictedEvent] - HvacModeSchlafzimmer predicted to become OFF

2019-10-21 19:24:47.060 [nt.ItemStatePredictedEvent] - OperationModeSchlafzimmer predicted to become MANUAL

2019-10-21 19:24:47.066 [vent.ItemStateChangedEvent] - HvacModeSchlafzimmer changed from HEAT to OFF

2019-10-21 19:24:47.068 [vent.ItemStateChangedEvent] - OperationModeSchlafzimmer changed from SCHEDULE to MANUAL
Die Rule dazu

Code: Alles auswählen

rule "Heizung aus bei offenem Fenster"
when
    Item Schlafzimmerfenster changed
then
    if(Schlafzimmerfenster.state == OPEN) {
        HvacModeSchlafzimmer.sendCommand("OFF")
        OperationModeSchlafzimmer.sendCommand("MANUAL")
    } else {
        HvacModeSchlafzimmer.sendCommand("HEAT") 
        OperationModeSchlafzimmer.sendCommand("SCHEDULE")
    }
end

Re: tado

Verfasst: 21. Okt 2019 21:10
von udo1toni
Bau mal bitte jeweils nach dem then eine Zeile

Code: Alles auswählen

logInfo("contacts","Rule <jeweiliger rulename> gestartet")
Damit kannst Du sehen, ob die Rule tatsächlich nicht getriggert wird.

Die Meldung wird in openhab.log ausgegeben, das changed event wird in events.log ausgegeben, aber beides mit einem Zeitstempel, kann man also gut prüfen.

Re: tado

Verfasst: 22. Okt 2019 17:07
von Paddy1902
Hab ich gemacht. Die Rules laufen jetzt sauber ab. Kann es sein das der Fehler darin lag, das ich die ganzen Rules immer gleich benannt hatte, also nicht die Datei, sondern in der Rule selber? Hab jetzt alles abgeändert das sie nur einmal vorkommen.

Vorher

Code: Alles auswählen

rule "Heizung aus bei offenem Fenster"
Den gab es insgesamt 3 mal...

Nachher

Code: Alles auswählen

rule "Heizung aus bei offenem Kinderzimmerfenster"
usw.

Re: tado

Verfasst: 22. Okt 2019 17:54
von udo1toni
Ja, Namen dürfen niemals identisch sein. Man darf natürlich ein Item exakt so benennen, wie einen Channel (auch wenn ich persönlich nichts davon halte) und auch eine Rule identisch zu einem Item benennen, aber eben keine zwei Items identisch und genauso keine zwei Rules identisch.

Re: tado

Verfasst: 22. Okt 2019 18:11
von Paddy1902
Könnte man denn in eine Rule Datei mehrere Regeln reinnehmen? Also z.b. eine Datei namens Lüften.rules und dann die ganzen separaten Zimmer untereinander in dieser Datei? Habe momentan nämlich für jede Rule eine eigene Datei erstellt.

Gesendet von meinem Pixel 3a mit Tapatalk


Re: tado

Verfasst: 22. Okt 2019 23:42
von udo1toni
Du kannst beliebig viele Rules in eine Datei packen. Eine Aufteilung in mehrere Dateien hat Vor- und Nachteile.
Vorteile:
Die Dateien sind kleiner. die Prüfung des Codes dauert so nur kurze Zeit, speziell beim Entwickeln von Rules ist das angenehm.
Wenn man einen kolossalen Fehler in eine Rule einbaut, ist nur diese Rule davon betroffen, auch wenn das File als Ganzes nicht mehr geladen wird.
Eine Systen started Rule wird nur dann (zusätzlich zum Systemstart) gestartet, wenn die betreffende Datei neu gespeichert wurde, also, wenn die Rule selbst verändert wurde - es gibt ja nur die eine Rule...
Nachteile:
Man kann nicht von globalen Variablen profitieren (als Ausweg muss man zwingend Items verwenden, um Zustände ruleübergreifend zu speichern.
Man muss eventuell mehrere Fenster offen halten, um Code zu vergleichen, speziell wenn man ineinandergreifende Rules hat, kann das irritieren.
openHAB muss mehr Dateien einlesen, was die Startzeit eventuell verschlechtert (ich hab dazu aber keine belastbaren Zahlen, vielleicht wird das durch die geringere Größe der Dateien aufgewogen)

Das gleiche gilt übrigens für *.items und *.things Dateien - letztlich ist es Geschmacksache, wie man die Dateien organisiert.