Skip to content
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
6978a53
Consistent start and stop message output
Lord-Grey Jun 14, 2025
b008bdb
Fix: UI - Language is not selectable (#1877)
Lord-Grey Jun 15, 2025
05df1f1
Version rollover
Lord-Grey Jun 15, 2025
0af74fe
Updating the Finish Page in the Inno Setup Installer
Paulchen-Panther Jun 17, 2025
c1a8008
Added locales to docker run
Paulchen-Panther Jun 17, 2025
99eb28e
Added locales to docker compile
Lord-Grey Jun 21, 2025
6635a59
Change "C" locale to "C.UFT-8" locale in executables
Lord-Grey Jun 21, 2025
010bb93
Removed the ability to revoke API requests which are not issued from …
Lord-Grey Jun 21, 2025
88952ba
Fix - CEC-Handler is not stopped properly
Lord-Grey Jun 22, 2025
9ab1032
Qt-Grabber (Windows) does not apply pixel ratio (#1882) - _Thanks to …
Lord-Grey Jun 23, 2025
38761f6
Add additional error handling to resolving IP adressess
Lord-Grey Jun 27, 2025
850e22e
Fiu: LED-devices are not retrying to establish connectivity, if suppo…
Lord-Grey Jun 29, 2025
cdb18f6
Fix: LED-devices are resolving IP-addresses for API and UDP two times…
Lord-Grey Jun 29, 2025
b990b28
Fix Code-QL Findings
Lord-Grey Jun 29, 2025
b64ef8a
Fix LED-Device open return code handling
Lord-Grey Jun 29, 2025
43ef07f
Fix: LED-devices are not retrying to establish connectivity, if suppo…
Lord-Grey Jun 29, 2025
28271ce
Fix mDNS Retry handling for UDPRAW & UDPDDP
Lord-Grey Jul 1, 2025
c119e38
Fixes Phillips Hue LED initialization did not return success with pro…
Lord-Grey Jul 1, 2025
e0b712d
pass context (JsonAPI) to connect() (EventHandler) to auto disconnect…
Paulchen-Panther Jul 7, 2025
18517d6
Safari improvments
Paulchen-Panther Jul 8, 2025
d6f4c9f
Memory tracker - Fix deleter for non tracking scenario
Lord-Grey Jul 27, 2025
e93b380
Windows - Log to Debug Output window
Lord-Grey Jul 27, 2025
9ad74f7
Merge branch '2.1.2-beta.1' of https://github.com/Lord-Grey/hyperion.…
Lord-Grey Jul 27, 2025
a122682
CaptureCont properly disconnect
Lord-Grey Jul 27, 2025
4bc7e15
Show Tracked memory sceanrio before executing deletes
Lord-Grey Jul 27, 2025
c64bf15
CaptureCont Move timeer to a start functiopn
Lord-Grey Jul 27, 2025
1637a7e
Destructor Logging
Lord-Grey Jul 27, 2025
b870fbe
Consolidate Memory tracker
Lord-Grey Jul 29, 2025
ed26ea6
Update LOG type enum avoiding conflict with Windows macros
Lord-Grey Jul 29, 2025
0f87463
Correct SmartPointers around Hyperion to ensure proper ownership
Lord-Grey Jul 29, 2025
5f319c1
Editorial changes
Lord-Grey Jul 29, 2025
52c75ef
Correct Logger
Lord-Grey Jul 30, 2025
1bcf974
Updates and corrections
Lord-Grey Jul 30, 2025
89543f1
Track threads
Lord-Grey Jul 31, 2025
5edc20e
Decouple Hyperion references
Lord-Grey Jul 31, 2025
6d00ae5
CodeQL finding
Lord-Grey Jul 31, 2025
129c309
CodeQL findings
Lord-Grey Jul 31, 2025
f958bbd
Fix - Disabled SmoothingUpdates
Lord-Grey Jul 31, 2025
896a41d
Clean-up
Lord-Grey Jul 31, 2025
4dbbe52
Add resilliancy, if componentRegister has been destroyed
Lord-Grey Jul 31, 2025
bfb75cd
Fix setSubscriptionsTo to Instance
Lord-Grey Jul 31, 2025
53e0c4e
Add missing disconnects
Lord-Grey Aug 4, 2025
406796e
Remove ScopedPointerDeleteLater to ensure destruction if thread is no…
Lord-Grey Aug 4, 2025
8c42e26
Merge remote-tracking branch 'upstream/master' into 2.1.2-beta.1
Lord-Grey Aug 21, 2025
2d016ae
Fix LED-device updates queue up and let Hyperion crash (#1887)
Lord-Grey Aug 21, 2025
dce1288
HTTPS support for homeassistant LED devices (#1886)
Lord-Grey Aug 21, 2025
02c9d94
Editorial updates
Lord-Grey Aug 22, 2025
2b67014
Windows- update ssl version
Lord-Grey Aug 22, 2025
7057707
Clean-ups
Lord-Grey Aug 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/debian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ jobs:
-v "${{ github.workspace }}:/source:rw" \
-v "/tmp/deps:/tmp/deps:rw" \
-w "/source" \
-e LANG="C.UTF-8" \
-e LC_ALL="C.UTF-8" \
ghcr.io/hyperion-project/debian:${{ env.DOCKER_TAG }} \
/bin/bash -c "cmake --preset linux-${{ env.BUILD_TYPE }} ${{ steps.dependencies.outputs.cmakeArgs }} -DPLATFORM=${{ matrix.os.platform }} ${{ env.CPACK_SYSTEM_PROCESSOR }} &&
cmake --build --preset linux-${{ env.BUILD_TYPE }} --target package &&
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### ✨ Added

- HTTPS support for homeassistant LED devices (#1886)

---


### 🔧 Changed

- **Fixes:**
- UI - Language is not selectable (#1877)
- CEC-Handler is not stopped properly
- Qt-Grabber (Windows) does not apply pixel ratio (#1882) - _Thanks to @SolberLight_
- LED-devices are not retrying to establish connectivity, if supported by the device
- LED-devices are resolving IP-addresses for API and UDP two times in sequence
- LED-device updates queue up and let Hyperion crash (#1887)

---

### 🗑️ Removed

- Removed the ability to revoke API requests which are not issued from the same network segment. This includes the removal of IP-address white- & blacklisting (#1880)
Rationale: Such kind of functionality is better to be dealt with via proper network management and setup, e.g. via firewalls, VLANs.

## [2.1.1](https://github.com/hyperion-project/hyperion.ng/compare/2.1.1...HEAD) - 2025-06-14

### 🔧 Changed
Expand Down
15 changes: 8 additions & 7 deletions assets/webconfig/css/hyperion.css
Original file line number Diff line number Diff line change
Expand Up @@ -245,20 +245,17 @@ table.first_cell_borderless td:first-child{width: 25px !important;}
.mdi-lead-pencil, .mdi-delete-forever {font-size: 22px;}

/*led preview & led visualisation*/
body {
--background-var: none;
--width-var: 0px;
--height-var: 0px;
}

#leds_canvas {
position:absolute;
margin:15px;
background-repeat:no-repeat;
background-position: center;
--background-var: none;
--width-var: 0px;
--height-var: 0px;
}

#leds_canvas:before {
#leds_canvas::before {
content: "";
position:absolute;

Expand All @@ -279,6 +276,10 @@ body {

filter: blur(10px);
background-size: cover;

/* Safari optimization for pseudo-elements */
transform: translateZ(0);
-webkit-transform: translateZ(0);
}

.led { display:inline-block; border: 1px solid black; position:absolute; opacity:0.8; text-align:center; vertical-align:middle; padding:4px; border-radius:2px;}
Expand Down
2 changes: 2 additions & 0 deletions assets/webconfig/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,7 @@
"edt_dev_spec_useEntertainmentAPI_title": "Use Hue Entertainment API",
"edt_dev_spec_useOrbSmoothing_title": "Use orb smoothing",
"edt_dev_spec_useRgbwProtocol_title": "Use RGBW protocol",
"edt_dev_spec_useSsl_title": "SSL",
"edt_dev_spec_username_title": "Username",
"edt_dev_spec_verbose_title": "Log all Hue commands",
"edt_dev_spec_vid_title": "VID",
Expand Down Expand Up @@ -1239,3 +1240,4 @@
"ws_processing_exception": "Exception during Websocket message processing"
}


30 changes: 22 additions & 8 deletions assets/webconfig/js/content_index.js
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,28 @@ $(window.hyperion).on("cmd-config-setconfig", function (event) {

function bindUiHandlers() {

// Side menu link click activation
// Handle language selection

// Prevent dropdown from closing when selecting language
$('#btn_setlang').on('click', function (e) {
e.stopPropagation();
});

$('#language-select').on('changed.bs.select', function () {
const newLang = $(this).val();
if (newLang !== storedLang) {
setStorage("langcode", newLang);
location.reload();
}
});

//Close selector, if open (and no change in language happend)
$(document).on("click", function () {
$(".bootstrap-select.open").removeClass("open");
});
//End language selection

// Side smenu link click activation
$('#side-menu li a, #side-menu li ul li a').on("click", function () {
$('#side-menu').find('.active').removeClass('active');
$(this).addClass('active');
Expand Down Expand Up @@ -476,13 +497,6 @@ function bindUiHandlers() {
logo.style.display = window.scrollY > 65 ? "none" : "";
}, { passive: true });

// Language selector
$(".langSelect").off().on("click", function () {
const newLang = $(this).attr("id").replace("lang_", "");
setStorage("lang", newLang);
location.reload();
});

// Toggle top menu for mobile
$(".navbar-toggle").off().on("click", function () {
const target = $(this).data("target");
Expand Down
107 changes: 85 additions & 22 deletions assets/webconfig/js/content_leds.js
Original file line number Diff line number Diff line change
Expand Up @@ -1412,23 +1412,25 @@
break;

case "homeassistant":
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
if (token === "") {
return;
}

params = { host: host, token: token, filter: "states" };
params = { host, port, useSsl, token, filter: "states" };
getProperties_device(ledType, host, params);
break;

case "nanoleaf":
$('#btn_wiz_holder').show();

var token = conf_editor.getEditor("root.specificOptions.token").getValue();
token = conf_editor.getEditor("root.specificOptions.token").getValue();
if (token === "") {
return;
}
params = { host: host, token: token };
params = { host, token };
getProperties_device(ledType, host, params);
break;

Expand Down Expand Up @@ -1586,22 +1588,24 @@
if (token !== "") {
let params = {};

var host = "";
let host = "";
switch (ledType) {
case "homeassistant":
host = conf_editor.getEditor("root.specificOptions.host").getValue();
if (host === "") {
return
}
params = { host: host, token: token, filter: "states" };
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
params = { host, port, useSsl, token, filter: "states" };
break;

case "nanoleaf":
host = conf_editor.getEditor("root.specificOptions.host").getValue();
if (host === "") {
return
}
params = { host: host, token: token };
params = { host, token };
break;
default:
}
Expand All @@ -1610,6 +1614,54 @@
}
});

conf_editor.watch('root.specificOptions.port', () => {

const port = conf_editor.getEditor("root.specificOptions.port").getValue();

if (port !== "") {
let params = {};

switch (ledType) {
case "homeassistant":
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
const token = conf_editor.getEditor("root.specificOptions.token").getValue();

if (host === "" || token == "") {
return
}
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
params = { host, port, useSsl, token, filter: "states" };

getProperties_device(ledType, host, params);

break;
}
}
});

conf_editor.watch('root.specificOptions.useSsl', () => {

const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();

let params = {};

switch (ledType) {
case "homeassistant":
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
const token = conf_editor.getEditor("root.specificOptions.token").getValue();

if (host === "" || token == "") {
return
}
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
params = { host, port, useSsl, token, filter: "states" };

getProperties_device(ledType, host, params);

break;
}
});

//Yeelight
conf_editor.watch('root.specificOptions.lights', () => {
//Disable General Options, as LED count will be resolved from number of lights configured
Expand Down Expand Up @@ -1788,36 +1840,46 @@

// Identify/ Test LED-Device
$("#btn_test_controller").off().on("click", function () {
var ledType = $("#leddevices").val();
const ledType = $("#leddevices").val();
let params = {};

switch (ledType) {
case "cololight":
case "wled":
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
params = { host: host };
{
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
params = { host: host };
}
break;

case "homeassistant":
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
const entityIds = conf_editor.getEditor("root.specificOptions.entityIds").getValue();
params = { host: host, token: token, entity_id: entityIds };
{
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
const entityIds = conf_editor.getEditor("root.specificOptions.entityIds").getValue();
params = { host, port, useSsl, token, entity_id: entityIds };
}
break;

case "nanoleaf":
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
params = { host: host, token: token };
{
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
params = { host, token };
}
break;

case "adalight":
case "skydimo":
var currentLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount").getValue();
params = Object.assign(conf_editor.getEditor("root.generalOptions").getValue(),
conf_editor.getEditor("root.specificOptions").getValue(),
{ currentLedCount }
);
{
const currentLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount").getValue();
params = Object.assign(conf_editor.getEditor("root.generalOptions").getValue(),
conf_editor.getEditor("root.specificOptions").getValue(),
{ currentLedCount }
);
}
default:
}

Expand Down Expand Up @@ -2815,3 +2877,4 @@
return layoutObjects;
}


11 changes: 3 additions & 8 deletions assets/webconfig/js/content_network.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,16 +266,11 @@ $(document).ready(function () {
$("#conf_cont_tok").insertAfter("#conf_cont_network");

// Initial state check based on server config
checkApiTokenState(window.serverConfig.network.internetAccessAPI || window.serverConfig.network.localApiAuth || storedAccess === 'expert');

// Listen for changes on the Internet access API Auth toggle
$('#root_network_internetAccessAPI').on("change", function () {
checkApiTokenState($(this).is(":checked") || $('#root_network_localApiAuth').is(":checked"));
});
checkApiTokenState(window.serverConfig.network.localApiAuth || storedAccess === 'expert');

// Listen for changes on the local API Auth toggle
$('#root_network_localApiAuth').on("change", function () {
checkApiTokenState($(this).is(":checked") || $('#root_network_internetAccessAPI').is(":checked"));
checkApiTokenState($(this).is(":checked"));
});

$('#btn_create_tok').off().on('click', function () {
Expand Down Expand Up @@ -317,7 +312,7 @@ $(document).ready(function () {
}

function checkApiTokenState(state) {
if (!state) {
if (!state && storedAccess !== 'expert') {
$("#conf_cont_tok").hide();
} else {
$("#conf_cont_tok").show();
Expand Down
20 changes: 11 additions & 9 deletions assets/webconfig/js/ledsim.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ $(document).ready(function () {
var leds;
var grabberConfig;
var lC = false;
var imageCanvasNodeCtx = document.getElementById("image_preview_canv").getContext("2d");
var ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d");
var sigDetectAreaCanvasNodeCtx = document.getElementById("grab_preview_canv").getContext("2d");
var imageCanvasNodeCtx = document.getElementById("image_preview_canv").getContext("2d", { willReadFrequently: false});
var ledsCanvasNodeCtx = document.getElementById("leds_preview_canv").getContext("2d", { willReadFrequently: false});
var sigDetectAreaCanvasNodeCtx = document.getElementById("grab_preview_canv").getContext("2d", { willReadFrequently: false});
var canvas_height;
var canvas_width;
var twoDPaths = [];
Expand Down Expand Up @@ -205,12 +205,12 @@ $(document).ready(function () {
canvas_width = $('#ledsim_dialog').outerWidth() - 30;

$("[id$=_preview_canv]").prop({ "width": canvas_width, "height": canvas_height });
$("body").get(0).style.setProperty("--width-var", canvas_width + "px");
$("body").get(0).style.setProperty("--height-var", canvas_height + "px");
$('#leds_canvas').css("--width-var", canvas_width + "px");
$('#leds_canvas').css("--height-var", canvas_height + "px");

create2dPaths();
printLedsToCanvas();
$("body").get(0).style.setProperty("--background-var", "none");
$('#leds_canvas').css("--background-var", "none");
resetImage();
}

Expand All @@ -227,7 +227,7 @@ $(document).ready(function () {
if (window.ledStreamActive) {
requestLedColorsStop();
ledsCanvasNodeCtx.clear();
$("body").get(0).style.setProperty("--background-var", "none");
$('#leds_canvas').css("--background-var", "none");
} else {
requestLedColorsStart();
}
Expand Down Expand Up @@ -263,11 +263,13 @@ $(document).ready(function () {
$(window.hyperion).on("cmd-ledcolors-ledstream-update", function (event) {
if (!modalOpened) {
requestLedColorsStop();
$("body").get(0).style.setProperty("--background-var", "none");
$('#leds_canvas').css("--background-var", "none");
}
else {
printLedsToCanvas(event.response.data.leds)
$("body").get(0).style.setProperty("--background-var", "url(" + ($('#leds_preview_canv')[0]).toDataURL("image/jpg") + ") no-repeat top left");
$('#leds_canvas').css("--background-var", "url(" + ($('#leds_preview_canv')[0]).toDataURL("image/jpg") + ") no-repeat top left");
// Safari workaround (redraw canvas)
$('#leds_canvas').parent().hide().show(0);
}
});

Expand Down
Loading
Loading