Clădire eHouse automatizarea – Android software-ul pentru a primi statutul de controlere prin intermediul UDP

Ethernet Home Automation eHouse vă permite să trimiteți automat un statut broadcastu UDP (User Datagram Protocol) , care pot primi toate dispozitivele din LAN-ul sau pe WiFi și IP care îndeplinesc condiția – S-au găsit în masca locală 255 . 255 . 255 . 0 , care este difuzat pe statutul adresele IP ale controlorilor 192 . 168 . 0 . x . UDP Transmisie vă permite să dezactivați statutul de descărcare a clientului TCP / IP , care necesită o conexiune la controler . UDP Broadcast este un protocol fara conexiune , pentru datele de propagare și, indiferent de numărul de dispozitive de recepție nu se incarca mai mult CPU sau link-uri de rețea .
Simplu de recepție pentru radiodifuziune funcția UDP cu smartphone-uri , panouri si comprimate Android este prezentat mai jos .
Prin urmare, este o buclă infinită în baza acestei funcții , aveți nevoie pentru a crea un fir (thread) care lucrează în fundal , dându-i de lucru cea mai mică prioritate .
Altfel , executarea acestei funcții bloca executarea altor activități ale programului .
Codul sursă pentru primirea UDP Broadcast platforma Android:
void udp publică (int port) / port / parametru pentru a ridica implicit difuzat 6789 – statutul de operator în binar
{
byte [] = new byte broadcastadr [4] ;
byte [] = new byte localadr [4] ;
WifiManager WiFi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / WiFi manager de
DhcpInfo dhcp = wifi . getDhcpInfo () ; / / Ia meciului de la wifi DHCP
în cazul în care (dhcp == null) / / obține valoarea implicită este dezactivată dacă DHCP de rețea de eHouse
{/ / Nu DHCP sau o eroare de dispozitiv
broadcastadr [0] = (byte) 192 ;
broadcastadr [1] = (byte) 168 ;
broadcastadr [2] = (byte) 0 ;
broadcastadr [3] = (byte) 255 ;
}
else / / DHCP
{
de difuzare = int (dhcp . AdresăIP & ; ; dhcp . netmask) | ~ DHCP . netmask ; / / Pentru udp de difuzare – Dacă doriți să difuzeze datele cu privire la funcția
operator primește doar statutul de
pentru (int k = 0 ; k < ; 4 ; K + +) broadcastadr [k] = (byte) ((difuzat> ; > ; k * 8) & ; 0xFF) ;
int = locală (dhcp . ipaddress) ; / / Adresa IP locală DHCP
pentru (int k = 0 ; k < ; 4 ; K + +) localadr [k] = (byte) ((locale> ; > ; k * 8) & ; 0xFF) ; / / Pentru adresa IP locală
}
încerca
{
ds = new DatagramSocket (portul) ; / / / Ascultare de pe udp informații portuare de la orice ip
în interiorul o mască – UDP socket pentru a crea o instanță a numărului portul local
}
catch (Exception e)
{
/ / Ehousecommunication . L ( ” Inet Eroare: afla adresa ” + E . getMessage ()) ; pentru testare
}
încerca
{
ds . setBroadcast (true) ; / / Activare trimite mesaj difuzat – pentru transport
ds . setReuseAddress (true) ; / / Activare priza multiplă folosiți aceeași adresă IP
/ / DS . setSoTimeout (400) ; / / Recepției timeout
}
catch (Exception io)
{/ / Ignoră erorile, dar ne proteja împotriva erorilor de aplicare și a sistemului de
}
/ / * Udp difuzare TEST – broadcastu de testare UDP transmise de pe telefonul sau tableta – comunicarea viitoare cu aplicarea
/ * Încercați
{
DatagramPacket dd = new DatagramPacket ( ” Buna ziua Word Android TEST UPD ” . getBytes () , 0 , ” Buna ziua Word Android TEST UPD ” . Lungime () ,
InetAddress . getByAddress (broadcastadr) , port) ;
ds . trimite (dd) ; / / Trimite un DatagramPacket
}
catch (Exception e)
{
ehousecommunication . L ( ” Transmite Datagram eroare de pachete: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Multicast activat de blocare ” ) ;
/ / Crearea unui exemplu de multicast bloc și broadcastu
ml . Acquire () ; / / Multicast blocare enable udp recepþia transmisiei – Acesta poate fi dezactivat smartphone-uri Android Anumite scopuri de economisire baterie –
sprijin broadcastu UDP activează în cazul în care telefonul este blocat si numai cu handicap
în timp ce (! ehousecommunication . Terminați) / bucla / infinită pentru primirea udp
{/ / Infinit bucla primirea statutului udp
DatagramPacket dp = new DatagramPacket (mesaj , mesaj . lungime) ; / / Crearea de pachete UDP tampon datagrama folosind datele – face uz de pachet UDP
tampon ” mesaj ”
try {
ds . a primi (dp) ; / / UDP receptie pachet din sistem eHouse – primește portul pachet UDP a UDP-o priză
în cazul în care (dp . getLength ()> ; 0) / / daca dimensiunea parcelelor mai mare decât zero – ceva a primit
{
EhouseTCP . QueryBuff = dp . getData () ; / / Alocare o emisiune udp recepition querybuffer – încărcate în eHouse starea tampon
/ / Dp . setlength (0) ; – dimensiunea pachetului este stabilită la zero astfel încât să nu proceseze aceleași date în mod repetat
EhouseTCP . QueryReceived () ; / / Decode tablouri de interogare a datelor și completați dispozitive – decodează statutul de controlori și sarcini statutul de masă cererea
}
}
catch (Exception os)
{/ / Ignoră erorile
/ / Ehousecommunication . L ( ” asdfasdfsafsa ” + Os . getMessage ()) ; / / Pentru singurul test
}
}
ml . eliberare () ; / / Multicast udp blocare gratuite pentru primirea cererii eHouse – eliberează multicast de blocare
ds . close () ; / / Închide priza datagrama la sfârșitul – închide priza de la sfârșitul anului
}
Blocare multicast poate fi necesară în anumite dispozitive Android .
UDP Transmisie local în cazul telefoanelor mobile pot fi activate sau nu, în funcție de firmware telefonul mobil .
Acesta poate fi, de asemenea, dezactivat definitiv pentru economisirea bateriei și pentru motive de siguranță sau pentru a reduce încărcarea procesorului pe rețeaua de la locul de muncă .
(Notă configurația kernel-ului: CONFIG_IP_MULTICAST nu este setat) .
În plus, , Unele modele pot fi blocate de un firewall local și trebuie să activezi transmisia pe un anumit port (implicit 6789) .
Transmisie în afara atunci când se utilizează GPRS conexiunile la internet , EDGE , 3G , 4G poate fi blocat sau deblocat de către operatorul de rețea . Mai des , totuși , ar trebui să fie de așteptat , că aceasta este stabilită în scopul de a reduce la minimum utilizarea link-ul .
În unele modele de telefoane mobile , Stadiul de implementare software a controlorilor li UDP poate fi foarte dificil sau chiar imposibil . Pot necesita utilizarea de niebrandowanego firmware speciale sau smartphone .
În plus, , grijă trebuie să fie luate atunci când upgradowaniu firmware-ului și verificați dacă toate caracteristicile sunt de lucru în mod corespunzător din caseta , în caz contrar diagnosticul a erorilor va fi foarte dificil .
Bazat pe unele telefoane HTC și alte produse care conțin Android versiunea sistemului de operare mai mică de 2 . 3 . 3 observat un bloc total de UDP recepție broadcastu .
Aceasta a fost versiunea de Android (2 . 1 – 2 . 3 din perioada 01 . 01 . 2010 – 14 . 06 . 2011)
Dacă nu puteți primi UDP broadcastu descărcați și instalați , Noul Android versiunea ROM a minim 2 . 3 . 3 (14 iunie , 2011) , care a testat corectitudinea lucru difuzare de încărcare UDP .
Kernel Version 2 . 6 . 35 . 10 – htcg3ef43272 – nucleu @ and18 – 2 # 1 .
Nu . 3software . 14 . 405 . 1 .
Pentru alte marci de telefoane cu probleme similare , vă rugăm să descărcați firmware Rom Android de la producator , Versiunea de cel puțin 2 . 3 . 3 .
Rețineți, de asemenea caracteristicile esențiale ale UDP .
Ele sunt asincrone și necesită citind despre ceea ce poate duce la erori de citire a datelor , lor de pierdere (vărsare) , în special cu echipamente lentă , link-uri , combina mare de încărcare și smartphone-uri și tablete de ocupare CPU .
UDP datele de stare este echipat în suma de control pentru a verifica validitatea datelor .
Home Automation Producator eHouse Home Automation eHouse
eHouse Controlere – Home Automation eHouse