Merge branch 'master' of https://git.steelants.cz/JonatanRek/PHP_SMART_HOME_V3
This commit is contained in:
commit
b5024351c5
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@ _nemazat/index.html
|
|||||||
_nemazat/css/main.css.map
|
_nemazat/css/main.css.map
|
||||||
_nemazat/css/main.css
|
_nemazat/css/main.css
|
||||||
_nemazat/css/font-awesome.min.css
|
_nemazat/css/font-awesome.min.css
|
||||||
|
logs/*.log
|
68
api.php
68
api.php
@ -11,41 +11,55 @@ foreach (["class", "views"] as $dir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Log
|
||||||
|
$logManager = new LogManager();
|
||||||
|
|
||||||
//DB Conector
|
//DB Conector
|
||||||
Db::connect (DBHOST, DBUSER, DBPASS, DBNAME);
|
Db::connect (DBHOST, DBUSER, DBPASS, DBNAME);
|
||||||
|
|
||||||
//Filtrování IP adress
|
|
||||||
/*if (DEBUGMOD != 1) {
|
|
||||||
if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) {
|
|
||||||
echo json_encode(array(
|
|
||||||
'state' => 'unsuccess',
|
|
||||||
'errorMSG' => "Using API from your IP insn´t alowed!",
|
|
||||||
));
|
|
||||||
header("HTTP/1.1 401 Unauthorized");
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Read API data
|
//Read API data
|
||||||
$json = file_get_contents('php://input');
|
$json = file_get_contents('php://input');
|
||||||
$obj = json_decode($json, true);
|
$obj = json_decode($json, true);
|
||||||
|
|
||||||
|
|
||||||
|
//zabespecit proti Ddosu
|
||||||
if (isset($obj['user']) && $obj['user'] != ''){
|
if (isset($obj['user']) && $obj['user'] != ''){
|
||||||
//user at home
|
//user at home
|
||||||
$user = UserManager::getUser($obj['user']);
|
$user = UserManager::getUser($obj['user']);
|
||||||
$userId = $user['user_id'];
|
$userId = $user['user_id'];
|
||||||
UserManager::atHome($userId, $obj['location']);
|
$keyWords = ['entered', 'connected', 'connected to'];
|
||||||
|
UserManager::atHome($userId, $obj['atHome']);
|
||||||
|
echo 'saved';
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Filtrování IP adress
|
||||||
|
if (DEBUGMOD != 1) {
|
||||||
|
if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) {
|
||||||
|
echo json_encode(array(
|
||||||
|
'state' => 'unsuccess',
|
||||||
|
'errorMSG' => "Using API from your IP insnt alowed!",
|
||||||
|
));
|
||||||
|
header("HTTP/1.1 401 Unauthorized");
|
||||||
|
$logManager->write("[API] acces denied from " . $_SERVER['REMOTE_ADDR'], LogRecordType::WARNING);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//automationExecution
|
//automationExecution
|
||||||
|
try {
|
||||||
AutomationManager::executeAll();
|
AutomationManager::executeAll();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$logManager->write("[Automation] Something happen during automation execution", LogRecordType::ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
//Record Cleaning
|
//Record Cleaning
|
||||||
|
try {
|
||||||
RecordManager::clean(RECORDTIMOUT);
|
RecordManager::clean(RECORDTIMOUT);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$logManager->write("[Record] cleaning record older that" . RECORDTIMOUT , LogRecordType::ERROR);
|
||||||
|
|
||||||
|
}
|
||||||
//Variables
|
//Variables
|
||||||
$token = $obj['token'];
|
$token = $obj['token'];
|
||||||
$values = null;
|
$values = null;
|
||||||
@ -72,6 +86,7 @@ if (!DeviceManager::registeret($token)) {
|
|||||||
'state' => 'unsuccess',
|
'state' => 'unsuccess',
|
||||||
'errorMSG' => "Device not registeret",
|
'errorMSG' => "Device not registeret",
|
||||||
));
|
));
|
||||||
|
$logManager->write("[API] Registering Device", LogRecordType::INFO);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,16 +99,6 @@ if (!DeviceManager::approved($token)) {
|
|||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DeviceManager::approved($token)) {
|
|
||||||
header("HTTP/1.1 401 Unauthorized");
|
|
||||||
echo json_encode(array(
|
|
||||||
'state' => 'unsuccess',
|
|
||||||
'errorMSG' => "Unaproved Device",
|
|
||||||
));
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Subdevices first data!
|
// Subdevices first data!
|
||||||
if ($values != null || $values != "") {
|
if ($values != null || $values != "") {
|
||||||
|
|
||||||
@ -105,6 +110,7 @@ if ($values != null || $values != "") {
|
|||||||
SubDeviceManager::create($deviceId, $key, UNITS[$key]);
|
SubDeviceManager::create($deviceId, $key, UNITS[$key]);
|
||||||
}
|
}
|
||||||
RecordManager::create($deviceId, $key, round($value['value'],2));
|
RecordManager::create($deviceId, $key, round($value['value'],2));
|
||||||
|
$logManager->write("[API] Device_ID " . $deviceId . " writed value " . $key . $value['value'], LogRecordType::INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
$hostname = strtolower($device['name']);
|
$hostname = strtolower($device['name']);
|
||||||
@ -117,7 +123,6 @@ if ($values != null || $values != "") {
|
|||||||
'state' => 'succes',
|
'state' => 'succes',
|
||||||
));
|
));
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
die();
|
|
||||||
} else {
|
} else {
|
||||||
//Vypis
|
//Vypis
|
||||||
//TODO: doděla uložení výpisu jinými slovy zda li byl comman vykonán
|
//TODO: doděla uložení výpisu jinými slovy zda li byl comman vykonán
|
||||||
@ -126,15 +131,17 @@ if ($values != null || $values != "") {
|
|||||||
|
|
||||||
if (count(SubDeviceManager::getAllSubDevices($deviceId)) == 0) {
|
if (count(SubDeviceManager::getAllSubDevices($deviceId)) == 0) {
|
||||||
SubDeviceManager::create($deviceId, 'on/off', UNITS[$key]);
|
SubDeviceManager::create($deviceId, 'on/off', UNITS[$key]);
|
||||||
RecordManager::create($deviceId, 'on/off', 0);
|
//RecordManager::create($deviceId, 'on/off', 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
$subDeviceId = SubDeviceManager::getAllSubDevices($deviceId)[0]['subdevice_id'];
|
$subDeviceId = SubDeviceManager::getAllSubDevices($deviceId)[0]['subdevice_id'];
|
||||||
|
|
||||||
$subDeviceLastReord = RecordManager::getLastRecord($subDeviceId);
|
$subDeviceLastReord = RecordManager::getLastRecord($subDeviceId);
|
||||||
$subDeviceLastReordValue = $subDeviceLastReord['value'];
|
$subDeviceLastReordValue = $subDeviceLastReord['value'];
|
||||||
|
|
||||||
|
if ($subDeviceLastReord['execuded'] == 0){
|
||||||
|
$logManager->write("[API] subDevice id ".$subDeviceId . " executed comand with value " .$subDeviceLastReordValue . " record id " . $subDeviceLastReord['record_id'] . " executed " . $subDeviceLastReord['execuded']);
|
||||||
RecordManager::setExecuted($subDeviceLastReord['record_id']);
|
RecordManager::setExecuted($subDeviceLastReord['record_id']);
|
||||||
|
}
|
||||||
|
|
||||||
echo json_encode(array(
|
echo json_encode(array(
|
||||||
'device' => [
|
'device' => [
|
||||||
@ -145,5 +152,8 @@ if ($values != null || $values != "") {
|
|||||||
'value' => $subDeviceLastReordValue
|
'value' => $subDeviceLastReordValue
|
||||||
));
|
));
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
die();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($logManager);
|
||||||
|
Db::disconect();
|
||||||
|
die();
|
||||||
|
@ -73,13 +73,40 @@ class AutomationManager{
|
|||||||
$restart = true;
|
$restart = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if ($onValue['type'] == 'outHome') {
|
||||||
|
|
||||||
|
} else if ($onValue['type'] == 'inHome') {
|
||||||
|
|
||||||
|
} else if ($onValue['type'] == 'noOneHome') {
|
||||||
|
$users = UserManager::getUsers();
|
||||||
|
$membersHome = 0;
|
||||||
|
foreach ($users as $key => $user) {
|
||||||
|
if ($user['at_home'] == 'true'){
|
||||||
|
$membersHome++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($onValue == 'outHome') {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if ($membersHome == 0 && $automation['executed'] == 0) {
|
||||||
if ($onValue == 'inHome') {
|
$run = true;
|
||||||
|
} else if ($membersHome > 0 && $automation['executed'] == 1){
|
||||||
|
$restart = true;
|
||||||
|
}
|
||||||
|
} else if ($onValue['type'] == 'someOneHome') {
|
||||||
|
$users = UserManager::getUsers();
|
||||||
|
$membersHome = 0;
|
||||||
|
foreach ($users as $key => $user) {
|
||||||
|
if ($user['at_home'] == 'true'){
|
||||||
|
$membersHome++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($membersHome == 0 && $automation['executed'] == 1) {
|
||||||
|
$restart = true;
|
||||||
|
} else if ($membersHome > 0 && $automation['executed'] == 0){
|
||||||
|
$run = true;
|
||||||
|
}
|
||||||
|
/*echo "Someone Home". '<br>';
|
||||||
|
echo "at home" . $membersHome. '<br>';
|
||||||
|
echo "run" . $run. '<br>';
|
||||||
|
echo "restart" . $restart. '<br>';*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,8 +116,10 @@ class AutomationManager{
|
|||||||
foreach ($sceneDoArray as $deviceId => $deviceState) {
|
foreach ($sceneDoArray as $deviceId => $deviceState) {
|
||||||
RecordManager::create($deviceId, 'on/off', $deviceState);
|
RecordManager::create($deviceId, 'on/off', $deviceState);
|
||||||
}
|
}
|
||||||
|
$logManager->write("[AUTOMATIONS] automation id ". $automation['automation_id'] . " was executed");
|
||||||
Db::edit('automation', array('executed' => 1), 'WHERE automation_id = ?', array($automation['automation_id']));
|
Db::edit('automation', array('executed' => 1), 'WHERE automation_id = ?', array($automation['automation_id']));
|
||||||
} else if ($restart) {
|
} else if ($restart) {
|
||||||
|
$logManager->write("[AUTOMATIONS] automation id ". $automation['automation_id'] . " was restarted");
|
||||||
Db::edit('automation', array('executed' => 0), 'WHERE automation_id = ?', array($automation['automation_id']));
|
Db::edit('automation', array('executed' => 0), 'WHERE automation_id = ?', array($automation['automation_id']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,10 @@ class Db{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function disconect(){
|
||||||
|
self::$join = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static function loadOne ($sql, $values = array (), $numberKey = false) {
|
public static function loadOne ($sql, $values = array (), $numberKey = false) {
|
||||||
$answer = self::$join->prepare ($sql);
|
$answer = self::$join->prepare ($sql);
|
||||||
$answer->execute ($values);
|
$answer->execute ($values);
|
||||||
|
38
class/LogManager.php
Normal file
38
class/LogManager.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LogRecordType{
|
||||||
|
const WARNING = 'warning';
|
||||||
|
const ERROR = 'error';
|
||||||
|
const INFO = 'info';
|
||||||
|
}
|
||||||
|
|
||||||
|
class LogManager
|
||||||
|
{
|
||||||
|
|
||||||
|
private $logFile;
|
||||||
|
function __construct($fileName = "")
|
||||||
|
{
|
||||||
|
if ($fileName == ""){
|
||||||
|
$fileName = './logs/'. date("Y-m-d").'.log';
|
||||||
|
}
|
||||||
|
if(!is_dir("./logs/"))
|
||||||
|
{
|
||||||
|
mkdir("./logs/");
|
||||||
|
}
|
||||||
|
$this->logFile = fopen($fileName, "a") or die("Unable to open file!");
|
||||||
|
}
|
||||||
|
|
||||||
|
function write($value, $type = LogRecordType::ERROR){
|
||||||
|
$record = "[".date("H:m:s")."][".$type."]" .$value . "\n";
|
||||||
|
fwrite($this->logFile, $record);
|
||||||
|
}
|
||||||
|
|
||||||
|
function __destruct(){
|
||||||
|
if (isset($this->logFile)) {
|
||||||
|
fclose($this->logFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -63,8 +63,12 @@ $lang = [
|
|||||||
'w_icon' => 'Ikona',
|
'w_icon' => 'Ikona',
|
||||||
'w_no' => 'žádná',
|
'w_no' => 'žádná',
|
||||||
'w_noOne' => 'Nikdo',
|
'w_noOne' => 'Nikdo',
|
||||||
|
'w_someOne' => 'Někdo',
|
||||||
'w_room' => 'Místnost',
|
'w_room' => 'Místnost',
|
||||||
'w_moduls' => 'Moduly',
|
'w_moduls' => 'Moduly',
|
||||||
|
'w_home' => 'Doma',
|
||||||
|
'w_neni' => 'Není',
|
||||||
|
'w_is' => 'je',
|
||||||
|
|
||||||
//example
|
//example
|
||||||
'' => '',
|
'' => '',
|
||||||
|
@ -63,8 +63,12 @@ $lang = [
|
|||||||
'w_icon' => 'Icon',
|
'w_icon' => 'Icon',
|
||||||
'w_no' => 'no',
|
'w_no' => 'no',
|
||||||
'w_noOne' => 'noone',
|
'w_noOne' => 'noone',
|
||||||
|
'w_someOne' => 'Some',
|
||||||
'w_room' => 'Room',
|
'w_room' => 'Room',
|
||||||
'w_moduls' => 'Moduls',
|
'w_moduls' => 'Moduls',
|
||||||
|
'w_home' => 'Home',
|
||||||
|
'w_neni' => 'At',
|
||||||
|
'w_is' => 'is',
|
||||||
|
|
||||||
//example
|
//example
|
||||||
'' => '',
|
'' => '',
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
<i class="fa fa-times"></i>
|
<i class="fa fa-times"></i>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="mb-4">Modal bitch</h4>
|
<h4 class="mb-4">Modal bitch</h4>
|
||||||
<form method="post" action="controls/dashboard.php">
|
<form method="post">
|
||||||
<div class="field px-2">
|
<div class="field px-2">
|
||||||
<div class="label">Zvolte zařízení:</div>
|
<div class="label">Zvolte zařízení:</div>
|
||||||
<select class="input" name="devices[]" multiple>
|
<select class="input" name="devices[]" multiple>
|
||||||
|
@ -35,10 +35,8 @@
|
|||||||
<div class="col-md-9 main-body">
|
<div class="col-md-9 main-body">
|
||||||
<div class="label m-1">
|
<div class="label m-1">
|
||||||
doma jsou:
|
doma jsou:
|
||||||
<?php
|
<?php foreach ($USERS as $user) {
|
||||||
$keyWords = ['entered', 'connected', 'connected to'];
|
if ($user['at_home'] == 'true') {
|
||||||
foreach ($USERS as $user) {
|
|
||||||
if (in_array(trim($user['at_home']), $keyWords)) {
|
|
||||||
echo $user['username'] . ' ';
|
echo $user['username'] . ' ';
|
||||||
}
|
}
|
||||||
} ?>
|
} ?>
|
||||||
|
@ -33,7 +33,7 @@ function ajaxPost(path, params, self, reload = false) {
|
|||||||
}
|
}
|
||||||
console.log(msg);
|
console.log(msg);
|
||||||
if (reload){
|
if (reload){
|
||||||
//location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function (request, status, error) {
|
error: function (request, status, error) {
|
||||||
|
@ -182,36 +182,36 @@ $( '[name="room"]' ).change(function (e) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var windowLoc = $(location).attr('pathname');
|
// var windowLoc = $(location).attr('pathname');
|
||||||
windowLoc = windowLoc.substring(windowLoc.lastIndexOf("/"));
|
// windowLoc = windowLoc.substring(windowLoc.lastIndexOf("/"));
|
||||||
console.log();
|
// console.log();
|
||||||
if (windowLoc == "/") {
|
// if (windowLoc == "/") {
|
||||||
var autoUpdate = setInterval(function(){
|
// var autoUpdate = setInterval(function(){
|
||||||
$.ajax({
|
// $.ajax({
|
||||||
url: 'ajax',
|
// url: 'ajax',
|
||||||
type: 'POST',
|
// type: 'POST',
|
||||||
dataType: 'json',
|
// dataType: 'json',
|
||||||
data: {
|
// data: {
|
||||||
"action": 'getState'
|
// "action": 'getState'
|
||||||
},
|
// },
|
||||||
success: function(data){
|
// success: function(data){
|
||||||
// console.log('DATA: ', data);
|
// // console.log('DATA: ', data);
|
||||||
for (const key in data) {
|
// for (const key in data) {
|
||||||
if (data.hasOwnProperty(key)) {
|
// if (data.hasOwnProperty(key)) {
|
||||||
const device = data[key];
|
// const device = data[key];
|
||||||
$('[data-sub-device-id="'+key+'"]')
|
// $('[data-sub-device-id="'+key+'"]')
|
||||||
.find('.device-button-value')
|
// .find('.device-button-value')
|
||||||
.text(device['value'])
|
// .text(device['value'])
|
||||||
.attr('title',device['time'])
|
// .attr('title',device['time'])
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
error: function (request, status, error) {
|
// error: function (request, status, error) {
|
||||||
console.log("ERROR ajaxChart():", request, error);
|
// console.log("ERROR ajaxChart():", request, error);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
},2000);
|
// },2000);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,10 @@
|
|||||||
<option value="inHome"><?php echo $LANG['l_inHome']?></option>
|
<option value="inHome"><?php echo $LANG['l_inHome']?></option>
|
||||||
<option value="outHome"><?php echo $LANG['l_outHome']?></option>
|
<option value="outHome"><?php echo $LANG['l_outHome']?></option>
|
||||||
<option value="time"><?php echo $LANG['l_time']?></option>
|
<option value="time"><?php echo $LANG['l_time']?></option>
|
||||||
<option value="atDeviceValue"><?php echo $LANG['l_deviceValue']?></option>
|
<option value="noOneHome"><?php echo $LANG['l_time']?></option>
|
||||||
|
<option value="atDeviceValue"><?php echo $LANG['l_deviceValue'];?></option>
|
||||||
|
<option value="noOneHome"><?php echo $LANG['w_noOne'] . ' ' . $LANG['w_neni'] . ' ' . $LANG['w_home'];?></option>
|
||||||
|
<option value="someOneHome"><?php echo $LANG['w_someOne'] . ' ' . $LANG['w_is'] . ' ' . $LANG['w_home'];?></option>
|
||||||
</select>
|
</select>
|
||||||
<input class="input" type="time" name="atTime" id="atTime" disabled/>
|
<input class="input" type="time" name="atTime" id="atTime" disabled/>
|
||||||
<select class="input" name="atDeviceValue" id="atDeviceValue" disabled>
|
<select class="input" name="atDeviceValue" id="atDeviceValue" disabled>
|
||||||
|
@ -30,6 +30,7 @@ class Ajax extends Template
|
|||||||
$subDeviceData = SubDeviceManager::getSubDevice($subDeviceId);
|
$subDeviceData = SubDeviceManager::getSubDevice($subDeviceId);
|
||||||
$deviceId = SubDeviceManager::getSubDeviceMaster($subDeviceId)['device_id'];
|
$deviceId = SubDeviceManager::getSubDeviceMaster($subDeviceId)['device_id'];
|
||||||
if ($subDeviceData['type'] == 'on/off'){
|
if ($subDeviceData['type'] == 'on/off'){
|
||||||
|
//TODO: Pridelat kontrolu změnit stav pouze pokud se poslední [executed] stav != novému
|
||||||
if (RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value'] == 0){
|
if (RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value'] == 0){
|
||||||
RecordManager::create($deviceId, 'on/off', 1);
|
RecordManager::create($deviceId, 'on/off', 1);
|
||||||
echo 'ON';
|
echo 'ON';
|
||||||
|
@ -20,9 +20,9 @@ class Automation extends Template
|
|||||||
$automationsData = AutomationManager::getAll();
|
$automationsData = AutomationManager::getAll();
|
||||||
foreach ($automationsData as $automationKey => $automationData) {
|
foreach ($automationsData as $automationKey => $automationData) {
|
||||||
$doSomething = [];
|
$doSomething = [];
|
||||||
foreach (json_decode($automationData['do_something']) as $subdeviceId => $subDeviceState) {
|
foreach (json_decode($automationData['do_something']) as $deviceId => $subDeviceState) {
|
||||||
$subDeviceMasterDeviceData = SubDeviceManager::getSubDeviceMaster($subdeviceId);
|
$subDeviceMasterDeviceData = DeviceManager::getDeviceById($deviceId);
|
||||||
$doSomething[$subdeviceId] = [
|
$doSomething[$deviceId] = [
|
||||||
'name' => $subDeviceMasterDeviceData['name'],
|
'name' => $subDeviceMasterDeviceData['name'],
|
||||||
'state' => $subDeviceState,
|
'state' => $subDeviceState,
|
||||||
];
|
];
|
||||||
@ -43,7 +43,7 @@ class Automation extends Template
|
|||||||
$allSubDevicesData = SubDeviceManager::getAllSubDevices($deviceValue['device_id']);
|
$allSubDevicesData = SubDeviceManager::getAllSubDevices($deviceValue['device_id']);
|
||||||
foreach ($allSubDevicesData as $subDeviceKey => $subDeviceValue) {
|
foreach ($allSubDevicesData as $subDeviceKey => $subDeviceValue) {
|
||||||
$approvedSubDevices[$subDeviceValue['subdevice_id']] = [
|
$approvedSubDevices[$subDeviceValue['subdevice_id']] = [
|
||||||
'name' => $allDevicesData[$deviceKey]['name'],
|
'name' => $allDevicesData[$deviceKey]['name'] . $allDevicesData[$deviceKey]['device_id'],
|
||||||
'type' => $subDeviceValue['type'],
|
'type' => $subDeviceValue['type'],
|
||||||
'masterDevice' => $subDeviceValue['device_id'],
|
'masterDevice' => $subDeviceValue['device_id'],
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user