Items per HTTP befehl schalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Thommy2012
Beiträge: 85
Registriert: 11. Apr 2018 09:55

Items per HTTP befehl schalten

Beitrag von Thommy2012 »

Hallo zusammen,

ich versuche über die Rest-Api funktion ein Item mittels HTTP Befehl zu steuern.

Dieses klappt aber irgendwie nicht.

http://IP:8080/rest/items/TV/state------ist das zu steuernde gerät.

Im Netz habe ich etwas gefunden das sieh so aus

http://IP:8080/CMD?TV=ON

da kommt aber nur das Raus-------------HTTP ERROR 404 Problem accessing /CMD. Reason:

Habe es als Get/Post/Put versucht alles ohne Erfolg.

Kann mir einer einen Tip geben.

Danke

Benutzeravatar
udo1toni
Beiträge: 13865
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Items per HTTP befehl schalten

Beitrag von udo1toni »

Du musst auf die Version achten. Der Aufruf ist noch aus OH1-Zeiten, wenn ich mich richtig erinnere.

Den korrekten Aufruf kannst Du über die REST Dokumentation komfortabel zusammenklicken.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thommy2012
Beiträge: 85
Registriert: 11. Apr 2018 09:55

Re: Items per HTTP befehl schalten

Beitrag von Thommy2012 »

Hallo Udo1toni,

das hatte ich schon probiert.

PUT /items/{itemname}/state gegangen und von dort auf kann ich dann auch OFF oder ON sagen.

Ich bekomme nur nicht die URL heraus für den OFF oder ON befehl

so sieht das bei mir aus

Curl
curl -X PUT --header "Content-Type: text/plain" --header "Accept: application/json" -d "OFF" "http://IP:8080/rest/items/TV/state"
Request URL
http://IP:8080/rest/items/TV/state
Response Body
no content
Response Code
202
Response Headers
{
"content-length": "0",
"server": "Jetty(9.4.11.v20180605)",
"content-type": "application/json"
}

Benutzeravatar
udo1toni
Beiträge: 13865
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Items per HTTP befehl schalten

Beitrag von udo1toni »

Du darfst kein PUt nehmen, Du musst POST nutzen:

Code: Alles auswählen

curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "OFF" "http://openhab2.udo.lokal:8080/rest/items/TV"
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Thommy2012
Beiträge: 85
Registriert: 11. Apr 2018 09:55

Re: Items per HTTP befehl schalten

Beitrag von Thommy2012 »

Achso ok. Ich probiere es Morgen mal aus. Danke


Gesendet von iPhone mit Tapatalk

Thommy2012
Beiträge: 85
Registriert: 11. Apr 2018 09:55

Re: Items per HTTP befehl schalten

Beitrag von Thommy2012 »

Hallo Udo,

klappt irgendwie nicht so wirklich.

Kann auch sein das mein WEBIO Server dieses nicht unterstütz.

heiko74
Beiträge: 14
Registriert: 5. Apr 2019 21:38

Re: Items per HTTP befehl schalten

Beitrag von heiko74 »

Hallo Thommy2012,

bei mir funktioniert auch folgendes:

Code: Alles auswählen

http://IP:8080/basicui/CMD?Licht_EG_Zimmer1=TOGGLE
Hier ist "Licht_EG_Zimmer1" ein angelegtes Item. Ich verwende auch noch ON oder OFF. Könnte mir aber auch vorstellen, daß man alle Agrumente, die das Item erlaubt verwenden könnte.

In 1.8 hatte ich einige Befehle erstellt/verwendet. Aktuell verwende ich die 2.4.0

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49

Re: Items per HTTP befehl schalten

Beitrag von littlekenny »

Wenn ich es schaffe, kann ich dir heute Abend einen Beispielcode in PHP schicken.

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49

Re: Items per HTTP befehl schalten

Beitrag von littlekenny »

Hallo zusammen,

hab hier mal ein altes Beispiel von mir ausgegraben, wie es per PHP gelöst hatte.
Benötigt wird das HTTP Bindung dafür oder das EXEC Binding

Code: Alles auswählen

<form name="send" action="curl2.php" method="post">

 <p>Status ändern</p>
 <p><input name="aktion" value="gesendet" type="submit" /></p>
</form>

<?php
if ($_POST['send'])
{

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://DEINE-IP:8080/rest/items/DEIN ITEM');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "OFF"); //Hier muss der entsprechende STATUS der geschaltet werden soll rein.
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: text/plain';
$headers[] = 'Accept: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
}
?>
Mann kann es noch entsprechend erweitern, so dass man beide Schaltzustände in einem Code hat

Die ITEM könnten dann entsprechend so aussehen:

Code: Alles auswählen

Switch licht_flur "Steckdose" <poweroutlet>
Switch licht_flur_run {channel="exec:command:licht_flur:run"}
String licht_flur_Args {channel="exec:command:licht_flur:input"}
String licht_flur_Out {channel="exec:command:licht_flur:output"}
Oder wie folgt wenn du den aktuellen Status des ITEMS haben möchtest:

Code: Alles auswählen

<?php
//Datenbankverindung einbinden
include 'config.php';
//Erstmal den aktuellen Status des Items mit Curl auslesen
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'http://192.168.178.35:8080/rest/items/BatteryLevel1/state'); //Badezimmer
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
$result1 = curl_exec($ch1);
if (curl_errno($ch1)) {
    echo 'Error:' . curl_error($ch1);
}
curl_close ($ch1);


//Daten in der Datenbank aktualisieren
$statement = $pdo->prepare("UPDATE battery SET zeit = :zeit_neu, status = :status_neu");

$statement->execute(array('zeit_neu' => 'NOW()', 'status_neu' => '$result1'));

?>

Code: Alles auswählen

Switch update1 { http=">[*:POST:http://DEINE-IP/openhabscripts/datenbank/update.php:default]" }
In meinem Fall schreibe ich den Status in eine SQL Datenbank...muss aber nicht zwingend....Man kann sie auch direkt weiterverarbeiten.
Aber wenn man es in einer Art Statistik anzeigen möchte, ist es recht angenehm die Werte in einer Datenbank zu haben....

Die Codes sind jetzt schon was älter, hatte diese noch erweitert...finde sie aber auf Anhieb jetzt nicht..Aber damit solltest du eigentlich zu recht kommen.

Was sehr Hilfreich ist, ist auch der folgende Link: http://incarnate.github.io/curl-to-php/

Lieben Gruß, littlekenny

kaloschke
Beiträge: 175
Registriert: 29. Jan 2019 07:20

Re: Items per HTTP befehl schalten

Beitrag von kaloschke »

Hi,

hänge mich hier mal dran.
Meine Türsprechanlage kann einen URL losschicken, wenn geklingelt wird. Ich möchte nun mit so etwas wie

Code: Alles auswählen

http://ip:8080/rest/items/myitem
dafür sorgen, dass myitem auf ON gestellt wird.
Geht das überhaupt so? Wie bekomme ih das ON in die URL rein?

Viele Grüße
Kaloschke

Antworten