Système d'automatisation ehouse bâtiment – Logiciel Android de recevoir le statut des contrôleurs via UDP

Ethernet Domotique ehouse vous permet d'envoyer automatiquement un statut broadcastu UDP (User Datagram Protocol) , qui peut recevoir tous les périphériques de votre réseau LAN ou WiFi et IP satisfaisant la condition – Trouvé dans le masque de la section locale 255 . 255 . 255 . 0 , qui est diffusée hors de l'état des adresses IP des contrôleurs 192 . 168 . 0 . x . UDP de diffusion vous permet de désactiver l'état du téléchargement du client TCP / IP , ce qui nécessite une connexion au dispositif de commande . UDP Broadcast est un protocole sans connexion , pour les données de propagation et quelque soit le nombre des dispositifs de réception ne se charge plus le processeur ou les liaisons réseau .
Simple fonction de réception de diffusion UDP avec les smartphones , panneaux et tablettes Android est indiqué ci-dessous .
Il s'agit donc d'une boucle sans fin sur la base de cette fonction , vous devez créer un thread (FIL) qui travaillent en arrière-plan , en lui donnant la priorité la plus basse de travail .
Autrement , l'exécution de cette fonction bloquer l'exécution d'autres activités du programme .
Le code source pour recevoir UDP diffusion plate-forme Android:
public void udp (int port) / port / paramètre à prendre la valeur par défaut diffusé 6789 – dans l'état binaire de commande
{
byte [] broadcastadr = new byte [4] ;
byte [] localadr = new byte [4] ;
WifiManager wifi = (WifiManager) getSystemService (Context . WIFI_SERVICE) ; / / Gestionnaire Wifi
Dhcpinfo dhcp = wifi . getDhcpInfo () ; / / Informez-vous de wifi dhcp
if (dhcp == null) / / récupère la valeur par défaut est désactivé si le DHCP réseau de ehouse
{/ / Pas de dhcp ou une erreur de l'appareil
broadcastadr [0] = (byte) 192 ;
broadcastadr [1] = (byte) 168 ;
broadcastadr [2] = (byte) 0 ;
broadcastadr [3] = (byte) 255 ;
}
else / / DHCP
{
diffusion = int (dhcp . IPAddress & ; ; dhcp . netmask) | ~ dhcp . masque de réseau ; / / Pour diffusion udp – Si vous souhaitez diffuser les données sur la fonction
contrôleur reçoit seulement le statut
for (int k = 0 ; k < ; 4 ; k + +) broadcastadr [k] = (byte) ((diffusée> ; > ; k * 8) et ; 0xFF) ;
locale = int (dhcp . ipaddress) ; / / Adresse ip dhcp local
for (int k = 0 ; k < ; 4 ; k + +) localadr [k] = (byte) ((local> ; > ; k * 8) et ; 0xFF) ; / / Pour obtenir l'adresse ip locale
}
essayer
{
ds = new DatagramSocket (port) ; / / / Écoute sur le port UDP de données à partir de n'importe quel ip
à l'intérieur d'un masque – udp socket pour créer une instance de la numéro de port local
}
catch (Exception e)
{
/ / Ehousecommunication . l ( ” Inet Erreur: obtenir l'adresse ” + E . getMessage ()) ; pour le test
}
essayer
{
ds . setBroadcast (true) ; / / Activer envoyer un message de diffusion – pour la transmission
ds . setReuseAddress (true) ; / / Activer prise multiple utilisent la même adresse IP
/ / Ds . setSoTimeout (400) ; / / Réception délai
}
catch (Exception io)
{/ / Ignorer les erreurs mais nous protéger contre les erreurs d'application et le système
}
/ / * TEST diffusion UDP – broadcastu test de diffusion UDP à partir de votre téléphone ou tablette – future communication avec l'application de
/ * Essayez
{
DatagramPacket dd = DatagramPacket nouvelle ( ” Bonjour Word à partir d'Android UPD ESSAI ” . getBytes () , 0 , ” Bonjour Word à partir d'Android UPD ESSAI ” . longueur () ,
InetAddress . getByAddress (broadcastadr) , port) ;
ds . envoyer (dd) ; / / Envoie un DatagramPacket
}
catch (Exception e)
{
ehousecommunication . l ( ” Erreur de transmission de paquets de datagramme: ” + E . getMessage ()) ;
}
* /
MulticastLock ml = wifi . createMulticastLock ( ” Multicast verrouillage activé ” ) ;
/ / Création d'une instance de la multidiffusion bloc et broadcastu
ml . Acquérir () ; / / Multicast serrure permettre la réception de diffusion udp – Il peut être désactivé Certains smartphones Android à des fins d'économie d'batery –
broadcastu UDP support active le téléphone si elle est verrouillée et ne désactivée
while (! ehousecommunication . Terminate) / / boucle infinie pour la réception udp
{/ / Boucle infinie obtenir le statut udp
DatagramPacket dp = new DatagramPacket (message , message . longueur) ; / / Création d'un tampon de paquets datagrammes UDP en utilisant les données – utilise le paquet UDP
tampon ” message ”
try {
ds . recevoir (dp) ; / / Réception de paquets UDP du système ehouse – reçoit l'orifice du paquet UDP UDP une douille
si (dp . getLength ()> ; 0) / / si la taille du colis supérieur à zéro – quelque chose de reçu
{
EhouseTCP . QueryBuff = dp . getData () ; / / Assigne une diffusion udp recepition querybuffer – charger dans la mémoire tampon d'état ehouse
/ / Dp . SetLength (0) ; – la taille des paquets est mise à zéro afin de ne pas traiter les mêmes données plusieurs fois
EhouseTCP . QueryReceived () ; / / Décodage requête des tableaux de données et de remplir appareils – décode l'état de charge et les contrôleurs de la table d'état d'application
}
}
catch (Exception os)
{/ / Ignorer les erreurs
/ / Ehousecommunication . l ( ” asdfasdfsafsa ” + S . getMessage ()) ; / / Pour test uniquement
}
}
ml . release () ; / / Multicast udp verrou libre pour la réception de la demande ehouse – libère le verrou de multidiffusion
ds . close () ; / / Fermeture de la socket datagramme à la fin – ferme la douille à l'extrémité de
}
Serrure de multidiffusion peut être nécessaire dans certains dispositifs Android .
UDP Diffusion locale dans le cas des téléphones mobiles peut être activée ou non en fonction du firmware téléphone mobile .
Il peut également être désactivé de façon permanente pour économiser la batterie et pour des raisons de sécurité ou pour réduire la charge du processeur sur le réseau au travail .
(Notez la configuration du noyau: CONFIG_IP_MULTICAST n'est pas défini) .
En plus , certains modèles peuvent être bloqués par un pare-feu local et avez besoin d'activer la transmission sur un port donné (par défaut 6789) .
Outside Broadcast lors de l'utilisation GPRS connexions Internet , EDGE , 3G , 4G peut être verrouillé ou déverrouillé par l'opérateur du réseau . Plus souvent , cependant , il faut s'attendre , qu 'il est fixé de manière à minimiser l'utilisation de la liaison .
Dans certains modèles de téléphones mobiles , L'état d'exécution du logiciel des contrôleurs de réception UDP peut être très difficile, voire impossible, . Peut nécessiter l'utilisation de niebrandowanego firmware spécial ou d'un smartphone .
En plus , des précautions doivent être prises lors de upgradowaniu firmware et vérifiez que tous les éléments fonctionnent correctement hors de la boîte , sinon le diagnostic des erreurs sera très difficile .
Sur la base de certains téléphones HTC et autres produits contenant la version du système d'exploitation Android inférieure à 2 . 3 . 3 observées un blocage total UDP de réception broadcastu .
Il s'agissait de la version d'Android (2 . 1 – 2 . 3 de la période de 01 . 01 . 2010 – 14 . 06 . 2011)
Si vous ne pouvez pas recevoir UDP broadcastu téléchargement et l'installation , Nouvelle version ROM Android du minimum 2 . 3 . 3 (14 Juin , 2011) , qui a testé l'exactitude de l'œuvre radiodiffusée charge UDP .
Version noyau 2 . 6 . 35 . 10 – htcg3ef43272 – noyau et 18 @ – 2 # 1 .
Aucun . 3software . 14 . 405 . 1 .
Pour les autres marques de téléphones avec des problèmes similaires , s'il vous plaît télécharger Firmware Android Rom du fabricant , Version d'au moins 2 . 3 . 3 .
Notez également les caractéristiques essentielles des paquets UDP .
Ils sont asynchrones et nécessitent la lecture de ce qui peut provoquer des erreurs de lecture des données , leur perte (chute) , en particulier avec l'équipement lente , links , combiner charge élevée et SmartPhones d'occupation CPU et tablettes .
Données d'état UDP est équipé de contrôle pour vérifier la validité des données .
Producteur Domotique ehouse Domotique ehouse
Contrôleurs ehouse – Domotique ehouse