Decent Scale

Offene BLE API-Dokumentation

Diskussionsforum   Erweiterte API für Half Decent Scale   uns kontaktieren


Wir wollen Code-Beispiele in vielen Programmiersprachen zur Verfügung stellen, die zeigen, wie man Dinge mit der Decent Scale machen kann.
Bitte senden Sie uns eine E-Mail und teilen Sie uns Ihren eigenen Scale-Kommunikationscode mit, damit wir anderen helfen können, schneller loszulegen.

Kurzanleitung: Gewichts- und Tastenanzeigen, Tarierung und Zeitschaltuhr

  1. Schalten Sie die Decent Scale ein, indem Sie die Taste O während 2 Sekunden gedrückt halten.
  2. Führen Sie einen BLE-Scan auf Ihrem Gerät durch und verbinden Sie sich dann mit 'Decent Scale'.
  3. Senden Sie einen TARIERUNGs- oder LED EIN-Befehl an die Waage, damit die APP auf der Waage angezeigt wird. Die Waage wiegt erst dann, wenn eine Art Schreibbefehl an die Waage gesendet wird, damit sie weiß, dass Ihre App vorhanden ist.
  4. Schalten Sie die LED EIN: „030A0101000108“ oder LED AUS: „030A0000000009“
  5. Fragen Sie Gewichtsmeldungen von FFF4 ('0000FFF4-0000-1000-8000-00805F9B34FB') ab. Die Gewichtsmeldungen werden nun 10x pro Sekunde als 2-Byte-Integer mit Vorzeichen (Short) auf den Bytes 3 und 4 ankommen.
  6. Firmware v1.0 und v1.1 senden das Gewicht als 7-Byte-Nachricht. Firmware v1.2 und spätere Versionen senden das Gewicht mit einem Zeitstempel in Form einer 10-Byte-Nachricht.
  7. Optional: Starten Sie die Zeitschaltuhr, indem Sie '030B030000000B' senden und pausieren Sie die Zeitschaltuhr mit '030B0000000008' und setzen Sie die Zeitschaltuhr auf Null zurück mit '030B020000000A'
  8. Tarieren Sie die Waage, indem Sie „030F000000010D” senden.
  9. Schauen Sie sich an, wie die Light Blue Demo diese Befehle ausführt.
  10. Bekanntes Problem: In der Firmware v1.0 für die Decent Scale kann es vorkommen, dass ein Befehl (z.B. Tarierung oder Start der Zeitschaltuhr) nicht ausgeführt wird. Zur Sicherheit sollten Sie einen Befehl zweimal an die Waage senden, mit einer Verzögerung von 50ms oder mehr. Dies wird in der Firmware v1.1 behoben. Ein neuer BLE-Befehl zur Ermittlung der aktuellen Firmware-Version wird in v1.1 hinzugefügt, falls Sie eine bedingte Logik einbauen möchten, um Befehle nicht doppelt zu senden.
  11. Die Half Decent Scale trennt die Verbindung, wenn nicht mindestens alle 5 Sekunden ein Handshake mit dem Wert „03 0a 03 ff ff 00 0a” empfangen wird. Dies ist eine sehr nützliche Funktion, die Zombie-Bluetooth-Verbindungen trennt, die häufig unter Android 9 und früheren Versionen auftreten. Das Senden des Handschlags an ältere Waagen hat keine negativen Auswirkungen. Byte 6 der Befehle TARE und LED ON sollte auf 01 gesetzt werden, da die Half Decent Scale sonst davon ausgeht, dass Ihre App die Handshake-Funktion nicht kennt, und diese nicht durchführt.
  12. Haben Sie Probleme? Laden Sie LightBlue für iOS, Android, Mac herunter und befolgen Sie die im obigen Video dargestellten Schritte.
  13. Programmiererhandbuch zur Half Decent Scale.

Befehlsreferenz:

