17.05.2016
http://[IP DES RASPBERRY]/database/phpliteadmin.php
<?php
function runScene($room, $scene, $db){
//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':
setModes($action['location'], $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':
$value = getModes($condition['room'], $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;
}
}
?>
<?php
function createScene($devices, $rooms, $types, $values, $conditions, $room, $name, $db){
//Prüfen, ob alle Arrays ($devices, $rooms, $types, $modes) gleich viele Elemente haben, gibt andernfalls Fehlermeldung aus
if(sizeOf($devices) < sizeOf($rooms) ||
sizeOf($rooms) < sizeOf($types) ||
sizeOf($types) < sizeOf($values) ||
sizeOf($values) < sizeOf($devices)){
exit("error");
}
$scene = array();
//Die Übergabe-Arrays in ein einziges Array zusammensetzen
for($counter = 0; $counter < sizeOf($devices); $counter++){
$action_item = array('device' => $devices[$counter], 'location' => $rooms[$counter], 'value' => $values[$counter], 'type' => $types[$counter], 'if' => $conditions[$counter]);
array_push($scene, $action_item);
}
//Array als JSON-Objekt ausgeben
header('Content-type: application/json');
$action_string = json_encode(array('actions' => $scene));
//Prüfen, ob $room leer ist, wenn ja Default-Wert setzen
if($room == ''){
$room = 'NONE';
}
//Szene in Datenbank schreiben
$statement = $db->prepare("INSERT INTO SCENES(NAME, ROOM, ACTIONS)VALUES(?,?,?)");
$statement->execute(array($name ,$room, $action_string));
return "ok";
}
?>
<?php
function getScenes($room, $db){
//Szenen aus Datenbank laden
//INFO: Es werden alle Szenen abgefragt, die entweder dem Raum des Parameters $room oder dem Raum 'NONE' zugewiesen sind
$results = $db->prepare("SELECT * FROM 'SCENES' WHERE ROOM == :room OR ROOM == 'NONE'");
$results->execute(array('room' => $room));
$scenes = array();
//Namen aller gefundenen Szenen in Array schreiben
foreach($results->fetchAll(PDO::FETCH_ASSOC) as $row){
$scene_item = array('name' => $row['NAME'], 'room' => $row['ROOM'], 'actions' => $row['ACTIONS']);
array_push($scenes, $scene_item);
}
//Array als JSON-Objekt ausgeben
header('Content-type: application/json');
return json_encode(array('scenes' => $scenes));
}
?>
Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!