mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-19 22:24:15 +01:00
v4.3.3.17 - Update NsPanelTs.ts
Add SEEK and CROSSFADE to Sonos cardMedia
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
TypeScript v4.3.3.16 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne
|
TypeScript v4.3.3.17 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @Sternmiere / @Britzelpuf / @ravenS0ne
|
||||||
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.2.0
|
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.2.0
|
||||||
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
||||||
NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts
|
NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts
|
||||||
@@ -70,7 +70,8 @@ ReleaseNotes:
|
|||||||
- 29.11.2023 - v4.3.3.15 Fix cardMedia Volume-Slider / Add Init Release to Startup
|
- 29.11.2023 - v4.3.3.15 Fix cardMedia Volume-Slider / Add Init Release to Startup
|
||||||
- 30.11.2023 - v4.3.3.16 Beautification of the Sonos player Strings / Add Duration & Elapsed
|
- 30.11.2023 - v4.3.3.16 Beautification of the Sonos player Strings / Add Duration & Elapsed
|
||||||
- 01.12.2023 - v4.3.3.16 Fix Datapoints with Value null
|
- 01.12.2023 - v4.3.3.16 Fix Datapoints with Value null
|
||||||
- 02.12.2023 - v4.3.3.16 Request replaced by Axios
|
- 02.12.2023 - v4.3.3.16 Request replaced by Axios
|
||||||
|
- 04.12.2023 - v4.3.3.17 Add SEEK and CROSSFADE to Sonos cardMedia
|
||||||
|
|
||||||
Todo:
|
Todo:
|
||||||
- XX.XX.XXXX - v4.4.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
- XX.XX.XXXX - v4.4.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
||||||
@@ -943,7 +944,7 @@ export const config = <Config> {
|
|||||||
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
||||||
// _________________________________ EN: No more configuration from here _____________________________________
|
// _________________________________ EN: No more configuration from here _____________________________________
|
||||||
|
|
||||||
const scriptVersion: string = 'v4.3.3.16';
|
const scriptVersion: string = 'v4.3.3.17';
|
||||||
const tft_version: string = 'v4.3.3';
|
const tft_version: string = 'v4.3.3';
|
||||||
const desired_display_firmware_version = 53;
|
const desired_display_firmware_version = 53;
|
||||||
const berry_driver_version = 9;
|
const berry_driver_version = 9;
|
||||||
@@ -4729,7 +4730,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
||||||
let nameLenght = name.length;
|
let nameLenght = name.length;
|
||||||
if (nameLenght == 0) {
|
if (nameLenght == 0) {
|
||||||
name = 'Sonos Player';
|
name = page.heading;
|
||||||
} else if (nameLenght > 16) {
|
} else if (nameLenght > 16) {
|
||||||
name = name.slice(0,16) + '...'
|
name = name.slice(0,16) + '...'
|
||||||
}
|
}
|
||||||
@@ -4976,7 +4977,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
id + '?tracklist' + '~' +
|
id + '?tracklist' + '~' +
|
||||||
Icons.GetIcon('animation-play-outline') + '~' +
|
Icons.GetIcon('animation-play-outline') + '~' +
|
||||||
trackListIconCol + '~' +
|
trackListIconCol + '~' +
|
||||||
findLocale('media','tracklist') + '~' + + '~' +
|
findLocale('media','tracklist') + '~' +
|
||||||
'media2~'
|
'media2~'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4989,7 +4990,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
id + '?equalizer' + '~' +
|
id + '?equalizer' + '~' +
|
||||||
Icons.GetIcon('equalizer-outline') + '~' +
|
Icons.GetIcon('equalizer-outline') + '~' +
|
||||||
equalizerListIconCol + '~' +
|
equalizerListIconCol + '~' +
|
||||||
findLocale('media','equalizer') + '~' + + '~' +
|
findLocale('media','equalizer') + '~' +
|
||||||
'media3~'
|
'media3~'
|
||||||
} else if (page.items[0].equalizerList == undefined && v2Adapter == 'sonos') {
|
} else if (page.items[0].equalizerList == undefined && v2Adapter == 'sonos') {
|
||||||
let equalizerListIconCol = rgb_dec565(HMIOn);
|
let equalizerListIconCol = rgb_dec565(HMIOn);
|
||||||
@@ -4998,7 +4999,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
id + '?favorites' + '~' +
|
id + '?favorites' + '~' +
|
||||||
Icons.GetIcon('playlist-star') + '~' +
|
Icons.GetIcon('playlist-star') + '~' +
|
||||||
equalizerListIconCol + '~' +
|
equalizerListIconCol + '~' +
|
||||||
findLocale('media','favorites') + '~' + + '~' +
|
findLocale('media','favorites') + '~' +
|
||||||
'media3~'
|
'media3~'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5055,6 +5056,34 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
'media4'
|
'media4'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//popUp Tools
|
||||||
|
let toolsString: string = '~~~~~~'
|
||||||
|
let toolsIconCol = rgb_dec565(colMediaIcon);
|
||||||
|
if (v2Adapter == 'sonos') {
|
||||||
|
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
||||||
|
toolsString = 'input_sel' + '~' +
|
||||||
|
id + '?seek' + '~' +
|
||||||
|
media_icon + '~' +
|
||||||
|
toolsIconCol + '~' +
|
||||||
|
findLocale('media','seek') + '~' +
|
||||||
|
'media5~'
|
||||||
|
} else {
|
||||||
|
toolsString = 'input_sel' + '~' +
|
||||||
|
id + '?crossfade' + '~' +
|
||||||
|
media_icon + '~' +
|
||||||
|
toolsIconCol + '~' +
|
||||||
|
findLocale('media','crossfade') + '~' +
|
||||||
|
'media5~'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toolsString = 'button' + '~' +
|
||||||
|
id + '' + '~' +
|
||||||
|
media_icon + '~' +
|
||||||
|
toolsIconCol + '~' +
|
||||||
|
findLocale('media','tools') + '~' +
|
||||||
|
'media5~'
|
||||||
|
}
|
||||||
|
|
||||||
out_msgs.push({
|
out_msgs.push({
|
||||||
payload: 'entityUpd~' + //entityUpd
|
payload: 'entityUpd~' + //entityUpd
|
||||||
name + '~' + //heading
|
name + '~' + //heading
|
||||||
@@ -5068,10 +5097,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
iconplaypause + '~' + //playpauseicon
|
iconplaypause + '~' + //playpauseicon
|
||||||
onoffbutton + '~' + //On/Off Button Color
|
onoffbutton + '~' + //On/Off Button Color
|
||||||
shuffle_icon + '~' + //iconShuffle --> Code
|
shuffle_icon + '~' + //iconShuffle --> Code
|
||||||
'button' + '~' + //type MediaIcon --> Code
|
toolsString +
|
||||||
id + '~' + //internalNameEntity MediaIcon --> Code
|
|
||||||
media_icon + '~' + //icon MediaIcon
|
|
||||||
rgb_dec565(colMediaIcon) + '~~~' + //iconColor MediaIcon
|
|
||||||
speakerListString +
|
speakerListString +
|
||||||
playListString +
|
playListString +
|
||||||
trackListString +
|
trackListString +
|
||||||
@@ -5898,7 +5924,7 @@ function HandleButtonEvent(words: any): void {
|
|||||||
toggleState(id + '.ON_ACTUAL');
|
toggleState(id + '.ON_ACTUAL');
|
||||||
case 'media':
|
case 'media':
|
||||||
if (tempid[1] == undefined) {
|
if (tempid[1] == undefined) {
|
||||||
console.log('Logo click');
|
if (Debug) console.log('Logo click');
|
||||||
GeneratePage(activePage);
|
GeneratePage(activePage);
|
||||||
} else if (tempid[1] == 'repeat') {
|
} else if (tempid[1] == 'repeat') {
|
||||||
let pageItemRepeat = findPageItem(id);
|
let pageItemRepeat = findPageItem(id);
|
||||||
@@ -6279,7 +6305,7 @@ function HandleButtonEvent(words: any): void {
|
|||||||
case 'mode-tracklist':
|
case 'mode-tracklist':
|
||||||
let pageItemTL = findPageItem(id);
|
let pageItemTL = findPageItem(id);
|
||||||
let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
|
let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
|
||||||
let adapterTL = adapterInstanceTL.split('.')
|
let adapterTL = adapterInstanceTL.split('.');
|
||||||
let deviceAdapterTL = adapterTL[0];
|
let deviceAdapterTL = adapterTL[0];
|
||||||
|
|
||||||
switch (deviceAdapterTL) {
|
switch (deviceAdapterTL) {
|
||||||
@@ -6348,6 +6374,50 @@ function HandleButtonEvent(words: any): void {
|
|||||||
GeneratePage(activePage);
|
GeneratePage(activePage);
|
||||||
}, 3000);
|
}, 3000);
|
||||||
break;
|
break;
|
||||||
|
case 'mode-seek':
|
||||||
|
let pageItemSeek = findPageItem(id);
|
||||||
|
let adapterInstanceSK = pageItemSeek.adapterPlayerInstance;
|
||||||
|
let adapterSK = adapterInstanceSK.split('.');
|
||||||
|
let deviceAdapterSK = adapterSK[0];
|
||||||
|
switch (deviceAdapterSK) {
|
||||||
|
case 'spotify-premium':
|
||||||
|
break;
|
||||||
|
case 'sonos':
|
||||||
|
if (Debug) console.log('HandleButtonEvent mode-seek -> id: ' + id);
|
||||||
|
setState(adapterInstanceSK + 'root.' + pageItemSeek.mediaDevice + '.seek', parseInt(words[4]) * 10);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pageCounter = 0;
|
||||||
|
GeneratePage(activePage);
|
||||||
|
setTimeout(async function () {
|
||||||
|
pageCounter = 1;
|
||||||
|
GeneratePage(activePage);
|
||||||
|
}, 3000);
|
||||||
|
break;
|
||||||
|
case 'mode-crossfade':
|
||||||
|
let pageItemCrossfade = findPageItem(id);
|
||||||
|
let adapterInstanceCF = pageItemCrossfade.adapterPlayerInstance;
|
||||||
|
let adapterCF = adapterInstanceCF.split('.');
|
||||||
|
let deviceAdapterCF = adapterCF[0];
|
||||||
|
switch (deviceAdapterCF) {
|
||||||
|
case 'spotify-premium':
|
||||||
|
break;
|
||||||
|
case 'sonos':
|
||||||
|
if (Debug) console.log('HandleButtonEvent mode-crossfade -> id: ' + id);
|
||||||
|
let cfState: boolean = false;
|
||||||
|
if (parseInt(words[4]) == 0 ) {
|
||||||
|
cfState = true;
|
||||||
|
}
|
||||||
|
setState(adapterInstanceCF + 'root.' + pageItemCrossfade.mediaDevice + '.crossfade', cfState);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pageCounter = 0;
|
||||||
|
GeneratePage(activePage);
|
||||||
|
setTimeout(async function () {
|
||||||
|
pageCounter = 1;
|
||||||
|
GeneratePage(activePage);
|
||||||
|
}, 3000);
|
||||||
|
break;
|
||||||
case 'mode-favorites':
|
case 'mode-favorites':
|
||||||
let pageItemFav = findPageItem(id);
|
let pageItemFav = findPageItem(id);
|
||||||
if (Debug) console.log(getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set').val);
|
if (Debug) console.log(getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set').val);
|
||||||
@@ -7311,7 +7381,6 @@ function GenerateDetailPage(type: string, optional: string, pageItem: PageItem):
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == 'popupInSel') {
|
if (type == 'popupInSel') {
|
||||||
//console.log(o.common.role);
|
|
||||||
if (o.common.role == 'media') {
|
if (o.common.role == 'media') {
|
||||||
let actualState: any = '';
|
let actualState: any = '';
|
||||||
let optionalString: string = 'Kein Eintrag';
|
let optionalString: string = 'Kein Eintrag';
|
||||||
@@ -7319,8 +7388,49 @@ function GenerateDetailPage(type: string, optional: string, pageItem: PageItem):
|
|||||||
|
|
||||||
let vTempAdapter = (pageItem.adapterPlayerInstance).split('.');
|
let vTempAdapter = (pageItem.adapterPlayerInstance).split('.');
|
||||||
let vAdapter = vTempAdapter[0];
|
let vAdapter = vTempAdapter[0];
|
||||||
|
if (optional == 'seek') {
|
||||||
if (optional == 'speakerlist') {
|
let actualStateTemp: number = getState(pageItem.adapterPlayerInstance + 'root.' + pageItem.mediaDevice + '.seek').val;
|
||||||
|
if (actualStateTemp >= 95) {
|
||||||
|
actualState = '100%';
|
||||||
|
} else if (actualStateTemp >= 85) {
|
||||||
|
actualState = '90%';
|
||||||
|
} else if (actualStateTemp >= 75) {
|
||||||
|
actualState = '80%';
|
||||||
|
} else if (actualStateTemp >= 65) {
|
||||||
|
actualState = '70%';
|
||||||
|
} else if (actualStateTemp >= 55) {
|
||||||
|
actualState = '60%';
|
||||||
|
} else if (actualStateTemp >= 45) {
|
||||||
|
actualState = '50%';
|
||||||
|
} else if (actualStateTemp >= 35) {
|
||||||
|
actualState = '40%';
|
||||||
|
} else if (actualStateTemp >= 25) {
|
||||||
|
actualState = '30%';
|
||||||
|
} else if (actualStateTemp >= 15) {
|
||||||
|
actualState = '20%';
|
||||||
|
} else if (actualStateTemp >= 5) {
|
||||||
|
actualState = '10%';
|
||||||
|
} else if (actualStateTemp >= 0) {
|
||||||
|
actualState = '0%';
|
||||||
|
}
|
||||||
|
if (vAdapter == 'sonos') {
|
||||||
|
optionalString = '0%?10%?20%?30%?40%?50%?60%?70%?80%?90%?100%';
|
||||||
|
}
|
||||||
|
mode = 'seek';
|
||||||
|
} else if (optional == 'crossfade') {
|
||||||
|
if (existsObject(pageItem.adapterPlayerInstance + 'root.' + pageItem.mediaDevice + '.crossfade')) {
|
||||||
|
let actualStateTemp: boolean = getState(pageItem.adapterPlayerInstance + 'root.' + pageItem.mediaDevice + '.crossfade').val;
|
||||||
|
if (actualStateTemp) {
|
||||||
|
actualState = findLocale('media', 'on');
|
||||||
|
} else {
|
||||||
|
actualState = findLocale('media', 'off');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (vAdapter == 'sonos') {
|
||||||
|
optionalString = findLocale('media', 'on') + '?' + findLocale('media', 'off');
|
||||||
|
}
|
||||||
|
mode = 'crossfade';
|
||||||
|
} else if (optional == 'speakerlist') {
|
||||||
if (vAdapter == 'spotify-premium') {
|
if (vAdapter == 'spotify-premium') {
|
||||||
if (existsObject(pageItem.adapterPlayerInstance + 'player.device.name')) {
|
if (existsObject(pageItem.adapterPlayerInstance + 'player.device.name')) {
|
||||||
actualState = formatInSelText(getState(pageItem.adapterPlayerInstance + 'player.device.name').val);
|
actualState = formatInSelText(getState(pageItem.adapterPlayerInstance + 'player.device.name').val);
|
||||||
@@ -8958,6 +9068,7 @@ type PageItem = {
|
|||||||
fontSize: (number | undefined),
|
fontSize: (number | undefined),
|
||||||
actionStringArray: (string[] | undefined),
|
actionStringArray: (string[] | undefined),
|
||||||
alwaysOnDisplay: (boolean | undefined),
|
alwaysOnDisplay: (boolean | undefined),
|
||||||
|
crossfade: (boolean | undefined),
|
||||||
}
|
}
|
||||||
|
|
||||||
type DimMode = {
|
type DimMode = {
|
||||||
|
|||||||
Reference in New Issue
Block a user