Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение nick7zmail » Чт ноя 03, 2016 10:34 am

T-REX-XP писал(а): Вот примеры настроек этой программы, и инструкция, как заимпортить настройки с программы braodlink.
Я так понял, что в SDK есть такая функция обмен конфигурацией между телефонами, думаю какой то пакет широковещательный или что то еще.
Действительно. При наличии WiFI отправляет конфигурацию...пока не видел в каком виде...надо попробовать снифером перехватить, и посмотреть что там... Мож удастся разобрать на команды.

А так - в планах - есть идея попробовать модуль сделать, который без бриджа будет команды отправлять. Он в принципе простенький получится, но организовать команды поможет...раз уж разобрались как это делается...

Но прежде чем пытаться повторить алгоритм в php, у меня небольшой вопросик по Broadlink Command. Её код под спойлером. Поясните, кто в си шарпе шарит (я не очень) что делают некоторые её части? Куда смог - комменты написал... В идеале бы конечно пояснение к каждой строке...
BroadlinkCommandПоказать

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

static int Main(string[] args)
        {
            if (args.Length < 1) //если недостаточно аргументов
            {
                Console.WriteLine("Usage: BroadlinkCommand file_name [ip_address]"); //выдаем сообщение
                return 1;
            }
            const int patternLen = 8, headerLen = 0x38; //объявляем переменные 

            byte[] buffer; //объявляем массив
            buffer = File.ReadAllBytes(args[0]); //считываем побайтово файл в буфер

            if ((buffer[0] != 0x5A) || (buffer[1] != 0xA5) || (buffer[2] != 0xAA) || (buffer[3] != 0x55) || 
                (buffer[4] != 0x5A) || (buffer[5] != 0xA5) || (buffer[6] != 0xAA) || (buffer[7] != 0x55)) //сравниваем первые байты
                Console.WriteLine("Seems like file contains invalid packet data"); //пишем сообщение, если первые байты кривые

            // Разбиваем буфер на строки если он содержит несколько команд
            int len = buffer.Length; //Вычисляем длину буфера
            for (int i = headerLen; i < buffer.Length; i += patternLen)//Для i=длине примера до i<длины буфера запускаем цикл
            {
                int j = 0;
                for (; j < patternLen && i + j < buffer.Length; j++)
                    if (buffer[j] != buffer[i + j])//разбиваем на элементы массива.
                        break;
                if (j >= patternLen)
                {
                    len = i;
                    break;
                }
            }
            Array.Resize(ref buffer, len); //зачем?

            string address = args.Length > 1 ? args[1] : "255.255.255.255";

            IPEndPoint point = new IPEndPoint(IPAddress.Parse(address), 80);

            UdpClient client = new UdpClient(); //новый объект подключения udp
            client.Client.ReceiveTimeout = 1000; //таймаут пинга?

            int count = 0; //число попыток
            bool pingResult = false; //задаем переменную pingResult (вмдимо используется далее в цикле)
            len = headerLen; //Длинна сообщения

            while (count < 10) //цикл 10 раз
            {
                client.Send(buffer, len, point); //отправляем пакет (зачем 10 раз его отправлять?)...
//но в конце меняются байты в пакете...якобы чтобы 'пробудить девайс'...
//но когда в таком случае опять первообразный пакет отправляется? Короче как можно больше пояснений к циклу плс.
                count++;
                if (!pingResult)
                    Console.WriteLine("Sending invalid packet in order to wake up device ...");
                else
                    Console.WriteLine("Sending command packet ...");
                try
                {
                    var watch = System.Diagnostics.Stopwatch.StartNew();
                    byte[] received = client.Receive(ref point);
                    watch.Stop();
                    Console.WriteLine("Response received from {0} in {1} milliseconds", point.ToString(), watch.ElapsedMilliseconds);
                    if (pingResult)
                    {
                        Console.WriteLine("Command packet sent successfully in {0} attempt(s)", count);
                        return 0;
                    }
                    else
                    {
                        Console.WriteLine("Device is awakened in {0} attempt(s)", count);
                        count = 0;
                        pingResult = true;
                        len = buffer.Length;
                        client.Client.ReceiveTimeout = 5000;

                        // меняем некоторые байты в буфере
                        Random rnd = new Random();
                        buffer[0x20] = (byte)rnd.Next();
                        buffer[0x21] = (byte)rnd.Next();
                        buffer[0x28] = (byte)rnd.Next();
                        buffer[0x29] = (byte)rnd.Next();
                    }
                }
                catch (SocketException)
                {
                    Console.WriteLine("Response receiving timeout");
                    continue;
                }
            }
            if (!pingResult)
                Console.WriteLine("Device wake up error");
            else
                Console.WriteLine("Sending command packet error");
            return 1;
        } 
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
kawkay
Сообщения: 53
Зарегистрирован: Вс апр 19, 2015 6:10 pm
Благодарил (а): 83 раза
Поблагодарили: 13 раз

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение kawkay » Чт ноя 03, 2016 9:41 pm

