AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android - BlueTooth LE Advertise Broadcast Bytes empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Android - BlueTooth LE Advertise Broadcast Bytes empfangen

Ein Thema von OrtmannMedia · begonnen am 18. Feb 2017 · letzter Beitrag vom 3. Mai 2017
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
OrtmannMedia
(Gast)

n/a Beiträge
 
#1

Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 01:08
Hallo,
ich habe eine Hardware, die sendet per BlueTooth LE (4.1) broadcasts im Advertise modus.
Also da können ja 25 Bytes als PayLoad gesendet werden.
Diese möchte ich nun mit meiner Android-App empfangen.
Mit BlueToothLE1.DiscoverDevices(15000); bekomme ich das Gerät auch schön gelistet,
und habe dann im event TForm1.BluetoothLE1EndDiscoverDevices auch das Device gelistet:
ADeviceList[i].DeviceName...

Jetzt möchte ich die Payload, also die Broadcast bytes haben.
Leider gibt die Help garnix her... aber z.B. habe ich gefunden
ADeviceList[i].AdvertisedData. ...
Das hört sich zumindest schon mal so an.

Wer kann mir helfen, wie kann ich die Bytes zu empfangen, bitte?
Viele Grüße, Jürgen
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.096 Beiträge
 
Delphi 12 Athens
 
#2

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 01:19
Hast du die Demos BleScanner und ExploreDevicesLE ausprobiert ?
Da kann man schon eine Menge Geräte mit analysieren.

Rollo
  Mit Zitat antworten Zitat
OrtmannMedia
(Gast)

n/a Beiträge
 
