Von einem anderen Gerät, der Unfolded Circle Remote 2, bekomme ich Kommandos per HTTP-Post und HTTP-Get. HTTP-Get möchte ich aber beantworten wenn ich reagiert habe. Reagieren auf die Kommandos klappt aber antworten leider nicht.
Ein einfaches
echo "Hallo world"
kommt nicht an. Der Sender bekommt ein TimeOut. Wo ist der Fehler? Gibt eine andere Möglichkei ´t auf HTTP-Get zu anworten?
Ralf
Hier fehlt etwas Hintergrund…
Wie wird die Anfrage an Symcon gestellt?
Wie landet es im Script?
Wie schaut dein ganzes Script aus?
Was erwartet das Gerät? JSON, HTML, Text?
Edit: Gibt ja diverses APIs dafür
Michael
Moin,
das ist ein Teil vom Script das per WebHook aufgerufen wird.
<?php
$Command = json_decode(file_get_contents("php://input"), true);
SetValue(57445, json_encode($Command));
if (!isset($Command['cmd'])) return;
$UserAgent = $_SERVER['HTTP_USER_AGENT'];
if ($UserAgent == 'Remote1'){
$Key = GetValue(17539);
$IP = '192.168.178.228';
}
else if ($UserAgent == 'Remote2'){
$Key = GetValue(22717);
$IP = '192.168.178.227';
}
else return;
$kommando = $Command['cmd'];
switch ($kommando){
case "licht-an":
$brightness = GetValue(11082) + 10;
if ($brightness > 100) $brightness = 100;
SetValue(11082, $brightness);
IPS_RunScript(26798);
echo "Helligkeit:" . $brightness;
break;
}
?>
Der Hintergrund ist das ich Daten von IPS, wie hier die Helligkeit, in einem Widget auf der Fernbedienung anzeigen will. Standardmäßig würde das Gerät die komplette Antwort anzeigen und man kann dann später filtern wenn denn Daten da sind. Da aber noch keine Daten ankommen sondern nur das TimeOut kann ich noch nicht filtern. Ob jetzt String oder json ist egal. Gesendet wird json.
Lich schalten kann ich per GET mir fehlt nur die Antwort.
Ralf
Du wertest doch gar nicht aus ob es ein GET ist.
php://input
klingt für mich nach PUT/POST.
Eventuell wirft das Script Fehler aus?
Oder du hast noch was nach dem ?>
Du kannst ja mal die Header senden, bevor dein echo kommt. Ist dann das Timeout weg?
<?php
http_response_code(200);
header('Connection: close');
header('Expires: 0');
header('Cache-Control: no-cache');
header('Content-Type: text/plain');
....
$Command = json_decode(file_get_contents("php://input"), true);
Michael