Skip to content

Commit

Permalink
Merge pull request #313 from tarasfrompir/master
Browse files Browse the repository at this point in the history
Добавлена поддержка устройств Magichome
  • Loading branch information
T-REX-XP committed Sep 30, 2018
2 parents 3113b99 + ae87d59 commit cfcf0df
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 10 deletions.
46 changes: 42 additions & 4 deletions modules/ssdp_finder/3rddevice_devices_scan.inc.php
Expand Up @@ -59,9 +59,47 @@ function Scan_3rddevice()
foreach($everything as $deviceInfo)
{

// если устройство mag250
DebMes ($deviceInfo);
if ($deviceInfo['MAGaddres'])
// если устройство magik home and clones
//DebMes ($deviceInfo);
if ($deviceInfo['MHip'])
{
$control_url = $deviceInfo['MHip'];

// проверяем на наличие в базе для запрета вывода
$uuid = $deviceInfo['MHMAC'];
$existed = SQLSelectOne("SELECT * FROM $table_name WHERE UUID='" . $uuid . "'");

// need for chek device type
$device_type = 'Magichome'; //DeviceType
$services = 'MagicHome and Co WIFI RGB controllers '; //DeviceServices
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM project_modules WHERE NAME LIKE '" . $modules['Magichome'] . "'");

// получаем логотип на устройство
$logo = getDefImg($control_url, $device_type);

if (!array_search_result($result, 'UUID', $uuid) && !is_null($uuid) && !($existed))
{
$result[] = [
"ID" => $existed["ID"], //existed id Majordomo
"TITLE" => $deviceInfo['MHname'], //friendly name
"ADDRESS" => $control_url, //presentation url (web UI of device),//presentation url (web UI of device)
"UUID" => $uuid,
"LOGO" => $logo, //Logo
"DESCRIPTION" => 'RGB WIFI dimmer', //description get from xml or field "server"
"TYPE" => $device_type, //DeviceType
"SERIAL" => $deviceInfo['MHMAC'], //serialnumber
"MANUFACTURERURL" => 'China controllers', //manufacturer url
"SERVICES" => $services, //list services of device
"CONTROLADDRESS" => $control_url, //list services of device
"EXTENDED_MODULES" => ext_search_modules($services), // проверка на наличие модуля
"MODULE_INSTALLED" => $mod_cheked, //chek the installed module
"EXTENDED_SIMPLEDEVICE" => check_seample_device($device_type) , //chek the simple device extended
];
$_SESSION[$uuid] = $logo;
}
}
else if ($deviceInfo['MAGaddres'])
{
$control_url = $deviceInfo['MAGaddres'];

Expand All @@ -73,7 +111,7 @@ function Scan_3rddevice()
$device_type = 'MagXXXdevice'; //DeviceType
$services = 'STB DeviceServices'; //DeviceServices
// проверяем на наличие модуля в системе
$mod_cheked = SQLSelectOne("SELECT * FROM project_modules WHERE NAME LIKE '" . $modules['YeelightSmartBulb'] . "'");
$mod_cheked = SQLSelectOne("SELECT * FROM project_modules WHERE NAME LIKE '" . $modules['STB DeviceServices'] . "'");

// получаем логотип на устройство
$logo = getDefImg($control_url, $device_type);
Expand Down
36 changes: 30 additions & 6 deletions modules/ssdp_finder/upnp/vendor/jalder/upnp/src/Core.php
Expand Up @@ -13,7 +13,7 @@ public function __construct()
//$this->user_agent = 'Xbox';
}

public function search($st = 'ssdp:all', $mx = 2, $man = 'ssdp:discover', $from = null, $port = null, $sockTimout = '2')
public function search($st = 'ssdp:all', $mx = 2, $man = 'ssdp:discover', $from = null, $port = null, $sockTimout = '1')
{
//create the socket
$socket = socket_create(AF_INET, SOCK_DGRAM, 0);
Expand Down Expand Up @@ -95,8 +95,15 @@ public function search_3rddevice($st = 'ssdp:all', $mx = 2, $man = 'ssdp:discove
echo "socket_read() failed: " . socket_strerror(socket_last_error()) . "\n";
}
if(!is_null($buf)){
$data = $this->parseSearchResponse($buf);
$response[$data['usn']] = $data;
//если это MagicHome и емы подобные то парсим этим путем
if ((preg_match("/[a-fA-F0-9]{12}/", $buf, $output_array))) {
$data = $this->parseMagicHome($buf);
$response[$data['usn']] = $data;
} else {
// обычный парсинг строки
$data = $this->parseSearchResponse($buf);
$response[$data['usn']] = $data;
}
}
} while(!is_null($buf));

Expand All @@ -111,7 +118,7 @@ public function search_3rddevice($st = 'ssdp:all', $mx = 2, $man = 'ssdp:discove
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_bind($sock, 0, 6777);
socket_sendto($sock, $post_data, strlen($post_data) , 0, '239.255.255.250', 6000);
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array( "sec" => 2, "usec" => 100));
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array( "sec" => 1, "usec" => 10));
do
{
$buf = null;
Expand All @@ -127,8 +134,25 @@ public function search_3rddevice($st = 'ssdp:all', $mx = 2, $man = 'ssdp:discove

return $response;
}

private function parsemag250($response, $ip)
// парсинг Магикхом и их клонов
private function parseMagicHome($response)
{
//var_dump($response);
$messages = explode(",", $response);
$parsedResponse = array();
foreach( $messages as $row ) {
if(filter_var($row, FILTER_VALIDATE_IP)){
$parsedResponse['MHip'] = $row;
} else if (strlen($row)==12 AND stristr($row, '.') === FALSE){
$parsedResponse['MHMAC'] = $row;
} else {
$parsedResponse['MHname'] = $row;
}
}
return $parsedResponse;
}
// парсинг маг250 и их клонов
private function parsemag250($response, $ip)
{
//var_dump($response);
$messages = explode(",", $response);
Expand Down
Binary file added templates/ssdp_finder/img/Magichome.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit cfcf0df

Please sign in to comment.