
Alle Daten eines Raumes abfragen
Aufgrund des Aufbaus der App wird für die Programmierung dieser eine Funktion verwendet, mit der man alle Daten eines Raumes abfragen kann und dann ein Objekt erhält, in dem die Informationen zu den Steckdosen und ihren Zuständen, dem Vorhandensein von Szenen, der Heizungssteuerung (wird noch implementiert) und den vorhandenen Sensoren enthalten sind. Diese im grunde recht einfache Funktion wird im heutigen Tutorial angelegt.
Dieses Tutorial gibt es auch als Video
Daten mit Funktion abfragen
Um die Funktion anzulegen, erstellst du per FTP in deinem Server-Hauptverzeichnis die Datei „getRoomData.php“, öffnest sie und fügst dort folgenden Code ein:
<?php function getRoomData($room, $db){ $roomdata = array(); $switchdata = json_decode(getModes($room, "", $db), true); foreach($switchdata['modi'] as $switch){ if($switch['mode'] === "1"){ $mode = true; } else{ $mode = false; } array_push($roomdata, array('name' => $switch['name'], 'device' => $switch['device'], 'icon' => $switch['icon'], 'type' => "switch", 'value' => ($mode) ? 'true' : 'false')); } $sensordata = json_decode(getSensorData($room, "", "", $db), true); foreach($sensordata['values'][0]['value_array'] as $sensor){ array_push($roomdata, array('name' => $sensor['shortform'], 'device' => $sensor['sensorart'], 'icon' => $sensor['sensorart'], 'type' => "value", 'value' => $sensor['wert'])); } $scenedata = json_decode(getScenes($room, $db), true); if(sizeOf($scenedata['scenes']) > 0){ array_push($roomdata, array('name' => "Szenen", 'device' => "scenes", 'icon' => "scenes", 'type' => "scenes", 'value' => "")); } //Heizungs-Item implementieren return json_encode(array('roomdata' => $roomdata)); } ?>
Die Funktion zur Schnittstelle hinzufügen
Anschließend musst du noch die Schnittstelle ergänzen und die neue Funktion dort einfügen. Dazu öffnest du einfach die Datei „api.php“ per FileZilla mit einem Editor und fügst die enstprechende include-Anweisung hinzu (Siehe Zeile 16) und danach im switch-Block den neuen case (Siehe Zeilen 53-56):
<?php //Datenbankverbindung herstellen $SQLITEdb = "database/data.sqlite"; $db = new PDO("sqlite:".$SQLITEdb); //Funksteckdosen include "getModes.php"; include "setModes.php"; //Andere include "getRooms.php"; include "getSystemInfo.php"; include "getSensorData.php"; //Dieser Punkt wurde hinzugefügt include "getRoomData.php"; //Szenen include "scenes/getScenes.php"; include "scenes/runScene.php"; include "scenes/createScene.php"; $validUser = validateUser($_POST['username'], $_POST['password'], $db); if($validUser){ switch($_POST['action']){ case "getrooms": echo getRooms($db); break; case "getmodes": echo getModes($_POST['room'], $_POST['device'], $db); break; case "setmodes": echo setModes($_POST['room'], $_POST['device'], $_POST['zustand'], $db); break; case "runscene": echo runScene($_POST['room'], $_POST['name'], $db); break; case "createscene": echo createScene($_POST['devices'], $_POST['rooms'], $_POST['types'], $_POST['values'], $_POST['conditions'], $_POST['room'], $_POST['name'], $db); break; case "getscenes": echo getScenes($_POST['room'], $db); break; case "getsysteminfo": echo getSystemInfo(); break; case "getsensordata": echo getSensorData($_POST['room'], $_POST['value'], $_POST['showeinheit'], $db); break; //Dieser Punkt wurde hinzugefügt case "getroomdata": echo getRoomData($_POST['room'], $db); break; } } function validateUser($username, $password, $db){ //wird noch implementiert return true; } ?>
Falls du Fragen oder Probleme hast, kannst du mir gerne einen Kommentar hinterlassen.