Jump to content

Rules in openHAB bei Verwendung der Java-Bindings


Bunker72

Recommended Posts

Hallo Forum,

ich bin neu hier und möchte Euch zunächst einmal begrüßen.
Aus meinen folgenden Fragen könnt Ihr auch gleich schließen, dass ich leider keine Programmiersprache beherrsche und auch leider unter Linux noch sehr im Anfangsstadium bin.

Ich habe mir ein paar TF Bausteine zum Testen gekauft und möchte diese mit openHAB steuern.
Durch die Verwendung der Java-Bindings hier aus dem Forum konnte ich auch die Geräte erfolgreich einbinden und Items anlegen.
Soweit so gut.

Nur wie kann ich nun Rules anlegen um diese zu steuern?
Mir fehlt hier einiges an Wissen über das Grundprinzip.
Auf openHAB gibt es Anleitungen für TF die beschreiben wie die Bausteine zunächst in der .cfg, der .items, .sitemap angelegt werden.
Nur ist dies mit den neuen Bindings überhaupt noch nötig?

Aus der Dokumentation von TF ergeben sich diese Anlagen nicht mehr. Hier werden die "Actions" beschrieben.
Ich habe versucht diese Actions als Rules anzulegen.
Leider habe ich trotz aller erdenklichen Schreibweisen und Versuche nie auch nur annähernd einen Erfolg gehabt. Auch im Log taucht keiner der Einträge auf. 
Eine erstelle Rule für Telegram konnte ich jedoch zum Laufen bringen. Somit vermute ich kein grundsätzliches Problem zu haben.

Könnte mir jemand mal als Beispiel den Code für die Ansteuerung des Industial Dual Relay Bricklet überlassen?
Bin für jede Hilfe dankbar.

Schöne Grüße
Thomas

Link zu diesem Kommentar
Share on other sites

Moin,

On 8/22/2020 at 7:11 AM, Bunker72 said:

Durch die Verwendung der Java-Bindings hier aus dem Forum konnte ich auch die Geräte erfolgreich einbinden und Items anlegen.

Damit meinst du sowohl die Java- als auch die openHAB-Bindings aus diesem Thread? Wenn nicht, ignoriere den Rest des Posts ;)

On 8/22/2020 at 7:11 AM, Bunker72 said:

Auf openHAB gibt es Anleitungen für TF die beschreiben wie die Bausteine zunächst in der .cfg, der .items, .sitemap angelegt werden.
Nur ist dies mit den neuen Bindings überhaupt noch nötig?

Davon darfst du dich nicht verwirren lassen, die Dokumentation auf openHAB ist für das alte Binding. Die Dokumentation für die neuen Bindings ist hier. Die ganzen openHAB-Textdateien solltest du damit nicht brauchen, die Bindings kannst du komplett über die PaperUI verwenden.

On 8/22/2020 at 7:11 AM, Bunker72 said:

Aus der Dokumentation von TF ergeben sich diese Anlagen nicht mehr. Hier werden die "Actions" beschrieben.
Ich habe versucht diese Actions als Rules anzulegen.
Leider habe ich trotz aller erdenklichen Schreibweisen und Versuche nie auch nur annähernd einen Erfolg gehabt. Auch im Log taucht keiner der Einträge auf. 
Eine erstelle Rule für Telegram konnte ich jedoch zum Laufen bringen. Somit vermute ich kein grundsätzliches Problem zu haben.

Die Rulesyntax ist leider etwas kompliziert, hier zwei Beispiele für das Industrial Dual Relay:

Das ist die Variante, wenn du die Actions benutzt. Damit sprichst du im Endeffekt direkt mit den Java-Bindings, die openHAB-Bindings reichen nur durch. Damit hast du den Vorteil, dass du fast alle Funktionen der Bricks/Bricklets benutzen kannst (alle Actions), es ist aber etwas komplizierter. ("No7" musst du durch die UID deines Relays ersetzen, das ist die UID von dem was ich gerade auf dem Tisch liegen hatte)

rule "Relay example"
when
    System started
then
    val relayActions = getActions("tinkerforge", "tinkerforge:brickletindustrialdualrelay:No7")
    
    relayActions.brickletIndustrialDualRelaySetMonoflop(0, true, 1500)
    
    val relayState = relayActions.brickletIndustrialDualRelayGetValue()
    logInfo("Example", "Channel 0: " + relayState.get("channel0") + " Channel 1: " + relayState.get("channel1"))
end

Alternativ kannst du auch Items für die Relays und deren Monoflops erstellen und die dann direkt benutzen. Das hat den Vorteil, dass die Rules deutlich einfacher werden, du kannst aber nur tun, was als Channel unterstützt wird. Hier musst du noch die Item-Namen, also No7_Relay0 und No7_MonoflopRelay1 durch deine Item-Namen ersetzen.

