Seite 2 von 3
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 19. Jun 2022 15:54
von udo1toni
In den *.rules Dateien werden vollständige Rules angegelgt. Die Zeile
Code: Alles auswählen
val telegramAction = getActions("telegram","telegram:telegramBot:1234567")
ist lediglich eine Zuweisung eines Zeigers zu einem Objekt.
Diese Zuweisung kann theoretisch auch außerhalb einer Rule verwendet werden, besser ist es aber, sie lokal zu erledigen. Anschließend kannst Du dann in der rule mittels
eine Nachricht veerschicken.
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 19. Jun 2022 16:21
von tsch
Ich könnte also mal einen Test ohne Trigger fahren, wenn ich neben der o.g. Zuweisung noch zusätzlich den von Dir genannten Befehl hinzufüge, d.h. dann müsste ich in jedem Fall einmal die Telegram-Message mit dem angegebenen Text erhalten oder?
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 19. Jun 2022 16:46
von udo1toni
Nein?
Du musst(!) eine vollständige Rule anlegen.
Wenn Du über die *.rules Dateien arbeitest, gibt es keine andere Option:
Code: Alles auswählen
rule "mein Testrule"
when
Item MeinItem received command
then
val telegramAction = getActions("telegram","telegram:telegramBot:1234567")
telegramAction.sendTelegram("Test Telegram")
end
In diesem Fall ist das Item MeinItem der Trigger.
Du kannst die beiden Zeilen Code (die zwischen then und end) natürlich auch über die Main UI in einer grafisch erstellten Rule eingeben. Du musst aber darauf achten, dass die Rule als then-Teil das Ausführen eines Codeblocks aktiviert hat. Und es muss DSL als Rule Sprache ausgewählt sein.
Rules, die über die UI angelegt wurden, können zum Testen auch über den Play-Knopf gestartet werden (rechts oben). Ein Trigger muss aber in jedem Fall eingetragen werden, sonst weigert sich openHAB, die Rule auszuführen.
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 19. Jun 2022 18:06
von tsch
Danke udo1toni für Deine Engelsgeduld.
Für das EG habe ich nun ein Model angelegt und auch im Bad_EG meinen HM Fenstersensor angelegt, der sich nun ebenfalls in den Items wiederfindet als Contact Point, was genau ich ja in der o.g. Rule auswerten will.
Wie muss denn nun die Zeile
von der Syntax aussehen, damit das richtige Item ausgewertet wird nur im Fall "is open" die o.g. Rule durchlaufen wird?
Bei Channel Links des Items steht das Folgende:
Code: Alles auswählen
HM Fensterkontakt Bad-EG
State
homematic-HM-sec-...........#STATE
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 20. Jun 2022 00:58
von udo1toni
Ich frage mal anders: Was willst Du tun? Möchtest Du eine Nachricht in dem Moment erhalten, wenn das Fenster geöffnet wird?
Das, was da steht, ist übrigens mit absoluter Sicherheit etwas völlig anderes. Innerhalb einer Rule brauchst Du den Namen des Items (nicht das Label). Geh in die Liste der Items und suche dort nach dem Label, dann findest Du schon das passende Item und damit auch den Namen des Items.
Alternativ kannst Du auch im Channel nachschauen, was verlinkt ist, aber auch da werden sowohl Label als auch Name des Items gezeigt. Was was ist, sollte recht schnell klar werden. Im NAmen des Items kommen keine Leerzeichen vor, stattdessen steht dort immer ein _ als Ersatz. Im Label hingegen können beliebig Leerzeichen verwendet werden. Das Label lässt ich ändern, der Name des Items ist fix, man muss also das Item löschen und erneut anlegen, wenn man den Namen ändern möchte.
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 20. Jun 2022 17:47
von tsch
Um mich an das Thema Rules in openHAB 3.x heranzutasten möchte ich zunächst nur eine Telegram-Message erhalten, sobald das Fenster im Bad geöffnet wird, d.h. der State auf "open" wechselt.
Habe nun in der Liste der Items und auch in den Channels nachgesehen und der korrekt Name des Items sollte
HMFensterkontaktBadEG_State
sein.
Somit müsste die Rule in etwa wie folgt aussehen:
Code: Alles auswählen
rule "Fensterkontakt Bad offen"
when
Item HMFensterkontaktBadEG_State changed from closed to open
then
val telegramAction = getActions("telegram","telegram:telegramBot:1234567")
telegramAction.sendTelegram("Das Fenster im Bad ist nun offen")
end
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 20. Jun 2022 17:56
von udo1toni
Ja, aber Du hast dennoch einen Fehler drin
open ist nicht das gleiche wie OPEN - openHAB ist grundsätzlich case sensitive.
Gewöhnlich willst Du außerdem nicht einschränken, dass die Rule nur auslöst, wenn der Zustand von CLOSED kommt. Also besser
Code: Alles auswählen
[...]
when
Item HMFensterkontaktBadEG_State changed to OPEN
then
[...]
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 20. Jun 2022 17:59
von tsch
Vielen Dank!
Werde ich gleich mal ausprobieren und mich wieder melden.
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 20. Jun 2022 19:40
von tsch
Leider meldet sich bisher weiterhin nur meine openHAB 2.x Umgebung, wenn ich das Fenster öffne.
Muss ich evtl. noch irgend etwas neu starten oder sollte die Rule direkt funktionieren?
Re: Änderungen bei services/rules (Telegram) zwischen openHAB 2.x und 3.x?
Verfasst: 21. Jun 2022 07:34
von udo1toni
Die Rule sollte direkt funktionieren.
Wie heißt die Datei? liegt sie im richtigen Ordner?
Wenn Du die Datei speicherst, muss es innerhalb weniger Sekunden im Log einen Eintrag geben (openhab.log), dass die Datei xyz.rules geladen wurde.
Tauchen Fehlermeldungen im Log auf?
Du könntest, falls das alles erstmal gut aussieht, eine Log Meldung erzeugen. Dazu baust Du nach dem
then eine weitere Zeile ein:
Code: Alles auswählen
logInfo("window","Rule für Fensterkontakt wurde ausgelöst!")
Nun muss jedes Mal, wenn Du das Fenster öffnest, eine Log Meldung in openhab.log auftauchen, mit dem passenden Text.
Damit wäre dann sichergestellt, dass die Rule wirklich ausgelöst wird.