Puh.
Python mag zwar nett sein und alle möglichen tollen Sachen bieten, die die Rules Engine nicht hat, aber bei näherer Betrachtung ist Vieles davon für die meisten Aufgaben auch gar nicht notwendig.

Es kommt natürlich auch sehr darauf an, wie jemand programmiert. Ich bin hier eher Laie (auch wenn ich schon das eine oder andere kleine Programm geschrieben habe - aber ich bin kein eben Informatiker und habe mir mein Wissen komplett selbst beigebracht). Ich nehme die Tools, welche zur Verfügung stehen, statt darauf zu bestehen, die Tools meiner Wahl zu verwenden.
Die Rules Engine steht auch unter OH3 zur Verfügung und ist bisher entgegen erster Ankündigungen noch nicht mal "zukünftig deprecated".
Ein kleines Beispiel, was ich mit Gruppen meine:
Code: Alles auswählen
rule "Betriebsart RTR"
when
Member of GHeat_Mode changed
then
var Integer newMode
val mode = (triggeringItem.state as DecimalType).toBigDecimal.toBigInteger
val iName = triggeringItem.name.split("_").get(0).toString
logDebug("rtr","Name is: {}, Mode is: {}",iName,mode)
switch (mode) {
case mode.testBit(0) : newMode = 1
case mode.testBit(2) : newMode = 3
case mode.testBit(3) : newMode = 4
default : newMode = 2
}
var myItem = GHeat_Set.members.filter[ f | f.name.startsWith(iName) ].head
var Integer oldMode = 0
if(myItem.state instanceof Number) oldMode = (myItem.state as Number).intValue
if(oldMode != newMode) {
logDebug("rtr","Name is: {}, oldMode is: {}, newMode is: {}",myItem.name,oldMode,newMode)
myItem.postUpdate(newMode)
}
end
Diese Rule kümmert sich um alle Raumtemperaturregler in meinem Haus. Wenn die Betriebsart eines RTR geändert wird (und zwar am RTR selbst oder auch aus der Ferne z.B. durch openHAB), so liefert ein Item, welches zur Gruppe GHeat_Mode gehört den neuen Status. Daraufhin wählt die Rule das passende Item, welches auf der Sitemap dargestellt wird aus der Gruppe GHeat_Set und setzt den Status dieses Items passend. Dabei ist die Meldung des Status, die vom RTR kommt eine andere, als der zugehörige Status. Das Item, welches in der Sitemap dargestellt wird, sendet bei Wahl einer Betriebsart diese an den RTR. Die
gesendeten Betriebsarten sind 1, 2, 3 oder 4. Die
empfangenen Betriebsarten sind 33, 34, 36 oder 40. Die Bits 0-3 geben also die Betriebsart wieder und das Bit 5 steht für Heizbetrieb (das ist halt in der Hardware so gelöst) weshalb ich hier diese Rule brauche.
Der Punkt ist aber, dass es exakt diese eine Rule braucht. Es spielt keine Rolle, wie viele RTR ich im Haus habe, es müssen nur die jeweiligen Items mit passendem Namen in den jeweiligen Gruppen zugeordnet sein. Ich muss keine Funktionen auslagern um effizient zu programmieren
Es gibt massig andere Beispiele, z.B. eine Rule, welche eine Tendenzanzeige für diverse Luft/Temperatursensoren realisiert, eine Rule, welche meldet, wenn Fenster geöffnet sind, und, und, und...
Die Rules DSL ist vergleichsweise langsam, das ist für mich das einzige Problem, dessentwegen ich mich demnächst auch mit Alternativen beschäftigen werde, aber solange die Rules DSL die einzige komplett integrierte Engine ist, lehne ich mich erst mal zurück.