Действительно. При наличии WiFI отправляет конфигурацию...пока не видел в каком виде...надо попробовать снифером перехватить, и посмотреть что там... Мож удастся разобрать на команды.T-REX-XP писал(а): Вот примеры настроек этой программы, и инструкция, как заимпортить настройки с программы braodlink.
Я так понял, что в SDK есть такая функция обмен конфигурацией между телефонами, думаю какой то пакет широковещательный или что то еще.
А так - в планах - есть идея попробовать модуль сделать, который без бриджа будет команды отправлять. Он в принципе простенький получится, но организовать команды поможет...раз уж разобрались как это делается...
Но прежде чем пытаться повторить алгоритм в php, у меня небольшой вопросик по Broadlink Command. Её код под спойлером. Поясните, кто в си шарпе шарит (я не очень) что делают некоторые её части? Куда смог - комменты написал... В идеале бы конечно пояснение к каждой строке...
Код: Выделить всё
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;
}