eHouse pastato automatizavimo sistemą – Android programinės įrangos gauti valdytojams per UDP statusas

"Ethernet" Home Automation eHouse leidžia automatiškai siųsti būsenos broadcastu UDP (User datagram Protocol) , kuris gali priimti visus jūsų LAN arba WiFi ir IP prietaisų, tenkinanti sąlygą – Rasti vietos kaukė 255 . 255 . 255 . 0 , , transliuojamas Statusas IP adresus kontrolierių 192 . 168 . 0 . x . UDP leidžia išjungti TCP / IP kliento atsisiuntimo būseną , kuris reikalauja ryšio duomenų valdytojui . UDP nesujungus protokolas, , plitimo duomenys, ir nepriklausomai nuo priėmimo įrenginių skaičių neapkrauna CPU ar tinklo ryšių .
Paprasta UDP priėmimo funkcija su smartphonach , plokštės ir Android tabletės yra rodomas žemiau .
Todėl begalinis kilpa ant šios funkcijos , jums reikia sukurti sriegis (siūlus), darbo fone , suteikiant jai esančio mažiausio prioriteto darbą .
Kitaip , šios funkcijos vykdymas blokuoti kitos veiklos programos vykdymą .
UDP Android platforma gauti šaltinio kodą:
public void UDP (int uostas) / / parametras uosto pasiimti numatytąjį transliuoti 6789 – dvejetainiu valdiklio būsena
{
byte [] broadcastadr = nauji byte [4] ;
byte [] localadr = nauji byte [4] ;
WifiManager WiFi = (WifiManager) getSystemService (kontekstas . WIFI_SERVICE) ; / / Wifi vadovas
DhcpInfo dhcp = wifi . getDhcpInfo () ; / / Gauti informaciją iš wifi dhcp
if (dhcp == null) / / gauti numatytoji reikšmė yra išjungtas, jei DHCP tinklo eHouse
{/ / Nr. Dhcp arba prietaiso klaida
broadcastadr [0] = (baitų) 192 ;
broadcastadr [1] = (baitų) 168 ;
broadcastadr [2] = (baitų) 0 ;
broadcastadr [3] = (baitų) 255 ;
}
kitas / / DHCP
{
transliacija = int (DHCP . Ipaddress & ; ; dhcp . netmask) | ~ dhcp . netmask ; / / UDP – Jei norite transliuoti duomenis apie funkciją
valdiklis gauna tik statusas
(int k = 0 ; k < ; 4 ; k + +) broadcastadr [k] = (baitas) ((transliuoti> ; > ; k * 8) ir ; 0xFF) ;
vietos int = (dhcp . Ipaddress) ; / / Vietinis IP adresas dhcp
(int k = 0 ; k < ; 4 ; k + +) localadr [k] = (baitas) ((vietos> ; > ; k * 8) ir ; 0xFF) ; / / Vietinis IP adresas
}
pabandyti
{
ds = new DatagramSocket (uostas) ; / / / Klausymas dėl UDP prievadas duomenų iš bet kurio ip
viduje kaukės – UDP lizdas sukurti vietinio prievado numerį, pavyzdžiui
}
catch (Exception e)
{
/ / Ehousecommunication . l ( ” Klaida Inet: gauti adresą ” + E . getMessage ()) ; atlikti bandymą
}
pabandyti
{
DS . setBroadcast (teisinga) ; / / Įjungti siųsti transliacinį pranešimą – Duomenims perduoti skirto
DS . setReuseAddress (teisinga) ; / / Įjungti Sudėtiniai kištukiniai naudoti tą patį IP adresą
/ / DS . setSoTimeout (400) ; / / Imtuvas timeout
}
catch (Išimtis io)
{/ / Ignoruoti klaidas, bet mes apsaugoti nuo taikymo ir sistemos klaidų
}
/ / * UDP BANDYMAS – broadcastu testas UDP iš telefono ar tabletę – ateityje bendravimas su paraiška
/ * Pabandykite
{
DatagramPacket dd = nauji DatagramPacket ( ” Sveiki žodis iš "Android UPD testas ” . getBytes () , 0 , ” Sveiki žodis iš "Android UPD testas ” . ilgis () ,
InetAddress . getByAddress (broadcastadr) , uostas) ;
DS . siųsti (dd) ; / / Siunčia DatagramPacket
}
catch (Exception e)
{
ehousecommunication . l ( ” Perduoti Datagram paketo klaida: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Multicast įjungtas užraktas ” ) ;
/ / Sukuriamas bendrosios daugiaadresio broadcastu atvejis
ml . Įsigyti () ; / / Multicast užraktas įjungti UDP priėmimas – Batery taupymo tikslais jį galima išjungti tam tikrus Android Smartphone –
broadcastu UDP paramą įjungia telefoną, jei jis yra užrakintas ir tik išjungtas
while (! ehousecommunication . Nutraukti) / / Amžino ciklo UDP priėmimo
{/ / Begalinis ciklas gauti UDP statusas
DatagramPacket dp = nauji DatagramPacket (pranešimas , žinutė . ilgio) ; / / Sukuriamas UDP paketų kelio schema paketas buferis naudojant duomenis – pasinaudoja UDP paketas
buferio ” žinutė ”
pabandyti {
DS . gauti (dp) ; / / UDP paketas signalas iš eHouse sistema – gauna paketą UDP Port UDP socket
jei (dp . getLength ()> ; 0) / / jei sklypų dydis didesnis už nulį – kažkas gavo
{
EhouseTCP . QueryBuff = dp . getData () ; / / Priskirti UDP recepition querybuffer – pakrautas į buferinį būsenos eHouse
/ / DP . setlength (0) ; – paketas dydis nustatomas iki nulio taip, kad nebūtų pakartotinai apdoroti tuos pačius duomenis
EhouseTCP . QueryReceived () ; / / Dekoduoti užklausos duomenų matricas ir užpildyti prietaisus – dekoduoja valdytojų ir apkrovų taikymas padėtis stalo padėtis
}
}
catch (Išimtis os)
{/ / Ignoruoti klaidų
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + OS . getMessage ()) ; / / Testas tik
}
}
ml . spaudai () ; / / Multicast udp užraktas nemokamai priėmimo eHouse taikymo – spaudai užrakto Multicast
DS . uždaryti () ; / / Uždaryti paketų kelio schemos lizdą pabaigoje – uždaro lizdą pabaigoje
}
Multicast užraktas gali būti reikalinga kai kurių "Android" įrenginiuose .
Vietos transliacija UDP mobiliųjų telefonų galima įjungti arba ne priklausomai nuo mobiliųjų telefonų firmware .
Jis taip pat gali būti visam laikui išjungtas baterijos taupymo ir saugos priežasčių arba sumažinti CPU apkrova tinkle darbe .
(Atkreipkite dėmesį į branduolio konfigūracija: CONFIG_IP_MULTICAST nėra) .
Papildomai , kai kurie modeliai gali būti užblokuotas vietinės ugniasienės, ir reikia aktyvuoti perdavimą dėl tam tikro prievado (numatytasis 6789) .
Už transliacija, kai naudojant GPRS interneto ryšį , EDGE , 3G , 4G galima užrakinti arba atrakinti tinklo operatoriaus . Dažniau , tačiau , reikia tikėtis, , kad ji yra nustatyta, siekiant sumažinti ryšio, panaudojimas .
Kai kurių modelių mobiliųjų telefonų , Programinės įrangos diegimo statusas valdikliai gaunančių UDP gali būti labai sunku ar net neįmanoma . Gali reikalauti, kad specialiosios firmware niebrandowanego ar smartphone .
Papildomai , reikia imtis atsargumo priemonių, kai upgradowaniu programinės įrangos ir patikrinti, kad visos funkcijos tinkamai veikia out of the box , bus labai sunku, kitaip klaidų diagnostika .
Remiantis kai kurių HTC telefonų ir kitų produktų, kurių sudėtyje yra "Android" operacinės sistemos versija yra žemesnė nei 2 . 3 . 3 pastebėtas blokui UDP priėmimas broadcastu .
Tai buvo "Android" versija (2 . 1 – 2 . 3 iš 01 laikotarpį . 01 . 2010 – 14 . 06 . 2011)
Jei jūs negalite gauti UDP broadcastu atsisiųsti ir įdiegti , Naujas Android ROM versija 2 minimalaus . 3 . 3 (birželio 14 , 2011) , išbandyti darbo apkrovos UDP teisingumą .
Branduolio versija 2 . 6 . 35 . 10 – htcg3ef43272 – branduolys @ and18 – 2 # 1 .
Ne . 3Programinės įrangos . 14 . 405 . 1 .
Kitų prekinių ženklų telefonus su panašiomis problemomis , atsisiųskite Firmware Android ROM iš gamintojo , versija ne mažiau kaip 2 . 3 . 3 .
Taip pat atkreipkite dėmesį, esmines charakteristikas, UDP paketus .
Jie yra asinchroninis ir reikia skaityti apie tai, kas gali sukelti duomenų nuskaitymo klaidų , jų nuostoliai (nekristų) , ypač su lėtai įranga , saitai , derinti didelės apkrovos ir procesoriaus okupacines smartphonach ir tablečių .
UDP statusas duomenys yra įrengta kontroline tikrinami duomenų .
Namų automatikos Gamintojas eHouse Home Automation eHouse
eHouse valdikliai – Home Automation eHouse