Skip to main content
Glama

Bluetooth MCP Server

bluetooth_utils.cpython-311.pyc14.3 kB
� �5�g�1� �&�dZddlmZmZmZmZddlmZddlm Z dedee ee ffd�Z dedee ee ffd �Z d e de fd �Zd ede fd �Zde de fd�Zdde d e dede fd�Zddee efdee efdedee effd�ZdS)u< Fonctions utilitaires pour traiter les données Bluetooth. �)�Dict�List�Optional�Any)�get_company_name)�get_device_info�mfr_data�returnc��|siSi}|���D]?\}}t|t��rt|��||<�-t|��||<�@|S)u� Convertit les données du fabricant en un format sérialisable JSON. Args: mfr_data: Dictionnaire des données du fabricant Returns: Dictionnaire formaté pour la sérialisation JSON ��items� isinstance�bytes�list)r �result�key�values �8F:\DEV\bluetooth-mcp-server\app\utils\bluetooth_utils.py�format_manufacturer_datar�l�� ��� � �F��n�n�&�&�&�&� ��U� �e�U� #� #� &��u�+�+�F�3�K�K��u�+�+�F�3�K�K� �M��svc_datac��|siSi}|���D]?\}}t|t��rt|��||<�-t|��||<�@|S)u� Convertit les données de service en un format sérialisable JSON. Args: svc_data: Dictionnaire des données de service Returns: Dictionnaire formaté pour la sérialisation JSON r )rrrrs r�format_service_datarrr� mac_addressc�6��|sdS|����dd���dd���dd���t���dkr|Sd��fd�t ddd��D����S) u� Normalise une adresse MAC en format standard. Args: mac_address: Adresse MAC à normaliser Returns: Adresse MAC normalisée (XX:XX:XX:XX:XX:XX) ��:�-�.� c�*��g|]}�||dz���S)��)�.0�i� clean_macs �r� <listcomp>z)normalize_mac_address.<locals>.<listcomp>Is&���?�?�?�!�Y�q��1��u�%�?�?�?rrr#)�upper�replace�len�join�range)rr's @r�normalize_mac_addressr.4s���� ���r��!�!�#�#�+�+�C��4�4�<�<�S�"�E�E�M�M�c�SU�V�V�I� �9�~�~������ �8�8�?�?�?�?�u�Q��A���?�?�?� @� @�@r�datac�H�|sdSd�d�|D����S)u� Convertit des bytes en une chaîne hexadécimale lisible. Args: data: Données à convertir Returns: Chaîne hexadécimale r� c��g|]}|d���S)�02Xr$)r%�bs rr(z'bytes_to_hex_string.<locals>.<listcomp>Ws��.�.�.�A��Z�Z�.�.�.r)r,)r/s r�bytes_to_hex_stringr5Ks2�� ���r� �8�8�.�.��.�.�.� /� /�/r� encoded_namec��|rt|t��s|Std�|D����s|S d�|���D��}d|vr|d|�d���}d�d�|D����}t |��dkrtd�|D����r|S|S#t$r|cYSwxYw) u� Décode une chaîne de caractères représentant des codes ASCII séparés par des espaces. Args: encoded_name: Chaîne encodée (ex: "105 80 104 111 110 101 0") Returns: Chaîne décodée (ex: "iPhone") c3�fK�|],}|���p|���V��-dS�N��isdigit�isspace�r%�cs r� <genexpr>z$decode_ascii_name.<locals>.<genexpr>gs7����@�@�a�q�y�y�{�{�)�a�i�i�k�k�@�@�@�@�@�@rc�T�g|]%}|����t|����&Sr$)r;�int�r%�codes rr(z%decode_ascii_name.<locals>.<listcomp>ls+��O�O�O��� � ���O�#�d�)�)�O�O�OrrNrc3�TK�|]#}d|cxkrdk�nnt|��V��$dS)� �~N)�chrrBs rr?z$decode_ascii_name.<locals>.<genexpr>qsI����L�L��"��:K�:K�:K�:K��:K�:K�:K�:K�:K�#�d�)�)�:K�:K�:K�:K�L�Lrr#c3�>K�|]}|���V��dSr9)�isalphar=s rr?z$decode_ascii_name.<locals>.<genexpr>ts*����$B�$B�Q�Q�Y�Y�[�[�$B�$B�$B�$B�$B�$Br) r�str�all�split�indexr,r+�any� Exception)r6�values�decodeds r�decode_ascii_namerRYs�� ��z�,��<�<���� �@�@�<�@�@�@� @� @�����O�O� �(:�(:�(<�(<�O�O�O�� ��;�;��,�V�\�\�!�_�_�,�-�F��'�'�L�L��L�L�L�L�L�� �w�<�<�1� � ��$B�$B�'�$B�$B�$B�!B�!B� ��N���� �����������s�B C�C� C�CN� device_name�manufacturer_datac�n�|r4d|vr0td�|D����rt|��}||kr|S|r|dkr|St|��}|r|�dd��Sd}|r,|���D]}t |��}|r|}n�|r|�d|dd��d �Sd |dd���S) u; Détermine un nom convivial pour l'appareil basé sur diverses sources d'information. Args: device_name: Nom de l'appareil mac_address: Adresse MAC de l'appareil manufacturer_data: Données du fabricant (optionnel) Returns: Nom convivial de l'appareil r1c3�fK�|],}|���p|���V��-dSr9r:r=s rr?z+get_friendly_device_name.<locals>.<genexpr>�s8����1b�1b�QR�!�)�)�+�+�2L������1b�1b�1b�1b�1b�1br�Unknown� friendly_namerNz Device (i�����)z BT Device )rKrRr�get�keysr)rSrrT� decoded_name� device_info� company_name� company_id�companys r�get_friendly_device_namerazs'��� �s�k�)�)�c�1b�1b�Va�1b�1b�1b�.b�.b�)�(��5�5� � �;� &� &�� ���{�i�/�/���"�+�.�.�K��4������3�3�3��L���+�0�0�2�2� � �J�&�z�2�2�G�� �&� ��� � �=��<�<��R�S�S�)9�<�<�<�<� +� �B�C�C�(� *� *�*rT� ble_device�classic_device�prioritize_high_rssic�l �|s|S|s|S|}|}|rHd|vrDd|vr@|d�8|d�,t|d��t|d��kr|}|}|���}|���D]:\}}||vs,||�$||dks||dks ||gkr|||<�;|�d��rQd|dvrGt |d��}||dkr&|�d��r |ddkr||d<|�d��r8|ddkr,|�d��r |ddkr |d|d<|�d��r�d|dvrEt |d��} | |dkr$|�d��r d |dvr| |d<|�d��r,t |d��t |d��kr |d|d<|�d ��r |�d ��s |d |d <d |vr9d |vr5|d ���D]\}}||d vr ||d |<�d |vrNd |vrJ|d rBt |d ��} | �|d ��t| ��|d <d |vr9d |vr5|d ���D]\}}||d vr ||d |<�d|vrg|d<|�d��r1|d|dvr!|d� |d��|�d��r1|d|dvr!|d� |d��d|vrg|d<|�d��r1|d|dvr!|d� |d��|�d��r1|d|dvr!|d� |d��|�d��r0|dD]'} | |dvr|d� | ���(|ds�|�d��r!|d� |d��|�d��r@|d|�d��kr!|d� |d��d|vr�d|vr�|d|dkr�t ��} d|dvr/| �|d� d����n| � |d��d|dvr/| �|d� d����n| � |d��d� t| ����|d<|�d��r |�d��s |d|d<|�d��r |�d��s |d|d<|�d��r |�d��s |d|d<|S)u� Fusionne les informations de deux appareils (BLE et classique) en un seul appareil. Priorise les informations les plus complètes et les signaux les plus forts. Args: ble_device: Informations de l'appareil BLE classic_device: Informations de l'appareil Bluetooth classique prioritize_high_rssi: Si True, priorise l'appareil avec le RSSI le plus fort Returns: Informations fusionnées �rssiNrr�namer1rWrX�Devicer^rT� service_uuids� service_data�detection_sources� detected_by� merged_from� source_id�id� device_type�+�connected_info�services�characteristics)�abs�copyr rZrRr+�set�updater�appendrL�addr,�sorted) rbrcrd�stronger_device� weaker_device�mergedrrr\�decoded_friendly� merged_uuidsrn�typess r�merge_device_infor��s �� ���� ����!�O�"�M��'��*� 4� 4��>�9Q�9Q� �&� !� -�:�f�3E�3M�QT�Uc�dj�Uk�Ql�Ql�or�s}�E�tF�pG�pG�RG�RG�,�O�&�M�� !� !� #� #�F�$�)�)�+�+� � � ��U� �f� � ��s� � 3�v�c�{�b�7H�7H�F�SV�K�[\�L\�L\�`f�gj�`k�oq�`q�`q��F�3�K�� ���� � �.�S�M�&�,A�%A�%A�(��v�)>�?�?� � �=��0� 0� 0��:�:�f�%�%� .����9�)D�)D�!-��v������ � �/�]�6�%:�i�%G�%G�QW�Q[�Q[�\b�Qc�Qc�%G�gm�nt�gu�zC�hC�hC�&�v�.��v������)�)� E� �-��0� 0� 0�0���1O�P�P� ��=��#A�A�A��z�z�/�2�2�?�h�&��BY�6Y�6Y�.>�F�?�+��z�z�/�*�*� E�c�-��2P�.Q�.Q�TW�X^�_n�Xo�Tp�Tp�.p�.p�&3�O�&D�F�?� #�����(�(�?����N�1K�1K�?�!.�~�!>��~���f�$�$�)<� �)M�)M�'�(;�<�B�B�D�D� 9� 9�J�C���&�!4�5�5�5�38��*�+�C�0���&� � �_� �%E�%E�-�Xg�Jh�%E��6�/�2�3�3� ����M�/�:�;�;�;�"&�|�"4�"4��������N�m�$C�$C�'��7�=�=�?�?� 4� 4�J�C���&��0�0�0�.3��~�&�s�+���&�(�(�&(��"�#� �z�z�-� � �B�V�M�%:�&�I\�B]�%]�%]��"�#�*�*�6�-�+@�A�A�A�����'�'�I�M�-�,H�PV�Wj�Pk�,k�,k��"�#�*�*�=��+G�H�H�H��F�"�"� "��}���z�z�+���:�6�+�#6�f�]�>S�#S�#S��}��$�$�V�K�%8�9�9�9�����%�%�A�-� �*D�F�S`�La�*a�*a��}��$�$�]�;�%?�@�@�@�����'�'�8�&�}�5� 8� 8�I���}� 5�5�5��}�%�,�,�Y�7�7�7�� �-� �>� �:�:�d� � � 7� �=� !� (� (���� 6� 6� 6� � � �T� "� "� >�}�T�':�f�j�j��>N�>N�'N�'N� �=� !� (� (��t�)<� =� =� =�����=�M�#A�#A�f�]�F[�_l�mz�_{�F{�F{����� �&��'� '� '� �L�L�� �.�4�4�S�9�9� :� :� :� :� �I�I�f�]�+� ,� ,� ,� �-� �.� .� .� �L�L��}�5�;�;�C�@�@� A� A� A� A� �I�I�m�M�2� 3� 3� 3� #������� 7� 7��}�����)�*�*�C�6�:�:�>N�3O�3O�C�#0�1A�#B��� �����$�$�7�V�Z�Z� �-C�-C�7�*�:�6��z�����*�+�+�E�F�J�J�?P�4Q�4Q�E�$1�2C�$D�� �!� �Mrr9)T)�__doc__�typingrrrr�app.data.company_identifiersr�app.data.mac_prefixesrrArrJrr.rr5rRra�boolr�r$rr�<module>r�s�����-�,�,�,�,�,�,�,�,�,�,�,�9�9�9�9�9�9�1�1�1�1�1�1��t���S�$�s�)�^�0D�����,�$��4��T�#�Y��+?�����,A�s�A�s�A�A�A�A�. 0�e� 0�� 0� 0� 0� 0��C��C�����B)+�)+�#�)+�C�)+�TX�)+�dg�)+�)+�)+�)+�VQ�Q�$�s�C�x�.�Q�$�s�C�x�.�Q�hl�Q�x|�~A�CF�~F�yG�Q�Q�Q�Q�Q�Qr

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