10.03.2017
<?php
//Der Parameter $type wurde hinzugefügt
function setModes($room, $type, $device, $zustand, $db){
if(!hasPermission($room, $db)){
return "nopermission";
}
//Ein switch-Block für verschiedene Gerätetypen wurde erstellt
switch($type){
case "Funksteckdose":
//Die Zeilen 14-29 wurden dem Fall "Funksteckdose" zugeordnet
//Hauscode und Steckdosennummer aus Datenbank laden
$query = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE DEVICE == :device");
$query->execute(array('device' => $device));
//Abfrageergebnisse speichern
if($result = $query->fetch(PDO::FETCH_ASSOC)){
$hauscode = $result['HAUSCODE'];
$steckdosennummer = $result['STECKDOSENNUMMER'];
}
//Schaltbefehl für Steckdosen
shell_exec("/usr/local/bin/send ".$hauscode." ".$steckdosennummer." ".$zustand);
//Status der geschalteten Steckdose aktualisieren
$query = $db->prepare("UPDATE 'funksteckdosen' SET 'ZUSTAND' = :zustand WHERE DEVICE == :device");
$query->execute(array('zustand' => $zustand, 'device' => $device));
break;
default:
return "nosuchtype";
}
//Rückgabe
return "ok";
}
?>
<?php
//Der Parameter $type wurde hinzugefügt
function getModes($room, $type, $device, $db){
if(!hasPermission($room, $db)){
return "nopermission";
}
if($device==""){
//Funksteckdosen laden
$results = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE ROOM == :room");
$results->execute(array('room' => $room));
$modi = array();
foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
$mode_item = array('device' => $row['DEVICE'], 'mode' => $row['ZUSTAND'],
'icon' => $row['ICON'], 'name' => $row['NAME']);
array_push($modi, $mode_item);
}
//Weitere Gerätetypen laden
header('Content-type: application/json');
return json_encode(array('modi' => $modi));
}
else{
//Ein switch-Block für die einzelnen Gerätetypen wurde erstellt
switch($type){
case "Funksteckdose":
//Die Zeilen 33-39 wurden dem Fall für den Gerätetypen "Funksteckdose" zugeordnet
$results = $db->prepare("SELECT * FROM 'funksteckdosen' WHERE DEVICE == :device");
$results->execute(array('device' => $device));
foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
return $row['ZUSTAND'];
}
break;
//Weitere Cases
default:
return "nosuchtype";
}
}
}
?>
<?php
function getRoomData($room, $db){
if(!hasPermission($room, $db)){
return "nopermission";
}
$roomdata = array();
//Diese Zeile wrde hinzugefügt
$types = array("Funksteckdose");
//Die Zeilen 16-28 wurden in eine foreach-Schleife gepackt
foreach($types as $type){
//Die Parameter wurden angepasst
$switchdata = json_decode(getModes($room, $type, "", $db), true);
foreach($switchdata['modi'] as $switch){
if($switch['mode'] === "1"){
$mode = true;
}
else{
$mode = false;
}
//Die Werte des Arrays wurden angepasst
array_push($roomdata, array('name' => $switch['name'], 'device' => $switch['device'], 'device_type' => $type,
'icon' => $switch['icon'], 'type' => "switch", 'value' => ($mode) ? 'true' : 'false'));
}
}
//Die Parameter wurden angepasst
$sensordata = json_decode(getSensorData($room, "", "", "", $db), true);
foreach($sensordata['values'][0]['value_array'] as $sensor){
//Die Werte des Arrays wurden angepasst
array_push($roomdata, array('name' => $sensor['shortform'], 'device' => $sensor['id'],
'icon' => $sensor['icon'], 'type' => "value", 'device_type' => $sensor['device_type'], '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));
}
?>
<?php
//Datenbankverbindung herstellen
$SQLITEdb = "database/data.sqlite";
$db = new PDO("sqlite:".$SQLITEdb);
//Funksteckdosen
include "getModes.php";
include "setModes.php";
//Andere
include "getRooms.php";
include "getSensorData.php";
include "getSystemInfo.php";
include "getRoomData.php";
include "getGraphData.php";
include "events.php";
include "permissions.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 "getevents":
echo getEvents($_POST['username'], $_POST['type'], $_POST['limit'], $_POST['offset'], $db);
break;
case "geteventtypes":
echo getEventTypes($db);
break;
case "addevent":
echo addEvent($_POST['type'], $_POST['text'], $db);
break;
case "getunseenevents":
echo getUnseenEvents($_POST['username'], $db);
break;
case "getpermissions":
echo getPermissions($_POST['user'], $db);
break;
case "setpermissions":
echo setPermissions($_POST['user'], $_POST['permissions'], $db);
break;
case "getgraphdata":
echo getGraphData($_POST['type'], $_POST['id'], $_POST['von'], $_POST['bis'], $db);
break;
case "getroomdata":
echo getRoomData($_POST['room'], $db);
break;
case "getmodes":
//Hier wurden die Parameter angepasst
echo getModes($_POST['room'], $_POST['type'], $_POST['device'], $db);
break;
case "setmodes":
//Hier wurden auch die Parameter angepasst
echo setModes($_POST['room'], $_POST['type'], $_POST['device'], $_POST['zustand'], $db);
break;
case "getsensordata":
echo getSensorData($_POST['room'], $_POST['type'], $_POST['id'], $_POST['showeinheit'], $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;
}
}
function validateUser($username, $password, $db){
//wird noch implementiert
return true;
}
function hasPermission($action, $db){
$permissions = getPermissions($_POST['username'], $db);
$permissions = json_decode($permissions, true)['permissions'];
return (in_array($action, $permissions) || in_array("admin", $permissions));
}
?>
<?php
function runScene($room, $scene, $db){
//Diese Zeilen wurden hinzugefügt
if(!hasPermission($room, $db) && $room !== "NONE"){
continue;
}
//Szenen aus Datenbank laden
$results = $db->prepare("SELECT * FROM 'SCENES' WHERE ROOM == :room AND NAME == :scene");
$results->execute(array('room' => $room, 'scene' => $scene));
foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
$array = json_decode($row['ACTIONS'], true);
foreach($array['actions'] as $action){
//Wenn Bedingung erfüllt ist oder keine Bedingung angegeben, führe Befehl aus
if($action['if']==null || conditionTrue($action['if'])){
//Verarbeitung der Aktion anhand des Aktionstyps (Schalter, Heizung, etc.)
switch($action['type']){
case 'switch':
//Hier wurden Parameter angepasst
setModes($action['location'], $action['type'], $action['device'], $action['value'], $db);
break;
case 'heizung':
//Heizungssteuerung wird noch implementiert
break;
}
}
}
}
return "ok";
}
//Prüft die übergebene Bedingung auf Wahrheit und gibt dementsprechend true/false zurück
function conditionTrue($condition){
switch($condition['type']){
//Sensorwert abfragen
case 'sensor':
$value = getData($condition['room'], $condition['sensorart'], '', $db);
break;
//Schalter abfragen
case 'switch':
//Hier wurden Parameter angepasst
$value = getModes($condition['room'], $condition['type'], $condition['device'], $db);
break;
}
//vergleicht den abgefragten Wert mit dem übergebenen Wert
switch($condition['comparator']){
case '<':
return ($value < $condition['value']);
case '<=':
case '=<':
return ($value <= $condition['value']);
case '>':
return ($value > $condition['value']);
case '>=':
case '=>':
return ($value >= $condition['value']);
case '==':
case '=':
return ($value == $condition['value']);
default:
return false;
}
}
?>
Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!