SUR CETTE PAGE
Importation BLE (cas d’usage)
Lisez et suivez cet exemple pour importer des ressources Bluetooth Low Energy (BLE) et leur donner des noms utiles et descriptifs à l’aide de scripts et d’API Python.
Lorsque vous configurez et activez des services de localisation avec Visibilité des actifs par Juniper Mist, les administrateurs comme vous peuvent voir tous les clients et ressources BLE. Vous pouvez également voir leur emplacement précis, directement sur un plan d’étage intérieur ou une carte.
Pour les sites qui utilisent des étiquettes de ressources BLE, il est pratique de suivre ces appareils en leur donnant des noms facilement lisibles qui fournissent un certain contexte. Vous pouvez ajouter et afficher ces noms individuellement dans le portail Juniper Mist, mais si vous avez beaucoup de ressources à gérer, le faire un par un peut prendre beaucoup de temps. Un moyen plus simple de le faire est d’exécuter un script pour importer des ressources BLE et leur attribuer un nom en bloc.
Pour ce cas d’utilisation, vous devez :
-
Activez la visibilité des ressources dans les paramètres du site pour chaque site.
-
Assurez-vous que vous disposez d’une licence active pour la visibilité des actifs.
-
Assurez-vous d’avoir placé des points d’accès compatibles sur le plan du bâtiment.
Ce cas d’utilisation implique deux scripts : main.py et mist-client.py. Un troisième fichier, un fichier CSV appelé assets.csv, contient les ressources BLE et leurs noms correspondants.
Voici l'ordre des étapes à suivre lorsque vous devez importer des ressources BLE :
-
Commencez par mettre à jour le script à l’aide de main.py votre jeton d’API Mist, de Mist identifiant unique universel (UUID) du site et de la région (ou cloud) dans laquelle votre organisation est hébergée.
-
Ensuite, vous pouvez ajouter, supprimer ou inspecter les périphériques BLE et leurs noms dans le assets.csv fichier.
-
Exécutez le main.py script, qui utilisera le contenu CSV pour créer les ressources dans Juniper Mist.
Main.py Script
Beaucoup de choses se passent dans les coulisses du main.py scénario. Le script importe les données du fichier CSV et les convertit au format JSON. Ensuite, pour chaque appareil, le script crée une ressource BLE et déclenche le mist-client.py script. Ce mist-client.py script effectue tous les appels nécessaires à l’API Juniper Mist.
#!/usr/bin/python # # main.py # # Update main.py with your Mist API Token and Juniper Mist site UUID. # # Inspect the "assets.csv" file to update the assets being created, then run this exercise to automatically create BLE assets from CSV. import sys, csv, json, re from mist_client import Admin # Import the Juniper Mist client mist_api_token = '' # Your Juniper Mist API token goes here. Documentation: https://api.mist.com/api/v1/docs/Auth#api-token site_id = '' # Your Site ID goes here csv_file = 'assets.csv' # Convert CSV file to JSON object. def csv_to_json(file): csv_rows = [] with open(file) as csvfile: reader = csv.DictReader(csvfile) title = reader.fieldnames for row in reader: csv_rows.extend([ {title[i]: row[title[i]] for i in range(len(title))} ]) return csv_rows # Creates BLE assets using the given CSV file and the Juniper Mist API def create_assets(admin, data): for d in data: try: mac = re.sub(r'[^0-9a-fA-F]', '', d.get('MAC', '')).lower() assert len(mac) == 12 assert mac.isalnum() except: print('Invalid MAC {}, skipping this Asset.'.format(d.get('MAC', '(none)'))) continue # Build the asset payload payload = {'name': d['Name'].strip(), 'mac': mac} # Create the BLE Asset and note the targeted region (or cloud) api_url = 'https://api.mist.com/api/v1/sites/{}/assets'.format(site_id) (success, result) = admin.post(api_url, payload) # Add the new BLE Asset to the return list if result == None: print('Failed to create BLE Asset {}'.format(mac)) else: if success: print('Created BLE Asset \"{}\" ({})'.format(result.get('name', '(unnamed)'), result['mac'])) else: print('BLE Asset \"{}\" already exists with MAC Address {}'.format(d.get('Name', '(unnamed)'), mac)) # Main function if __name__ == '__main__': # Check for required variables if mist_api_token == '': print('Please provide your Mist API token as mist_api_token') sys.exit(1) elif site_id == '': print('Please provide your Mist Site UUID as site_id') sys.exit(1) # Create Mist client admin = Admin(mist_api_token) print() print('Converting file {} to JSON...\n'.format(csv_file)) # Convert CSV to valid JSON data = csv_to_json(csv_file) if data == None or data == []: print('Failed to convert CSV file to JSON. Exiting script.') sys.exit(2) print(json.dumps(data, indent=4, sort_keys=True)) print('\n=====\n') # Create the BLE Assets from CSV file print('Creating BLE Assets...\n') create_assets(admin, data) print()
Mist_client.py Script
Le mist_client.py script fonctionne comme un client RESTful classique pour interagir avec l’API Juniper Mist. Le script effectue des appels d’API en fonction de l’entrée du fichier CSV et de la main.py sortie du script. Le mist-client.py script vérifie également les erreurs de la réponse HTTP à partir de l’API et affiche la sortie comme suit :
#!/usr/bin/python # # mist_client.py # # Mist API client session. import json, requests # Mist CRUD operations class Admin(object): def __init__(self, token=''): self.session = requests.Session() self.headers = { 'Content-Type': 'application/json', 'Authorization': 'Token ' + token } def get(self, url): session = self.session headers = self.headers print('GET {}'.format(url)) response = session.get(url, headers=headers) if response.status_code != 200: print('Failed to GET') print('\tURL: {}'.format(url)) print('\tResponse: {} ({})'.format(response.text, response.status_code)) return False return json.loads(response.text) def post(self, url, payload, timeout=60): session = self.session headers = self.headers #print('POST {}'.format(url)) response = session.post(url, headers=headers, json=payload) if response.status_code == 400: return (False, response.text) elif response.status_code != 200: ''' print('Failed to POST') print('\tURL: {}'.format(url)) print('\tPayload: {}'.format(payload)) print('\tResponse: {} ({})'.format(response.text, response.status_code)) ''' return (False, None) return (True, json.loads(response.text))
Assets.csv
Dans cet exemple, le assets.csv fichier se trouve dans le même répertoire que les mist_client.py fichiers et main.py . L’exemple suivant montre comment formater le fichier CSV avec le nom de la ressource BLE et son adresse MAC associée :
Name,MAC Amber Badge,aa:bb:cc:dd:ee:ff Mark Badge,11-22-33-44-55-66 Invalid MAC,xx.yy.zz.xx.yy.zz
L’automatisation ne se limite pas à l’utilisation d’API RESTful et de Python. D’autres options telles que WebSocket et les API Webhook sont disponibles. Vous pouvez explorer ces autres options à des fins d’automatisation.