Permalink
Browse files

Merge pull request #268 from tarasfrompir/master

Проверка на пустой массив ответа
  • Loading branch information...
T-REX-XP committed Sep 7, 2018
2 parents 9cb8750 + 3a81d0b commit 5ed39a2af7d5db196bc05d08bbe7b658c8f30daf
Showing with 101 additions and 109 deletions.
  1. +101 −109 modules/ssdp_finder/ssdp_devices_scan.inc.php
@@ -41,124 +41,112 @@ function Scan(){
$everything = $upnp->discover();
$result = [];
$table_name='ssdp_devices';
// если массив не пустой то разбираем найденные устройства
if ($everything) {
// подключение массива существующих модулей для найденных устройств
include_once(DIR_MODULES.'ssdp_finder/extended_modules.php');
// перебираем по очереди все найденные устройства
foreach ($everything as $deviceInfo) {
// если устройство yeelight
if (substr($deviceInfo['location'], 0, 9) == "yeelight:") {
$control_url = str_ireplace("yeelight:", "http:", $deviceInfo['location']);
$logo= "/templates/ssdp_finder/img/YeelightSmartBulb.png";
// проверяем на наличие в базе для запрета вывода
$uuid = $deviceInfo['location'];
$existed = SQLSelectOne("SELECT * FROM $table_name WHERE UUID='".$uuid."'");
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM plugins WHERE MODULE_NAME LIKE '".$modules['YeelightSmartBulb']."'");
if (!array_search_result($result, 'UUID', $uuid) && !is_null($uuid) && !($existed)) {
$result[] = [
"ID" => $existed["ID"], //existed id Majordomo
"TITLE" => 'Yeelight bulb',//friendly name
"ADDRESS" => 'https://www.yeelight.com' ,//presentation url (web UI of device),//presentation url (web UI of device)
"UUID" => $deviceInfo['location'],
"LOGO" => $logo,//Logo
"DESCRIPTION" => 'Yeelight WiFi Light', //description get from xml or field "server"
"TYPE" => 'YeelightSmartBulb',//DeviceType
"SERIAL" => 'not existed', //serialnumber
"MANUFACTURERURL" => 'https://www.yeelight.com',//manufacturer url
"UPDATED" => '',
"MODEL" => 'not existed',//model
"MODELNUMBER" => 'not existed',//modelNumber
"MANUFACTURER" => 'Yeelight',//Manufacturer
"SERVICES"=> 'RGBWSmartLight',//list services of device
"CONTROLADDRESS"=> $control_url,//list services of device
"EXTENDED_MODULES"=>$modules['YeelightSmartBulb'],// проверка на наличие модуля
"MODULE_INSTALLED"=>$mod_cheked, //chek the installed module
];
$_SESSION[$uuid] = $logo;
//session_write_close();
}
// иначе проверяем остальные устройства
} else {
// то что надо обработать в первую очередь
$device= $deviceInfo['description']['device'];
$control_url = $deviceInfo['location'];
// для начала проверяем не майкрософтовое ли это устройство
// и если да то подгружаем внутренний файл потому что он находится в ссылке на файл
// for microsoft devices
if (substr($deviceInfo['location'], 0, 9) == "Location:") {
$control_url = str_ireplace("Location:", "", $deviceInfo['location']);
libxml_use_internal_errors(true);
$xml = simplexml_load_file($control_url);
$json = json_encode($xml);
$dev = (array)json_decode($json, true);
$device= $dev['device'];
}
// получаем логотип на устройство
$logo= getDefImg($control_url,$device);
// проверяем на наличие в базе для запрета вывода
$uuid = $device["UDN"];
$existed = SQLSelectOne("SELECT * FROM $table_name WHERE UUID='".$uuid."'");
// иногда вместо serialNumber есть modelNumber
$serialnumber = $device["serialNumber"];
if (!$serialnumber){
$serialnumber = $device["modelNumber"];
}
// иногда presentationURL отсутствует
$presenturl = $device["presentationURL"];
if (!$device["presentationURL"]){
$presenturl='http://'.getIp($control_url,false);
}
// иногда modelDescription отсутствует тогда берем server
$descript = $device["modelDescription"];
if (!$device["modelDescription"]){
$descript = $deviceInfo["server"];
}
// need for chek device type
$device_type = explode(":", $device["deviceType"])[3];//DeviceType
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM plugins WHERE MODULE_NAME LIKE '".$modules[$device_type]."'");
if (!array_search_result($result, 'UUID', $uuid) && !is_null($uuid) && !($existed)) {
$result[] = [
"ID" => $existed["ID"], //existed id Majordomo
"TITLE" => $device["friendlyName"],//friendly name
"ADDRESS" => $presenturl ,//presentation url (web UI of device),//presentation url (web UI of device)
"UUID" => $uuid,
"LOGO" => $logo,//Logo
"DESCRIPTION" => $descript, //description get from xml or field "server"
"TYPE" => $device_type,//DeviceType
"SERIAL" => $serialnumber, //serialnumber
"MANUFACTURERURL" => $device["manufacturerURL"],//manufacturer url
"UPDATED" => '',
"MODEL" => $device["modelName"],//model
"MODELNUMBER" => $device["modelNumber"],//modelNumber
"MANUFACTURER" => $device["manufacturer"],//Manufacturer
"SERVICES"=> getServices($device),//list services of device
"CONTROLADDRESS"=> $control_url,//list services of device
"EXTENDED_MODULES"=>$modules[$device_type],
"MODULE_INSTALLED"=>$mod_cheked, //chek the installed module
];
$_SESSION[$uuid] = $logo;
//session_write_close();
}
$control_url = str_ireplace("yeelight:", "http:", $deviceInfo['location']);
$logo= "/templates/ssdp_finder/img/YeelightSmartBulb.png";
// проверяем на наличие в базе для запрета вывода
$uuid = $deviceInfo['location'];
$existed = SQLSelectOne("SELECT * FROM $table_name WHERE UUID='".$uuid."'");
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM plugins WHERE MODULE_NAME LIKE '".$modules['YeelightSmartBulb']."'");
if (!array_search_result($result, 'UUID', $uuid) && !is_null($uuid) && !($existed)) {
$result[] = [
"ID" => $existed["ID"], //existed id Majordomo
"TITLE" => 'Yeelight bulb',//friendly name
"ADDRESS" => 'https://www.yeelight.com' ,//presentation url (web UI of device),//presentation url (web UI of device)
"UUID" => $deviceInfo['location'],
"LOGO" => $logo,//Logo
"DESCRIPTION" => 'Yeelight WiFi Light', //description get from xml or field "server"
"TYPE" => 'YeelightSmartBulb',//DeviceType
"SERIAL" => 'not existed', //serialnumber
"MANUFACTURERURL" => 'https://www.yeelight.com',//manufacturer url
"UPDATED" => '',
"MODEL" => 'not existed',//model
"MODELNUMBER" => 'not existed',//modelNumber
"MANUFACTURER" => 'Yeelight',//Manufacturer
"SERVICES"=> 'RGBWSmartLight',//list services of device
"CONTROLADDRESS"=> $control_url,//list services of device
"EXTENDED_MODULES"=>$modules['YeelightSmartBulb'],// проверка на наличие модуля
"MODULE_INSTALLED"=>$mod_cheked, //chek the installed module
];
$_SESSION[$uuid] = $logo;
//session_write_close();
}
// иначе проверяем остальные устройства
} else {
// то что надо обработать в первую очередь
$device= $deviceInfo['description']['device'];
$control_url = $deviceInfo['location'];
// для начала проверяем не майкрософтовое ли это устройство
// и если да то подгружаем внутренний файл потому что он находится в ссылке на файл
// for microsoft devices
if (substr($deviceInfo['location'], 0, 9) == "Location:") {
$control_url = str_ireplace("Location:", "", $deviceInfo['location']);
libxml_use_internal_errors(true);
$xml = simplexml_load_file($control_url);
$json = json_encode($xml);
$dev = (array)json_decode($json, true);
$device= $dev['device'];
}
// получаем логотип на устройство
$logo= getDefImg($control_url,$device);
// проверяем на наличие в базе для запрета вывода
$uuid = $device["UDN"];
$existed = SQLSelectOne("SELECT * FROM $table_name WHERE UUID='".$uuid."'");
// иногда вместо serialNumber есть modelNumber
$serialnumber = $device["serialNumber"];
if (!$serialnumber){
$serialnumber = $device["modelNumber"];
}
// иногда presentationURL отсутствует
$presenturl = $device["presentationURL"];
if (!$device["presentationURL"]){
$presenturl='http://'.getIp($control_url,false);
}
// иногда modelDescription отсутствует тогда берем server
$descript = $device["modelDescription"];
if (!$device["modelDescription"]){
$descript = $deviceInfo["server"];
}
// need for chek device type
$device_type = explode(":", $device["deviceType"])[3];//DeviceType
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM plugins WHERE MODULE_NAME LIKE '".$modules[$device_type]."'");
if (!array_search_result($result, 'UUID', $uuid) && !is_null($uuid) && !($existed)) {
$result[] = [
"ID" => $existed["ID"], //existed id Majordomo
"TITLE" => $device["friendlyName"],//friendly name
"ADDRESS" => $presenturl ,//presentation url (web UI of device),//presentation url (web UI of device)
"UUID" => $uuid,
"LOGO" => $logo,//Logo
"DESCRIPTION" => $descript, //description get from xml or field "server"
"TYPE" => $device_type,//DeviceType
"SERIAL" => $serialnumber, //serialnumber
"MANUFACTURERURL" => $device["manufacturerURL"],//manufacturer url
"UPDATED" => '',
"MODEL" => $device["modelName"],//model
"MODELNUMBER" => $device["modelNumber"],//modelNumber
"MANUFACTURER" => $device["manufacturer"],//Manufacturer
"SERVICES"=> getServices($device),//list services of device
"CONTROLADDRESS"=> $control_url,//list services of device
"EXTENDED_MODULES"=>$modules[$device_type],
"MODULE_INSTALLED"=>$mod_cheked, //chek the installed module
];
$_SESSION[$uuid] = $logo;
//session_write_close();
}
}
}
return $result;
}
return $result;
}
@@ -207,6 +195,10 @@ function getServices($device){
array_push($result,$name);
}
}
if (!$result) {
// иногда отсутствуют SERVICES для устройств MSMD Gate тогда берем friendlyName
return $device["friendlyName"];
}
return implode(",",$result);
}
function endsWith($haystack, $needle){

0 comments on commit 5ed39a2

Please sign in to comment.