sputnikdev / bluetooth-gatt-parser Goto Github PK
View Code? Open in Web Editor NEWBluetooth GATT service and characteristic parser
License: Apache License 2.0
Bluetooth GATT service and characteristic parser
License: Apache License 2.0
Built the project with mvn clean install . The build was successful. Included jar in project and tried. This error was thrown -
java.lang.NoClassDefFoundError for com.thoughtworks.xstream
Some bluetooth GATT specifications (XML files) are not valid to use them in automated process to parse characteristic values, these are the following characteristics:
Please note that some of the characteristics above are not used for read operations at all (write operations only).
Gatt parser should be flexible enough to allow users to parse these specifications anyway. There might be some options:
Bit tag can be longer that 1 bit. GattParser should support reading the such flags, for example:
<Bit index="20" size="2" name="Distribute System Support">
<Enumerations>
<Enumeration key="0" value="Unspecified (legacy sensor)"/>
<Enumeration key="1" value="Not for use in a distributed system"/>
<Enumeration key="2" value="Can be used in a distributed system"/>
<Enumeration key="3" value="RFU"/>
</Enumerations>
</Bit>
Hi,
edit: I removed the weird copy/paste stuff above :)
Could someone help with the gatt files? The binding is picking up the Soma Blinds but does not seem to be using the gatt files and showing the rest of the characteristics
I’ve got it in a folder which has access by openhab user. Folder is alongside the items and things folders.
org.bluetooth.characteristic.blind_position.xml
<?xml version="1.0" encoding="utf-8"?><!--Copyright 2011 Bluetooth SIG, Inc. All rights reserved.-->
<Characteristic xsi:noNamespaceSchemaLocation="http://schemas.bluetooth.org/Documents/characteristic.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Blind Position"
type="org.bluetooth.characteristic.blind_position" uuid="1525" last-modified="2011-12-05"
approved="No">
<InformativeText>
<Abstract>
Position of blinds
</Abstract>
</InformativeText>
<Value>
<Field name="Position">
<Requirement>Mandatory</Requirement>
<Format>uint8</Format>
<Unit>org.bluetooth.unit.percentage</Unit>
<Minimum>0</Minimum>
<Maximum>100</Maximum>
<Enumerations>
<Reserved start="101" end="255"/>
</Enumerations>
</Field>
</Value>
</Characteristic>
org.bluetooth.service.blind_position.xml
<Service xsi:noNamespaceSchemaLocation="http://schemas.bluetooth.org/Documents/service.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Soma Blinds"
type="org.bluetooth.service.blind_position" uuid="1861" last-modified="2018-09-06">
<InformativeText>
<Abstract>
Soma Blinds control
</Abstract>
<Summary>
Controller for Soma Blinds
</Summary>
</InformativeText>
<Dependencies>
<Dependency>This service has no dependencies on other GATT-based services.</Dependency>
</Dependencies>
<GATTRequirements>
<Requirement subProcedure="Write Characteristic Value">Mandatory</Requirement>
<Requirement subProcedure="Notification">Mandatory</Requirement>
<Requirement subProcedure="Read Characteristic Descriptors">Mandatory</Requirement>
<Requirement subProcedure="Write Characteristic Descriptors">Mandatory</Requirement>
</GATTRequirements>
<Transports>
<Classic>false</Classic>
<LowEnergy>true</LowEnergy>
</Transports>
<ErrorCodes>
</ErrorCodes>
<Characteristics>
<Characteristic name="Blind Position"
type="org.bluetooth.characteristic.blind_position">
<InformativeText>Blind control
</InformativeText>
<Requirement>Mandatory</Requirement>
<Properties>
<Read>Excluded</Read>
<Write>Excluded</Write>
<WriteWithoutResponse>Excluded</WriteWithoutResponse>
<SignedWrite>Excluded</SignedWrite>
<ReliableWrite>Excluded</ReliableWrite>
<Notify>Excluded</Notify>
<Indicate>Mandatory</Indicate>
<WritableAuxiliaries>Excluded</WritableAuxiliaries>
<Broadcast>Excluded</Broadcast>
</Properties>
</Characteristic>
</Characteristics>
</Service>
The blinds have 4 characteristics - I’ve just tried to get the one working thus far.
from a python file I currently use control.py -
BATTERY_SERVICE_UUID = "0000180f-0000-1000-8000-00805f9b34fb".lower()
BATTERY_CHARACTERISTIC_UUID = "00002a19-0000-1000-8000-00805f9b34fb".lower()
MOTOR_SERVICE_UUID = "00001861-B87F-490C-92CB-11BA5EA5167C".lower()
MOTOR_STATE_CHARACTERISTIC_UUID = "00001525-B87F-490C-92CB-11BA5EA5167C".lower()
MOTOR_CONTROL_CHARACTERISTIC_UUID = "00001530-B87F-490C-92CB-11BA5EA5167C".lower()
MOTOR_TARGET_CHARACTERISTIC_UUID = "00001526-B87F-490C-92CB-11BA5EA5167C".lower()
MOTOR_MOVE_UP = 69
MOTOR_MOVE_DOWN = 96
Original py file is here https://github.com/paolotremadio/SOMA-Smart-Shades-HTTP-API
Thanks
Some new GATT specs are to be added to the library.
- Battery Status (0x2A1A)
- Battery Level State (0x2A1B)
On on older Android device running Android 6, I'm seeing the following crash:
java.lang.NoSuchMethodError: No interface method stream()Ljava/util/stream/Stream; in class Ljava/util/Set; or its super classes (declaration of 'java.util.Set' appears in /system/framework/core-libart.jar)
at org.sputnikdev.bluetooth.gattparser.spec.BluetoothGattSpecificationReader.loadExtensionsFromCatalogResources(BluetoothGattSpecificationReader.java:263)
at org.sputnikdev.bluetooth.gattparser.spec.BluetoothGattSpecificationReader.<init>(BluetoothGattSpecificationReader.java:92)
at org.sputnikdev.bluetooth.gattparser.BluetoothGattParserFactory.getSpecificationReader(BluetoothGattParserFactory.java:59)
at org.sputnikdev.bluetooth.gattparser.BluetoothGattParserFactory.getDefault(BluetoothGattParserFactory.java:74)
I'm trying to load the Indoor Bike data characteristic (which is part of Fitness Machine service), using the loadExtensionsFromFolder() method.
I have the following code:
BluetoothGattParser bluetoothGattParser = BluetoothGattParserFactory.getDefault();
bluetoothGattParser.loadExtensionsFromFolder("/gatt_custom");
gatt_custom is a folder off of root that contains two sub-folders, service and characteristic. Within characteristic, I have this xml file for Indoor Bike data characteristic: https://share.getcloudapp.com/z8uXZAYX
Any idea what I'm wrong? I keep getting:
org.sputnikdev.bluetooth.gattparser.CharacteristicFormatException: Characteristic is not valid for read: 2AD2
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.