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&uuml;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&uuml;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.

Über den Autor


Sascha Huber

Hallo, ich bin Sascha, der Gründer von Smarthome Blogger.

Mit einer Leidenschaft für Technologie und einem Hintergrund als Software Engineer habe ich 2016 Smarthome Blogger gegründet. Mein Ziel war es schon immer, innovative Lösungen zu entdecken, die unser Leben einfacher und intelligenter gestalten können. In meinem beruflichen Leben arbeite ich täglich mit Software und Technik, aber auch in meiner Freizeit bin ich stets auf der Suche nach neuen technischen Spielereien und Möglichkeiten, mein Zuhause zu automatisieren und zu verbessern.

Auf Smarthome Blogger teile ich mein Wissen, meine Erfahrungen und meine Begeisterung für alles rund um das Thema Smarthome.



Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!