Gewicht empfangen amFFF4 (0000FFF4-0000-1000-8000-00805F9B34FB)

Firmware v1.0 und v1.1 senden das Gewicht als 7-Byte-Nachricht:
  • 03CE 0000 0000 CD = 0.0 Gramm
  • 03CE 0065 0000 A8 = 10.1 Gramm
  • 03CE 0794 0000 5E = 194.0 Gramm
  • 03CE 1B93 0000 5E = 705.9 Gramm
  • 03CE 2BAC 0000 4A = 1118.0 Gramm

    Firmware v1.2 und spätere Versionen senden das Gewicht mit einem Zeitstempel in Form einer 10-Byte-Nachricht:
  • 03CE 0000 010203 0000 CD = 0.0 Gramm - (1 Minute, 2 Sekunden, 3 Dezisekunden)
  • 03CE 0065 010204 0000 A8 = 10.1 Gramm - (1 Minute, 2 Sekunden, 4 Dezisekunden)
  • 03CE 0794 010205 0000 5E = 194.0 Gramm - (1 Minute, 2 Sekunden, 5 Dezisekunden)
  • 03CE 1B93 010206 0000 5E = 705.9 Gramm - (1 Minute, 2 Sekunden, 6 Dezisekunden)
  • 03CE 2BAC 010207 0000 4A = 1118.0 Gramm - (1 Minute, 2 Sekunden, 7 Dezisekunden)
  • Tarieren (Gewicht auf null zurück setzen)030F000000010E
    LED ein030A0101000108 (Gramm)
    LED aus030A0000000009
    Zeitschaltuhr starten030B030000000B
    Zeitschaltuhr stoppen030B0000000008
    Zeitschaltuhr null030B020000000A
    Ausschalten
    (neu bei Firmware v1.2)
    030A020000000B

    BLE-Kopplung und Timeout

    1. Beim Einschalten meldet sich die Scale für die BLE-Kopplung an. Eine blaue LED blinkt. Das BLE-Gerät heißt 'Decent Scale'.
    2. Die Scale bleibt dauerhaft für die BLE-Kopplung verfügbar. Es gibt kein BLE-Timeout.
    3. Wenn Ihre App eine Verbindung herstellt und dann die Verbindung trennt, dann wechselt die Scale wieder in den BLE-Kopplungsmodus.
    4. Wenn die Scale mit Batterien betrieben wird, dann schaltet sie sich nach 2 Minuten (10 Minuten bei Firmware v1.1) ab, wenn sie nicht über BLE gekoppelt ist oder wenn nichts gewogen wurde.
    5. Wenn die Scale über USB mit Strom versorgt wird, dann schaltet sie sich nie von selbst aus.
    6. Wenn Ihre App eine Verbindung herstellt, wird das Wort APP auf dem Display der Scale angezeigt.
    7. Ein Kurzvideo der Decent Scale ist verfügbar.

    Entwurfsziele für die Scale

    1. Die Gewichtsinformationen sind absichtlich nicht geglättet, da wir der Meinung sind, dass die Glättung in der Software auf einem Computergerät besser durchgeführt werden kann, als in der Waagen-Firmware.
    2. Die Decent Scale hat kein Konzept von 'stabilem Gewicht'. Die aktuellen Messwerte der Wägezelle werden sofort über BLE übertragen.
    3. Wenn Sie geglättete Gewichtsinformationen wünschen, dann sollten Sie dies selbst zusätzlich zu den von der Waage empfangenen Rohdaten implementieren.
    4. Gewichtsveränderungen werden sofort übermittelt.
    5. Es gibt keine 'Schwellwerte', die erreicht werden müssen, damit das Gewicht als verändert gilt.
    6. Diese Waage hat die Eigenschaft, extrem schnell auf Gewichtsveränderungen zu reagieren, bis auf 0,1 g genau.
    7. Wenn sich auf Ihrem Wiegemedium etwas bewegt (z. B. eine Flüssigkeit), dann werden Sie aufgrund dieser Bewegung wahrscheinlich kleine Gewichtsschwankungen feststellen.
    8. Wenn Ihr Anwendungsfall bedeutet, dass Sie es vorziehen, die Gewichtsschwankungen auf der LED der Waage auszublenden, dann können Sie diese deaktivieren. So können Sie das Gewicht nur innerhalb Ihrer App anzeigen lassen. Dies hat den zusätzlichen Vorteil, dass sich die Batterielebensdauer erheblich verlängert.
    9. Ab Firmware v1.2 wird bei jeder Gewichtsmessung ein dezisekundengenauer Zeitstempel angezeigt. Damit können Sie (1) die Durchflussmenge berechnen, (2) feststellen, ob Sie eine Gewichtsmessung verloren haben oder (3) eine Meldung erhalten haben, dass etwas mit dem Gewicht nicht in Ordnung ist.

    Tasten

    1. Es gibt zwei Tasten, die mit einem Kreis (Taste 0) und einem Quadrat (Taste 1) gekennzeichnet sind.
    2. Wenn keine BLE-Verbindung besteht, dann steuern diese Tasten die Stromversorgung, die Tarierung und die Zeitschaltuhr.
    3. Sobald eine BLE-Verbindung besteht, sind diese Tasten vollständig unter der Kontrolle Ihrer App, und deren Drücken hat keinen Einfluss mehr auf die Waage.

    Grenzen

    1. Das Maximalgewicht ist 2000g.
    2. Sehr heiße Getränke können dazu führen, dass die Waage die Werte nicht richtig anzeigt.
      1. Das liegt daran, dass sie die Wiegezelle erwärmen und deren Widerstand unter Belastung verändern.
      2. In der Regel äußert sich dies darin, dass das Gewicht nicht über eine bestimmte Zahl hinaus ansteigt.
      3. Sie können dieses Problem lösen, indem Sie eine isolierende Unterlage zwischen die Waage und Ihr heißes Getränk legen, z. B. ein Stück Silikon oder ein Stück Holz.
    3. Die Decent Scale wird in der Fabrik mit 1000g und 2000g Gewichten kalibriert.
      1. Die Kalibrierung kann jedoch durch den Transport beeinträchtigt werden.
      2. Weitere Informationen finden Sie in der Bedienungsanleitung oder in diesem Kalibrierungsvideo.
      3. Das Gewicht wird mit 10hz gesendet.
      4. Der Batteriestatus wird im Gewichts-Datafeed als Antwort auf den BLE-Befehl 'LED ein oder aus' zurückgesendet.
        1. Siehe 'Senden von Befehlen zum Ein- und Ausschalten von LEDs'.
        2. Bei einem Batteriestand von 3 % oder weniger wird beim Einschalten der Waage die Meldung LO angezeigt.
      5. Wir raten davon ab, schwere Gewichte dauerhaft auf der Waage zu belassen, da dies zu einer langsamen Verformung der Wiegezelle führt und diese dadurch nicht mehr kalibriert werden kann.
      6. Die Waage kann beliebig oft neu kalibriert werden.
      7. Es gibt keinen BLE-Befehl zum Umstellen der Waagenanzeige auf Gramm oder Unzen.
        1. This must be done manually, by pressing both O and [] buttons immediately after turning the scale on. See the User Manual for more information.
        2. Sie können herausfinden, ob die Waage Gramm oder Unzen anzeigt, indem Sie die Antwort auf den BLE-Befehl zum Ein- oder Ausschalten der LED lesen. Siehe 'Senden von Befehlen zum Ein- und Ausschalten von LEDs'.
      8. Wenn ein zweiter BLE-Befehl an die Waage gesendet wird, bevor die Ausführung des ersten Befehls abgeschlossen ist, dann ignoriert die Waage den zweiten Befehl.
        1. Zum Beispiel: ein Tarierungsbefehl unmittelbar gefolgt von einem Startbefehl für die Zeitschaltuhr.
        2. Es wird eine Verzögerung von 200 ms zwischen den an die Waage gesendeten Befehlen empfohlen.
        3. Alternativ können Sie das Senden des zweiten Befehls so lange hinauszögern, bis bestätigt werden kann, dass der erste Befehl ausgeführt wurde.
        4. Ein Beispiel: Nach einem Tarierungsefehl (oder einem Befehl zum Ein- und Ausschalten der LED) wird eine Antwort an Ihre App zurückgesendet, wobei Byte 6 auf FE gesetzt ist, um den Erfolg zu signalisieren.


      BLE-Überblick

      Die Datenpakete der Decent Scale kommen bei '0000FFF4-0000-1000-8000-00805F9B34FB' an.

      Alle BLE-Datenpakete zur/von der Decent Scale haben die folgende 7-Byte-Struktur:

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      0A=LED ein/aus
      0B=Zeitschaltuhr ein/aus
      0F=Tarieren
      Befehl / Angabe (1)Befehl / Angabe (2)Befehl / Angabe (3)Befehl / Angabe (4)XOR-Überprüfung
      6-Byte-XOR zur Überprüfung
      Im Folgenden werden die einzelnen Befehle und Informationsarten näher erläutert.

      Hier ist eine Tcl-Prozedur, die das 7-Zeichen-Binärpaket erstellt, das an die Decent Scale gesendet wird. Es wird zunächst als Text-String erstellt, der dann am Ende der Prozedur in ein 7-Byte-Binärpaket umgewandelt wird:

        proc decent_scale_make_command {cmdtype cmdddata {cmddata2 {}} } {
            if {$cmddata2 == ""} {
                msg "1 part decent scale command"
                set hex [subst {03${cmdtype}${cmdddata}000000[decent_scale_calc_xor "0x$cmdtype" "0x$cmdddata"]}]
            } else {
                msg "2 part decent scale command"
                set hex [subst {03${cmdtype}${cmdddata}${cmddata2}0000[decent_scale_calc_xor4 "0x$cmdtype" "0x$cmdddata" "0x$cmddata2"]}]
            }
            msg "hex is '$hex' for '$cmdtype' '$cmdddata' '$cmddata2'"
            return [binary decode hex $hex]
        }


      XOR-Berechnung

      Um das XOR zu berechnen, sollten Sie ein mathematisches XOR der ersten 6 Bytes bilden.

      Hier ist Tcl-Programmiercode, der das XOR für einen einfachen Befehl berechnet, der nur einen Parameter benötigt, z. B. TARIEREN:

        proc decent_scale_calc_xor {cmdtype cmdddata} {
            set xor [format %02X [expr {0x03 ^ $cmdtype ^ $cmdddata ^ 0x00 ^ 0x00 ^ 0x00}]]
            msg "decent_scale_calc_xor for '$cmdtype' '$cmdddata' is '$xor'"
            return $xor
        }
        

      Hier ist ein Tcl-Programmiercode, der das XOR für einen Zwei-Parameter-Befehl berechnet, z. B. das Aktivieren der LEDs:

        proc decent_scale_calc_xor4 {cmdtype cmdddata1 cmdddata2} {
            set xor [format %02X [expr {0x03 ^ $cmdtype ^ $cmdddata1 ^ $cmdddata2 ^ 0x00 ^ 0x00}]]
            msg "decent_scale_calc_xor4 for '$cmdtype' '$cmdddata1' '$cmdddata2' is '$xor'"
            return $xor
        }
        

      Empfangen von Gewichtsinformationen

      Das Empfangen von Gewichtsdaten ist ein etwas spezieller Fall, da das Gewicht als Zwei-Byte Short Integer mit Vorzeichen von Gramm Gewicht * 10 gesendet wird:

      Firmware v1.0 und v1.1 senden das Gewicht als 7-Byte-Nachricht.

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      CE=Gewicht ist stabil
      CA=Gewicht ändert sich
      Angabe (1)
      Gramm Gewicht * 10

      Großer Byte eines Short Integers mit Vorzeichen
      Angabe (2)
      Gramm Gewicht * 10

      Kleiner Byte eines Short Integers mit Vorzeichen
      Angabe (3)
      Änderung * 10

      Großer Byte eines Short Integers mit Vorzeichen
      Angabe (4)
      Änderung * 10

      Kleiner Byte eines Short Integers mit Vorzeichen
      XOR-Überprüfung
      6-Byte-XOR zur Überprüfung
      Firmware v1.2 und spätere Versionen senden das Gewicht mit einem Zeitstempel in Form einer 10-Byte-Nachricht.

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7BYTE 8BYTE 9BYTE 10
      Modell
      03 = Decent
      Art
      CE=Gewicht ist stabil
      CA=Gewicht ändert sich
      Angabe (1)
      Gramm Gewicht * 10

      Großer Byte eines Short Integers mit Vorzeichen
      Angabe (2)
      Gramm Gewicht * 10

      Kleiner Byte eines Short Integers mit Vorzeichen
      Angabe (3)
      Minuten an
      Angabe (4)
      Sekunden an (0-59 in Hexadezimal)
      Angabe (5)
      Dezisekunden an (0-9)
      Angabe (6)
      zur künftigen Verwendung
      Angabe (7)
      zur künftigen Verwendung
      XOR-Überprüfung
      6-Byte-XOR zur Überprüfung
      Anmerkungen:
      1. Ihre App sollte die Länge der empfangenen Nachricht berücksichtigen und beides analysieren können. Die meisten Apps müssen nur das aktuelle Gewicht kennen: Das einfache Ablesen der Bytes 3 und 4 ist mit allen Decent Scale-Firmwares kompatibel. Alternativ können Sie auch prüfen, ob die Firmware-Version gleich oder größer als 03 ist.
      2. Das aktuelle Gewicht wird als zwei-Byte Short Big-Endian Integer mit Vorzeichen auf den Datenbytes 1 und 2 übermittelt.
      3. Die Gewichtsänderung pro Sekunde wird als vorzeichenloser Big-Endian-Short mit zwei Byte angegeben. Diese Funktion ist jedoch derzeit fehlerhaft und wird nicht zur Verwendung empfohlen. Wenn Sie Daten zur Gewichtsänderung benötigen, sollten Sie diese selbst berechnen. Die Funktion zur Gewichtsänderung wurde mit der Firmware v1.2 eingestellt.
      4. Die Gewichtsinformationen werden mit 10hz gesendet.
      5. Die Waage versucht festzustellen, wann das Gewicht stabil zu sein scheint (keine Veränderung mehr) und setzt das zweite Bytepaar auf CE. Wenn sich das Gewicht ändert, ist der zweite Byte-Teil CA. Sie können dies jedoch ignorieren und Ihre eigene Logik implementieren, um zu entscheiden, wann das Gewicht stabil ist, da für die gemeldeten Gewichtsdaten keine Datenglättung oder Stabilisierung durchgeführt wird.
      6. Oben auf dieser Seite finden Sie Beispiele für 7- und 10-Byte-Nachrichten.


      Empfangen von Tastenbetätigungen

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      AA
      Angabe (1)
      01=Taste 0
      02=Taste 1
      Angabe (2)
      01=kurzes Tippen
      02=langes Drücken
      Angabe (3)Angabe (4)XOR-Überprüfung
      00
      Anmerkungen:
      1. Wenn Sie eine BLE-Verbindung haben, hat das Antippen der Tasten keine funktionelle Auswirkung auf die Waage und kann so programmiert werden, dass es jede beliebige Funktion hat. Sie können diese folglich durch Ihre Programmierung steuern.
      2. Bei der Firmware der v1.1 Waage wird ein Druck der Taste O nicht über BLE gesendet. Wenn Ihre App die Waage tarieren muss, dann sollte sie den BLE-Tarierungsbefehl senden.

      Hier sind Beispiele für Tastenbetätigungen aus dem Protokoll der Light Blue App:
        16:59:51.479 - Merkmal (FFF4) gemeldet: 03aa0101 0000a9 (kurzes Drücken der Taste 0)
        17:35:49.591 - Merkmal (FFF4) gemeldet: 03aa0102 0000aa (langes Drücken der Taste 0)
        17:38:16.702 - Merkmal (FFF4) gemeldet: 03aa0201 0000aa  (kurzes Drücken der Taste [])
        17:39:08.003 - Merkmal (FFF4) gemeldet: 03aa0202 0000a9  (langes Drücken der Taste [])
        
        



      Tarierungsbefehl wird gesendet (Gewicht wird auf null zurück gesetzt)

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      0F
      Angabe (1)
      Erweiterter Integer
      (Kann immer 0 sein)
      Angabe (2)
      00
      Angabe (3)
      00
      Angabe (4)
      00=disable heartbeat requirement
      01=maintain heartbeat
      XOR-Überprüfung
      berechnet
      Anmerkungen:
      1. Der 'erweiterte Integer' ist optional und kann immer Null sein.
      2. Die Bytefolge 030F000000000C führt immer zu einer erfolgreichen Tarierung.
      3. Achten Sie darauf, dass Sie die XOR für BYTE 7 korrekt berechnen, sonst wird der TARIERUNGS-Befehl ignoriert.
      4. Die Half Decent Scale trennt die Verbindung, wenn nicht mindestens alle 5 Sekunden ein Handshake mit dem Wert „03 0a 03 ff ff 00 0a” empfangen wird. Wenn Sie diese Anforderung deaktivieren möchten, sollte Byte 6 auf 00 gesetzt werden. Wenn Sie diese Anforderung beibehalten möchten, sollte Byte 6 auf 01 gesetzt werden. Das Setzen von Byte 6 auf 01 hat keine negativen Auswirkungen auf Modelle, die die Handshake-Funktion nicht unterstützen.
      Und hier ist ein Codefragment, das Ihnen zeigt, wie Sie einen 7-Byte Tarierungsbefehl erstellen können:

        proc tare_counter_incr {} {
        
            if {[info exists ::decent_scale_tare_counter] != 1} {
                set ::decent_scale_tare_counter 0
            } elseif {$::decent_scale_tare_counter >= 255} {
                set ::decent_scale_tare_counter 0
            } else {
                incr ::decent_scale_tare_counter
            }
        
            # alternatively: the tare counter can in fact be any not-recently-used integer, such as this random digit-picker
            # set ::decent_scale_tare_counter [expr {int(rand() * 255)}]
        
        }
        
        proc decent_scale_tare_cmd {} {
            tare_counter_incr
            set cmd [decent_scale_make_command "0F" [format %02X $::decent_scale_tare_counter]]
            return $cmd
        }
        


      Die Decent Scale sendet nach einem Tarierungsbefehl eine Antwort zurück. Diese Antwort hat die folgende Struktur:

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      0F
      Angabe (1)
      Tarierzähler
      Angabe (2)
      00
      Angabe (3)
      00
      Angabe (4)
      FE
      XOR-Überprüfung


      Senden von Befehlen zum Ein- und Ausschalten von LEDs

      BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
      Modell
      03 = Decent
      Art
      0A
      Angabe (1)
      Gewichts-LED ein/aus
      00=aus
      01=ein
      02=Ausschalten
      Angabe (2)
      LED der Zeitschaltuhr ein/aus
      00=aus
      01=ein
      Angabe (3)
      00=Gramm
      01=Unzen
      Angabe (4)
      00
      XOR-Überprüfung
      berechnet
      Anmerkungen:
      1. Die Lebensdauer der Batterie wird verlängert, wenn die LEDs ausgeschaltet bleiben.
      2. Die Waage funktioniert weiterhin, auch wenn beide LEDs aus sind.
      3. Der Ausschaltbefehl wurde in Firmware v1.2 hinzugefügt.
      4. Die einzelne LED, die 'Gewicht ändert sich' anzeigt, leuchtet auf, auch wenn beide LEDs ausgeschaltet sind.
        1. Seit der Firmware v1.1 leuchtet die LED über der quadratischen Taste nicht mehr auf, wenn das Gewicht sich ändert.
        2. Stattdessen leuchtet diese LED auf, wenn eine der beiden Tasten gedrückt wird.
        3. Dies soll dem Benutzer eine visuelle Rückmeldung geben, dass die Betätigung der Taste erkannt wurde.
        Beispiel: alle LED Ein Befehl, mit Gramm:
          03 0A 01 01 00 00 09
          
        Beispiel: alle LED Ein Befehl, mit Unzen: [erfordert v1.1-Firmware]
          03 0A 01 01 01 00 08
          
        Beispiel: alle LED Aus Befehl:
          03 0A 00 00 00 00 09
          
        Beispiel: Ausschaltbefehl:
          03 0A 02 00 00 00 0B
          
        Die Decent Scale sendet nach einem Befehl zum Ein- und Ausschalten der LED (Firmware v1.1) eine Antwort mit Informationen über das Gewicht in Gramm und Unzen, den Batteriestand und die Firmware-Version zurück. Sie hat die folgende Struktur:

        BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
        Modell
        03 = Decent
        Art
        0A
        Angabe (1)
        00
        Angabe (2)
        Gewichtseinheiten auf LED
        00=Gramm
        01=oz
        Angabe (3)
        Batteriestand
        Zwischen 3% (niedrig) 100% (voll).
        FF (255) = USB-betrieben
        Angabe (4)
        Firmware-Version
        FE=v1.0
        02=v1.1
        03=v1.2
        XOR-Überprüfung
        Der Batteriestand wird aufgrund einer Einschränkung auf der Leiterplatte der Waage immer mit 100 % angegeben.
        Hier ist ein Beispiel für das Ablesen des Batteriestands aus dem Protokoll der Light Blue App:
          16:02:36.005 - Merkmal (36F5) schrieb neuen Wert: <030a0101 000009> (wir haben die App benutzt, um diesen Wert zu senden und die LED einzuschalten)
          16:02:36.061 - Merkmal (36F5) gelesen: (null)
          16:02:36.135 - Merkmal (FFF4) gemeldet: 030a0000 64026f (64 hex = 100%, batteriebetrieben)
          
          15:59:50.421 - Merkmal (36F5) schrieb neuen Wert: <030a0101 000009> (wir haben die App benutzt, um diesen Wert zu senden und die LED einzuschalten)
          15:59:50.485 - Merkmal (36F5) gelesen: (null)
          15:59:50.522 - Merkmal (FFF4) gemeldet: 030a0000ff0ac7  (FF hex = 255%, mit USB-Strom betrieben)
          


        Senden von Befehlen zur Steuerung der Zeitschaltuhr

        BYTE 1BYTE 2BYTE 3BYTE 4BYTE 5BYTE 6BYTE 7
        Modell
        03 = Decent
        Art
        0B
        Angabe (1)
        Zeitschaltuhr starten/stoppen/zurücksetzen
        00=Stopp
        02=auf Null zurücksetzen
        03=Start
        Angabe (2)
        00
        Angabe (3)
        00
        Angabe (4)
        00
        XOR-Überprüfung
        berechnet
        Beispiel: Startbefehl für die Zeitschaltuhr
          03 0B 03 00 00 00 0B
          
        Beispiel: Stopbefehl für die Zeitschaltuhr
          03 0B 00 00 00 00 08
          
        Beispiel: Zurücksetzungsbefehl für die Zeitschaltuhr
          03 0B 02 00 00 00 0A
          

        Umfangreicher Beispielcode für den Empfang verschiedener Informationen von der Decent Scale

        Ein größeres bluetooth.tcl-Beispiel gibts auf Github

        Das folgende Codefragment (in der Sprache Tcl, aber hoffentlich können Sie es verstehen) kann Folgendes:
        1. Gewichtsangaben erhalten
        2. einen Tastendruck erhalten
        3. den aktuellen Wert der Zeitschaltuhr erhalten
        set ::de1(cuuid_decentscale_read) "0000FFF4-0000-1000-8000-00805F9B34FB"
        set ::de1(cuuid_decentscale_write) "000036F5-0000-1000-8000-00805F9B34FB"
        set ::de1(cuuid_decentscale_writeback) "83CDC3D4-3BA2-13FC-CC5E-106C351A9352" 
        
        if {$cuuid eq $::de1(cuuid_decentscale_read)} {
            # decent scale
            parse_decent_scale_recv $value weightarray
        
            if {[ifexists weightarray(command)] == [expr 0x0F] && [ifexists weightarray(data6)] == [expr 0xFE]} {
                # tare cmd success is a msg back to us with the tare in 'command', and a byte6 of 0xFE
                msg "- decent scale: tare confirmed"
        
                return
            } elseif {[ifexists weightarray(command)] == 0xAA} {
                msg "Decentscale BUTTON $weightarray(data3) pressed"
                if {[ifexists $weightarray(data3)] == 1} {
                    # button 1 "O" pressed
                    decentscale_tare
                } elseif {[ifexists $weightarray(data3)] == 2} {
                    # button 2 "[]" pressed
                }
            } elseif {[ifexists weightarray(command)] != ""} {
                msg "scale command received: [array get weightarray]"
        
            }
        
            if {[info exists weightarray(weight)] == 1} {
                set sensorweight [expr {$weightarray(weight) / 10.0}]
                #msg "decent scale: ${sensorweight}g [array get weightarray] '[convert_string_to_hex $value]'"
                #msg "decentscale recv read: '[convert_string_to_hex $value]'"
                ::device::scale::process_weight_update $sensorweight $event_time
            } else {
                msg "decent scale recv: [array get weightarray]"
            }
        }
        
        proc parse_decent_scale_recv {packed destarrname} {
            upvar $destarrname recv
            unset -nocomplain recv
        
               ::fields::unpack $packed [decent_scale_generic_read_spec] recv bigeendian
        
               if {$recv(command) == 0xCE || $recv(command) == 0xCA} {
                   unset -nocomplain recv
                   ::fields::unpack $packed [decent_scale_weight_read_spec2] recv bigeendian
               } elseif {$recv(command) == 0xAA} {
                   msg "Decentscale BUTTON pressed: [array get recv]"
               } elseif {$recv(command) == 0x0C} {
                   unset -nocomplain recv
                   ::fields::unpack $packed [decent_scale_timing_read_spec] recv bigeendian
                   msg "Decentscale time received: [array get recv]"
               }
        }
        
        proc decent_scale_generic_read_spec {} {
            set spec {
                model {char {} {} {unsigned} {}}
                command {char {} {} {unsigned} {}}
                data3 {char {} {} {unsigned} {}}
                data4 {char {} {} {unsigned} {}}
                data5 {char {} {} {unsigned} {}}
                data6 {char {} {} {unsigned} {}}
                xor {char {} {} {unsigned} {}}
            }
            return $spec
        }
        
        proc decent_scale_weight_read_spec2 {} {
            set spec {
                model {char {} {} {unsigned} {}}
                wtype {char {} {} {unsigned} {}}
                weight {Short {} {} {signed} {}}
                rate {Short {} {} {unsigned} {}}
                xor {char {} {} {unsigned} {}}
            }
            return $spec
        }