Ndërtimi eHouse Automatizimi i Sistemit – Android software për të marrë statusin e kontrollorëve nëpërmjet PZHU

Ethernet Automatizimi në shtëpi eHouse ju lejon të automatikisht dërgoni një status broadcastu UDP (User Datagram Protocol) , të cilat mund të merrni të gjitha pajisjet në LAN tuaj ose WiFi dhe IP kënaqjen kusht – Gjendet në maskë lokal 255 . 255 . 255 . 0 , e cila është transmetuar jashtë statusit të adresat IP e kontrollorëve 192 . 168 . 0 . x . UDP Broadcast ju lejon të çaktivizoni statusin e klientit shkarko TCP / IP , e cila kërkon një lidhje me kontrollues . UDP Broadcast është një protokoll connectionless , për të dhëna Përhapja dhe pavarësisht nga numri i pajisjeve që marrin nuk ngarkesës më shumë CPU ose lidhje e rrjetit .
Simple transmetim UDP pritja funksionojnë me smartphones , panele dhe tableta Android është treguar më poshtë .
Prandaj është një lak pafund mbi bazën e këtij funksioni , ju duhet të krijoni një fije (thread) që punojnë në sfond , duke i dhënë asaj punën më të ulët prioritet .
Ndryshe , ekzekutimin e këtij funksioni të bllokojë ekzekutimin e aktiviteteve të tjera të programit .
Kodi burim për marrjen e UDP platformë android Broadcast:
udp publik void (int port) / port / parametër të marr default transmetohen 6789 – Statusi në kontrollues binar
{
byte [] = broadcastadr bajt ri [4] ;
byte [] = localadr bajt ri [4] ;
WifiManager wifi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / Menaxher WiFi
DhcpInfo DHCP = wifi . getDhcpInfo () ; / / Get info nga wifi DHCP
në qoftë se (== null DHCP) / / të marrë vlerën e prezgjedhur është çaktivizuar nëse DHCP në rrjetin e eHouse
{/ / Jo DHCP ose një gabim për të pajisjes
broadcastadr [0] = (byte) 192 ;
broadcastadr [1] = (byte) 168 ;
broadcastadr [2] = (bajt) 0 ;
broadcastadr [3] = (bajt) 255 ;
}
tjetër / / DHCP
{
transmetimi = int (DHCP . IPAddress & ; ; DHCP . netmask) | ~ DHCP . netmask ; / / Per UDP transmetim – Nëse ju doni për të transmetuar të dhënat në funksion
kontrollues vetëm merr statusin
për (int k = 0 ; k < ; 4 ; k + +) broadcastadr [k] = (byte) ((transmetuar> ; > ; k * 8) dhe ; 0xFF) ;
lokale int = (DHCP . ipaddress) ; / / Adresa ip DHCP Lokale
për (int k = 0 ; k < ; 4 ; k + +) localadr [k] = (byte) ((lokale> ; > ; k * 8) dhe ; 0xFF) ; / / Per adresën lokal ip
}
mundohem
{
ds = new DatagramSocket (port) ; / / / Dëgjimi mbi UDP port të dhënave nga çdo ip
brenda një maskë – udp socket për të krijuar një shembull të numrit të portit lokale
}
kapur (e Exception)
{
/ / Ehousecommunication . l ( ” INET error: merrni adresë ” + E . getMessage ()) ; për test
}
mundohem
{
ds . setBroadcast (e vërtetë) ; / / Aktivizo dërguar mesazh transmetimit – për transmetim
ds . setReuseAddress (e vërtetë) ; / / Aktivizo fole të shumta të përdorin të njëjtën adresë IP
/ / Ds . setSoTimeout (400) ; / / Pritje timeout
}
kapur (Përjashtim io)
{/ / Ignore gabime, por ne të mbrojtur kundër aplikimit dhe sistemi gabime
}
/ / * TEST UDP transmetim – broadcastu Testi udp transmetuar nga telefoni juaj ose tabletë – komunikimit të ardhmen me zbatimin e
/ * Mundohuni
{
DatagramPacket dd = DatagramPacket ri ( ” Përshëndetje nga Fjala Android TEST UPD ” . getBytes () , 0 , ” Përshëndetje nga Fjala Android TEST UPD ” . Gjatësia () ,
InetAddress . getByAddress (broadcastadr) , port) ;
ds . dërguar (dd) ; / / Dërgon një DatagramPacket
}
kapur (e Exception)
{
ehousecommunication . l ( ” Transmetojë gabim Datagram pako: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Lock multicast aktivizuar ” ) ;
/ / Krijo një shembull të multicast bllok dhe broadcastu
ml . Fitoni () ; / / Multicast lock enable pritja udp transmetuar – Ajo mund të jetë me aftësi të kufizuara smartphones Disa Android për qëllime kursimit batery –
broadcastu mbështetje UDP aktivizon telefonin në qoftë se ajo është e mbyllur dhe me aftësi të kufizuara vetëm
ndërsa (! ehousecommunication . Përfundojnë) / loop / pafundme për pritjen UDP
{/ / Loop Infinite marrë statusin UDP
DatagramPacket dp = new DatagramPacket (mesazh , mesazh . gjatësi) ; / / Udp Krijo buffer Datagram pakete duke përdorur të dhënat – e bën përdorimin e paketës PZHU
tampon ” mesazh ”
provoni {
ds . marrë (PD) ; / / PZHU pritjes pako nga sistemi eHouse – merr portin pako UDP e UDP socket a
në qoftë se (PD . getLength ()> ; 0) / / në qoftë se madhësia e parcelave më e madhe se zero – diçka e pranuar
{
EhouseTCP . QueryBuff = PD . getData () ; / / Caktoni një recepition transmetuar UDP querybuffer – ngarkuar në eHouse statusit tampon
/ / Dp . setLength (0) ; – Madhësia pako është vendosur në zero mënyrë që të mos të procesit të njëjtat të dhëna në mënyrë të përsëritur
EhouseTCP . QueryReceived () ; / / Decode dhënave query vargjeve dhe do të mbushin pajisjet – decodes statusin e kontrollorëve dhe ngarkesat statusi aplikimi tryezë
}
}
kapur (Përjashtim os)
{/ / Ignore gabime
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + Os . getMessage ()) ; / / Per testi i vetëm
}
}
ml . lirimi () ; / / Multicast udp bllokohet lirë për pritjen e aplikimit eHouse – lëshon multicast lock
ds . ngushtë () ; / / Mbylle fole Datagram në fund – mbyll fole në fund të
}
Lock multicast mund të kërkohet në disa pajisje Android .
UDP lokale Broadcast në rastin e telefonave celular mund të jetë i aktivizuar ose jo në varësi të firmware telefonisë mobile .
Ajo gjithashtu mund të jetë me aftësi të kufizuara të përhershme për kursimin e baterisë dhe për arsye sigurie ose për të zvogëluar ngarkesën CPU në rrjet në punë .
(Shënim konfigurimit kernel: CONFIG_IP_MULTICAST nuk u vendos) .
Veç kësaj , disa modele mund të jetë i bllokuar nga një firewall lokal dhe duhet të aktivizoni transmetimin në një port të caktuar (default 6789) .
Jashtë Broadcast kur duke përdorur GPRS lidhje interneti , EDGE , 3G , 4G mund të jetë i bllokuar ose i hapur nga operatori i rrjetit . Më shpesh , megjithatë , duhet të pritet , se ajo është e fiksuar në mënyrë për të minimizuar përdorimin e lidhjes .
Në disa modele të telefonave mobil , Zbatimi Software statusi i kontrollorëve të marrin UDP mund të jetë shumë e vështirë apo edhe e pamundur . Mund të kërkojë përdorimin e niebrandowanego firmware të veçantë ose smartphone .
Veç kësaj , kujdes duhet të merren kur upgradowaniu firmware dhe kontrolloni që të gjitha tiparet janë duke punuar siç duhet nga kutia , ndryshe diagnoza e gabimeve do të jetë shumë e vështirë .
Bazuar në disa telefonat HTC dhe produkteve të tjera që përmbajnë sistemi operativ Android versioni më i ulët se 2 . 3 . 3 vërejtur një bllok totale UDP pritja broadcastu .
Ky ishte versioni i Android (2 . 1 – 2 . 3 e periudhës së 01 . 01 . 2010 – 14 . 06 . 2011)
Nëse ju nuk mund të merrni UDP broadcastu shkarkoni dhe instaloni , Versioni i ri Android ROM e 2 minimale . 3 . 3 (14 qershor , 2011) , të cilat testuar saktësinë e transmetimit ngarkesës së punës UDP .
Version kernel 2 . 6 . 35 . 10 – htcg3ef43272 – Kernel @ and18 – 2 # 1 .
Jo . 3software . 14 . 405 . 1 .
Për të markave të tjera të telefonave me probleme të ngjashme , ju lutem shkarkoni Firmware Rom Android nga prodhuesi , versioni i të paktën 2 . 3 . 3 .
Vini re gjithashtu karakteristikat thelbësore të UDP pako .
Ata janë asinkron dhe kërkojnë lexuar në lidhje me atë që mund të shkaktojë gabime lexuar të dhënat e , humbja e tyre (derdhja) , sidomos me pajisje të ngadaltë , Lidhje , kombinuar ngarkesës së lartë dhe smartphones CPU pushtuese dhe tableta .
Gjendja e të dhënave UDP është e pajisur në checksum për të kontrolluar vlefshmërinë e të dhënave .
Automatizimi në shtëpi Producer eHouse Automatizimi në shtëpi eHouse
Kontrollorët eHouse – Automatizimi në shtëpi eHouse