2015-10-28 1 views
1

Android Vers. > 4.3 Bibliothèque de balises Android standard Estimote Beacons. Paquet Eddystone-UID Paquet de télémétrie. J'essaie de lire la transmission du capteur de température du paquet de télémétrie d'une transmission de paquet Eddystone-UID. Je peux lire avec succès les données beacon.getExtraDataFields(). Get (2) pour la transmission de la température selon les expansions Eddystone [Telemetry] dans la bibliothèque Beacon Android. Ces données s'impriment sous la forme d'un nombre à 4 ou 5 chiffres en fonction de la température. Je suis informé par le fait que le capteur de température de la balise transmet un nombre de points fixes 8: 8 ... lecture beacon.getExtraDataFields(). Get (2) puis en divisant par 256, j'obtiens la lecture de température en Celsius. Cependant dès que la température croise 0 degC dans le négatif, j'obtiens de grandes divergences. La recherche parmi les forums semble indiquer que c'est à voir avec la notation 8: 8 et la conversion en décimal. Bien que je comprenne le concept de notation à point fixe 8: 8, je ne peux pas trouver une référence sur la façon de lire un point fixe négatif et de le convertir en degC négatif en utilisant les méthodes de la balise Android.Bibliothèque Android Beacon Eddystone Telemetry. Température

[Note: Android SDK Estimote et leur application de balise avaient le même problème ... ils ont fixé en mettant à jour leur SDK ... J'utilise la bibliothèque Android et non Estimote SDK]

orientation sera plus apprécié.

Répondre

1

Le code ci-dessous est utilisé pour convertir le champ de température de télémétrie Eddystone codé en degrés Celsius. Ceci est pris du Locate Android app, qui utilise également le Android Beacon Library. Ce code a été testé avec des balises Eddystone de Radius Networks.

long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8); 
double temperature = unsignedTemp > 128 ? 
    unsignedTemp - 256 : 
    unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0; 

Vous pouvez essayer cette formule de conversion avec les balises que vous avez sous la main. Si vous trouvez que cela ne fonctionne pas, essayez également l'application Localiser pour vous assurer de voir la même chose. Si tel est le cas, il se peut que la valeur codée ne soit pas entièrement conforme à la spécification Eddystone.

+0

ont bien fonctionné. Testé avec la balise Estimote. plage de température +25 à -22 degC. Je vous remercie. – William

0

J'utilise cette méthode avec formule davidgyoung de conversion pour récupérer la température d'une balise, en jetant à un flotteur avec deux décimales:

public static float getTemperatureFromBeacon(Beacon beacon) { 
    long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8); 
    double temperatureDouble = unsignedTemp > 128 ? 
      unsignedTemp - 256 : 
      unsignedTemp + (beacon.getExtraDataFields().get(2) & 0xff)/256.0; 
    float temperature = (float) Math.round(temperatureDouble * 100)/100; 
    return temperature; 
}