rule "Relay example 2"
when
    System started
then
    No7_Relay0.send(OnOffType.ON)
    No7_MonoflopRelay1.sendCommand("blah")
end

Die Channel-Dokumentation schreibt, dass der Monoflop-Channel Commands verwendet, deshalb musst du sendCommand anstelle von send benutzen. Als Command-Liste ist "Accepts any string" angegeben. Das heißt, dass es nur ein Kommando gibt, in diesem Fall "löse das konfigurierte Monoflop aus" (die Konfiguration kannst du über die PaperUI ändern), und jeder String den du schickst dieses Kommando auslöst.

Gruß,
Erik

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

vielen Dank für deine ausführliche Anleitung.

Ja ich hatte die erwähnten Bindings installiert.

Dein 1. Beispiel hab ich sofort zum laufen gebracht - allerdings mit einem Time-Job - damit auch was nachhaltiges passiert.

Time cron "*/10 * * * * ?"

Beim 2. Beispiel hatte ich anfangs etwas Startschwierigkeiten. Es ist wohl aber so, dass auch eine Items-Datei nicht mehr erstellt werden muss?
Es ist wohl lediglich der Name aus dem Items zu verwenden:

image.png.8fca82d110f03ca3a00181a17ff2bf4b.png

Also hier "Nob_Relay0"

Das hat mir alles sehr weiter geholfen und ich denke darauf kann ich aufbauen.

 

Nur bin ich dann auch schon wieder am nächsten Hindernis gescheitert.

Ich habe noch einen Humidity Bricklet 2.0.
Die Items sind angelegt und die Werte kommen rein.

Nur wie kann ich mit der Temperatur in der Rule das Relais schalten (z.B. bei Überschreitung von 25°)?
Nach ersten Recherchen habe ich beispiele gesehen, die die Temperatur zunächst dimensionslos umrechnen. Aber alle meine bisherigen Codes haben nicht funktioniert.

Vielleicht kann ja noch jemand einen kurzen Code für eine Temperatursteuerung posten?

Vielen Dank im Voraus
Thomas

Link zu diesem Kommentar
Share on other sites

Hallo,

die Frage nach der Rule für eine Temperaturüberschreitung konnte ich inzwischen selbst lösen.
Ich habe im Item unter Dimension den Eintrag "Temperatur" gelöscht und auf keinen Wert gesetzt.
Somit ist nun die Variable dimensionslos und lässt sich dann mit einem Schwellenwert vergleichen und einen Befehl ausführen.

Evtl. gibt es hierzu noch viel elegantere Lösungen. Auch kenne ich bisweilen nicht die Nachteile die mir beim weglassen der Dimension entstehen.

Also weiter üben.....

Link zu diesem Kommentar
Share on other sites

Moin,

15 hours ago, Bunker72 said:

eim 2. Beispiel hatte ich anfangs etwas Startschwierigkeiten. Es ist wohl aber so, dass auch eine Items-Datei nicht mehr erstellt werden muss?

Das stimmt, mit den neuen Bindings musst du außer den Rules selbst keine Textdateien mehr schreiben. Du kannst prinzipiell alles was du in .items, .cfg usw. schreiben würdest über die PaperUI machen. (Auf meiner TODO-Liste bevor die Bindings "fertig" sind steht aber noch rauszufinden, ob und wenn ja wie man die Variante des Konfigurierens über die Dateien unterstützen kann)

2 hours ago, Bunker72 said:

die Frage nach der Rule für eine Temperaturüberschreitung konnte ich inzwischen selbst lösen.
Ich habe im Item unter Dimension den Eintrag "Temperatur" gelöscht und auf keinen Wert gesetzt.
Somit ist nun die Variable dimensionslos und lässt sich dann mit einem Schwellenwert vergleichen und einen Befehl ausführen.

Evtl. gibt es hierzu noch viel elegantere Lösungen. Auch kenne ich bisweilen nicht die Nachteile die mir beim weglassen der Dimension entstehen.

Wenn du die Dimension weglässt sollte das nur den Effekt haben, dass du in der PaperUI oder einer eigenen Sitemap eben nur noch den Wert ohne Einheit bekommst. Du kannst aber alternativ den Item-Wert in deiner Rule in einen DecimalType konvertieren, dann sollte es auch mit Dimension gehen.

Sieh dir mal den openHAB-Beta-Thread, insbesondere diesen Post an, da ist eine ziemlich lange Rule an deren Anfang du siehst, wie man an den Zustand eines Items als DecimalType kommt. Wenn du aus dem Beta-Thread noch mehr Informationen holst, musst du aber aufpassen, dass du die aktuellen Namen für die Geräte, Funktionen usw. benutzt, das musste ich leider ein paar mal Ändern, damit alles funktioniert.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...