Seite 2 von 2

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 2. Jan 2023 21:03
von udo1toni
Wenn Du die Rule so weit unverändert übernommen hast, nein. Die Rule trigegrt über Member of ... changed, womit die implizite Variabel triggeringItem zur Verfügung steht. Oder löst Du die Rule über den Play-Knopf aus? das würde den Fehler erklären.

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 2. Jan 2023 22:36
von MrCrashy
Nein, die rule löse ich aus, indem ich über sie Sitemap bzw das UI die Raumtemperatur verändere

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 3. Jan 2023 09:35
von MrCrashy
Ok, es war wie so oft, ein klarer Lesefehler meinerseits :D

Du hast in deinem Beispiel mit zwei Gruppen gearbeitet:
Einmal gHVAC_Mode
Einmal gHVAC_Modes

Und ich habe nur mit gHVAC_Modes gearbeitet. D.H ich habe auch bei dieser Abfrage:

Code: Alles auswählen

gHVAC_Mode.members.filter[h|
Mit gHVAC_Modes gearbeitet.

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 3. Jan 2023 15:58
von udo1toni
Ja, war spät, als ich den Post geschrieben habe, sonst wäre mir ein besseres Wording eingefallen.

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 9. Jan 2023 19:40
von MrCrashy
Habe die Rule jetzt auch am laufen.
Falls jemand mal einen Fehler haben sollte, der beim triggern auftaucht. Der Fehler lautet:

Code: Alles auswählen

internal.handler.ScriptActionHandler] - Script execution of rule with UID 'lighting-1' failed: cannot invoke method public abstract java.lang.String org.openhab.core.items.Item.getName() on null in heating
Es hat was mit dem "Member of" zu tun. In OH3 gab es eine Änderung. Aus

Code: Alles auswählen

if(trigeringItem.name.cointains("Current")) 
Wird nun

Code: Alles auswählen

if(triggeringItemName.contains("Current"))

Re: Heizungsrule und Verbesserungsmöglichkeiten

Verfasst: 10. Jan 2023 21:32
von udo1toni
Nein, das stimmt so nicht.

triggeringItemName -> Der Name (als String) des Items, welches den Trigger Item ausgelöst hat.
: Item MeinItem changed -> triggeringItemName = "MeinItem"

triggeringItem -> Das Item (als Objekt), welches den Trigger Member of ausgelöst hat.
: Member of GroupItem changed (wobei MeinItem Teil der Gruppe ist und seinen Status geändert hat -> triggeringItem repräsentiert
MeinItem -> triggeringItem.name entspricht MeinItem.name) -> triggeringItem.name = "MeinItem"

Früher (in openHAB ab 1.x bis 2.5.12) gab es nur triggeringItem, welches auch beim Item-Trigger gefüllt wurde.
Dies ist in OH3.x nicht mehr der Fall, stattdessen gibt es nun zusätzlich die implizite Variable triggeringItemName, die aber anders funktioniert.

Allerdings ist da auch ein Tippfehler :) Es muss .contains() heißen, nicht .cointains() .contains -> engl. für "enthält".

Die gesamte DSL arbeitet mit Klartext Schlüsselworten, when, then, end, name, if, timer... Es ist also immer eine gute Idee, nicht nur stur Code abzutippen, sondern auch die Worte sinnhaft zu erfassen.

PS: Ich habe den Fehler oben korrigiert...