eHouse Bina Otomasyon Sistemi – Android yazılımı UDP yoluyla denetleyicilerinin durumunu almak için

Ethernet Ev Otomasyonu eHouse otomatik bir durum broadcastu UDP (Kullanıcı Datagram Protokolü) göndermek için izin , koşulu LAN veya WiFi ve IP tüm cihazlar alacağınız – Yerel maske 255 Bulundu . 255 . 255 . 0 , Durum 192 denetleyicilerinin IP adresleri kapalı yayın hangi . 168 . 0 . x . UDP yayın, TCP / IP istemci indirme durumu devre dışı bırakmanızı sağlar , kontrolör bir bağlantı gerektiren . UDP yayın bağlantısız bir protokoldür , yayılması için ve veri bağımsız olarak alıcı cihazlar daha fazla sayıda işlemci şebeke bağlantıları ya da yük etmez .
Akıllı telefonlar ile Basit UDP yayın alma işlevi , panelleri ve Android tablet aşağıdaki gibidir .
Bu nedenle, bu fonksiyonu olarak sonsuz bir döngüdür , Eğer bir iş parçacığı (DİŞLİ) arka planda çalışan oluşturmak gerekiyor , Bu düşük öncelikli iş veren .
Aksi halde , Bu işlevin yürütülmesi programın diğer etkinliklerin yürütülmesini engellemek .
UDP yayın Android platformu almak için kaynak kodu:
public void udp (int bağlantı noktası) / default pick up / parametre, port 6789 yayını – ikili denetleyici durumu
{
byte [] broadcastadr = new byte [4] ;
byte [] localadr = new byte [4] ;
WifiManager wifi = (WifiManager) getSystemService (Bağlam . WIFI_SERVICE) ; / / Wifi yöneticisi
DhcpInfo dhcp = wifi . getDhcpInfo () ; / / Wifi dhcp den bilgi alın
(dhcp == null) / / varsayılan değer olsun devre dışı if ehouse DHCP ağı
{/ / Hayır dhcp veya aygıt için bir hata
broadcastadr [0] = (byte) 192 ;
broadcastadr [1] = (byte) 168 ;
broadcastadr [2] = (byte) 0 ;
broadcastadr [3] = (byte) 255 ;
}
else / / DHCP
{
Yayın = int (dhcp . IPAddress & ; ; dhcp . netmask) | ~ dhcp . netmask ; Udp yayın için / / – Eğer fonksiyon veri yayın istiyorsanız
kontrolörü sadece durumunu alır
(int k = 0 için ; k < ; 4 ; k + +) broadcastadr [k] = (byte) ((yayın> ; > ; k * 8) ve ; 0xFF) ;
yerel int = (dhcp . ipadresi) ; / / Yerel ip adresi dhcp
(int k = 0 için ; k < ; 4 ; k + +) localadr [k] = (byte) ((yerel> ; > ; k * 8) ve ; 0xFF) ; / / Yerel IP adresi için
}
denemek
{
ds = new DatagramSocket (bağlantı noktası) ; / / / Herhangi bir ip gelen udp port veri Dinleme
Bir maske içinde – udp soket yerel port numarasını bir örneğini oluşturmak için
}
catch (Exception e)
{
/ / Ehousecommunication . l ( ” Hata Inet: adresi almak ” + E . getMessage ()) ; test için
}
denemek
{
ds . setBroadcast (true) ; / / Yayın mesajı göndermenin etkinleştir – iletimi için
ds . setReuseAddress (true) ; / / Çoklu priz aynı IP adresini kullanan etkinleştir
/ / Ds . setSoTimeout (400) ; / / Resepsiyon zaman aşımı
}
catch (Exception io)
{/ / Hata Yoksay ama biz uygulama ve sistem hatalarına karşı koruma
}
/ / * UDP yayın TEST – broadcastu testi udp telefon ya da tablet gelen yayın – uygulaması ile geleceğin iletişim
/ * Deneyin
{
Datagram dd = new datagram ( ” Android UPD TEST Merhaba Dünya ” . getBytes () , 0 , ” Android UPD TEST Merhaba Dünya ” . length () ,
InetAddress . getByAddress (broadcastadr) , bağlantı noktası) ;
ds . göndermek (dd) ; / / Bir datagram gönderir
}
catch (Exception e)
{
ehousecommunication . l ( ” Datagram paket hatası gönderir: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Multicast özellikli kilit ” ) ;
/ / Blok multicast ve broadcastu bir örneğini oluşturun
ml . ) (Acquire ; / / Multicast kilit enable udp yayın alımı – Bu batery tasarrufu Amaçlı Bazı Android akıllı devre dışı bırakılabilir –
kilitli ve sadece devre dışı ise broadcastu UDP destek telefonu etkinleştirir
while (! ehousecommunication . Udp alımı için) Terminate / / sonsuz döngü
Udp alma durumları {/ / Sonsuz döngü
Datagram dp = new datagram (mesajı , mesaj . uzunluğu) ; / / Udp datagram paketi tampon verileri kullanarak oluşturma – UDP paket kullanır
tampon ” mesaj ”
try {
ds . alırsınız (dp) ; EHouse sistemi / / UDP paket alımı – UDP paket udp port soketi alır
if (dp . GetLength ()> ; 0) / / sıfırdan parsel büyüklüğü daha büyük ise – bir şey aldım
{
EhouseTCP . QueryBuff = dp . getData () ; / / A UDP yayın recepition querybuffer atama – buffer durumunu ehouse yüklenir
/ / Dp . SetLength (0) ; – paket boyutu böylece tekrar tekrar aynı veri işlemek için değil sıfıra ayarlanır
EhouseTCP . QueryReceived () ; / / Sorgu veri dizileri Decode ve cihazlar doldurun – kontrolörler ve yükler uygulama durumu tablonun çözer durumu
}
}
catch (Exception os)
{/ / Hataları yoksay
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + Os . getMessage ()) ; / / Test içindir
}
}
ml . release () ; EHouse uygulama alımı için / / Multicast udp kilidi serbest – kilit noktaya yayın bültenleri
ds . close () ; / / Sonunda datagram yuva kapatmak – sonunda yuva kapatır
}
Multicast kilit bazı Android cihazları gerekli olabilir .
Cep telefonu durumda Yerel Yayın UDP etkin veya cep telefonu firmware bağlı değil olabilir .
Ayrıca kalıcı pil tasarrufu için ve güvenlik nedenleriyle devre dışı bırakılabilir veya iş ağında CPU yükü azaltmak için .
(Çekirdek yapılandırma Not: CONFIG_IP_MULTICAST ayarlanmamış) .
Buna ek olarak , Bazı modellerde bir yerel güvenlik duvarı tarafından engelleniyor ve belirli bir portu (varsayılan 6789) üzerinde iletim etkinleştirmeniz gerekir edilebilir .
GPRS internet bağlantısı kullanarak yayın dışında , KENAR , 3G , 4G şebeke operatörü tarafından kilitlenebilir veya kilidi açılabilir . Daha sık , ancak , beklenmelidir , Bu bağlantının kullanımını en aza indirmek için tespit edildiğini .
Cep telefonlarının bazı modellerinde , UDP alma denetleyicilerinin Yazılım uygulanması durumu çok zor hatta imkansız olabilir . Özel firmware niebrandowanego veya akıllı telefon kullanımını gerektirebilir .
Buna ek olarak , upgradowaniu firmware ve tüm özelliklerini dışarı kutunun düzgün çalışıp çalışmadığını kontrol yaparken dikkatli olunmalıdır , Aksi hatalarının teşhisi çok zor olacaktır .
2'den Android işletim sistemi sürümü düşük içeren bazı HTC cep telefonları ve diğer ürünlerin dayanarak . 3 . 3 toplam blok UDP resepsiyon broadcastu gözlenen .
Bu Android sürümü (2 oldu . 1 – 2 . 01 süre 3 . 01 . 2010 – 14 . 06 . 2011)
UDP broadcastu indirme ve yükleme alamıyorsa , Minimum 2 Yeni Android ROM versiyonu . 3 . 3 (14 Haziran , 2011) , Hangi iş yükü UDP yayın doğruluğu test .
Kernel Versiyon 2 . 6 . 35 . 10 – htcg3ef43272 – çekirdek @ and18 – 2 # 1 .
Hayır . 3Yazılıma . 14 . 405 . 1 .
Benzer sorunları olan telefonlarının diğer markalar için , üretici Firmware Android Rom indirmek için lütfen , en azından 2'lik bir versiyon . 3 . 3 .
Ayrıca UDP paketler temel özelliklerine dikkat edin .
Onlar asenkron ve veri hataları okumak neden olabilir ne okuma gerektiren , onların kaybı (dökülme) , özellikle yavaş ekipman ile , bağlantılar , Yüksek yük ve CPU meslek akıllı telefonlar ve tablet birleştirmek .
Udp durumu veri veri geçerliliğini kontrol etmek için sağlama olarak donatılmıştır .
Ev Otomasyonu Yapımcı eHouse Ev Otomasyonu eHouse
eHouse Kontrolörleri – Ev Otomasyonu eHouse