Seite 2 von 2

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 11:56
von TorstenE
Ja, aber WO trägst Du denn die URL ein ?

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 12:07
von udo1toni
ACHTUNG! Das ist openHAB2 (oder auch openHAB1)

Wenn Du das unter openHAB3 machen willst, musst Du natürlich ein Thing und einen Channel anlegen und diesen Channel mit dem Item verlinken.

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 12:40
von TorstenE
Ohhh Udo, wenn wir Dich nicht hätten.
Ich dachte schon ich versteh die Welt nicht mehr - DANKE

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 12:42
von PeterA
Ok Danke Udo....
daran hatte ich Natürlich auch nicht gedacht :)

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 12:45
von TorstenE
Und wie schaut dann der Channel für einen "ON/OFF" Switch mit entsprechender URL genau aus ?

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 18:13
von TorstenE
Ich habe folgende Situation bei der REST-API

Code: Alles auswählen

JSONPATH:$.isInScreensaver 
bringt mit den Wert "true" oder "false" per JSON

Die Befehle zum setzen der Werte sind jedoch

Code: Alles auswählen

cmd=startScreensaver
cmd=stopScreensaver
Wie definiere ich jetzt den Switch-Channel, dass er "isInScreensave" in ON/OFF umwandelt
und danach die Befehle ON/OFF in startScreensave/stopScreensaver

Danke

Torsten

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 3. Mai 2023 19:11
von udo1toni
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"}

Re: HTTP Request per RULE oder direkt per Item ?

Verfasst: 4. Mai 2023 13:16
von TorstenE
Danke für die Hife Udo.

Hier hören wir auf, da sich sonst die Themen überschneiden.

Grüße

Torsten