WattageGuy
(Alexander Ström)
1
Hello! I’m trying to access one of my Home Assistant camera with URL:
http://192.168.1.6:8123/api/camera_proxy_stream/camera.videokamera?api_password=
But I only get:
401: Unauthorized
I’ve tried to use this config:
homeassistant:
auth_providers:
- type: homeassistant
- type: trusted_networks
trusted_networks:
- 192.168.1.0/24
- type: legacy_api_password
api_password: !secret http_password
Without any success. What do I have to do in order to be able to access my camera from API URL?
I dont see an api endpoint for camera_proxy_stream
covered here. REST API | Home Assistant Developer Docs
On the other hand, you can call rest endpoint /api/states/camera.videokamera
and extract the auth token to use in url? Maybe?
1 Like
WattageGuy
(Alexander Ström)
3
Thanks it works but I get low fps. It shows a snapshoot every 10 seconds. Can I get HLS m3u8 stream or something like that?
What is the output of this api? Just image url?
WattageGuy
(Alexander Ström)
5
Here is an example:
{“entity_id”: “camera.videokamera”, “state”: “recording”, “attributes”: {“access_token”: “313c8219063e9abbd27274d91e519492ac9e4123a80695447fc751c200bdc70c”, “model_name”: "Video Camera ", “brand”: “Tuya”, “frontend_stream_type”: “hls”, “entity_picture”: “/api/camera_proxy/camera.videokamera?token=313c8219063e9abbd27274d91e519492ac9e4123a80695447fc751c200bdc70c”, “friendly_name”: "Videokamera ", “supported_features”: 2}, “last_changed”: “2022-02-10T19:45:06.937392+00:00”, “last_updated”: “2022-02-10T19:49:56.020221+00:00”, “context”: {“id”: “4b8bd0f8e6491047783c1cd0c5b0b22f”, “parent_id”: null, “user_id”: null}}
When starting camera stream in loveplace I get a HLS from api/hls/token/master_playlist.m3u8
http://192.168.1.6:8123/api/camera_proxy_stream/camera.videokamera?token=313c8219063e9abbd27274d91e519492ac9e4123a80695447fc751c200bdc70c only gives me snapshoots
WattageGuy
(Alexander Ström)
7
The problem is that access_token from api isn’t the same as HLS access_token. I don’t know how to get HLS access_token.
There is also a web service to generate hls endpoint url: source code
In case you want to check web socket: WebSocket API | Home Assistant Developer Docs
WattageGuy
(Alexander Ström)
9
This seems complicated for me, I’m still new to home assistant. What do I have to call to get HLS access token, can you help me out?
WattageGuy
(Alexander Ström)
11
So far this code. How do I continue?
from websocket import create_connection
import json
ws = create_connection("ws://192.168.1.6:8123/api/websocket")
result = ws.recv()
print("Received '%s'" % result)
ws.send(json.dumps(
{
"type": "auth",
"access_token": "eyJ0eXAi(...)6XuzGzBmq4rrV9LdqXX-dGrBhfBo"
}))
result2 = ws.recv()
print("Received '%s'" % result2)
ws.close()
I will give a hand hopefully evening today, when i am back at home
1 Like
Hello did you have successfully get the token work ? In my case the token only have the duration of 5 min and after this is renewed.
I’m try to find a solution to get this token or too have one long time token in order to put this working
Please let me know if you find any solution ![:slight_smile: :slight_smile:](https://community.home-assistant.io/images/emoji/twitter/slight_smile.png?v=10)
Thank you
edtey
(Edtey)
14
is there any other way to get hls endoint url ?
flowby
15
@WattageGuy i managed to do it, a bummer that this is not available over simple REST calls
import websocket
class HaClient:
def __init__(self):
self.ws = websocket.WebSocket()
self.ws.connect(f'ws://{HA_HOST}/api/websocket')
if self.receive()["type"] == "auth_required":
auth = {
"type": "auth",
"access_token": HA_TOKEN
}
r = self.send(auth)
if r["type"] != "auth_ok":
print("Authentication failed")
sys.exit()
def send(self, dict_obj):
self.ws.send(json.dumps(dict_obj))
return self.receive()
def receive(self):
return json.loads(self.ws.recv())
def get_hls_url(self):
service_call = {
"type": "camera/stream",
"id": 41,
"entity_id": HA_CAM_ENTITY,
}
hls_url = self.send(service_call)["result"]["url"]
return f"http://{HA_HOST}{hls_url}"
c = HaClient()
print(c.get_hls_url())