#3

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 12:08
Hi, oh, stimmt gibt's ja Samples. Probiere ich erst mal. Danke, Jürgen
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#4

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 13:10
schaue dir die "AdvertisedData" BINÄR an, verlasse dich nicht auf die Erkennung&Aufteilung durch den BLE Stack&Delphi... suche dir also deine PayLoad-Daten und verifiziere sie selbst(z.B. durch eine eigene CRC), lass dir was zum Thema Simulationssicherheit durch Fremde einfallen! (BLE-Name+XYZ als "SALT" der CRC oder was auch immer, verwende nicht die MAC des BLE Gerätes, weil die bekommt deine App unter IOS leider NICHT heraus, weil Apple die nur für eigene Zwecke intern verarbeitet und den APPs nur einen HashID zur Geräteidentifikation anstatt der BLE-MAC herausgibt.

Verwende bitte mindestens IOS9.x oder Android 5.1 oder neuer... IOS8.x und Android 4.4.x und Android 5.0.x hatten das Problem, das sich erstens die PrimaryServiceID nicht sauber als AdvertiseFilter nutzen ließ und zweitens sich die AdvertiseDaten(PayLoad und Name) nicht aktualisiert haben, wenn die BLE MAC einmal erfasst wurde (CacheProblem im AndroidStack, da half nur gesteuertes BLE Disable,Wait,"DisabledCheck" und Enable... wenn "BLE-Disable nicht binnen 3sec möglich, Hinweis an Nutzer, doch bitte mal sein Gerät hart neu zu starten)

Da der AdvertisePayload im BLE "zeitlich" begrenzt ist, sollte man möglichst kurze Namen(bis 8Standard-ASCII-Zeichen und nur eine PrimaryServiceID im BLE Gerät konfigurueren und den Payload als "UserDefined" wenn man echt die Daten will(das verhindert das OS-Services den PayLoad "abfangen", wie sie es bei erkanntem "BeaconPayload" machen), wenn man lieber einen AutoWakeup+AutoStart seiner App möchte, dann sollte man seinen BLE-Advertise-Payload als "BeaconSimualtion" OS kompatibel senden... dann klappt wenn man es geschickt anstellt das sogar unter IOS(ist aber etwas tricky und nur rechtlicher Graubereich ohne echte Apple-MFI Lizenz )

Prüfe wenn IOS für dich wichtig bitte immer zuerst was unter IOS geht, denn es gilt grob gesagt: alles was unter IOS geht, klappt auch unter aktuellen Androids, umgedreht gilt das leider NICHT! Speziell bei NonStandard BLE Daten verhält sich Android gutmütig und gibt alles an seine APPs weiter. Bei IOS bekommt man nur das, was Apple einem freigibt und durchreicht. Seit Apple IOS Richtung SmartHome intern erweitert, ist aktuelles IOS gerade wieder verschärft wurden, da bereitet man intern eine weitere Lizenzstruktur im Advertise Payload für offizielle MFI kompatible BLE Geräte vor. (Nach "Connect" kann ja jeder machen was er will, aber gerade das "normale" Advertise als verbindungsloses BroadCast für eigene Daten(änderungen) zu nutzen... da arbeiten Apple und andere wie auch wir gerade ausgiebig daran )
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 13:21
Da will ich mal kurz ne Frage einwerfen, vielleicht wisst ihr das ja als BT Experten

Wenn ich einen externen Kamera Auslöser habe, der sich ja beim Android Gerät als Keyboard anmeldet, und ich mochte den Knopfdruck in meiner App mitbekommen, dann kann ihc das OnKeyPress Event des Forms nehmen während die App im Vordergrund ist.

Wenn sie im Hintergrund ist, krieg ich das nicht mehr...
Gib es eine Chance, das Event zu bekommen ?

Danke
  Mit Zitat antworten Zitat
OrtmannMedia
(Gast)

n/a Beiträge
 
#6

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 13:57
Hallo mensch72, danke,
ja Android 5.1 mache ich als Voraussetzung. IOS wird nicht unterstützt werden.
Sender ist ein Microchip RN4020. Ich setze den in Broadcast mit ein paar bytes Payload
(z.B. Temperaturmess-Daten) und lasse ihn advertisen (mit no direct advertisement,
so dass ihn alle nicht-gebondeten Devices sehen müssten, wenn sie vorbeikommen).
Im 100ms Intervall, invinite.
Die Payload-Daten selbst enthalten auch noch ein paar Bytes extra für eine Id, damit ich ein bisschen weiss, obs auch meine Payload ist und zur Fehlererkennung usw.
Autowake/start der App brauche ich nicht. Die App wird vom Anwender gestartet und soll sich dann
auf klick auf die Suche machen und die Temperatur anzeigen. Sonst eigentlich nix.
Habe dem RN4020 schon einen (kurzen) DeviceName gegeben, und das Ding wird
nach DiscoverDevices auch schon gefunden und gelistet.
Nun eben noch, womit komme ich an die Payload?
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#7

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 20:48
Ich behaupte, ich weiß hier zufällig mal sehr sehr gut Bescheid... "zufällig" setzen wir auch das RN4020 von Microchip von Anfang an ein, sogar in mittlerweile 5stelliger Stückzahl

Welche Softwareversion hast du auf dem RN4020?
(V1.20/V1.23 oder V1.33+ ... alles unter V1.20 ist Schrott, lässt sich aber per DFU/OTA updaten)

Hast du am RN4020 noch ein eigenes Programm(z.B. Microcontroler), oder willst du es per "Script" Standalone im Modul machen?
(Script unter V1.23 funktioniert nie wirklich gut, und wirklich drauf verlassen tun wir uns auch aktuell nicht, wir setzen immer einen eigenen Microcontroler zur Modulsteuerung und Powermanagement bei BattSystemen ein)

Wie konfigurierst du dein Modul?
(... sag mal deine "SS" & "SR" Werte)

Wenn es dir wirklich nur um ein paar Bytes(bis zu 5Bytes+1ByteCRC) eigenen Payload im Advertise geht, würde ich dir sogar als schnelle und 100% Android&IOS kompatiple Alternative empfehlen, nur den BLE Advertise Namen (SN oder S_ Komando) als 8Zeichen Base64 kodierte 6Bytes zu nutzen und eine 16ByteGUID als PrivateService zu definieren, womit du "deine Geräte" erkennen und vorfiltern kannst. Dann einfach bei allen 8Zeichen langen BLE Namen diese Base64 decodieren und die CRC der 5+1Bytes prüfen... so machen wir das nebenbei auch noch, weil das Verfahren 2 Vorteile hat: Die BLE Namen sind "unlesbar" was den Spieltrieb von Leuten mit BLE Scannern deutlich reduziert, das Verfahren bietet "zusätzliche" 40Bit Payload und funktoniert sogar mit allen Wald&Wiesen BLE-Modulen sowie ab Android 4.4 und IOS8.x

Geändert von mensch72 (18. Feb 2017 um 21:14 Uhr)
  Mit Zitat antworten Zitat
OrtmannMedia
(Gast)

n/a Beiträge
 
#8

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 23:04
Oh, wow, das ist allerdings ein sehr schöner Zufall!
Super

Ja, der wird über einen PIC32MX340 angesteuert.
Habe mal ausgelesen, mein Modul, in meinem Projekt,
antwortet mir mit Version "MCHP BTLE v1.23.5 8/7/2015".
Habe die von Microchip Direct Ende letzten Jahres bekommen.

(Ausserdem habe ich aber noch so ein Demo-Board von Microchip,
das man über USB am PC ausprobieren kann,
das hat noch das 1.20 drauf sehe ich grade.)

Ich habe mir das Setup lt. User Guide mal so ausgedacht:

SN,BLUETEST
SR,04000000
R,1
N,12345566
A

Lasse ich das N, .. weg,
dann kommt das Teil beim Scannen als BLUETEST auch gelistet.
Mit N, ist es unsichtbar.

Jedoch:
Inzwischen habe ich das Demo-Board mit
SR,80000000 (set to central)
R,1
F
J,1
aufgesetzt. Und es sausen die Broadcast-Daten daher.
Also scheint das Broadcasten schon zu klappen.

Jetzt müsste ich die bytes noch in Delphi reinbekommen.
Hier bin ich leider noch nicht so weit.

Ansonsten, ja stimmt, könnte man auch im DeviceNamen was so geschickt reintun.
Und PrivateService definieren u. filtern.
Hat ja sogar nennenswerte Vorteile wie Du schreibst.
Muss ich mal nachdenken.

Die Broadcast-Daten bekomme ich die überhaupt mit Delphi?
Wenn nicht, wäre eben die DeviceName Idee eine Lösung.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#9

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 23:12
der SS Wert wäre noch sehr wichtig!

oder mach mal ein "D" wie "Dump" und gibt mal die gesamte Rückgabe
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#10

AW: Android - BlueTooth LE Advertise Broadcast Bytes empfangen

  Alt 18. Feb 2017, 23:22
deine zwar gut gedachte Kombi aus

Y ...als "Disable(Auto)Adverise" fehlt, sonst kann man keine AdvertiseDaten setzen/ändern
N,12345566 ... klar das sollen deine Broadcast Daten sein
A ... EnableAdvertise

klappt so leider trozdem nicht, da der BroadCast(Beacon)-Mode des RN4020 vor Version 1.33 leider zu nix kompatibel ist!

Entweder du machst überall V1.23 drauf und nutzt den BLE Namen, oder mach das Update auf V1.33 und lies dir von Microchip die ReleaseInfo durch, das steht recht gut beschieben wie du echt binär mit Kennung deine Zusatzdaten für das normale Advertise definieren kannst. ("N" ist was für ala "BeaconMode"... wir verwenden es nicht, weil nicht kompatibel zum BLE-Standard.Scan unter Android&IOS)

Geändert von mensch72 (18. Feb 2017 um 23:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz