Items per HTTP befehl schalten
-
- Beiträge: 85
- Registriert: 11. Apr 2018 09:55
Items per HTTP befehl schalten
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
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
- udo1toni
- Beiträge: 13865
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Items per HTTP befehl schalten
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.
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
-
- Beiträge: 85
- Registriert: 11. Apr 2018 09:55
Re: Items per HTTP befehl schalten
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"
}
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"
}
- udo1toni
- Beiträge: 13865
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Items per HTTP befehl schalten
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
-
- Beiträge: 85
- Registriert: 11. Apr 2018 09:55
Re: Items per HTTP befehl schalten
Achso ok. Ich probiere es Morgen mal aus. Danke
Gesendet von iPhone mit Tapatalk
Gesendet von iPhone mit Tapatalk
-
- Beiträge: 85
- Registriert: 11. Apr 2018 09:55
Re: Items per HTTP befehl schalten
Hallo Udo,
klappt irgendwie nicht so wirklich.
Kann auch sein das mein WEBIO Server dieses nicht unterstütz.
klappt irgendwie nicht so wirklich.
Kann auch sein das mein WEBIO Server dieses nicht unterstütz.
-
- Beiträge: 14
- Registriert: 5. Apr 2019 21:38
Re: Items per HTTP befehl schalten
Hallo Thommy2012,
bei mir funktioniert auch folgendes:
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
bei mir funktioniert auch folgendes:
Code: Alles auswählen
http://IP:8080/basicui/CMD?Licht_EG_Zimmer1=TOGGLE
In 1.8 hatte ich einige Befehle erstellt/verwendet. Aktuell verwende ich die 2.4.0
-
- Beiträge: 25
- Registriert: 31. Mai 2018 02:49
Re: Items per HTTP befehl schalten
Wenn ich es schaffe, kann ich dir heute Abend einen Beispielcode in PHP schicken.
-
- Beiträge: 25
- Registriert: 31. Mai 2018 02:49
Re: Items per HTTP befehl schalten
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
Mann kann es noch entsprechend erweitern, so dass man beide Schaltzustände in einem Code hat
Die ITEM könnten dann entsprechend so aussehen:
Oder wie folgt wenn du den aktuellen Status des ITEMS haben möchtest:
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
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);
}
?>
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"}
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]" }
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
-
- Beiträge: 175
- Registriert: 29. Jan 2019 07:20
Re: Items per HTTP befehl schalten
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
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
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
Geht das überhaupt so? Wie bekomme ih das ON in die URL rein?
Viele Grüße
Kaloschke