Metadata-Version: 2.1
Name: aioblescan
Version: 0.2.11
Summary: Scanning Bluetooth for advertised info with asyncio.
Home-page: http://github.com/frawau/aioblescan
Author: François Wautier
Author-email: francois@wautier.eu
License: MIT
Description: aioblescan
        ==========
        
        aioblescan is a Python 3/asyncio library to listen for BLE advertized
        packets.
        
        Installation
        ============
        
        We are on PyPi so
        
        ::
        
            pip3 install aioblescan
        
        or
        
        ::
        
            python3 -m pip install aioblescan
        
        How to use
        ==========
        
        Essentially, you create a function to process the incoming information
        and you attach it to the ``BTScanRequester``. You then create a
        Bluetooth connection, you issue the scan command and wait for incoming
        packets and process them.
        
        You can use Eddystone or RuuviWeather to retrieve specific information
        
        The easiest way is to look at the ``__main__.py`` file.
        
        You can run the module with
        
        ::
        
           python3 -m aioblescan
        
        Add ``-h`` for help.
        
        To see the RuuviTag weather information try:
        
        ::
        
           python3 -m aioblescan -r
        
        You will get
        
        ::
        
           Weather info {'rssi': -64, 'pressure': 100300, 'temperature': 24, 'mac address': 'fb:86:84:dd:aa:bb', 'tx_power': -7, 'humidity': 36.0}
           Weather info {'rssi': -62, 'pressure': 100300, 'temperature': 24, 'mac address': 'fb:86:84:dd:aa:bb', 'tx_power': -7, 'humidity': 36.0}
        
        To check Eddystone beacon
        
        ::
        
           python3 -m aioblescan -e
        
        You get
        
        ::
        
           Google Beacon {'tx_power': -7, 'url': 'https://ruu.vi/#BEgYAMR8n', 'mac address': 'fb:86:84:dd:aa:bb', 'rssi': -52}
           Google Beacon {'tx_power': -7, 'url': 'https://ruu.vi/#BEgYAMR8n', 'mac address': 'fb:86:84:dd:aa:bb', 'rssi': -53}
        
        To check ATC_MiThermometer with [custom firmware](https://github.com/atc1441/ATC_MiThermometer) beacon
        
        ::
        
            python3 -m aioblescan -A
        
        You get
        
        ::
        
            Temperature info {'mac address': 'a4:c1:38:40:52:38', 'temperature': 2.8, 'humidity': 62, 'battery': 72, 'battery_volts': 2.863, 'counter': 103, 'rssi': -76}
            Temperature info {'mac address': 'a4:c1:38:40:52:38', 'temperature': 2.8, 'humidity': 62, 'battery': 72, 'battery_volts': 2.863, 'counter': 103, 'rssi': -77}
        
        To check ThermoBeacon sensors
        
        ::
        
            python3 -m aioblescan -T
        
        You get
        
        ::
            Temperature info {'mac address': '19:c4:00:00:0f:5d', 'max_temperature': 27.0625, 'min_temperature': 21.75, 'max_temp_ts': 0, 'min_temp_ts': 2309}
            Temperature info {'mac address': '19:c4:00:00:0f:5d', 'temperature': 21.75, 'humidity': 49.5, 'battery_volts': 3234, 'counter': 2401, 'rssi': -67}
        
        
        For a generic advertise packet scanning
        
        ::
        
           python3 -m aioblescan
        
        You get
        
        ::
        
           HCI Event:
               code:
                   3e
               length:
                   19
               LE Meta:
                   code:
                       02
                   Adv Report:
                       num reports:
                           1
                       ev type:
                           generic adv
                       addr type:
                           public
                       peer:
                           54:6c:0e:aa:bb:cc
                       length:
                           7
                       flags:
                           Simul LE - BR/EDR (Host): False
                           Simul LE - BR/EDR (Control.): False
                           BR/EDR Not Supported: False
                           LE General Disc.: True
                           LE Limited Disc.: False
                       Incomplete uuids:
                               ff:30
                       rssi:
                           -67
           HCI Event:
               code:
                   3e
               length:
                   43
               LE Meta:
                   code:
                       02
                   Adv Report:
                       num reports:
                           1
                       ev type:
                           no connection adv
                       addr type:
                           random
                       peer:
                           fb:86:84:dd:aa:bb
                       length:
                           31
                       flags:
                           Simul LE - BR/EDR (Host): False
                           Simul LE - BR/EDR (Control.): False
                           BR/EDR Not Supported: False
                           LE General Disc.: True
                           LE Limited Disc.: True
                       Complete uuids:
                               fe:aa
                       Advertised Data:
                           Service Data uuid:
                               fe:aa
                           Adv Payload:
                               10:f9:03:72:75:75:2e:76:69:2f:23:42:45:77:59:41:4d:52:38:6e
                       rssi:
                           -59
        
        Here the first packet is from a Wynd device, the second from a Ruuvi Tag
        
        aioblescan can also send EddyStone advertising. Try the -a flag when
        running the module.
        
        FAQ
        ===
        
        Why not use scapy?
        
        Scapy is great and you can do
        
        ::
        
                import scapy.all as sa
                test=sa.BluetoothHCISocket(0)
                command=sa.HCI_Cmd_LE_Set_Scan_Enable(enable=1,filter_dups=0)
                chdr=sa.HCI_Command_Hdr(len=len(command))
                hdr=sa.HCI_Hdr(type=1)
                test.send(hdr / chdr / command)
        
        to get things going. But... the great thing with Scapy is that there is so many versions to choose from.... and not all have all the same functions ... and installation can be haphazard, with some version not installing at all. Also scapy includes a lot of other protocols and could be an overkill... lastly it is never too late to learn...
        
        What can you track?
        
        aioblescan will try to parse all the incoming advertised information. You can see the raw data when it does not know what to do. With Eddystone beacon you can see the URL, Telemetry and UID
        
        
Keywords: bluetooth,advertising,hci,ble
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Description-Content-Type: text/x-rst
Provides-Extra: dev
