The error this different from the scenario I shared.
Can you share a screenshot of the about page that we see which hyperion Version you are running and what macOS version you use?
The error this different from the scenario I shared.
Can you share a screenshot of the about page that we see which hyperion Version you are running and what macOS version you use?
m4r35z Check, if you see warnings in the log as described in
Die Fernbedienung ist nur um temporäre Änderungen zu testen und ja, aktuell ändert sie nur Profil 1
Do you see any other errors in the log
When you press the link button ?
You need to enter a userid and a Client key.
Is your need to only bind to the localhost adapter or to ensure that only local addresses can access the port?
The latter you can already configure under Networks
How does your Authorization header look like?
Does in include the „token “ prefix for the actual token?
In addition, what Hyperion Version are you running?
Versuche mal ein zweites Profil unter LED-Instanzen/Bildverarbeitung für die oberen LEDs mit einer anderen Brightness anzulegen.
Das Default Profil bedient dann immer noch die übrigen LEDs
Suggest you have a look at the error messages you shared before.
2025-01-08T22:57:49.328Z [V4L2] (ERROR) Throws error nr: Cannot open '/dev/video14' error code 13, Permission denied
Try adding the user you are running hyperion with to the „video“ group
This is a known issue in 2.0.16 and was already fixed https://github.com/hyperion-project/hyperion.ng/issues/1742 .
You can run a nightly build to make use of the fix.
You need a user is and a client key.
Did the UI not offered you to create both?
To free WLED from Hyperion you have various options:
- Quit Hyperion
- Suspend Hyperion via the Systray, UI or API
(Resume, if you want to take over again)
- Lock your Screen
I aslo wanted to make Hyperion launch automatically when booting my computer. How can I do it ?
If you are on Windows, just enable it via Systray. On other system create a systemd service.
Reis & PPaul It looks like that the WebSocket Implementation in Hyperion does not handle the WS Heartbeat (PING/PONG) correctly. That is why the HyperTizien client closes the websocket. It looks like the Heartbeat Intervall is 30s and that is the reason why we see always after that timeframe a connection issue.
PPaul I am sorry. I updated the previous post with a correct code block.
PPaul Could you try running the following python script against Hyperion, please?
(You can also run it on your windows machine; Just change the url in the script)
It tries to send images with 20fps for 60 seconds (you can change the parameters easily).
Every 10 images it alternates to another one, so you should see updates in the preview.
At my test installation the Websocket fails after ~20 seconds.
It it a know issue that the Websocket has a problem with many updates, but I did not expect it as bad as this...
This would require further investigations. Happy, if you file an issue....
import asyncio
import websockets
import json
import time
from datetime import datetime
# Configuration constants
TOTAL_SECONDS = 60 # Total runtime in seconds
FPS = 10 # Frames per second
# Derived constant
TOTAL_FRAMES = TOTAL_SECONDS * FPS # Total number of frames to send
# WebSocket URL
URL = "ws://localhost:8090"
# Command to send
command1 = {
"command": "image",
"imagedata": "iVBORw0KGgoAAAANSUhEUgAAATAAAAEQCAYAAAA3VyjFAAAABHNCSVQICAgIfAhkiAAABL1JREFUeJzt3CGOJVUUgOG6ULSBZMgMnkVgMIQNkBAWgJolYHAg8WjUCDxhB2g0C2ADmDETkssa6POSyp/6Pn+q73vd789p8e469t7HwGj4OI43w/lvh/NrOD99/b8O578czn83nP98OP/NcP7T4fz09zf19XD+t4ec4jrTz997DzkFwAUEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBrvR7eB/bLWtMrfYCb2sP+2MCALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyDpfXn0C4LbW97N5GxiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWeffV58AuK3902zeBgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBA1vnX1ScAeCYbGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZ68O99+QBb9dajzoMcDM/z/pjAwOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAg63x79QmA+3o1G7eBAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJB1fjV8wO8POQZwSy9m4zYwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgCwBA7LWsfeePWGtB50FuJs/Z/2xgQFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQtfbwPrDlPjDguf5xHxhwUwIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkLWOd7P7eI4n94EBzzS8j9AGBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYEDWeXxw9REAnscGBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYEDWuYcPWA85BsD/ZwMDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIOu8+gDAfX02nLeBAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJC19t579IC11qMOA9zMsD82MCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyzqsPANzXj3/M5m1gQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkDX+Mvf5eu/J/NMwoe9m4+N34N+n4c9/NZx/MZz/eDj/cjg/ff3vD+enn4DRX/9xHB8N5z8Zzk/f/ylf5gbuSsCArHNNH/CQYwB39MMXs/9hbWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZP0Hr9xEYDlTSAAAAAAASUVORK5CYII=",
"name": "HyperTizen Data",
"format": "auto",
"priority": 99,
"origin": "HyperTizen"
}
command2 = {
"command": "image",
"imagedata": "iVBORw0KGgoAAAANSUhEUgAAATAAAAEQCAYAAAA3VyjFAAAABHNCSVQICAgIfAhkiAAABP9JREFUeJzt3D2LHlUYgOF31imERNIExCB+NC5omljYioJiF2InYi0Wgj9A7BQLCwtB7AwI2tnYBMEqdQpRbCw0YCEIEt0t1/E/vGdguJnr6s/Zh7e495nmTIeXl+Uw4PSf90aOH15//9Oh8x/dHDo+bujXOxwOF4Pn58HzEHay9QAAxxIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgKxpWcbeA5umaVprGGBfvvzgm6H+2MCALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyPIeGLCZ0f7YwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIml974dWtZwA4ig0MyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgKzp0qXLy8gF5+dn01rDAPuyLMtQf2xgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmTNN65eHbrg7vnZSqMAuzOYDxsYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVnTT9+fLSMXXH/l8rTWMMC+vH3r3aH+2MCALAEDsgQMyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyJquPHJl6D2eB/8+8B4YcJTlYvEeGLBPAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQNb91852hCz776uOVRgH25s6HY+dtYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkzd/+8N3WMwA79cyvXw+dt4EBWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkDVfP3l46II/VhoE2J+nb78xdN4GBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYEDW/MvJX1vPAHAUGxiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWfOTjz01dMH9+7+tMgiwP5/fenPovA0MyBIwIEvAgCwBA7IEDMgSMCBLwIAsAQOyBAzIEjAgS8CALAEDsgQMyBIwIEvAgKzpz3sXy8gFjz7/0LTWMMC+vHj67FB/bGBAloABWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZE3Lsgy9xzNNk/fAgKM8ce1x74EB+yRgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVnz7U++2HoGYKd+v/Pj0HkbGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkCVgQJaAAVkCBmTNwze8tCwrzHG8bf/6uGnj8/8Nnh81+i906/lHf/+tbf77/z102gYGZAkYkDU9d3pj6CPs52v31prlOD4hx2z9Cbb5J8wgn5CbsoEBWQIGZAkYkCVgQJaAAVkCBmQJGJAlYECWgAFZAgZkCRiQJWBAloABWQIGZAkYkPU/xehhVyVpJAUAAAAASUVORK5CYII=",
"name": "HyperTizen Data",
"format": "auto",
"priority": 99,
"origin": "HyperTizen"
}
def get_timestamp():
"""Returns the current time as a formatted string with milliseconds."""
return datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
async def send_command():
start_time = None
try:
async with websockets.connect(URL) as websocket:
start_time = time.time() # Record the connection start time
print(f"[{get_timestamp()}] WebSocket connection opened.")
for i in range(TOTAL_FRAMES):
current_command = command1 if (i // 10) % 2 == 0 else command2
try:
# Send command
await websocket.send(json.dumps(current_command))
print(f"[{get_timestamp()}] [{i + 1}] Command sent: {current_command['command']}")
# Wait for response
response = await websocket.recv()
print(f"[{get_timestamp()}] [{i + 1}] Response: {response}")
except websockets.exceptions.ConnectionClosed as e:
print(f"[{get_timestamp()}] WebSocket connection closed unexpectedly: {e}")
break
except Exception as e:
print(f"[{get_timestamp()}] Error sending or receiving data: {e}")
break
# Maintain constant FPS
time.sleep(1 / FPS)
except websockets.exceptions.ConnectionClosedError as e:
print(f"[{get_timestamp()}] ConnectionClosedError: {e}")
except Exception as e:
print(f"[{get_timestamp()}] Unexpected error: {e}")
finally:
elapsed_time = time.time() - start_time if start_time else 0
print(f"[{get_timestamp()}] WebSocket closed. Total time elapsed: {elapsed_time:.3f} seconds.")
# Run the asyncio event loop
asyncio.run(send_command())
Display More
Reis Looks like I did not see the web-socket.txt which was provided after I read the initial post.
I can see that valid images are provided.
which contains exactly what I'm seeing in the preview: pitch black background, but coherent LEDs output.
PPaul You see pitch black background, as the middle part of the images is provied with transparent color.
Reis only creates a frame of color pointes captured, I assume to streamline processing.
HyperTizien does not send an image of the screen, but a 16 picked colour for each side, i.e. do not expect an image!
Here is one sample image that was part of your log.
I am further investigating on the close issue
Reis For me it looks like that there is no data send.
After installation, the service starts and is available over http. But after a reboot the service is deactive.
Due security reasons the image is not installed with the default user pi, but the user hyperion.
The Autostart is configured with that user.
Therefore the service do not work out of the box, if you change the user.
You can of course do this, but then you do an updateHyperionUser command.
I suggest you have a look at the documentation. There you find all the related details. See https://docs.hyperion-project.…/HyperBian.html#hyperbian