EHouse система автоматизації будівель – Android програмного забезпечення, щоб отримати статус контролерів через UDP

Ethernet Home Automation EHouse дозволяє автоматично відправляти статусу broadcastu UDP (User Datagram Protocol) , яка може приймати всі пристрої у вашій локальній мережі або Wi-Fi і IP, що задовольняють умові – Знайдено в місцевому маска 255 . 255 . 255 . 0 , , Яка транслюється від статусу IP адреси контролерів 192 . 168 . 0 . х . UDP Broadcast дозволяє відключити завантаження стану TCP / IP клієнта , який вимагає підключення до контролера . UDP мовлення є протоколом без встановлення з'єднання , для розповсюдження даних і незалежно від кількості приймальних пристроїв не завантажується більше процесора або мережі зв'язку .
Прості UDP прийому радіомовлення з функцією смартфона , панелями і Android таблетки показано нижче .
Тому нескінченний цикл на основі цієї функції , Вам потрібно створити потік (Thread) працює у фоновому режимі , надавши йому найнижчий пріоритет роботи .
Інакше , виконання цієї функції блокувати виконання інших заходів за програмою .
Вихідний код для отримання UDP Broadcast Android платформи:
громадського недійсними UDP (порт Int) / / Параметр порт, щоб забрати замовчуванням транслюватися 6789 – Статус в двійковому контролер
{
Byte [] = broadcastadr нових байт [4] ;
Byte [] = localadr нових байт [4] ;
WifiManager WiFi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / WiFi Manager
DhcpInfo DHCP = WiFi . getDhcpInfo () ; / / Отримати інформацію від DHCP-WiFi
якщо DHCP (== NULL) / / отримати значення за замовчуванням відключена, якщо DHCP мережі EHouse
{/ / Немає DHCP або помилку на пристрій
broadcastadr [0] = (байт) 192 ;
broadcastadr [1] = (байт) 168 ;
broadcastadr [2] = (байт) 0 ;
broadcastadr [3] = (байт) 255 ;
}
інше / / DHCP
{
трансляцію = Int (DHCP . IP-адреса і ; ; DHCP . маска підмережі) | ~ DHCP . Маска ; / / Для UDP Broadcast – Якщо ви хочете, щоб передати дані про функції
Контролер тільки отримує статус
для (INT = 0 ; до < ; 4 ; До + +) broadcastadr [K] = (байт) ((трансляція> ; > ; до * 8) і ; 0xFF) ;
місцеві INT = (DHCP . IP-адреса) ; / / Локальний IP-адрес DHCP
для (INT = 0 ; до < ; 4 ; До + +) localadr [K] = (байт) ((місцеві> ; > ; до * 8) і ; 0xFF) ; / / Для локальної IP-адрес
}
спробувати
{
DS = нова DatagramSocket (порт) ; / / / Прослуховування на UDP порт з будь-якого IP
в масці – UDP-сокет створити екземпляр номер локального порту
}
спіймати (Exception e)
{
/ / Ehousecommunication . л ( ” Помилка інет: отримати адресу ” + E . GetMessage ()) ; для тіста
}
спробувати
{
DS . setBroadcast (істина) ; / / Включити відправити широкомовне повідомлення – для передачі
DS . setReuseAddress (істина) ; / / Дозволити кілька сокетів використати той самий IP-адресу
/ / Ds . setSoTimeout (400) ; / / Прийом тайм-аут
}
спіймати (Exception IO)
{/ / Ігнорувати помилки, але ми захистити від програми та системні помилки
}
/ / * UDP Broadcast TEST – broadcastu тест UDP Broadcast з вашого телефону або планшета – майбутні зв'язку із застосуванням
/ * Спробувати
{
DatagramPacket дд = новий DatagramPacket ( ” Привіт Слово TEST Android UPD ” . GetBytes () , 0 , ” Привіт Слово TEST Android UPD ” . Довжина () ,
InetAddress . getByAddress (broadcastadr) , порт) ;
DS . Написати (DD) ; / / Посилає DatagramPacket
}
спіймати (Exception e)
{
ehousecommunication . л ( ” Передача дейтаграм пакети помилку: ” + E . GetMessage ()) ;
}
* /
MulticastLock мл = WiFi . createMulticastLock ( ” Multicast включений замок ” ) ;
/ / Створення примірника блоку багатоадресних і broadcastu
мл . Набувати () ; / / Multicast блокування включення UDP прийому радіомовлення – Він може бути відключений деяких смартфонах Android для ляторной цілях економії –
broadcastu UDP підтримки активує телефон, якщо він заблокований, і тільки відключені
в той час як (! ehousecommunication . Завершити) / / нескінченний цикл для прийому UDP
{/ / Нескінченний цикл отримання UDP статус
DatagramPacket DP = нова DatagramPacket (повідомлення , повідомлення . довжина) ; / / Створення UDP датаграми буфер пакетів з використанням даних – використовує UDP пакетів
буферизувати ” повідомлення ”
спробуйте {
DS . отримувати (DP) ; / / UDP пакетів прийом від EHouse системи – отримує порт UDP пакетів в UDP-сокет
якщо (DP . GetLength ()> ; 0) / / якщо розмір посилки більше нуля – щось отримав
{
EhouseTCP . QueryBuff = др . GetData () ; / / Привласнити трансляції UDP recepition querybuffer – завантажуються в EHouse статус буфера
/ / Dp . SetLength (0) ; – розмір пакета встановлюється на нуль, щоб не обробляти ті ж дані кілька разів
EhouseTCP . QueryReceived () ; / / Декодування запиту масивів даних і заповнити пристроїв – декодує стан контролерів і завантажує таблицю стану додатка
}
}
спіймати (Exception OS)
{/ / Ігнорувати помилки
/ / Ehousecommunication . л ( ” asdfasdfsafsa ” + Os . GetMessage ()) ; / / Для тесту тільки
}
}
мл . Release () ; / / UDP Multicast замок безкоштовно для отримання EHouse додатків – знімає блокування багатоадресних
DS . Close () ; / / Закриваємо сокет датаграм в кінці – закриває сокет в кінці
}
Multicast блокування може знадобитися в деяких Android пристроїв .
Місцеві UDP Broadcast у випадку з мобільними телефонами може бути включений чи ні в залежності від мобільного телефону прошивку .
Вона також може бути інвалідом для економії батареї і з міркувань безпеки або зменшити завантаження процесора в мережу на роботі .
(Зверніть увагу на конфігурацію ядра: CONFIG_IP_MULTICAST не встановлений) .
В додаток , деякі моделі можуть бути заблоковані місцеві брандмауер і потрібно активувати передачу на даний порт (за замовчуванням 6789) .
Outside Broadcast при використанні GPRS-інтернет з'єднань , EDGE, , 3G , 4G може бути заблокована або розблокована оператором мережі . Найчастіше , однак , Слід очікувати , , Що зафіксовано в цілях зведення до мінімуму використання посиланню .
У деяких моделях мобільних телефонів , Програмна реалізація статус контролерів отримання UDP може бути дуже важко або навіть неможливо . Може знадобитися використання спеціальних niebrandowanego прошивки або смартфона .
В додаток , необхідно дотримуватися обережності при upgradowaniu прошивку і перевірити, що всі функції працюють правильно з коробки , В іншому випадку діагноз помилки буде дуже важко .
Грунтуючись на деяких телефонах HTC та інших продуктів, що містять системи Android версії операційної нижче 2 . 3 . 3 спостерігається загальний блок UDP прийому broadcastu .
Це була версія Android (2 . 1 – 2 . 3 з періоду 01 . 01 . 2010 – 14 . 06 . 2011)
Якщо ви не можете отримати UDP broadcastu завантаження та встановлення , Новий Android ROM версією мінімум 2 . 3 . 3 (14 червня , 2011) , які перевірили правильність роботи трансляцію навантаження UDP .
Kernel Version 2 . 6 . 35 . 10 – htcg3ef43272 – ядра @ and18 – 2 # 1 .
Ні . 3software . 14 . 405 . 1 .
Для інших марок телефонів з подібними проблемами , будь ласка, скачати прошивки Android Rom від виробника , Версія не менше 2 . 3 . 3 .
Відзначимо також основні характеристики UDP пакетів .
Вони є асинхронними, і вимагають читання про те, що може стати причиною даних помилок читання , їх втрати (скидання) , Особливо з повільною обладнання , посилання , поєднують в собі високу навантаження процесора і окупації смартфонів і планшетів .
Дані Udp статус обладнані в контрольної суми для перевірки достовірності даних .
Виробник Home Automation EHouse Home Automation EHouse
EHouse Контролери – Home Automation EHouse