Verwenden von Beacons

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Verwenden von Bluetooth


Eine Beacon ist ein Bluetooth Low Energy-Gerät, das Information in seinen Bekanntgabedaten, insbesondere in den "Manufacturer Specific Data" (Herstellerspezifische Daten), die in "Bluetooth Specification Version 4.1, Seite 2023" https://www.bluetooth.org/en-us (EN) beschrieben sind. Diese Informationen ermöglichen Bluetooth Low Energy-Geräten in der Umgebung, das Gerät zu identifizieren und die Entfernung dazu zu berechnen, ohne dass eine Koppelung oder die Einrichtung einer Verbindung erfolgen muss.

Übersicht über Beacons

Beacon-Typen

Es sind zwei Beacon-Formate erhältlich: iBeacon und AltBeacon:

  • iBeacon: Ist das von Apple definierte Format. Für die RTL-API ist iBeacon der Standardmodus.
  • AltBeacon: Ist ein offenes Format, auch als "alternative Beacon" bezeichnet. Die vollständigen Spezifikationen finden Sie unter http://altbeacon.org (EN). Für die RTL-API ist die alternative Beacon der alternative Modus.

Sie müssen das Format kennen, das die Beacon verwendet, die Sie überwachen möchten.

Herstellerinformationen

Bluetooth Low Energy-Geräte im Bekanntgabemodus senden wiederholt die Bekanntgabedaten in verschiedenen Strukturen vom Typ AD. Einer der AD-Typen in den Bekanntgabedaten sind die "herstellerspezifischen Daten", die mit Beacons verwendet werden. Die Daten in den "herstellerspezifischen Daten", die die RTL-API für Beacons bereitstellt, umfassen:

  • UUID: Ein eindeutiger Bezeichner, der eine Gruppe von Beacons kennzeichnet, z. B. die Beacons für eine bestimmte Firma.
  • MajorID, MinorID: Bezeichnet die Bereiche in einer bestimmten UUID. Die MajorID bezeichnet einen Unterbereich in einem größeren durch die UUID festgelegten Bereich. Die MinorID gibt weitere Unterbereiche in einer MajorID an.
  • TxPower: Die TxPower ist die gemessene Leistung in einem 1 Meter Entfernung. Mit TxPower und dem Indikator für die Stärke des empfangenen Signals (Received Signal Strength Indicator, RSSI) wird die ungefähre Entfernung zu einer Beacon berechnet.

Plattformunterstützung

Plattform Unterstützt

Windows

Mac OS X

10.7+

iOS

5+

Android

4.3+

Die RTL-API für Beacons steht für die Windows-Plattform nicht zur Verfügung, weil auf die Bekanntgabedaten nicht zugegriffen werden kann.

Verwenden von Beacons

Mit der RTL-API für Beacons können Sie den Abstand zwischen dem Gerät, auf dem Ihre Anwendung ausgeführt wird, und den Beacons in der Umgebung ermitteln. Die RTL-API für Beacons stellt nur Informationen für die Beacons in einem bestimmten Bereich bereit. Bereich ist ein Gruppe von Beacons, die mit ihrer UUID, MajorID und MinorID angegeben sind.

Abrufen einer Instanz von TBeaconManager

Für die Verwendung der RTL-API für Beacons müssen Sie die Unit System.Beacon in Ihre Anwendung einbeziehen und TBeaconManager.GetBeaconManager für den gewünschten TBeaconScanMode aufrufen, um eine Instanz von TBeaconManager abzurufen.

Für iBeacons:

    BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Standard);

Für AltBeacons:

    BeaconManager := TBeaconManager.GetBeaconManager(TBeaconScanMode.Alternative);

Der ScanMode bezeichnet den Typ der Beacon, nach dem das System suchen soll: Standardmodus oder alternativer Modus. TBeaconManager ist die Hauptklasse der Beacon-Implementierung der RTL-API für Beacons. TBeaconManager ist für die Registrierung von Bereichen zuständig und verwaltet die Ereignisse zum Abrufen von Informationen von den Beacons. Die TBeaconManager-Instanz muss entweder für den Standardmodus oder den alternativen Modus erstellt werden.

Registrieren der zu überwachenden Bereiche

Sie müssen die Bereiche der Beacons registrieren, die Sie überwachen möchten. Zum Registrieren von Bereichen muss TBeaconManager.RegisterBeacon aufgerufen werden.

    BeaconManager.RegisterBeacon(TGUID.Create(UUID));

Bereiche werden mit den Parametern UUID, MajorID und MinorID angegeben. Für die Registrierung eines Bereichs ist nur der Parameter UUID erforderlich. Wenn Sie den zu registrierenden Bereich detaillierter angeben möchten, können Sie auch MajorID, MinorID oder beide entsprechend den drei überladenen Funktionen TBeaconManager.RegisterBeacon verwenden.

Starten und Beenden der Überwachung von Beacons

Wenn die zu überwachenden Beacons registriert sind, können Sie mit der Überwachung dieser Beacons beginnen, indem Sie TBeaconManager.StartScan aufrufen. Wenn Sie die Überwachung von Beacons beenden möchten, müssen Sie TBeaconManager.StopScan aufrufen.

Abrufen von Informationen von eingehenden Beacons

