HTTP Request per RULE oder direkt per Item ?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
TorstenE
Beiträge: 246
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

HTTP Request per RULE oder direkt per Item ?

Beitrag von TorstenE »

Hallo Mitstreiter,

externe Geräte bieten ja die Möglichkeit, per REST-Api gesteuert zu werden.
z.B.:
http://MeineIP:MeinPort?command=ON
http://MeineIP:MeinPort?command=OFF

Ist es jetzt besser solche HTTP Request direkt über das Item aufzurufen
oder besser in einer Rule? Welche Vor-/Nachteile hat die eine oder
andere Variante ?

Danke

Torsten
von udo1toni » 3. Mai 2023 19:11
Also, ON/OFF ist ja was anderes als das, was hier im Thread behandelt wurde. Grundsätzlich sieht ein http Thing mit einem switch Channel so aus (Definition in einer *.things Datei):

Code: Alles auswählen

Thing http:url:thingid "Thing Label" [ 
    baseURL="http://ip.des.fernen.systems/gemeinsamer/pfad/",
    refresh=10,
    timeout=8000
 ] { Channels: 
    Type switch : switch1 "Schalter" [  
                          stateExtension="statuspfad", 
                          commandExtension="commandpfad?befehl=%2$s", 
                          stateTransformation="...",
                          onValue="ein",
                          offValue="aus"
                     ]
}
Dabei sind alle Parameter optional. Wenn man allerdings einen Befehl erfolgreich senden will, muss in der commandExtension der Platzhalter %2$s gesetzt sein, sonst wird kein Wert für ON oder OFF gesendet. Falls onValue und/oder offValue nicht gesetzt sind, wird exakt ON bzw. OFF gesendet. stateExtension und commandExtension müssen lediglich dem Teil der URL entsprechen, der sich jeweils unterscheidet. baseURL ist dann der Teil, der für beide URLs gleich ist.
Die stateTransformation ist nur dann notwendig, wenn nicht direkt onValue/offValue (oder ohne deren Definition ON/OFF) zurück kommen. Je nachdem, was als Status kommt, muss/müssen der/die passende(n) Service(s) gewählt werden.

Im Beispiel oben wird jeweils direkt ein String geschickt, dazu bräuchte man natürlich einen string Channel:

Code: Alles auswählen

Thing http:url:coolstream "CoolStream" [ 
    baseURL="http://192.168.2.116/control/",
    refresh=10,
    timeout=8000,
    commandMethod="POST"
    ] {
    Channels: 
        Type string : command "Kommando" [ commandExtension="rcem?%2$s" ]
}
und das Item sähe so aus (wieder im textdatei.items Format):

Code: Alles auswählen

String    Coolstream   {channel="http:url:coolstream:command"}
Gehe zur vollständigen Antwort
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von PeterA »

Hi Torsten,

wie immer "Es kommt darauf an":)

Direkt übers Item bzw. den Channel verbraucht weniger Ressourcen und geht halt direkt.
Hier habe ich die Bedienung vom SAT Receiver so realisiert. Da brauche ich für die Steuerbefehle keine Rule.
Wenn Du hingegen gewisse Automatismen haben möchtest dann brauchts eben eine Rule.


Gruß Peter
- OpenHab 2.4
#PWRUP

Benutzeravatar
TorstenE
Beiträge: 246
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von TorstenE »

PeterA hat geschrieben: 3. Mai 2023 09:29 ...
Direkt übers Item bzw. den Channel verbraucht weniger Ressourcen und geht halt direkt.
...
Was passiert, wenn der REQUEST fehl schlägt ? z.B. Dein Receiver ist überhaupt nicht eingeschaltet.
Wie verhält sich da OH ?

Grüße

Torsten
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von PeterA »

Dann gibts ne Fehlermeldung im Log.... aber nur bei nem Request glaube ich.

Im übrigen habe ich wenn ich nicht am System Arbeite das Loglevel auf "WARN" runter gedreht das schon die SD Karte.
- OpenHab 2.4
#PWRUP

