Страница 6 из 108

Re: Модуль - SSDPFinder

Добавлено: Вс фев 25, 2018 12:31 pm
tarasfrompir
Так а ты смотрел ссдпдевайсес это модуль с помощью котороготможна добавлять свои устройство в простые устройства..
Редактируеш девайс структуре и можешь добавлять свои устройства , которые будут отображался и в простых устройствах. А модуль финдер был упрощен для того чтобы можна было разобрался в функциях исходниках. Да и так понятнее редактировать функции.
Как пример устройство май ламп - присутствует теперь в списке. Но оноже отобразится и в простых устройствах

Re: Модуль - SSDPFinder

Добавлено: Вс фев 25, 2018 3:08 pm
T-REX-XP
tarasfrompir1 писал(а):Так а ты смотрел ссдпдевайсес это модуль с помощью котороготможна добавлять свои устройство в простые устройства..
Редактируеш девайс структуре и можешь добавлять свои устройства , которые будут отображался и в простых устройствах. А модуль финдер был упрощен для того чтобы можна было разобрался в функциях исходниках. Да и так понятнее редактировать функции.
Как пример устройство май ламп - присутствует теперь в списке. Но оноже отобразится и в простых устройствах
Да. И сейчас смотрю. Разбираюсь как добавлять свойства и от кого наследоваться. Хочу сделать сразу чтоб создавалось простое устройство а так же устройства онлайн.

Re: Модуль - SSDPFinder

Добавлено: Вс фев 25, 2018 3:48 pm
tarasfrompir
в простые устройства сразу не запхнешся - при обновлении все падет...
Присматривался долго к тому как это сделать, вот теперь решился и еще и получилось, надо конечно сделать инклуд от простых устройств , чтобы не переделывать функции после возможного обновлении модуля простых устройств, но как для старта все прилично работает...

Re: Модуль - SSDPFinder

Добавлено: Вс фев 25, 2018 4:30 pm
T-REX-XP
tarasfrompir1 писал(а):в простые устройства сразу не запхнешся - при обновлении все падет...
Присматривался долго к тому как это сделать, вот теперь решился и еще и получилось, надо конечно сделать инклуд от простых устройств , чтобы не переделывать функции после возможного обновлении модуля простых устройств, но как для старта все прилично работает...

Если знаешь как сделать, может что то реализуешь?? Тут как раз самое интересное начинается. Именно в простых устройствах должны быть реализованы возможности стриминга и т.д.

Пока только разбираюсь с простыми устройствами. Добавил медиа сервер, теперь пытаюсь определить где классы создаются, а то он у меня от SRelay наследован((


Я вот что придумал, это ж можно добавить реализацию SSDP в андроид клиент для MJD, и автотамом искать сервер в сети)) так же автоматом добавлять андроид девайс как терминал в MJD))

Re: Модуль - SSDPFinder

Добавлено: Вс фев 25, 2018 7:10 pm
tarasfrompir
Сыровато сделано но отображает уже мои личные устройства в простых устройствах.
На работе нуте устройства с УПНП. Роутер и тот через 20 показывает

Re: Модуль - SSDPFinder

Добавлено: Пн фев 26, 2018 3:28 pm
tarasfrompir
Если ты имееш ввиду вот так сделать - так оно уже сделано...

Re: Модуль - SSDPFinder

Добавлено: Пн фев 26, 2018 3:34 pm
directman66
Приставки mag250 тоже поидее должны найтись вашими модулем, но почему-то их не видать

https://majordomo.smartliving.ru/forum/ ... lit=Mag250

Re: Модуль - SSDPFinder

Добавлено: Пн фев 26, 2018 3:38 pm
tarasfrompir
Потому что его нету еще на гитхабе.
Добавлю еще функцию добавления найденых устройств - тогда все будет.
На работе не находит устройств - через 20 раз.
Кстати валяется такая но незнаю там есть UPNP?

Re: Модуль - SSDPFinder

Добавлено: Пн фев 26, 2018 3:39 pm
directman66
Вот рабочий сценарий поиска mag250
SPOILERSPOILER_SHOW

Код: Выделить всё

error_reporting(E_ALL);
ini_set('display_errors', 1);

class UPnPFind
{
    /**
     * Find devices by UPnP multicast message and stores them to cache
     *
     * @return array  Parsed device list
     */
    public static function findDevices()
    {
        $discover = self::discover(10);

        return($discover); //!!

        /*
        $devices = array();
        flush();
        foreach ($discover as $response) {

            $device = new Device();
            if ($device->initByDiscoveryReponse($response)) {

                $device->saveToCache();

                try {
                    $client = $device->getClient('ConnectionManager');
                    $protocolInfo = $client->call('GetProtocolInfo');

                    $sink = $protocolInfo['Sink'];
                    $tmp = explode(',', $sink);

                    $protocols = array();

                    foreach ($tmp as $protocol) {
                        $t = explode(':', $protocol);
                        if ($t[0] == 'http-get') {
                            $protocols[] = $t[2];
                        }
                    }
                } catch (UPnPException $upnpe) {
                    $protocols = array();
                }

                $device->protocolInfo = $protocols;

                $cache[$device->getId()] = array(
                    'name' => $device->getName(),
                    'services' => $device->getServices(),
                    'icons' => $device->getIcons(),
                    'protocols' => $device->getProtocolInfo()
                );
            }
        }

        return $cache;
        */
    }

    /**
     * Performs a standardized UPnP multicast request to 239.255.255.250:1900
     * and listens $timeout seconds for responses
     *
     * Thanks to artheus (https://github.com/artheus/PHP-UPnP/blob/master/phpupnp.class.php)
     *
     * @param int $timeout Timeout to wait for responses
     *
     * @return array  Response
     */
    private static function discover($timeout = 2)
    {
        $msg  = 'M-SEARCH * HTTP/1.1' . "\r\n";
        $msg .= 'HOST: 239.255.255.250:1900' . "\r\n";
        $msg .= 'MAN: "ssdp:discover"' . "\r\n";
        $msg .= "MX: 3\r\n";
        $msg .= "ST: upnp:rootdevice\r\n";
        $msg .= '' . "\r\n";

        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
        socket_sendto($socket, $msg, strlen($msg), 0, '239.255.255.250', 1900);

        socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));

        $response = array();
        do {
            $buf = null;
            @socket_recvfrom($socket, $buf, 1024, MSG_WAITALL, $from, $port);

            if (!is_null($buf)) {
                $response[] = self::discoveryReponse2Array($buf);
            }
        } while (!is_null($buf));
        //socket_close($socket);

        return $response;
    }

    /**
     * Transforms discovery response string to key/value array
     *
     * @param string $res discovery response
     *
     * @return \stdObj
     */
    private static function discoveryReponse2Array($res)
    {
        $result = array();
        $lines  = explode("\n", trim($res));

        if (trim($lines[0]) == 'HTTP/1.1 200 OK') {
            array_shift($lines);
        }

        foreach ($lines as $line) {
echo '<br>';         
            $tmp = explode(':', trim($line));

            $key   = strtoupper(array_shift($tmp));
            $value = (count($tmp) > 0 ? trim(join(':', $tmp)) : null);

            $result[$key] = $value;
         echo $value;
        }

        return (Object)$result;
    }
}


$devices = UPnPFind::findDevices();
//echo $devices;
print_r($devices);

Re: Модуль - SSDPFinder

Добавлено: Пн фев 26, 2018 3:40 pm
tarasfrompir
Дак так и ищем ...