EN ESTA PÁGINA
Importación de BLE (caso de uso)
Lea y siga este ejemplo para importar activos de Bluetooth de baja energía (BLE) y darles nombres descriptivos útiles mediante scripts y API de Python.
Cuando configura y activa servicios basados en la ubicación con Visibilidad de los activos de Juniper Mist, los administradores como usted pueden ver todos los clientes y activos de BLE. También puede ver sus ubicaciones precisas, directamente en un plano de planta o mapa interior.
Para los sitios que usan etiquetas de activos BLE, es útil rastrear estos dispositivos dándoles nombres fácilmente legibles que proporcionen algo de contexto. Puede agregar y mostrar estos nombres individualmente en el portal de Juniper Mist, pero si tiene muchos activos que administrar, hacerlo uno por uno puede llevar bastante tiempo. Una forma más fácil de hacerlo es ejecutar un script para importar activos BLE y asignarles un nombre de forma masiva.
Para este caso de uso, debe:
-
Habilite la visibilidad de activos en la configuración del sitio para cada sitio.
-
Asegúrese de tener una licencia activa para Visibilidad de activos.
-
Asegúrese de haber colocado puntos de acceso compatibles en el plano de planta.
Este caso de uso implica dos scripts: main.py y mist-client.py. Un tercer archivo, un archivo CSV llamado assets.csv, contiene los activos BLE y sus nombres correspondientes.
Este es el orden de los pasos que debe seguir cuando necesite importar activos de BLE:
-
Comience por actualizar el script con su token de main.py API de Mist, el identificador único universal (UUID) del sitio de Mist y la región (o nube) en la que está alojada su organización.
-
A continuación, agregue, quite o inspeccione los dispositivos BLE y sus nombres dentro del assets.csv archivo.
-
Ejecute el main.py script, que utilizará el contenido CSV para crear los activos en Juniper Mist.
Guión Main.py
Suceden muchas cosas entre bastidores en el main.py guión. El script importa los datos del archivo CSV y convierte los datos en formato JSON. Luego, para cada dispositivo, el script crea un activo BLE y activa el mist-client.py script. Este mist-client.py script hace el trabajo de realizar todas las llamadas necesarias a la API de 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
El mist_client.py script funciona como un cliente RESTful normal para interactuar con la API de Juniper Mist. El script realiza llamadas a la API en función de la entrada del archivo CSV y la salida del main.py script. El mist-client.py script también comprueba erróneamente la respuesta HTTP de la API y muestra el resultado de la siguiente manera:
#!/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
En este ejemplo, el assets.csv archivo reside en el mismo directorio que los mist_client.py archivos y main.py . En el ejemplo siguiente se muestra cómo formatear el archivo CSV con el nombre del activo BLE y su dirección MAC asociada:
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
La automatización va más allá del simple uso de API RESTful y Python. Otras opciones como WebSocket y API de webhook están disponibles. Puede explorar estas otras opciones con fines de automatización.