Die Informationen über die überwachten Beacons rufen Sie über die dem TBeaconManager zugeordneten Ereignisse ab. Diese Ereignisse sind:

  • OnBeaconEnter: Wird jedes Mal ausgelöst, wenn eine neue Beacon erreichbar ist.
  • OnBeaconExit: Wird jedes Mal ausgelöst, wenn eine Beacon nicht mehr erreichbar ist.
  • OnBeaconProximity: Wird jedes Mal ausgelöst, wenn sich der Wert von Proximity ändert.
  • OnCalcDistance: Wird unmittelbar vor der Berechnung der Entfernung (Distance) ausgelöst.
  • OnEnterRegion: Wird ausgelöst, wenn eine Beacon zum ersten Mal aus einem registrierten Bereich erreichbar ist.
  • OnExitRegion: Wird ausgelöst, wenn alle registrierten Beacons in einem Bereich unerreichbar sind.

Nach Auslösen des Ereignisses können Sie die von dem Ereignis bereitgestellten Informationen verwenden.

Hinweis: Wenn Sie mehrere Bereichseinträge mit derselben UUID registrieren und Sie diese überwachen möchten, können Sie aufgrund von plattformübergreifenden Anforderungen nur Ereignisse des letzten Bereichseintrags, den Sie in der TBeaconRegionCollection registriert haben, abrufen. Wenn Sie verschiedene Bereiche überwachen möchten, können Sie abhängig von Ihrem Szenario eine der beiden folgenden Vorgehensweisen anwenden:
  • Registrieren Sie einen Bereich mit dessen UUID, MajorID=-1 und MinorID=-1, um Ereignisse zu erhalten, die allen Beacons mit derselben UUID zugeordnet sind.
  • Registrieren Sie einen Bereich mit dessen UUID, und entwickeln Sie Ihre App so, dass MajorID und MinorID Ihren benutzerdefinierten Werten und App-Anforderungen entsprechend gefiltert werden.

Hinzufügen von Positionsdiensten

Positionsdienste ermöglichen, positionsbasierten Apps anhand von Informationen von Mobiltelefonen, WiFi, GPS und Beacons Ihren ungefähren Standort ermitteln. Zur Ermittlung von Beacons müssen Sie die Positionsdienste aktivieren.

Für Android müssen Sie die Bluetooth-Optionen in Projekt > Optionen > Verwendet Berechtigungen aktivieren.

Für die iOS-Plattform im alternativen Modus müssen die Positionsdienste nicht aktiviert werden. Im Standardmodus (iBeacons) muss die Anforderung der Positionsaktivierung beim ersten Aufruf der App akzeptiert werden.

Für iOS 8.0 im Standardmodus sind bestimmte Schlüssel erforderlich, damit die Anwendung für die Verwendung der für die Beacon-Ermittlung benötigten Positionsdienste aktiviert wird. Die IDE bezieht bereits NSLocationAlwaysUsageDescription und NSLocationWhenInUseUsageDescription ein.

Der folgende Schlüssel muss manuell hinzugefügt werden:

  • NSLocationUsageDescription

Für die Werte ist nur eine Textmeldung wie z. B. "Diese App muss auf Positionsdienste zugreifen, um Beacons zu überwachen" erforderlich. Das System zeigt die Textmeldung beim Zugriff auf die App-Konfiguration an.

Der Schlüssel kann in der IDE hinzugefügt werden: Wählen Sie Projekt > Optionen > Versionsinformationen, klicken Sie dann mit der rechten Maustaste auf die Tabelle, und wählen Sie Schlüssel hinzufügen.

BeaconKeysFig1.png

Einschränkungen in Räumen

Das Funksignal, das Beacons senden, ist hochempfindlich gegenüber Rauscheffekten, wie Diffraktion, Absorption, Mehrwegreflexionen oder Störungen, die von anderen Geräten herrühren, die in demselben Funkfrequenzband senden. Insbesondere wirken sich diese schädlichen Einflüsse negativ auf das Signal des Beacon in Innenräumen aus. Als Ergebnis sind die aus Leistungsmessungen extrahierten Schätzwerte, wie Rssi (Stärke des empfangenen Signals), Distance (Entfernung) oder Proximity (Näherungsstufe), erheblich instabil und unterliegen starken Schwankungen. Demgemäß nimmt die Genauigkeit dieser Schätzwerte ab.

Signalverarbeitung

Die RTL stellt zwei verschiedene Algorithmen bereit, um das Signal eines Beacon und die aus diesem Signal extrahierten Schätzwerte zu stabilisieren:

  • RssiToDistance führt ein Modell ein, mit dem der aus den Rssi-Messungen abgeleitete Entfernungsschätzwert ermittelt werden kann. Die Robustheit dieses Algorithmus wird durch einen kalibrierten Leistungsparameter, ATxPower, erhöht.
  • TBeaconManager implementiert einen optionalen Differentialfilter-Algorithmus. Dieser Algorithmus stabilisiert die Rssi- und Entfernungs-Messungen. Wählen Sie bei der Eigenschaft CalcMode den Berechnungsmodus Stabilized aus, um diesen Algorithmus zu aktivieren. Dieser Modus ist insbesondere für die Näheschätzung und die Bewegungserkennung geeignet.

Integrieren von Algorithmen

Sie können auch weitere Algorithmen für die Signalverarbeitung integrieren, wobei es sich um allgemeine oder von Ihnen selbst entwickelte Algorithmen handeln kann. Die folgende Liste enthält einige Beispielfilter, die Sie zur Reduzierung von Rauscheffekten implementieren können:

  • Bewegungsmittelungsfilter
  • Gewichtete Durchschnittsfilter
  • Kurvenanpassungsfilter

Siehe auch