HTTP Request per RULE oder direkt per Item ?
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
HTTP Request per RULE oder direkt per Item ?
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
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
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):
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:
und das Item sähe so aus (wieder im textdatei.items Format):
Gehe zur vollständigen AntwortCode: 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"
]
}
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" ]
}
Code: Alles auswählen
String Coolstream {channel="http:url:coolstream:command"}
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: HTTP Request per RULE oder direkt per Item ?
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
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
#PWRUP
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: HTTP Request per RULE oder direkt per Item ?
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
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: HTTP Request per RULE oder direkt per Item ?
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.
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
#PWRUP
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: HTTP Request per RULE oder direkt per Item ?
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
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
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: HTTP Request per RULE oder direkt per Item ?
Das braucht es m. E. nicht. Also nicht in meiner Anwendung.
Hier das Item für meinen Sat Receiver:
Das Mapping der Befehle erfolgt direkt in der Sitemap:
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
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]"}
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]
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
#PWRUP
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: HTTP Request per RULE oder direkt per Item ?
An welcher Stelle im Item ist der HTTP-Request hinterlegt ?
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: HTTP Request per RULE oder direkt per Item ?
Garnicht! 
Das passiert in diesem Fall direkt über das "Mapping" in der Sitemap.

Das passiert in diesem Fall direkt über das "Mapping" in der Sitemap.
- OpenHab 2.4
#PWRUP
#PWRUP
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: HTTP Request per RULE oder direkt per Item ?
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
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: HTTP Request per RULE oder direkt per Item ?
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
Aber das HTTP Binding muss Installiert sein!
Die Übergabe erfolgt wenn ich mich recht erinnere mit
Code: Alles auswählen
%2$s
- OpenHab 2.4
#PWRUP
#PWRUP