Alle Daten eines Raumes abfragen

06.09.2016

Smarthome Server, Tutorial

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.


Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!