На majordomo установленном под виндой сценарий brcom с командой exec("start BroadlinkCommand 1"); где 1(имя_файла_пакета) -работает. На majordomo установленном на Orange Pi PC с образом Dietpi сценарий brcom с командой exec("start BroadlinkCommand 1"); -не работает. В чем может быть загвоздка? Полученный файл пакета 1вместе с программой BroadlinkCommand поместил в папку \htdocs с помошью WinSCP. Может права какие нибудь надо задавать. В линуксе новичек.
За это сообщение автора kawkay поблагодарил:
alekszander (Ср ноя 23, 2016 12:18 pm)
Рейтинг: 1.16%
T-REX-XP
Сообщения: 174
Зарегистрирован: Вт июн 16, 2015 10:54 pm
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение T-REX-XP » Пт ноя 04, 2016 3:43 pm

я шарю в c#.
Сча посмотрю и отпишусь
Sayler
Сообщения: 54
Зарегистрирован: Пн ноя 28, 2016 9:15 pm
Благодарил (а): 21 раз
Поблагодарили: 2 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение Sayler » Пн ноя 28, 2016 9:22 pm

Спасибо за новый способ и за BroadlinkCommand, все работает. На выполнения действия уходит более 10 сек, что ну очень долго. Может есть решение как ускорить данный процесс? Типа модуля или чтоб BroadlinkCommand быстрее запускался.
craber
Сообщения: 38
Зарегистрирован: Ср апр 27, 2016 11:19 pm
Благодарил (а): 11 раз
Поблагодарили: 2 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение craber » Пн ноя 28, 2016 10:32 pm

Sayler писал(а):На выполнения действия уходит более 10 сек, что ну очень долго.
У меня работает моментально. Что-то не так. Какое у вас железо?
За это сообщение автора craber поблагодарил:
Sayler (Вт ноя 29, 2016 8:57 pm)
Рейтинг: 1.16%
Ged
Сообщения: 105
Зарегистрирован: Чт окт 20, 2016 10:59 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение Ged » Вт ноя 29, 2016 12:56 am

kawkay писал(а):На majordomo установленном под виндой сценарий brcom с командой exec("start BroadlinkCommand 1"); где 1(имя_файла_пакета) -работает. На majordomo установленном на Orange Pi PC с образом Dietpi сценарий brcom с командой exec("start BroadlinkCommand 1"); -не работает. В чем может быть загвоздка? Полученный файл пакета 1вместе с программой BroadlinkCommand поместил в папку \htdocs с помошью WinSCP. Может права какие нибудь надо задавать. В линуксе новичек.
Наверное, по тому, что под линухом эта софтина не работает, да и команды start там тоже нет. ;-)
За это сообщение автора Ged поблагодарил:
kawkay (Вт ноя 29, 2016 8:31 am)
Рейтинг: 1.16%
Sayler
Сообщения: 54
Зарегистрирован: Пн ноя 28, 2016 9:15 pm
Благодарил (а): 21 раз
Поблагодарили: 2 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение Sayler » Вт ноя 29, 2016 8:55 pm

Windows 7, среднее железо. Оперативка 4 гига. Да и планирую сервер на малых мощностях ставить, где железо хуже будет. Сама программа (BroadlinkCommander) не сразу запускается и потом ожидание соединения идет. Можно ли как то в коде PHP прописать в сценарий? Или все таки модуль создать.
И еще одна проблема, после выключение компа пакеты не работают (новые не создавал) Сигнал идет, да же несколько раз, но действия никого.
И лучше перехватывать пакет с включенным Wi Fi или мобильным интернетом?
Denis_k
Сообщения: 587
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 299 раз
Поблагодарили: 27 раз

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение Denis_k » Сб дек 03, 2016 12:28 am

С любопытством слежу за развитием данного направления, имхо один из самых интересных для обывателя вариантов, некая аналогия noolight'у, который был бы интересен по "докризисным" курсам валют + возможность управлять те ми же кондиционерами, тв и т.д.
MD на raspberry pi3
craber
Сообщения: 38
Зарегистрирован: Ср апр 27, 2016 11:19 pm
Благодарил (а): 11 раз
Поблагодарили: 2 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение craber » Сб дек 03, 2016 2:01 pm

Sayler писал(а):Windows 7, среднее железо. Оперативка 4 гига. Да и планирую сервер на малых мощностях ставить, где железо хуже будет. Сама программа (BroadlinkCommander) не сразу запускается и потом ожидание соединения идет. Можно ли как то в коде PHP прописать в сценарий? Или все таки модуль создать.
И еще одна проблема, после выключение компа пакеты не работают (новые не создавал) Сигнал идет, да же несколько раз, но действия никого.
И лучше перехватывать пакет с включенным Wi Fi или мобильным интернетом?
У меня atom 1.6ghz, оперативки 2gb. И отрабатывает без задержек.
А дальше вообще ничего из вами написанного не понял! Если хотите чтобы вам помогли, пишите понятнее и подробнее.
Sayler
Сообщения: 54
Зарегистрирован: Пн ноя 28, 2016 9:15 pm
Благодарил (а): 21 раз
Поблагодарили: 2 раза

Re: Подключение BroadLink без RM-brige и BroadlinkHTTPBrige

Сообщение Sayler » Вс дек 04, 2016 7:13 pm

craber писал(а): У меня atom 1.6ghz, оперативки 2gb. И отрабатывает без задержек.
А дальше вообще ничего из вами написанного не понял! Если хотите чтобы вам помогли, пишите понятнее и подробнее.
Я перехватывал пакеты с командой от Броадлинк через Мобильный интернет. Т.е. отключал Wi Fi, заходил в аккаунт E-control и через моб интернет посылал команды. Будет ли лучше через сеть Wi Fi посылать команды и перехватывать их?
Ответить