How to get data from websocket using python?

Hi all. I’m trying to get data (messages) from a device (requires a web socket connection).
image

and I’m trying to do this on the external IP of the server

import asyncio
import websockets

async def get_websocket_data():
url = “ws://external_ip:port/api/devices/000000000000000/events”
headers = {
“Authorization”: “Bearer ” #jwt token from login request’s response
}
async with websockets.connect(url, extra_headers=headers) as websocket:
while True:
data = await websocket.recv()
print(data)
asyncio.get_event_loop().run_until_complete(get_websocket_data())

but the result is:
{“error”:{“grpcCode”:16,“httpCode”:401,“message”:“authentication failed: get token from context error: no authorization-data in metadata”,“httpStatus”:“Unauthorized”,“details”:[]}}

import websocket
import json
up_data=[]
def on_open(ws):
    print("Connected to", ws.url)

def on_message(ws, message):
    data = json.loads(message)
    up_data.append(data)
    if len(up_data)==10:
        print(up_data)
        ws.close()

def on_close(ws):
    print("Connection closed")

def on_error(ws, error):
    print("Error:", error)

def getDataLogsConnection(devEUI):
    wsURL = f"ws://your_IP:port/api/devices/{devEUI}/events"
    ws = websocket.WebSocketApp(
        wsURL,
        on_open=on_open,
        on_message=on_message,
        on_close=on_close,
        on_error=on_error,
        header={"Sec-Websocket-Protocol": "Bearer, token"} #you can get it fron login request's response
    )
    ws.run_forever()

devEUI = "000000000000000"
getDataLogsConnection(devEUI)

This topic was automatically closed after 90 days. New replies are no longer allowed.