eHouseビルオートメーションシステム – Androidのソフトウェアは、UDPを介してコントローラのステータスを受信する

イーサネット ホームオートメーション eHouseは、自動的にステータスbroadcastu UDP(User Datagram Protocol)を送信できるようにする , 条件を満たす、LANまたは無線LANとIPのすべてのデバイスを受け取ることができる – ローカルマスク255で発見 . 255 . 255 . 0 , ステータス192のコントローラのIPアドレスをオフに放送される . 168 . 0 . X . UDPブロードキャストを使用すると、TCP / IPクライアントのダウンロードステータスを無効にすることができます , コントローラへの接続を必要とする . UDPブロードキャストは、コネクションレス型のプロトコルである , 伝搬データのために関係なく、受信装置の数より多くのCPUやネットワークリンクをロードしません .
スマートフォンを使用した単純なUDPブロードキャストの受信機能 , パネルやAndroidタブレットを以下に示します。 .
したがって、この機能に基づいて無限ループです , あなたは、バックグラウンドで動作スレッド(スレッド)を作成する必要が , それは、最も優先度の低い仕事を与える .
そうでなければ , この関数の実行は、プログラムの他の活動の実行をブロックする .
UDPブロードキャストAndroidプラットフォームを受信するためのソースコード:
デフォルトのブロードキャスト6789をピックアップします。public void UDP(int型ポート)/ /パラメータポート – バイナリコントローラのステータス
{
バイト[] broadcastadr =新しいバイト[4] ;
バイト[] localadr =新しいバイト[4] ;
WifiManagerのwifi =(WifiManager)getSystemService(コンテキスト . WIFI_SERVICE) ; / / Wifiのマネージャー
dhcpinfoがDHCP = WIFI . getDhcpInfo() ; / / wifiのDHCPから情報を得る
(DHCP == NULL)/ /デフォルト値を取得無効になっている場合ならeHouseのDHCPネットワーク
{/ /いいえDHCPまたはデバイスのエラー
broadcastadr [0] =(バイト)192 ;
broadcastadr [1] =(バイト)168 ;
broadcastadr [2] =(バイト)0 ;
broadcastadr [3] =(バイト)255 ;
}
他/ / DHCP
{
ブロードキャスト= INT(DHCP . IPAddressは& ; ; DHCP . ネットマスク)|〜DHCP . ネットマスク ; UDPブロードキャストのための/ / – あなたは、関数にデータをブロードキャストする場合
コントローラはステータスを受信
(int型k = 0のための ; K < ; 4 ; K + +)broadcastadr [K] =(バイト)((放送> ; > ; K * 8)& ; 0xFF)を ;
ローカルINT =(DHCP . ipaddressは) ; / /ローカルIPアドレスはDHCP
(int型k = 0のための ; K < ; 4 ; K + +)localadr [K] =(バイト)((ローカル> ; > ; K * 8)& ; 0xFF)を ; / /ローカルIPアドレスに対応する
}
試す
{
DS =新規のDatagramSocket(ポート) ; / / /任意のIPからUDPポートデータに聞く
マスクの内側 – UDPソケットは、ローカルポート番号のインスタンスを作成する
}
キャッチ(例外電子)
{
/ / Ehousecommunication . L( ” エラーのinet:アドレスを取得 ” + E . のgetMessage()) ; テスト用
}
試す
{
DS . setBroadcast(真) ; / /有効にブロードキャストメッセージを送信 – 伝送用
DS . setReuseAddressの(真) ; / /複数のソケットが同じIPアドレスを使用して有効にする
/ / Dsは . setSoTimeout(400) ; / /受信タイムアウト
}
キャッチ(例外IO)
{/ /エラーを無視しますが、我々は、アプリケーションとシステムエラーに対する保護
}
/ / * UDPブロードキャストTEST – お使いの携帯電話またはタブレットからbroadcastuテストUDPブロードキャスト – の適用と今後のコミュニケーション
/ *お試しください
{
DatagramPacketにDD =新しいのDatagramPacket( ” アンドロイドUPD TESTからこんにちはワード ” . getBytes()の , 0 , ” アンドロイドUPD TESTからこんにちはワード ” . 長さ() ,
InetAddressの . getByAddress(broadcastadr) , ポート) ;
DS . 送信(DD) ; / /はDatagramPacketを送信
}
キャッチ(例外電子)
{
ehousecommunication . L( ” データグラムパケット送信エラー: ” + E . のgetMessage()) ;
}
* /
MulticastLockミリリットル= WIFI . createMulticastLock( ” マルチキャスト対応のロック ” ) ;
/ /ブロックのマルチキャストおよびbroadcastuのインスタンスを作成します
ミリリットル . acquire()を ; / /マルチキャストロックイネーブルUDPブロードキャストの受信 – それはbatery節約を目的として、特定のAndroidスマートフォンを無効にすることができます –
それはロックされ、無効になっている場合にのみbroadcastu UDPサポートは電話をアクティブに
中(!ehousecommunication . UDP受信用)終了/ /無限ループ
UDPステータスを受信し{/ /無限ループ
DatagramPacketにDP =新しいのDatagramPacket(メッセージ , メッセージ . 長さ) ; / / UDPデータグラムパケットバッファがデータを使用して作成します。 – UDPパケットを使用しています
バッファ ” メッセージ ”
{試す
DS . 受信(DP) ; eHouseシステムから/ / UDPパケットの受信 – UDPのパケットがUDPポートソケットを受け取る
場合(DP . GETLENGTH()> ; 0)/ /ゼロより大きい区画の大きさなら – 何かは、受信
{
EhouseTCP . QueryBuff = DP . のgetData() ; / / UDPブロードキャストrecepition querybufferを割り当て – バッファステータスのeHouseにロード
/ / DP . SetLengthを(0) ; – パケットサイズは​​同じように繰り返してデータを処理しないようにゼロに設定されている
EhouseTCP . QueryReceived() ; / /クエリのデータ配列をデコードして、デバイスを埋める – コントローラおよび負荷アプリケーションステータス表のデコード状況
}
}
キャッチ(例外OS)
{/ /エラーを無視
/ / Ehousecommunication . L( ” asdfasdfsafsa ” + OS . のgetMessage()) ; / /テストのみ
}
}
ミリリットル . リリース() ; / /マルチキャストUDPロックeHouseアプリケーションの受信のための無料 – ロックマルチキャストを解放
DS . close()は ; / /終了時に、データグラムソケットを閉じます – の最後にソケットをクローズ
}
マルチキャストロックは、いくつかのAndroidデバイスで必要になることがあります .
携帯電話の場合にはローカルブロードキャストUDPが有効または携帯電話のファームウェアに依存しないことができます .
また、恒久的にバッテリーを節約するためと、安全上の理由から無効にすることができますまたは職場でネットワーク上のCPU負荷を軽減する .
(カーネルの設定に注意してください。CONFIG_IP_MULTICASTが設定されていません) .
加えて , 一部のモデルは、ローカルファイアウォールでブロックされ、指定されたポート(デフォルトは6789)上の送信を有効にする必要がすることができます .
GPRSのインターネット接続を使用して放送外 , EDGE , 3G , 4Gは、ネットワークオペレータによって、ロックまたはロック解除することができます . より頻繁に , しかしながら , 期待されるべきである , それは、リンクの使用率を最小限にするために固定されていること .
携帯電話の一部のモデルで , UDPを受信するコントローラのソフトウェア実装の状態が非常に困難、あるいは不可能になる場合があります . 特別なファームウェアniebrandowanegoまたはスマートフォンの使用を必要とするかもしれ .
加えて , upgradowaniuファームウェアとは、すべての機能が箱から出して正常に動作していることを確認する場合には注意が必要 , そうでなければエラーの診断は非常に困難になります .
2未満のAndroidのオペレーティングシステムバージョンを含むいくつかのHTCの携帯電話やその他の製品に基づいて、 . 3 . 3は、総ブロックUDP受信broadcastuを観察 .
これはAndroidのバージョン(2だった . 1 – 2 . 01の期間の3 . 01 . 2010年 – 14 . 06 . 2011)
あなたは、UDP broadcastuを受信できない場合はダウンロードしてインストールする , 最小2の新しいAndroidのROMバージョン . 3 . 3(6月14日 , 2011) , どの作業負荷のUDPブロードキャストの正しさをテスト .
カーネルバージョン2 . 6 . 35 . 10 – htcg3ef43272 – カーネル@ and18 – 2#1 .
ノー . 3software . 14 . 405 . 1 .
同様の問題を持つ電話機の他のブランドのために , メーカーからファームウェアのAndroid ROMをダウンロードしてください , 少なくとも2つのバージョン . 3 . 3 .
また、UDPパケットの本質的な特徴に注意してください。 .
彼らは非同期であり、データ読み取りエラーの原因となるかもしれないものについての説明を読んで必要 , 彼らの損失(流し) , 特に低速の機器と , リンク , 高負荷とCPU占有スマートフォンやタブレットを組み合わせる .
UDPのステータス·データは、データの妥当性をチェックするためにチェックサムに装備されている .
ホームオートメーションプロデューサー eHouse ホームオートメーション eHouse
eHouseコントローラ – ホームオートメーション eHouse