JSON Schnittstelle zum x-ten

Hallo,

Ich besitzt zur Zeit einen Server (Linux) im Internet, den ich als Webserver (Apache2) nutzen möchte.
Dieser Webserver soll unter anderem die Temperaturwerte meine Räume anzeigen, die Symcon brav Zuhause mitloggt.
Nun habe ich mir vorgestellt, daß ich die Werte mit JSON abfrage und einfach auf der Webseite meines Internet Web-Servers darstelle.
Ich habe also in eine Webseite folgendes Script eingefügt


<?PHP

$rpc = new JSONRPC("http://username:kennwort@server.domain.net:80/api/");
$result = $rpc->IPS_GetKernelDir();
echo "KernelVersion: ".$result;

?>

Webfront ist vom Internet aus auf Port 80 erreichbar.
Wenn ich die Zeile „http://username:kennwort@server.domain.net:80/api/“ im Browser eingebe, dann bekomme ich das zurück:
{ „IP-Symcon“: „3.00“,
„API“: „0.1“,
„JSON-RPC“: „2.0“}
Sieht also erstmal gut aus, aber auf der Webseite wird nichts dargestellt - Wieso.

Hat jemand eine Idee? Vielen Dank im Voraus !!!

Gruß
Michael

Nicht = Fehler? Du hast bestimmt einen Scriptfehler :wink:

Und vermutlich fehlt einfach die JSONRPC-Klasse auf deinem WebServer… Du findest diese unter _jsonrpc.inc.php im scripts Ordner. Rüberkopieren und per include in dein Skript - dann sollte es gehen :slight_smile:

paresy

Hallo Michael,

wie willst du genau auf den IPS-Server via JSON-RPC Schnittstelle zugreifen?
Hast du auf deinem Apache Server im Internet ein PHP skript, welches die JSON Ausgabe von deinem IPS-Server in HTML umwandelt? Wenn ja, muss dieses PHP Skript beim Aufruf einen POST Request mit korrektem JSON Request-Payload zu deinem IPS-Server senden und die Response auslesen und weiter verarbeiten. Die Aufrufkette sähe dann so aus:
Browser —(HTTP GET REQUEST)—>Apache Internet -> PHP Skript (für IPSAufruf) —(HTTP POST REQUEST)—> IPS Server —> (HTTP RESPONSE)—> Apache Internet -> PHP Skript(für Ergebnisrendering) —(HTTP RESPONSE)—>Browser.

Der PHP Code, den du erwähnt hast funktioniert so nur auf dem IPS (Web)Server. Für deinen zusätzlichen Apache müsstest du dann eben noch den POST Request zum IPS und das Ergebnisrendering bauen.

Du könntest den JSON-RPC Aufruf auch direkt clientseitig mit JavaScript im Browser durchführen und das Ergebnis aufbereiten.

Hoffe das hilft etwas weiter.

Gruss
Johannes

paresy war schneller… oder eben kopieren :wink:

Ergänzung zur clientseitigen Variante: Hier muss der IPS (Web) Server „CORS“ unterstützen, wenn die Ursprungsseite von einem anderen Origin kommt (z.B. Apache im Internet). Das habe ich noch nicht getestet, ob das möglich ist. Sollte generell machbar sein, man muss hier in die Response einen zusätzlichen Header einbauen.

Gruss

Dann habe ich es doch falsch verstanden.
Ich wollte eigentlich das was ich vorher so ausgelesen habe:

$soap = new SoapClient("http://gateway.woytke.net:3773/wsdl/IIPSSimpleKernel");
$result = $soap->GetKernelVersion();
 echo "KernelVersion: ".$result."<br>";

nun so auslesen:

$rpc = new JSONRPC("http://username:kennwort@server.domain.net:80/api/"); 
$result = $rpc->IPS_GetKernelDir(); 
echo "KernelVersion: ".$result;

Denkfehler?

Denkfehler?

Nein, kein Denkfehler. Wenn du diesen JSONRPC Aufruf in PHP auf deinem extra Apache Server ausführen willst, musst du nur beachten, dass du am einfachsten so wie paresy geschrieben hat die _jsonrpc.inc.php rüberkopierst und im Aufrufscript inkludierst, so dass der generische JSONRPC auch hier klappt. Als URL dann beim Instanzieren der Klasse natürlich die öffentliche URL deines IPS (Web)Servers eintragen.

Hallo,
Vielen Dank für Eure Hilfestellung, aber es funktioniert nicht. :mad:
So wie beschrieben habe ich es gemacht, aber es wird nichts angezeigt - kein Fehler einfach Nichts.

Die Datei von IPS habe ich umgenannt in „jsonrpc.inc.php“ und somit die führenden Untersriche im Dateinamen entfernt - Ich denke das ist egal!?
Sie liegt nun so im Root Verzeichnis (/var/www) des Webservers:
-rw-r–r-- 1 www-data www-data 1281 10. Okt 14:32 jsonrpc.inc.php

Die Webseite die ich aufrufe ist einfach gestrickt und sieht in etwa so aus

.
.
.
.
<h1>Ãbersicht</h1>Platzieren Sie hier Ihre eigenen Texte und Bilder. Bearbeiten Sie diesen Text einfach durch einen Doppelklick.
<br><br>

<?PHP
include(jsonrpc.inc.php);

$rpc = new JSONRPC("http://username:kennwort@server.domain.net:80/api/");
$result = $rpc->IPS_GetKernelDir();
echo "KernelVersion: ".$result;

?>
</div>
<h1>Test</h1>
.
.
...usw...

Was könnte es sein?

Danke im Voraus & Gruß
Michael

Mein Tipp: Finde heraus wie du die Fehlermeldungen angezeigt bekommst. Eine leere Seite ist ein klarer Hinweis, dass PHP einen Fehler hat.

Tipps #2:


include(jsonrpc.inc.php);  <-- Da fehlen Anführungszeichen

paresy

Muss es nich so heissen?

include('jsonrpc.inc.php');
Edit:

Mist… Zu langsam :smiley:

Toni

Hi,
Daran lag es. Ich bekomme jetzt zumindest irgendetwas zurück.
Ich möchte lediglich den Wert einer Variable auslesen und frage ab:

<?PHP
include('jsonrpc.inc.php');

$rpc = new JSONRPC("http://username:kennwort@server.domain.net:80/api/");
$buerotemp = GetValueFloat(13252);
echo "Buerotemp: ".$buerotemp;
?>

Nun erhalte ich wieder nichts.
Kann ich die IPS Befehle damit nicht nutzen?

<?PHP
include('jsonrpc.inc.php');

$rpc = new JSONRPC("http://username:kennwort@server.domain.net:80/api/");
$buerotemp = $rpc->GetValueFloat(13252);
echo "Buerotemp: ".$buerotemp;
?>

$buerotemp = $rpc->GetValueFloat(13252);

RTFM:http://www.ip-symcon.de/service/dokumentation/entwicklerbereich/datenaustausch/

Renn du RPC benutzen willst musst du es deinem Apachen schon auch mitteilen und es davor schreiben :wink:

Hallo,

Ich gebe zu Das macht Sinn und funktioniert nun wie gewünscht.
Ihr wisst ja, daß ich mich mit Programmierung nicht auskenne und auf Eure Hilfe ab und an mal angewiesen bin.
Vielen, vielen Dank !!!

Ich hoffe die Datenbankabfrage funktioniert genauso mit „AC_GetAggregatedValues“ usw…

Gruß
Michael