Benutzeravatar
TorstenE
Beiträge: 246
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von TorstenE »

D.h. aber, Dein "Item" schaltet, aber der REQUEST ist wird eventuell ausgeführt.
Dann müsste man das doch eigentlich eber über eine Rule abwickeln.

- REQUEST ausführen.
- ein paar Millisekunden warten
- Status nochmals abfragen und Item wenn notwendig korrigieren
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von PeterA »

Das braucht es m. E. nicht. Also nicht in meiner Anwendung.

Hier das Item für meinen Sat Receiver:

Code: Alles auswählen

String    Coolstream   {http=">[*:POST:http://192.168.2.116/control/rcem?%2$s]"}
Das Mapping der Befehle erfolgt direkt in der Sitemap:

Code: Alles auswählen

Switch                             item=Coolstream    icon="receiver" mappings=[KEY_SETUP="MENÜ",KEY_POWER="STANDBY",KEY_MUTE="MUTE"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_EXIT="EXIT",KEY_HOME="HOME",KEY_OK="OK",KEY_EPG="EPG"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_INFO="INFO",KEY_UP="⬆️",KEY_DOWN="⬇️"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_1="⏪",KEY_3="⏩",KEY_LEFT="⬅️",KEY_RIGHT="➡️"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_PAGEUP="Page Up",KEY_PAGEDOWN="Page Down"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_RED="RED",KEY_GREEN="GREEN",KEY_YELLOW="YELLOW",KEY_BLUE="BLUE"] visibility=[CoolstreamTime!=offline]
        Switch                             item=Coolstream    icon="receiver" mappings=[KEY_PLAY="▶️",KEY_PAUSE="⏸",KEY_RECORD="⏺",KEY_STOP="⏹"] visibility=[CoolstreamTime!=offline]
Die Befehle hab ich aus der API meines Receivers.
Das funktioniert alles ohne Verzögerung!
Wie gesagt für DIESE Anwendung ist das völlig Ok.

Bei einer anderen Anwendung ist eine Rückmeldung vllt. notwendig und das müsste man dann in einer Rule erledigen.
Habe ich gerade in einem anderem Thread mit Udo geklärt. Hier sendet eine Rule über ein Item einen Befehl (via ModBus) an meine Lüftung.
Und in einem bestimmen Fall möchte ich wissen ob die Lüftung auch diesen Befehl übernommen hat. Falls nicht bekomme ich eine Meldung.

Wenn dann z.B. auch ein Thing ins Spiel kommt könnte man vorher auch den Status des Thing auswerten. Online oder Offline.
Das läuft bei meinem AVR von Denon so. Der braucht nach dem Einschalten erst mal einen Moment bis "sein" Thing in OpenHab Online wird.
Erst danach erlaube ich Befehle und Aktionen auszuführen weil das ansonsten auch einen Fehler wirft.

Gruß
Peter
- OpenHab 2.4
#PWRUP

Benutzeravatar
TorstenE
Beiträge: 246
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von TorstenE »

An welcher Stelle im Item ist der HTTP-Request hinterlegt ?
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von PeterA »

Garnicht! :-)

Das passiert in diesem Fall direkt über das "Mapping" in der Sitemap.
- OpenHab 2.4
#PWRUP

Benutzeravatar
TorstenE
Beiträge: 246
Registriert: 12. Jan 2022 18:29
Answers: 4
Wohnort: Niederstaufen

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von TorstenE »

Dann ist das ein Thing und kein Item ?

Code: Alles auswählen

String    Coolstream   {http=">[*:POST:http://192.168.2.116/control/rcem?%2$s]"}
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: HTTP Request per RULE oder direkt per Item ?

Beitrag von PeterA »

Nein in diesem Fall braucht es kein Thing!
Aber das HTTP Binding muss Installiert sein!
Die Übergabe erfolgt wenn ich mich recht erinnere mit am Ende der Url
- OpenHab 2.4
#PWRUP

Antworten