AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Batteriezustand von einem Bluetooth LE Gerät auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Batteriezustand von einem Bluetooth LE Gerät auslesen

Ein Thema von TUX_der_Pinguin · begonnen am 24. Aug 2022
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Batteriezustand von einem Bluetooth LE Gerät auslesen

  Alt 24. Aug 2022, 14:51
Hallo,

wir haben hier ein kleines Gerät welches per Bluetooth LE mit einem Windows 10 Rechner verbunden wird. Mir ist aufgefallen das in den Windows Einstellungen der Zustand der Batterie des Gerätes angezeigt wird. Da habe ich mich gefragt ob ich nicht in einer eigenen Software das auch machen kann. Um evtl. in der Software darauf reagieren zu können. Bisher hatte ich mich noch überhaupt nicht mit dem Thema Bluetooth und Delphi beschäftigt.

Ich habe dann nach etwas Recherche und viel probieren es zumindest hinbekommen das Gerät zu identifizieren, jedoch bekomme ich die Info zum Batteriezustand nicht.

Unter anderem habe ich diese Webseite https://www.andreasjakl.com/read-bat...th-le-devices/ gefunden, auf der Schritt für Schritt das ganze erklärt wird. Leider nicht in Delphi sondern einer anderen Sprache. Und irgendwie hapert es mit dem Auslesen des Wertes.


In einer Testanwendung habe ich auf das Formular eine TBluetoothLE Komponente gepackt und 'Enabled' auf 'True' gesetzt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  BATService: TBluetoothUUID = '{0000180F-0000-1000-8000-00805F9B34FB}';
  BATLevel: TBluetoothUUID = '{00002A19-0000-1000-8000-00805F9B34FB}';
var
  Index: Integer;
  Idx: Integer;
  i: Integer;

begin

  if BluetoothLE1.DiscoverDevices(4000) then
  begin
    Memo2.Lines.Add('Anzahl Geräte: '+BluetoothLE1.CurrentManager.AllDiscoveredDevices.Count.ToString);

    if BluetoothLE1.CurrentManager.AllDiscoveredDevices.Count > 0 then
    begin

      for Index := 0 to BluetoothLE1.CurrentManager.AllDiscoveredDevices.Count-1 do
      begin
        with BluetoothLE1.CurrentManager.AllDiscoveredDevices.Items[Index] do
        begin

          //Das gewünschte Gerät "auswählen"
          if Copy(DeviceName,1,4) = 'BLE_then
          begin
            Memo2.Lines.Add('Identifier: '+Identifier);
            Memo2.Lines.Add('DeviceName: '+DeviceName);
            Memo2.Lines.Add('Paired: '+BoolToStr(Paired, True));
            Memo2.Lines.Add('IsConnected: '+BoolToStr(IsConnected, True));
            Memo2.Lines.Add(EmptyStr);

            //Wenn Gerät verbunden ist, Batteriezustand ermitteln...
            if IsConnected then
            begin

              if DiscoverServices then
              begin

                for Idx := 0 to Services.Count-1 do
                begin

                  //Battery Service
                  if Services.Items[Idx].UUID = BATService then
                  begin
                    Memo2.Lines.Add('UUID: '+Services.Items[Idx].UUIDName+' ('+Services.Items[Idx].UUID.ToString+')');
                    Memo2.Lines.Add('Characteristics.Count: '+Services.Items[Idx].Characteristics.Count.ToString);

                    for i := 0 to Services.Items[Idx].Characteristics.Count-1 do
                    begin
                      Memo2.Lines.Add('Characteristic UUID:'+Services.Items[Idx].Characteristics.Items[i].UUIDName+' ('+Services.Items[Idx].Characteristics.Items[i].UUID.ToString+')');

                      //Battery Level
                      if Services.Items[Idx].Characteristics.Items[i].UUID = BATLevel then
                      begin

                        with Services.Items[Idx].Characteristics.Items[i] do
                        begin

                          if TBluetoothProperty.Read in Properties then
                          begin

                            Memo2.Lines.Add('Value.Count: '+Length(Value).ToString); //!!! Value ist leer es enthält keine Bytes !!!

                          end;{if}
                        end;{with}
                      end;{if}

                    end;{for}

                    Memo2.Lines.Add(EmptyStr);
                  end;{if}

                end;{if}

              end
              else
                ShowMessage('DiscoverServices failed');

            end;{if IsConnected}

          end;{if}

        end;{with}
      end;{for}

    end
    else
      ShowMessage('No devices found!');

  end
  else
    ShowMessage('Discover failed');

end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:31 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