Skip to main content
Glama

Bluetooth MCP Server

ble_scanner.cpython-311.pyc12.5 kB
� %2�gM1�� �dZddlZddlZddlZddlmZmZmZmZddl m Z m Z ddl m Z ddlmZddlmZmZmZmZddlmZdd lmZmZeje��Zej��d kZGd �d ��Ze��Z dS) u] Module spécialisé pour le scan BLE (Bluetooth Low Energy) avec optimisation pour Windows. �N)�Dict�List�Optional�Any)� BleakScanner� BleakClient)� BLEDevice)�AdvertisementData)�format_manufacturer_data�format_service_data�get_friendly_device_name�normalize_mac_address)�get_company_name)�get_device_info�MAC_PREFIX_DATABASE�Windowsc �t�eZdZdZd dedeededee ee ffd �Z d e de ee ffd �Z dS) � BLEScanneru1Classe spécialisée dans le scan d'appareils BLE�@NF�duration� filter_name�connect_for_details�returnc�� �K�i�dtdtf�fd� }t�d|�d���tr|dzn|}t |���}|����d{V��tj|���d{V��|� ���d{V��t�d t����d ���d �tj ��D��}g}t���d krd nt���} d} �� ��D�]�\} \} } | j pd}|�)|���|���v�r�t| j��}|r|�dd��nd}|s6| jr/| j���D]}t)|��}|rn�d}| j����dd��}|D]#}|�|��r d}|sdddd�}n�$|r|�dd��nt1|| j| j��}|r!|dkrd}|rd|vrd| jdd��d�}t3| j��| j|| jt7| j��| jpgt;| j��| jtA| dd��|p|rdndtA| dd��d |d!|d"�}|r�|r�t�!d#| j�d$���| d%z } |�"| ���d{V��}|�d&i��|d'<|�d(g��|d(<|�d)g��|d)<t�d*| j�����nM#tF$r=}t�$d+| j�d,t3|������Yd}~�n d}~wwxYw|�r| | kr� t�d-| j����| d%z } |�"| ���d{V��}|�d&i��|d'<|�d(g��|d(<|�d)g��|d)<t�d.| j����nI#tF$r<}t�$d/| j�d,t3|������Yd}~nd}~wwxYw|�%|�����t�d0t|���d1���|S)2u� Effectue un scan BLE avec Bleak. Args: duration: Durée du scan en secondes filter_name: Filtre optionnel sur le nom des appareils connect_for_details: Si True, tente de se connecter pour plus d'informations Returns: Liste de dictionnaires contenant les informations des appareils BLE détectés �device�advertisement_datac���||f�|j<t�d|j�d|j�d|j����dS)uACallback pour collecter les appareils et leurs données d'annonceuDétecté (BLE): �: z, RSSI: N)�address�logger�debug�name�rssi)rr�discovered_devices_with_adss ��7F:\DEV\bluetooth-mcp-server\app\services\ble_scanner.py�_device_detection_callbackz3BLEScanner.scan.<locals>._device_detection_callback,sO���;A�CU�:V� '��� 7� �L�L�m�V�^�m�m�v�{�m�m�Tf�Tk�m�m� n� n� n� n� n�u&Démarrage du scan BLE avec durée de z secondes...g333333�?)�detection_callbackNuScan BLE terminé. u appareil(s) trouvé(s)c��g|]E\}}d|�dd��v�|����dd����FS)�Freebox� friendly_name��:)�get�upper�replace)�.0�prefix�infos r%� <listcomp>z#BLEScanner.scan.<locals>.<listcomp>?sY��I�I�I� ���&�$�(�(�?�B�*G�*G�G�G�#�L�L�N�N�2�2�3��;�;�G�G�Gr'� �r�Unknown�companyFr-r,Tz Freebox SAr*zFreebox Player)r8� device_typer+r+�DevicezFreebox Player (i�����)� appearance� connectable�BLE� ble_scanner)�idrr"r#�manufacturer_data� service_uuids� service_data�tx_powerr<� company_name�is_connectabler9r+� detected_by� is_freeboxu Freebox détectée à l'adresse z, tentative de connexion...�r3�connected_info�services�characteristicsu!Connexion réussie à la Freebox u)Impossible de se connecter à la Freebox ruTentative de connexion à uConnexion réussie à uImpossible de se connecter à uAprès filtrage BLE: u appareil(s) retourné(s))&r r r r!� IS_WINDOWSr�start�asyncio�sleep�stop�lenr�itemsr"�lowerrrr.rA�keysrr/r0� startswithr �strr#r rBr rCrD�getattrr3�_get_detailed_device_info� Exception�warning�append)�selfrrrr&�effective_duration�scanner�freebox_prefixes�devices�connection_limit�connected_countrr�adv_data� device_name� device_inforE� company_idrH�normalized_addrr2r+�bluetooth_device� detailed_info�er$s @r%�scanzBLEScanner.scans������')�#� o�y� o�N_� o� o� o� o� o� o� � � �T�h�T�T�T�U�U�U�0:�G�X��^�^�x���2L�M�M�M���m�m�o�o���������m�.�/�/�/�/�/�/�/�/�/��l�l�n�n��������� � �d�3�/J�+K�+K�d�d�d�e�e�e�I�I�Pc�Pi�Pk�Pk�I�I�I����!$�$?� @� @�2� E� E�1�1�3�Oj�Kk�Kk����+F�+L�+L�+N�+N�\ 1�\ 1� '�G�'�f�h� �+�2��K��"�{�'8�'8�':�':�k�>O�>O�>Q�>Q�'Q�'Q�-�f�n�=�=� �CN�X�{���y�$�?�?�?�TX� �$�"��(B�"�&.�&@�&E�&E�&G�&G�"�"� �'7� �'C�'C� �'�"�!�E�"�#� �"(�.�"6�"6�"8�"8�"@�"@��b�"I�"I��.� � �F�&�1�1�&�9�9��%)� �*��+7�/8�1A�+�+�K� ���IT�!� ����� D� D� D�Yq���N��.�Z�Z� ��R�+��":�":�"+�K�(�R�H� �,E�,E�(Q�6�>�"�#�#�;N�(Q�(Q�(Q� ��f�n�-�-�%�~�'�$�M�)A�(�B\�)]�)]�%-�%;�%A�r�$7��8M�$N�$N� (� 1�")�(�L�$�"G�"G�$0�$Z�Z�5Y�\�\�UY�&-�h� �t�&L�&L�#(�%2�#0�",�$�$� �&�d�"5�d��K�K� n�6�>� n� n� n�o�o�o�#�q�(�O�o�.2�.L�.L�V�.T�.T�(T�(T�(T�(T�(T�(T� �=J�=N�=N�v�WY�=Z�=Z�(�)9�:�7D�7H�7H��UW�7X�7X�(��4�>K�>O�>O�Pa�ce�>f�>f�(�):�;�� � �%Y���%Y�%Y�Z�Z�Z�Z��$�o�o�o����'m�SY�Sa�'m�'m�eh�ij�ek�ek�'m�'m�n�n�n�n�n�n�n�n�����o����)� d�_�?O�-O�-O� d�� � �%R�&�.�%R�%R�S�S�S�'�1�,��.2�.L�.L�V�.T�.T�(T�(T�(T�(T�(T�(T� �=J�=N�=N�v�WY�=Z�=Z�(�)9�:�7D�7H�7H��UW�7X�7X�(��4�>K�>O�>O�Pa�ce�>f�>f�(�):�;�� � �%N�f�n�%N�%N�O�O�O�O��$�d�d�d����'b���'b�'b�Z]�^_�Z`�Z`�'b�'b�c�c�c�c�c�c�c�c�����d�������/�0�0�0��� � �T�S��\�\�T�T�T�U�U�U��s2�%BN/�/ O6�92O1�1O6�B/R3�3 S9�=2S4�4S9rc ���K�iggd�} trdnd}t||���4�d{V��}|j�r�d|dd<|j|dd <|����d{V��}|j���D�]K}t|j��|j |j d �}|d � |��d |j vs d |j vr d|dd<|j D]�}t|j��|j |j t|j��d�} d|jvr� |�|���d{V��} t| ��| d< | �dd���} d | vsd | vr d|dd<n#YnxYwn)#t"$r} t| ��| d<Yd} ~ nd} ~ wwxYw|d� | �����Mddd���d{V��n#1�d{V��swxYwYnl#t"$r_} t$�d|j�dt| ������d|dd<t| ��|dd<Yd} ~ nd} ~ wwxYw|S)u Se connecte à un appareil Bluetooth et récupère des informations détaillées. Args: device: L'appareil BLE à interroger Returns: Dictionnaire contenant des informations détaillées sur l'appareil )r3rKrLg.@g$@)�timeoutNTr3� connected�mtu_size)�uuid� description�handlerKr*�Free�is_freebox_service)rqrrrs� properties�read�valuezutf-8�ignore)�errors�is_freebox_characteristic� value_errorrLuErreur lors de la connexion à rF�error)rMr� is_connectedrp� get_servicesrK�valuesrWrqrrrsr\rL�listrv�read_gatt_char�decoderZr r[r) r]rrjrn�clientrK�service� service_info�char� char_inforx� text_valuerks r%rYz$BLEScanner._get_detailed_device_info�s�������!� � � � 6 4�(�2�d�d�d�G�"�6�7�;�;�;�. O�. O�. O�. O�. O�. O�. O�v��&�-O�9=�M�&�)�+�6�8>��M�&�)�*�5�&,�%8�%8�%:�%:�:�:�:�:�:�:�H�#+�#4�#;�#;�#=�#=�&O�&O��$'�� �$5�$5�+2�+>�&-�n�(�(� � &�j�1�8�8��F�F�F�%��(;�;�;�v��I\�?\�?\�JN�M�&�1�2F�G�%,�$;�O�O�D�(+�D�I���/3�/?�*.�+�.2�4�?�.C�.C� )�)�I� &���8�8� !F�28�2G�2G��2M�2M�,M�,M�,M�,M�,M�,M�E�9=�e���I�g�$6�%-�5:�\�\�'�RZ�\�5[�5[� �+1�Z�+?�+?�9�PZ�CZ�CZ�ae�M�&�,A�B]�,^���%-�(,�������'0�!F�!F�!F�?B�1�v�v�I�m�$<�$<�$<�$<�$<�$<�����!F����*�*;�<�C�C�I�N�N�N�N�3O�+. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O�. O����. O�. O�. O�. O���^� 4� 4� 4� �N�N�W�V�^�W�W�s�ST�v�v�W�W� X� X� X�16�M�&� !�+� .�-0��V�V�M�&� !�'� *� *� *� *� *� *����� 4���� �s~�"G4�C;G"�(-F �*F�F �F �F �G"� F/ �F* �%G"�*F/ �/!G"�G4�" G,�,G4�/G,�0G4�4 I�>AI�I)rNF)�__name__� __module__� __qualname__�__doc__�floatrrW�boolrrrrlr rY�r'r%rrs�������;�;�J�J�5�J�X�c�]�J�hl�J�y}�C�DG�IL�DL�M�zN�J�J�J�J�XH�i�H�D��c��N�H�H�H�H�H�Hr'r)!r��loggingrO�platform�typingrrrr�bleakrr�bleak.backends.devicer �bleak.backends.scannerr �app.utils.bluetooth_utilsr r r r�app.data.company_identifiersr�app.data.mac_prefixesrr� getLoggerr�r �systemrMrr?r�r'r%�<module>r�s`����������������,�,�,�,�,�,�,�,�,�,�,�,�+�+�+�+�+�+�+�+�+�+�+�+�+�+�4�4�4�4�4�4������������� :�9�9�9�9�9�F�F�F�F�F�F�F�F� �� �8� $� $���X�_� � �)� +� �W�W�W�W�W�W�W�W�t�j�l�l� � � r'

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hypijump31/bluetooth-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server