Edificio eHouse Sistema de automatización – Android software para recibir el estado de los controladores a través de UDP

Ethernet Domótica eHouse permite enviar automáticamente un estado broadcastu UDP (User Datagram Protocol) , que puede recibir todos los dispositivos en su LAN o WiFi e IP que satisfacen la condición – Se encuentra en la máscara local de 255 . 255 . 255 . 0 , que se difunde fuera de la situación de las direcciones IP de los controladores 192 . 168 . 0 . x . UDP Broadcast permite desactivar el estado de la descarga del cliente TCP / IP , lo que requiere una conexión con el controlador . Broadcast UDP es un protocolo sin conexión , para datos de propagación, e independientemente del número de los dispositivos receptores no se carga más el CPU o enlaces de red .
Broadcast UDP simple función de recepción con los teléfonos inteligentes , paneles y tabletas Android se muestra a continuación .
Por tanto, es un bucle infinito, sobre la base de esta función , es necesario crear un hilo (thread) trabajando en segundo plano , dándole el trabajo de prioridad más baja .
De otra manera , la ejecución de esta función de bloquear la ejecución de otras actividades del programa .
El código fuente para recibir UDP Broadcast plataforma Android:
public void UDP (puerto int) / / parámetro de puerto para recoger la emisión por defecto 6789 – estado en el controlador binario
{
byte [] broadcastadr = new byte [4] ;
byte [] localadr = new byte [4] ;
WifiManager wifi = (WifiManager) getSystemService (Contexto . WIFI_SERVICE) ; / / WiFi Manager
Dhcpinfo dhcp = wifi . getDhcpInfo () ; / / Obtener información de wifi dhcp
if (dhcp == null) / / obtener el valor por defecto está desactivada si DHCP de la red de eHouse
{/ / Dhcp No o un error del dispositivo
broadcastadr [0] = (byte) 192 ;
broadcastadr [1] = (byte) 168 ;
broadcastadr [2] = (byte) 0 ;
broadcastadr [3] = (byte) 255 ;
}
else / / DHCP
{
broadcast = int (dhcp . IPAddress y ; ; dhcp . máscara de red) | ~ dhcp . máscara de red ; / / Para la difusión UDP – Si desea transmitir los datos a la función
controlador sólo recibe el estado
for (int k = 0 ; k < ; 4 ; k + +) broadcastadr [k] = (byte) ((> Broadcast ; > ; k * 8) y ; 0xFF) ;
locales int = (dhcp . direcciónip) ; / / Dirección Local IP DHCP
for (int k = 0 ; k < ; 4 ; k + +) localadr [k] = (byte) ((local> ; > ; k * 8) y ; 0xFF) ; / / Para la dirección IP local
}
tratar de
{
ds = new DatagramSocket (puerto) ; / / / Escucha en UDP puerto de datos desde cualquier ip
dentro de una máscara – udp socket para crear una instancia del número de puerto local
}
catch (Exception e)
{
/ / Ehousecommunication . l ( ” Inet Error: la dirección de conseguir ” + E . getMessage ()) ; para la prueba
}
tratar de
{
ds . setBroadcast (true) ; / / Habilitar enviar mensaje de difusión – para la transmisión
ds . setReuseAddress (true) ; / / Habilitar el conector múltiple utilice la misma dirección IP
/ / Ds . setSoTimeout (400) ; / / Tiempo de espera de recepción
}
catch (Exception io)
{/ / Ignorar errores, pero podemos proteger contra errores de la aplicación y del sistema
}
/ / * Udp TEST emisión – broadcastu prueba de difusión UDP desde su teléfono o tableta – futura comunicación con la aplicación de los
/ * Pruebe
{
DatagramPacket dd = new DatagramPacket ( ” Hola Palabra de Android TEST UPD ” . getBytes () , 0 , ” Hola Palabra de Android TEST UPD ” . length () ,
InetAddress . getByAddress (broadcastadr) , puerto) ;
ds . enviar (dd) ; / / Envía un DatagramPacket
}
catch (Exception e)
{
ehousecommunication . l ( ” Transmitir datagramas de error de paquetes: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Bloqueo activado Multicast ” ) ;
/ / Crear una instancia del bloque de multidifusión y broadcastu
ml . Adquirir () ; / / Multicast bloqueo enable udp recepción de la emisión – Se puede desactivar ciertos smartphones Android con fines de ahorro de bateria –
broadcastu apoyo UDP activa el teléfono si éste se bloquea y desactiva sólo
while (! ehousecommunication . Terminar) / loop / infinito para la recepción udp
{/ / Bucle infinito recibir el estado udp
DatagramPacket dp = new DatagramPacket (mensaje , mensaje . longitud) ; / / Crear buffer de paquetes de datagramas UDP con datos – hace uso del paquete UDP
amortiguar ” mensaje ”
try {
ds . recibir (dp) ; / / UDP recepción de paquetes desde el sistema de eHouse – recibe el paquete UDP puerto del UDP de un socket
si (dp . getLength ()> ; 0) / / si el tamaño de las parcelas es mayor que cero – algo recibido
{
EhouseTCP . QueryBuff = dp . getData () ; / / Asignar una difusión UDP recepition querybuffer – cargado en el estado del buffer de eHouse
/ / Dp . setLength (0) ; – tamaño del paquete se establece en cero para no procesar los mismos datos repetidamente
EhouseTCP . QueryReceived () ; / / Decodificar matrices de datos de consulta y rellene los dispositivos – decodifica el estado de los controladores y las cargas de la tabla de estado de la aplicación
}
}
catch (Exception os)
{/ / Ignorar errores
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + S . getMessage ()) ; / / Para única prueba
}
}
ml . Release () ; / / Multicast UDP cierre libre para la recepción de la solicitud eHouse – libera el bloqueo de multidifusión
ds . close () ; / / Cerrar el socket de datagramas al final – cierra el socket al final del
}
Bloqueo de multidifusión puede ser necesario en algunos dispositivos Android .
UDP de difusión local en el caso de los teléfonos móviles puede ser activado o no dependiendo del firmware del teléfono móvil .
También puede ser permanentemente incapacitado para ahorro de batería y por razones de seguridad o para reducir la carga de la CPU en la red en el trabajo .
(Tenga en cuenta la configuración del kernel: CONFIG_IP_MULTICAST no está establecido) .
Además , algunos modelos pueden ser bloqueados por un firewall local y la necesidad de activar la transmisión en un puerto determinado (por defecto 6789) .
Outside Broadcast utilizando las conexiones a Internet GPRS , EDGE , 3G , 4G puede ser bloqueado o desbloqueado por el operador de red . Más a menudo , sin embargo , se debe esperar , que se fija con el fin de minimizar la utilización del enlace .
En algunos modelos de teléfonos móviles , Estado de implementación de software de controladores que reciben UDP puede ser muy difícil o incluso imposible . Puede requerir el uso de niebrandowanego firmware especial o un teléfono inteligente .
Además , se debe tener cuidado cuando upgradowaniu firmware y comprobar que todos los dispositivos están funcionando correctamente fuera de la caja , de lo contrario el diagnóstico de los errores será muy difícil .
Con base en algunos teléfonos HTC y otros productos que contienen la versión del sistema operativo Android inferior a 2 . 3 . 3 observó un bloqueo total UDP recepción broadcastu .
Esta fue la versión de Android (2 . 1 – 2 . 3 del período de 01 . 01 . 2010 – 14 . 06 . 2011)
Si usted no puede recibir UDP broadcastu descarga e instalación , Nueva versión de la ROM de Android mínimo 2 . 3 . 3 (14 de junio , 2011) , que puso a prueba la exactitud de la carga de trabajo de difusión UDP .
Kernel versión 2 . 6 . 35 . 10 – htcg3ef43272 – núcleo y 18 @ – 2 # 1 .
No . 3Descripción . 14 . 405 . 1 .
Para otras marcas de teléfonos con problemas similares , por favor descargue firmware de la ROM Android del fabricante , versión de por lo menos 2 . 3 . 3 .
Tenga en cuenta también las características esenciales de paquetes UDP .
Ellos son asíncronas y requieren leer sobre lo que puede provocar errores de lectura de datos , su pérdida (caída) , especialmente con equipo lento , Enlaces , combinar alta carga de CPU y SmartPhones ocupación y tabletas .
Datos de estado UDP está equipada en checksum para comprobar la validez de los datos .
Home Automation Productor eHouse Domótica eHouse
Controladores eHouse – Domótica eHouse