In der nächsten Zeit wird mit der Programmierung einer Smarthome-App für Android-Geräte begonnen. Damit diese App nicht jedes mal umgeschrieben werden muss, wenn sich etwas am Smarthome ändert, werden manche Elemente, wie beispielsweise die vorhandenen Geräte, die vorhandenen Sensoren und auch die vorhandenen Räume nicht in der App festgelegt, sondern bei Bedarf vom Server abgefragt. Damit dies funktioniert, wird in diesem Tutorial eine Schnittstelle angelegt, über die die angelegten Räume abgefragt werden können. Die App erstellt dann dynamisch anhand des Ergebnisses des Aufrufs ein Menü, in dem alle Räume aufgelistet sind und aufgerufen werden können.
In einem der letzten Beiträge hast du bereits gelernt, wie du
Sensorwerte in einer Datenbank speichern kannst. Falls du diesen Beitrag noch nicht gelesen hast, solltest du es jetzt nachholen, da dort die Datenbank-Tabelle "ROOMS" erstellt wird, die in diesem Tutorial benötigt wird.
Das Skript der Schnittstelle
Das Skript, das die Daten zurückgibt, ist an sich nicht sonderlich kompliziert. Es fragt die angelegten Räume aus der Datenbank ab und erstellt ein JSON-Objekt, in das alle Daten eingefügt werden und gibt es schließlich aus.
Um das Skript anzulegen, erstellst du per FTP in deinem Server-Hauptverzeichnis eine Datei namens "getRooms.php" in die du folgenden php-Code einfügst:
<?php
function getRooms($db){
$results = $db->prepare("SELECT * FROM 'ROOMS'");
$results->execute();
$rooms = array();
foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
$room_item = array('name' => $row['NAME'], 'location' => $row['LOCATION']);
array_push($rooms, $room_item);
}
header('Content-type: application/json');
return json_encode(array('rooms' => $rooms));
}
?>
Funktionsweise des Skripts
Das Skript wird über eine Schnittstelle (wird bei Programmierung der Android-App angelegt) aufgerufen und du erhältst anschließend eine Ausgabe der vorhandenen Räume (Schlafzimmer, mit dem Raum-Key "bedroom") im JSON-Format, die etwa wie das folgende Beispiel aussehen sollte:
{"rooms":[{"name":"Schlafzimmer","location":"bedroom"}]}
Wenn du Fragen oder Probleme zu diesem Tutorial hast, kannst du mir gerne einen Kommentar hinterlassen.
Dieses Tutorial als Video