Skip to content

Commit 48b1dd4

Browse files
2.1.2 beta.1 - Fixes (#1884)
* Consistent start and stop message output * Fix: UI - Language is not selectable (#1877) * Version rollover * Updating the Finish Page in the Inno Setup Installer * Added locales to docker run * Added locales to docker compile * Change "C" locale to "C.UFT-8" locale in executables * Removed the ability to revoke API requests which are not issued from the same network segment (#1880) * Fix - CEC-Handler is not stopped properly * Qt-Grabber (Windows) does not apply pixel ratio (#1882) - _Thanks to @SolberLight_ * Add additional error handling to resolving IP adressess * Fiu: LED-devices are not retrying to establish connectivity, if supported by the device * Fix: LED-devices are resolving IP-addresses for API and UDP two times in sequence * Fix Code-QL Findings * Fix LED-Device open return code handling * Fix: LED-devices are not retrying to establish connectivity, if supported by the device * Fix mDNS Retry handling for UDPRAW & UDPDDP * Fixes Phillips Hue LED initialization did not return success with proper entertainment group * pass context (JsonAPI) to connect() (EventHandler) to auto disconnect from lambda. - Fix EffectModule::wrapGetImage * Safari improvments - Python corrections - Use reference from Muxer * Memory tracker - Fix deleter for non tracking scenario * Windows - Log to Debug Output window * CaptureCont properly disconnect * Show Tracked memory sceanrio before executing deletes * CaptureCont Move timeer to a start functiopn * Destructor Logging * Consolidate Memory tracker * Update LOG type enum avoiding conflict with Windows macros * Correct SmartPointers around Hyperion to ensure proper ownership * Editorial changes * Correct Logger * Updates and corrections * Track threads * Decouple Hyperion references * CodeQL finding * CodeQL findings * Fix - Disabled SmoothingUpdates * Clean-up * Add resilliancy, if componentRegister has been destroyed * Fix setSubscriptionsTo to Instance * Add missing disconnects * Remove ScopedPointerDeleteLater to ensure destruction if thread is not nunning any long * Fix LED-device updates queue up and let Hyperion crash (#1887) * HTTPS support for homeassistant LED devices (#1886) * Editorial updates * Windows- update ssl version * Clean-ups (cherry picked from commit 3b5d547) --------- Co-authored-by: Paulchen-Panther <[email protected]>
1 parent be71e9e commit 48b1dd4

File tree

109 files changed

+2026
-1283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+2026
-1283
lines changed

.github/workflows/debian.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ jobs:
8282
-v "${{ github.workspace }}:/source:rw" \
8383
-v "/tmp/deps:/tmp/deps:rw" \
8484
-w "/source" \
85+
-e LANG="C.UTF-8" \
86+
-e LC_ALL="C.UTF-8" \
8587
ghcr.io/hyperion-project/debian:${{ env.DOCKER_TAG }} \
8688
/bin/bash -c "cmake --preset linux-${{ env.BUILD_TYPE }} ${{ steps.dependencies.outputs.cmakeArgs }} -DPLATFORM=${{ matrix.os.platform }} ${{ env.CPACK_SYSTEM_PROCESSOR }} &&
8789
cmake --build --preset linux-${{ env.BUILD_TYPE }} --target package &&

.github/workflows/windows.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ jobs:
8484
- name: 💾 Download OpenSSL 3.x
8585
uses: ethanjli/[email protected]
8686
with:
87-
url: "https://slproweb.com/download/Win64${{ matrix.os.architecture == 'arm64' && 'ARM' || '' }}OpenSSL-3_5_1.exe"
87+
url: "https://slproweb.com/download/Win64${{ matrix.os.architecture == 'arm64' && 'ARM' || '' }}OpenSSL-3_5_2.exe"
8888
destination: .\installer\openssl.exe
8989
cache-key: OpenSSL
9090

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212

1313
### ✨ Added
1414

15+
- HTTPS support for homeassistant LED devices (#1886)
16+
1517
---
1618

19+
1720
### 🔧 Changed
1821

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

2132
### 🗑️ Removed
2233

34+
- 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)
35+
Rationale: Such kind of functionality is better to be dealt with via proper network management and setup, e.g. via firewalls, VLANs.
36+
2337
## [2.1.1](https://github.com/hyperion-project/hyperion.ng/compare/2.1.1...HEAD) - 2025-06-14
2438

2539
### 🔧 Changed

assets/webconfig/css/hyperion.css

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,20 +245,17 @@ table.first_cell_borderless td:first-child{width: 25px !important;}
245245
.mdi-lead-pencil, .mdi-delete-forever {font-size: 22px;}
246246

247247
/*led preview & led visualisation*/
248-
body {
249-
--background-var: none;
250-
--width-var: 0px;
251-
--height-var: 0px;
252-
}
253-
254248
#leds_canvas {
255249
position:absolute;
256250
margin:15px;
257251
background-repeat:no-repeat;
258252
background-position: center;
253+
--background-var: none;
254+
--width-var: 0px;
255+
--height-var: 0px;
259256
}
260257

261-
#leds_canvas:before {
258+
#leds_canvas::before {
262259
content: "";
263260
position:absolute;
264261

@@ -279,6 +276,10 @@ body {
279276

280277
filter: blur(10px);
281278
background-size: cover;
279+
280+
/* Safari optimization for pseudo-elements */
281+
transform: translateZ(0);
282+
-webkit-transform: translateZ(0);
282283
}
283284

284285
.led { display:inline-block; border: 1px solid black; position:absolute; opacity:0.8; text-align:center; vertical-align:middle; padding:4px; border-radius:2px;}

assets/webconfig/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,7 @@
765765
"edt_dev_spec_useEntertainmentAPI_title": "Use Hue Entertainment API",
766766
"edt_dev_spec_useOrbSmoothing_title": "Use orb smoothing",
767767
"edt_dev_spec_useRgbwProtocol_title": "Use RGBW protocol",
768+
"edt_dev_spec_useSsl_title": "SSL",
768769
"edt_dev_spec_username_title": "Username",
769770
"edt_dev_spec_verbose_title": "Log all Hue commands",
770771
"edt_dev_spec_vid_title": "VID",
@@ -1239,3 +1240,4 @@
12391240
"ws_processing_exception": "Exception during Websocket message processing"
12401241
}
12411242

