HTTP Request und JSON Callback in PHP einbinden ?

martin-s

Aktives Mitglied
Thread Starter
Dabei seit
12.05.2005
Beiträge
190
Reaktionspunkte
4
Hallo,
ich nutze hier ein RF-Gateway im Netzwerk zur Steuerung verschiedener Funksteckdosen bzw Funkempfänger im Haus. Ich kann also auf dieses Gateway (kleine Kiste mit Antenne und Netzwerkanschluss) zugreifen und per HTTP-Request eine Aktion ausführen lassen (zB. Lampe im Wohnzimmer an).

Als Rückmeldung zu dieser Aktion wird vom Gateway eine Antwort in Form von JSON gesandt, die man nun wiederrum auf einer Webseite auswerten kann (wenn man es denn kann).

Zum Stand meiner PHP-Kenntnisse kann ich sagen, daß mir Grundsätze geläufig sind, mysql kein Fremdwort ist und ich schon ein paar kleine Sachen mit Datenbankanbindung für mich privat programmiert habe (Online-Fotoalbum, Kalender mit Adressbuch, Dokumentenverwaltung etc).

Meine Frage nun, wie kann ich diese JSON-Antwort in PHP benutzen, sodaß ich schliesslich einigen Variablen die entsprechenden Werte zugeordnet habe, die ich dann weiter in PHP verwenden kann ?
Hier noch ein Link zum Hersteller und einer Anleitung mit einigen Details :
http://www.ezcontrol.de/files/EZcontrol_XS1_Protokoll_v15_Benutzer-Dokumentation.pdf

Gruß und Danke für Eure Hilfe !
 
Hi,

wenn der HTTP Request einen json String zurück liefert solltest du den relativ einfach mit json_decode() verwerten können.
 
Das mit dem json_decode habe ich auch schon gelesen. Bei allen Beispielen zu json_decode wird angenommen, daß die Daten aus der JSON-Antwort in Form ähnlich einer XML-Datei bzw in einem Array vorliegen, das dann mit json_decode bearbeitet wird. Wie kann ich denn die JSON-Antwort des Gateways auswerten ? Kann ich da nicht mit einem $_GET arbeiten ?

Mir fehlt noch der Anpack-Punkt, an dem ich anfangen kann das zu lernen bzw zu verstehen.

Hier mal ein Auszug aus der Doku, wie das Ganze lüppt :

get_date_time – Datum und Zeit auslesen
Die interne Batterie gestützte Echtzeit Uhr (RTC) arbeitet mit UTC / GMT Zeit.
Anfrage (Client -> XS1):
http://192.168.1.242/control?callback=cname&cmd=get_date_time
Antwort (XS1 -> Client):
cname({ "version": 15,
})
"type": "get_date_time", "utime": 1275385978, "date": {
"weekday": "tu", "day": 1, "month": 6, "year": 2010
}, "time": {
"hour": 11, "min": 52, "sec": 58
}, "utc_offset": 60, "dstmode": "on", "dst": "on", "ntp": "on", "ntp_server": "ntp.ezcontrol.de", "ntp_state": "synced"
 
Was hast du denn bisher versucht, bzw. wie schickst du die Anfrage denn raus?
Oder bist du so weit noch gar nicht?

Mein erster Versuch wäre in etwa die URL direkt mit fopen, fread, ect. auszulesen und das Ergebnis durch json_decode zu jagen.
Wenn das nicht klappt würde ich es mit curl versuchen.

Edit: Oder einfacher:

PHP:
$jsonData = file_get_contents('http://192.168.1.242/control?callback=cname&cmd=get_date_time');
$data = json_decode($jsonData);
var_dump($data);
 
  • Gefällt mir
Reaktionen: martin-s
bis dato sende ich die Anfrage einfach nur raus und kann somit nur steuern. Da es aber auch (Temp- und Hygro-) Sensoren in dem gesamten Konstrukt gibt, die ich abfragen möchte, muss ich halt mit JSON spielen.

EDIT zu Deinem EDIT :
würde denn in diesem Fall der Request an das Gateway überhaupt so gesendet werden, daß ein Befehl ausgeführt würde oder provoziere ich da nur die JSON Antwort ?
 
Zuletzt bearbeitet:
Der Request wird dabei natürlich gesendet.
Wenn der Aufruf dieser URL im Browser irgendeine Aktion ausführt wird sie auch durch das auslesen der Datei ausgeführt.

Als kleines Beispiel dazu:

Datei time.php auf www.example.tld
PHP:
<?php
echo date('H:i:s');
?>

Datei index.php auf www.beispiel.de
PHP:
<?php
$data = file_get_contents('http://www.example.tld/time.php');
var_dump($data); 
?>

Der aufruf von www.beispiel.de sollte so etwas ausgeben:
string(8) "23:35:32"
 
  • Gefällt mir
Reaktionen: martin-s
Hallo iRocko,

cname({ "version": 15, "type": "get_state_sensor", "sensor": { "number": 2, "name": "Temperatur_aussen", "type": "temperature", "value": 8.4, "state": [], "unit": "°C", "utime": 1290351978, "date": { "weekday": "su", "day": 21, "month": 11, "year": 2010 }, "time": { "hour": 16, "min": 6, "sec": 18 } } })

Das bekomme ich als "Antwort" auf meinen Request. Super, Danke, es funktioniert. Nun noch die Daten aus dem String evakuieren und anzeigen lassen, perfekt !
 
Kein Problem.
Der Rest sollte ja jetzt nur noch "Beiwerk" sein. :)
 
Kein Problem.
Der Rest sollte ja jetzt nur noch "Beiwerk" sein. :)

Hallo iRocko,
ich stehe vor einem ähnlichem Problem. ich bekomme die Daten wie in dem Beitrag über dir zwar so angezeigt, aber wie kann ich bestimmte Werte die in einer Tabelle erfassen so das die Daten auf meiner Webseite ausgegeben werden können? Es geht speziell um Kursabfragen von der Börse die mittels API ausgelesen werden.

Das "Beiwerk" wie du es so schön nennst ist für mich unverständlich und zu hoch...ich bin da eher die unbewanderte Frau die sich durchfummel will und nicht weiter weiß...:) DasAbfragen hat Dank deiner Tips hier sehr gut funktioniert. Das war aber auch schon alles und wie ich bestimmte Werte aus dem Strin in bestimmte tabellenfelder reinbekomme, habe ich keine Ahnung. hast du dafür auch einen Tip?

Liebe Grüße
Katharina
 
Zurück
Oben Unten