[Модуль] SSDP Finder (ssdp_finder)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Вс фев 25, 2018 12:31 pm

Так а ты смотрел ссдпдевайсес это модуль с помощью котороготможна добавлять свои устройство в простые устройства..
Редактируеш девайс структуре и можешь добавлять свои устройства , которые будут отображался и в простых устройствах. А модуль финдер был упрощен для того чтобы можна было разобрался в функциях исходниках. Да и так понятнее редактировать функции.
Как пример устройство май ламп - присутствует теперь в списке. Но оноже отобразится и в простых устройствах
За это сообщение автора tarasfrompir поблагодарил:
Gelezako (Ср апр 04, 2018 3:27 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
T-REX-XP
Сообщения: 174
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Модуль - SSDPFinder

Сообщение T-REX-XP » Вс фев 25, 2018 3:08 pm

tarasfrompir1 писал(а):Так а ты смотрел ссдпдевайсес это модуль с помощью котороготможна добавлять свои устройство в простые устройства..
Редактируеш девайс структуре и можешь добавлять свои устройства , которые будут отображался и в простых устройствах. А модуль финдер был упрощен для того чтобы можна было разобрался в функциях исходниках. Да и так понятнее редактировать функции.
Как пример устройство май ламп - присутствует теперь в списке. Но оноже отобразится и в простых устройствах
Да. И сейчас смотрю. Разбираюсь как добавлять свойства и от кого наследоваться. Хочу сделать сразу чтоб создавалось простое устройство а так же устройства онлайн.
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Вс фев 25, 2018 3:48 pm

в простые устройства сразу не запхнешся - при обновлении все падет...
Присматривался долго к тому как это сделать, вот теперь решился и еще и получилось, надо конечно сделать инклуд от простых устройств , чтобы не переделывать функции после возможного обновлении модуля простых устройств, но как для старта все прилично работает...
Спасибо нам ПОМОЖЕТ..!
T-REX-XP
Сообщения: 174
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Модуль - SSDPFinder

Сообщение T-REX-XP » Вс фев 25, 2018 4:30 pm

tarasfrompir1 писал(а):в простые устройства сразу не запхнешся - при обновлении все падет...
Присматривался долго к тому как это сделать, вот теперь решился и еще и получилось, надо конечно сделать инклуд от простых устройств , чтобы не переделывать функции после возможного обновлении модуля простых устройств, но как для старта все прилично работает...

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

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


Я вот что придумал, это ж можно добавить реализацию SSDP в андроид клиент для MJD, и автотамом искать сервер в сети)) так же автоматом добавлять андроид девайс как терминал в MJD))
За это сообщение автора T-REX-XP поблагодарил:
Gelezako (Ср апр 04, 2018 3:29 pm)
Рейтинг: 1.16%
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Вс фев 25, 2018 7:10 pm

Сыровато сделано но отображает уже мои личные устройства в простых устройствах.
На работе нуте устройства с УПНП. Роутер и тот через 20 показывает
Последний раз редактировалось tarasfrompir Пн фев 26, 2018 3:31 pm, всего редактировалось 3 раза.
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Пн фев 26, 2018 3:28 pm

Если ты имееш ввиду вот так сделать - так оно уже сделано...
Вложения
1.jpg
1.jpg (435.57 КБ) 3379 просмотров
За это сообщение автора tarasfrompir поблагодарил:
T-REX-XP (Пн фев 26, 2018 3:48 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - SSDPFinder

Сообщение directman66 » Пн фев 26, 2018 3:34 pm

Приставки mag250 тоже поидее должны найтись вашими модулем, но почему-то их не видать

https://majordomo.smartliving.ru/forum/ ... lit=Mag250
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Пн фев 26, 2018 3:38 pm

Потому что его нету еще на гитхабе.
Добавлю еще функцию добавления найденых устройств - тогда все будет.
На работе не находит устройств - через 20 раз.
Кстати валяется такая но незнаю там есть UPNP?
Спасибо нам ПОМОЖЕТ..!
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - SSDPFinder

Сообщение directman66 » Пн фев 26, 2018 3:39 pm

Вот рабочий сценарий поиска mag250
СпойлерПоказать

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

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);
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Модуль - SSDPFinder

Сообщение tarasfrompir » Пн фев 26, 2018 3:40 pm

Дак так и ищем ...
Спасибо нам ПОМОЖЕТ..!
Ответить