1243+

assets/webconfig/js/content_index.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,28 @@ $(window.hyperion).on("cmd-config-setconfig", function (event) {
442442

443443
function bindUiHandlers() {
444444

445-
// Side menu link click activation
445+
// Handle language selection
446+
447+
// Prevent dropdown from closing when selecting language
448+
$('#btn_setlang').on('click', function (e) {
449+
e.stopPropagation();
450+
});
451+
452+
$('#language-select').on('changed.bs.select', function () {
453+
const newLang = $(this).val();
454+
if (newLang !== storedLang) {
455+
setStorage("langcode", newLang);
456+
location.reload();
457+
}
458+
});
459+
460+
//Close selector, if open (and no change in language happend)
461+
$(document).on("click", function () {
462+
$(".bootstrap-select.open").removeClass("open");
463+
});
464+
//End language selection
465+
466+
// Side smenu link click activation
446467
$('#side-menu li a, #side-menu li ul li a').on("click", function () {
447468
$('#side-menu').find('.active').removeClass('active');
448469
$(this).addClass('active');
@@ -476,13 +497,6 @@ function bindUiHandlers() {
476497
logo.style.display = window.scrollY > 65 ? "none" : "";
477498
}, { passive: true });
478499

479-
// Language selector
480-
$(".langSelect").off().on("click", function () {
481-
const newLang = $(this).attr("id").replace("lang_", "");
482-
setStorage("lang", newLang);
483-
location.reload();
484-
});
485-
486500
// Toggle top menu for mobile
487501
$(".navbar-toggle").off().on("click", function () {
488502
const target = $(this).data("target");

assets/webconfig/js/content_leds.js

Lines changed: 92 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,24 +1412,30 @@ $(document).ready(function () {
14121412
break;
14131413

14141414
case "homeassistant":
1415-
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
1415+
{
1416+
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
1417+
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
1418+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
14161419
if (token === "") {
14171420
return;
14181421
}
14191422

1420-
params = { host: host, token: token, filter: "states" };
1423+
params = { host, port, useSsl, token, filter: "states" };
14211424
getProperties_device(ledType, host, params);
1425+
}
14221426
break;
14231427

14241428
case "nanoleaf":
1425-
$('#btn_wiz_holder').show();
1429+
{
1430+
$('#btn_wiz_holder').show();
14261431

1427-
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
1428-
if (token === "") {
1429-
return;
1432+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
1433+
if (token === "") {
1434+
return;
1435+
}
1436+
params = { host, token };
1437+
getProperties_device(ledType, host, params);
14301438
}
1431-
params = { host: host, token: token };
1432-
getProperties_device(ledType, host, params);
14331439
break;
14341440

14351441
case "wled":
@@ -1586,22 +1592,28 @@ $(document).ready(function () {
15861592
if (token !== "") {
15871593
let params = {};
15881594

1589-
var host = "";
1595+
let host = "";
15901596
switch (ledType) {
15911597
case "homeassistant":
1592-
host = conf_editor.getEditor("root.specificOptions.host").getValue();
1593-
if (host === "") {
1594-
return
1598+
{
1599+
host = conf_editor.getEditor("root.specificOptions.host").getValue();
1600+
if (host === "") {
1601+
return
1602+
}
1603+
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
1604+
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
1605+
params = { host, port, useSsl, token, filter: "states" };
15951606
}
1596-
params = { host: host, token: token, filter: "states" };
15971607
break;
15981608

15991609
case "nanoleaf":
1600-
host = conf_editor.getEditor("root.specificOptions.host").getValue();
1601-
if (host === "") {
1602-
return
1610+
{
1611+
host = conf_editor.getEditor("root.specificOptions.host").getValue();
1612+
if (host === "") {
1613+
return
1614+
}
1615+
params = { host, token };
16031616
}
1604-
params = { host: host, token: token };
16051617
break;
16061618
default:
16071619
}
@@ -1610,6 +1622,44 @@ $(document).ready(function () {
16101622
}
16111623
});
16121624

1625+
conf_editor.watch('root.specificOptions.port', () => {
1626+
1627+
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
1628+
if (port !== "") {
1629+
let params = {};
1630+
if (ledType === "homeassistant") {
1631+
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
1632+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
1633+
1634+
if (host === "" || token == "") {
1635+
return
1636+
}
1637+
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
1638+
params = { host, port, useSsl, token, filter: "states" };
1639+
1640+
getProperties_device(ledType, host, params);
1641+
}
1642+
}
1643+
});
1644+
1645+
conf_editor.watch('root.specificOptions.useSsl', () => {
1646+
1647+
let params = {};
1648+
if (ledType === "homeassistant") {
1649+
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
1650+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
1651+
1652+
if (host === "" || token == "") {
1653+
return
1654+
}
1655+
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
1656+
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
1657+
params = { host, port, useSsl, token, filter: "states" };
1658+
1659+
getProperties_device(ledType, host, params);
1660+
}
1661+
});
1662+
16131663
//Yeelight
16141664
conf_editor.watch('root.specificOptions.lights', () => {
16151665
//Disable General Options, as LED count will be resolved from number of lights configured
@@ -1788,36 +1838,46 @@ $(document).ready(function () {
17881838

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

17941844
switch (ledType) {
17951845
case "cololight":
17961846
case "wled":
1797-
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
1798-
params = { host: host };
1847+
{
1848+
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
1849+
params = { host: host };
1850+
}
17991851
break;
18001852

18011853
case "homeassistant":
1802-
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
1803-
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
1804-
const entityIds = conf_editor.getEditor("root.specificOptions.entityIds").getValue();
1805-
params = { host: host, token: token, entity_id: entityIds };
1854+
{
1855+
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
1856+
const port = conf_editor.getEditor("root.specificOptions.port").getValue();
1857+
const useSsl = conf_editor.getEditor("root.specificOptions.useSsl").getValue();
1858+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
1859+
const entityIds = conf_editor.getEditor("root.specificOptions.entityIds").getValue();
1860+
params = { host, port, useSsl, token, entity_id: entityIds };
1861+
}
18061862
break;
18071863

18081864
case "nanoleaf":
1809-
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
1810-
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
1811-
params = { host: host, token: token };
1865+
{
1866+
const host = conf_editor.getEditor("root.specificOptions.host").getValue();
1867+
const token = conf_editor.getEditor("root.specificOptions.token").getValue();
1868+
params = { host, token };
1869+
}
18121870
break;
18131871

18141872
case "adalight":
18151873
case "skydimo":
1816-
var currentLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount").getValue();
1817-
params = Object.assign(conf_editor.getEditor("root.generalOptions").getValue(),
1818-
conf_editor.getEditor("root.specificOptions").getValue(),
1819-
{ currentLedCount }
1820-
);
1874+
{
1875+
const currentLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount").getValue();
1876+
params = Object.assign(conf_editor.getEditor("root.generalOptions").getValue(),
1877+
conf_editor.getEditor("root.specificOptions").getValue(),
1878+
{ currentLedCount }
1879+
);
1880+
}
18211881
default:
18221882
}
18231883

@@ -2814,4 +2874,3 @@ function nanoleafGeneratelayout(panelLayout, panelOrderTopDown, panelOrderLeftRi
28142874
});
28152875
return layoutObjects;
28162876
}
2817-

assets/webconfig/js/content_network.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -266,16 +266,11 @@ $(document).ready(function () {
266266
$("#conf_cont_tok").insertAfter("#conf_cont_network");
267267

268268
// Initial state check based on server config
269-
checkApiTokenState(window.serverConfig.network.internetAccessAPI || window.serverConfig.network.localApiAuth || storedAccess === 'expert');
270-
271-
// Listen for changes on the Internet access API Auth toggle
272-
$('#root_network_internetAccessAPI').on("change", function () {
273-
checkApiTokenState($(this).is(":checked") || $('#root_network_localApiAuth').is(":checked"));
274-
});
269+
checkApiTokenState(window.serverConfig.network.localApiAuth || storedAccess === 'expert');
275270

276271
// Listen for changes on the local API Auth toggle
277272
$('#root_network_localApiAuth').on("change", function () {
278-
checkApiTokenState($(this).is(":checked") || $('#root_network_internetAccessAPI').is(":checked"));
273+
checkApiTokenState($(this).is(":checked"));
279274
});
280275

281276
$('#btn_create_tok').off().on('click', function () {
@@ -317,7 +312,7 @@ $(document).ready(function () {
317312
}
318313

319314
function checkApiTokenState(state) {
320-
if (!state) {
315+
if (!state && storedAccess !== 'expert') {
321316
$("#conf_cont_tok").hide();
322317
} else {
323318
$("#conf_cont_tok").show();

0 commit comments

Comments
 (0)