eHouse Building Automation Systems – Android-Software erhalten den Status von Controllern via UDP

Ethernet Home Automation eHouse können Sie automatisch eine Status broadcastu UDP (User Datagram Protocol) , welche empfangen können alle Geräte in Ihrem LAN oder W-LAN und IP, die die Bedingung – Gefunden in der lokalen Maske 255 . 255 . 255 . 0 , was ist aus dem Stand die IP-Adressen der Controller 192 ausgestrahlt . 168 . 0 . x . UDP Broadcast können Sie den Download-Status der TCP / IP-Client deaktivieren , was eine Verbindung zum Controller . UDP Broadcast ist ein verbindungsloses Protokoll , zur Vermehrung Daten und unabhängig von der Anzahl der Aufnahmevorrichtungen nicht lädt die CPU oder mehr Netzwerk-Links .
Einfache UDP Broadcast-Empfang Funktion mit Smartphones , Paneele und Android-Tabletten ist unten dargestellt .
Es ist daher eine Endlosschleife auf der Basis dieser Funktion , Sie erstellen ein Thread (Faden) im Hintergrund , die ihm die niedrigste Priorität Arbeit .
Sonst , die Ausführung dieser Funktion Sperrung der Ausführung anderer Aktivitäten des Programms .
Der Quellcode für den Empfang UDP Broadcast Android-Plattform:
public void udp (int port) / / Parameter-Port abholen Standard ausgestrahlt 6789 – Status in binäre Steuerung
{
byte [] broadcastadr = new byte [4] ;
byte [] localadr = new byte [4] ;
WifiManager wifi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / Wifi-Manager
Dhcpinfo dhcp = wifi . getDhcpInfo () ; / / Get Info von wifi dhcp
if (dhcp == null) / / get Standardwert ist deaktiviert, wenn DHCP Netzwerk von eHouse
{/ / Kein DHCP oder ein Fehler für das Gerät
broadcastadr [0] = (Byte) 192 ;
broadcastadr [1] = (Byte) 168 ;
broadcastadr [2] = (Byte) 0 ;
broadcastadr [3] = (Byte) 255 ;
}
else / / DHCP
{
Broadcast = int (dhcp . IPAddress & ; ; dhcp . netmask) | ~ dhcp . netmask ; / / Für UDP-Broadcast – Wenn Sie die Daten auf die Funktion ausgestrahlt
Controller nur empfängt Statusinformationen
for (int k = 0 ; k < ; 4 ; k + +) broadcastadr [k] = (byte) ((Broadcast> ; > ; k * 8) & ; 0xFF) ;
lokalen int = (dhcp . ipaddress) ; / / Local ip address dhcp
for (int k = 0 ; k < ; 4 ; k + +) localadr [k] = (byte) ((local> ; > ; k * 8) & ; 0xFF) ; / / Für die lokale IP-Adresse
}
versuchen
{
ds = new DatagramSocket (port) ; / / / Hören auf Port Daten von jedem ip
innerhalb einer Maske – UDP Socket zu erstellen Sie eine Instanz der lokale Port-Nummer
}
catch (Exception e)
{
/ / Ehousecommunication . l ( ” Fehler Inet: get-Adresse ” + E . getMessage ()) ; für Test
}
versuchen
{
ds . setBroadcast (true) ; / / Enable senden Broadcast-Nachricht – zur Übertragung
ds . setReuseAddress (true) ; / / Enable Mehrfachsteckdose verwenden die gleiche IP-Adresse
/ / Ds . setSoTimeout (400) ; / / Empfangs-Zeitlimit
}
catch (Exception io)
{/ / Fehler ignorieren, aber wir gegen Anwendungs-und Systemfehler schützen
}
/ / * UDP Broadcast TEST – broadcastu Test UDP Broadcast von Ihrem Handy oder Tablet – zukünftige Kommunikation mit der Anwendung der
/ * Versuchen
{
DatagramPacket dd = new DatagramPacket ( ” Hallo Welt von Android UPD TEST ” . getBytes () , 0 , ” Hallo Welt von Android UPD TEST ” . Länge () ,
InetAddress . getByAddress (broadcastadr) , Port) ;
ds . senden (dd) ; / / Sendet eine DatagramPacket
}
catch (Exception e)
{
ehousecommunication . l ( ” Transmit Datagram Packet Error: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Multicast-fähigen Schloss ” ) ;
/ / Erstellen Sie eine Instanz des Blocks Multicast und broadcastu
ml . Erwerben () ; / / Multicast Schloss enable udp Broadcast-Empfang – Es können bestimmte Android Smartphones für batery Einsparung Purposes deaktiviert werden –
broadcastu UDP-Unterstützung aktiviert das Telefon, wenn es gesperrt ist und nur deaktiviert
while (! ehousecommunication . Terminate) / / Endlosschleife für udp Empfang
{/ / Endlosschleife Empfangen von UDP-Status
DatagramPacket dp = new DatagramPacket (Meldung , Nachricht . Länge) ; / / Erstellen UDP-Datagramm-Paket-Puffer mit Daten – nutzt das UDP-Paket
puffern ” Nachricht ”
try {
ds . erhalten (dp) ; / / UDP-Paket Empfang von eHouse System – empfängt das Paket UDP-Port des UDP ein Socket
if (dp . getLength ()> ; 0) / / wenn die Größe der Parzellen größer als Null – etwas erhalten
{
EhouseTCP . QueryBuff = dp . getData () ; / / Zuweisen eines UDP-Broadcast recepition querybuffer – beladen in den Puffer-Status eHouse
/ / Dp . setlength (0) ; – Paketgröße auf Null gesetzt wird, um nicht die gleichen Daten mehrmals verarbeiten
EhouseTCP . QueryReceived () ; / / Decode Abfrage von Daten-Arrays und füllen Geräten – dekodiert der Status von Controllern und lädt die Anwendung Status-Tabelle
}
}
catch (Exception os)
{/ / Fehler ignorieren
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + Os . + Os ; / / Für Test nur
}
}
ml . release () ; / / Multicast udp Lock frei für den Empfang von eHouse Anwendung – gibt die Sperre Multicast
ds . close () ; / / Schließen Sie die Datagrammsocket am Ende – schließt den Socket am Ende des
}
Multicast Sperre kann in einigen Android-Geräten erforderlich .
Local Broadcast UDP im Falle von Mobiltelefonen kann aktiviert werden sollen oder nicht abhängig von der Handy-Firmware .
Es kann auch dauerhaft für Batterie sparenden und aus Sicherheitsgründen deaktiviert werden oder die CPU-Last auf dem Netzwerk am Arbeitsplatz zu reduzieren .
(Beachten Sie die Kernel-Konfiguration: CONFIG_IP_MULTICAST nicht gesetzt ist) .
Außerdem , Einige Modelle können durch eine lokale Firewall blockiert werden und müssen, um die Übertragung auf einem bestimmten Port (default 6789) aktivieren .
Outside Broadcast, wenn Sie GPRS Internet-Verbindungen , EDGE , 3G , 4G gesperrt oder durch den Netzbetreiber freigeschaltet . Häufiger , jedoch , zu erwarten , dass es befestigt ist, um die Nutzung der Verbindung zu minimieren .
Bei einigen Modellen von Mobiltelefonen , Software Stand der Umsetzung Controller Empfangen von UDP kann sehr schwierig oder sogar unmöglich . Kann die Verwendung von speziellen Firmware niebrandowanego oder Smartphone erforderlich .
Außerdem , Vorsicht ist bei upgradowaniu Firmware und prüfen, ob alle Funktionen einwandfrei funktionieren out of the box werden , ansonsten die Diagnose von den Fehlern wird sehr schwierig .
Basierend auf einigen HTC-Telefone und andere Produkte, die das Android-Betriebssystem-Version kleiner als 2 . 3 . 3 beobachtet insgesamt Block UDP Empfang broadcastu .
Das war die Version von Android (2 . 1 – 2 . 3 der Zeitraum von 01 . 01 . 2010 – 14 . 06 . 2011)
Wenn Sie nicht empfangen kann UDP broadcastu Download und Installation , New Android ROM-Version des minimum 2 . 3 . 3 (14. Juni , 2011) , die geprüft, die Richtigkeit der Arbeitsbelastung UDP Broadcast .
Kernel Version 2 . 6 . 35 . 10 – htcg3ef43272 – Kernel @ und 18 – 2 # 1 .
Nicht . 3 Software . 14 . 405 . 1 .
Für andere Marken von Handys mit ähnlichen Problemen , laden Sie bitte Firmware Android Rom vom Hersteller , Version von mindestens 2 . 3 . 3 .
Beachten Sie auch die wesentlichen Merkmale der UDP Packets .
Sie sind asynchron und erfordern darüber zu lesen, was können Daten Lesefehler , ihren Verlust (Shedding) , insbesondere langsame Ausrüstung , Links , kombinieren hohe Last und CPU-Auslastung Smartphones und Tablets .
UDP-Status-Daten in Prüfsumme ausgestattet, um die Gültigkeit der Daten überprüfen .
Home Automation Producer eHouse Home Automation eHouse
eHouse Controller – Home Automation eHouse