mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-20 14:37:01 +01:00
v3.8.0 - New Release (Breaking Changes)
- Add New HMI-Navi (Breaking Changes) - Add Tasmota "Web Admin Password" (Breaking Changes) - Add Navigation bSubPrev and bSubNext and Subpages for bHome - Bugfix for cardThermostat - Payload (Minor) - Add Volumio-Player to cardMedia - Upgrade TFT 47
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
TypeScript v3.7.3.2 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Sternmiere/@Britzelpuf
|
TypeScript v3.8.0 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Sternmiere/@Britzelpuf
|
||||||
- abgestimmt auf TFT 46 / v3.7.3 / BerryDriver 8 / Tasmota 12.3.1
|
- abgestimmt auf TFT 47 / v3.8.0 / BerryDriver 8 / Tasmota 12.3.1
|
||||||
@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
|
||||||
icon_mapping.ts: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/icon_mapping.ts (TypeScript muss in global liegen)
|
icon_mapping.ts: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/icon_mapping.ts (TypeScript muss in global liegen)
|
||||||
@@ -106,6 +106,12 @@ ReleaseNotes:
|
|||||||
- 28.12.2022 - v3.7.3.0 Update Berry Version 8
|
- 28.12.2022 - v3.7.3.0 Update Berry Version 8
|
||||||
- 29.12.2022 - v3.7.3.1 Hotfix - us-p - DateString - Use long/short Weekday and long/short Month
|
- 29.12.2022 - v3.7.3.1 Hotfix - us-p - DateString - Use long/short Weekday and long/short Month
|
||||||
- 29.12.2022 - v3.7.3.2 Add pageItem.id to Submenu; New Parameter targetPage by TT-TOM / @tt-tom17
|
- 29.12.2022 - v3.7.3.2 Add pageItem.id to Submenu; New Parameter targetPage by TT-TOM / @tt-tom17
|
||||||
|
- 30.12.2022 - v3.8.0 Add New HMI-Navi
|
||||||
|
- 01.01.2023 - v3.8.0 Add Tasmota "Web Admin Password"
|
||||||
|
- 02.01.2023 - v3.8.0 Add Navigation bSubPrev and bSubNext and Subpages for bHome
|
||||||
|
- 03.01.2023 - v3.8.0 Bugfix for cardThermostat - Payload (Minor)
|
||||||
|
- 04.01.2023 - v3.8.0 Add Volumio-Player to cardMedia
|
||||||
|
- 05.01.2023 - v3.8.0 Upgrade TFT 47
|
||||||
|
|
||||||
*****************************************************************************************************************
|
*****************************************************************************************************************
|
||||||
* Falls Aliase durch das Skript erstellt werden sollen, muss in der JavaScript Instanz "setObect" gesetzt sein! *
|
* Falls Aliase durch das Skript erstellt werden sollen, muss in der JavaScript Instanz "setObect" gesetzt sein! *
|
||||||
@@ -179,7 +185,7 @@ Erforderliche Adapter:
|
|||||||
|
|
||||||
Upgrades in Konsole:
|
Upgrades in Konsole:
|
||||||
Tasmota BerryDriver : Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1
|
Tasmota BerryDriver : Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1
|
||||||
TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v3.7.3.tft
|
TFT EU STABLE Version : FlashNextion http://nspanel.pky.eu/lovelace-ui/github/nspanel-v3.8.0.tft
|
||||||
---------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
let Icons = new IconsSelector();
|
let Icons = new IconsSelector();
|
||||||
@@ -189,6 +195,9 @@ const autoCreateAlias = true; //Für diese Option muss der Hak
|
|||||||
const weatherAdapterInstance: string = 'accuweather.0.'; //Möglich 'accuweather.0.' oder 'daswetter.0.'
|
const weatherAdapterInstance: string = 'accuweather.0.'; //Möglich 'accuweather.0.' oder 'daswetter.0.'
|
||||||
const weatherScreensaverTempMinMax: string = 'MinMax'; // Mögliche Werte: 'Min', 'Max' oder 'MinMax'
|
const weatherScreensaverTempMinMax: string = 'MinMax'; // Mögliche Werte: 'Min', 'Max' oder 'MinMax'
|
||||||
|
|
||||||
|
const tasmota_web_admin_user: string = 'admin'; // ändern, falls der User im Tasmota vor dem Kompilieren umbenannt wurde (Standard Tasmota: admin)
|
||||||
|
const tasmota_web_admin_password: string = ''; // setzten, falls "Web Admin Password" in Tasmote vergeben
|
||||||
|
|
||||||
const NSPanel_Path = '0_userdata.0.NSPanel.1.';
|
const NSPanel_Path = '0_userdata.0.NSPanel.1.';
|
||||||
const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.'; //Neuer Pfad für gemeinsame Nutzung durch mehrere Panels (bei Nutzung der cardAlarm)
|
const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.'; //Neuer Pfad für gemeinsame Nutzung durch mehrere Panels (bei Nutzung der cardAlarm)
|
||||||
|
|
||||||
@@ -293,32 +302,38 @@ let vwIconColor = [];
|
|||||||
|
|
||||||
let Service: PageEntities =
|
let Service: PageEntities =
|
||||||
{
|
{
|
||||||
"type": "cardEntities",
|
'type': 'cardEntities',
|
||||||
"heading": "NSPanel Service",
|
'heading': 'NSPanel Service',
|
||||||
"useColor": true,
|
'useColor': true,
|
||||||
"subPage": false,
|
'subPage': false,
|
||||||
"parent": undefined,
|
'parent': undefined,
|
||||||
"items": [
|
'prev': undefined,
|
||||||
<PageItem>{ id: AliasPath + 'autoUpdate', name: "Auto-Updates" ,icon: "update", offColor: MSRed, onColor: MSGreen},
|
'next': undefined,
|
||||||
<PageItem>{ navigate: true, id: "NSPanel_Infos", icon: "information-outline", onColor: White, name: "NSPanel Infos"},
|
'home': undefined,
|
||||||
<PageItem>{ navigate: true, id: "NSPanel_Firmware_Info", icon: "update", onColor: White, name: "Firmware Infos"},
|
'items': [
|
||||||
<PageItem>{ navigate: true, id: "NSPanel_Einstellungen", icon: "wrench-outline", onColor: White, name: "Screensaver"}
|
<PageItem>{ id: AliasPath + 'autoUpdate', name: 'Auto-Updates' ,icon: 'update', offColor: MSRed, onColor: MSGreen},
|
||||||
|
<PageItem>{ navigate: true, id: 'NSPanel_Infos', icon: 'information-outline', onColor: White, name: 'NSPanel Infos'},
|
||||||
|
<PageItem>{ navigate: true, id: 'NSPanel_Firmware_Info', icon: 'update', onColor: White, name: 'Firmware Infos'},
|
||||||
|
<PageItem>{ navigate: true, id: 'NSPanel_Einstellungen', icon: 'wrench-outline', onColor: White, name: 'Screensaver'}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
//Subpage 1 von Subpages_2
|
//Subpage 1 von Subpages_2
|
||||||
let NSPanel_Infos: PageEntities =
|
let NSPanel_Infos: PageEntities =
|
||||||
{
|
{
|
||||||
"type": "cardEntities",
|
'type': 'cardEntities',
|
||||||
"heading": "NSPanel Infos",
|
'heading': 'NSPanel Infos',
|
||||||
"useColor": true,
|
'useColor': true,
|
||||||
"subPage": true,
|
'subPage': true,
|
||||||
"parent": Service,
|
'parent': Service,
|
||||||
"items": [
|
'prev': undefined,
|
||||||
|
'next': undefined,
|
||||||
|
'home': undefined,
|
||||||
|
'items': [
|
||||||
<PageItem>{ id: AliasPath + 'Tasmota.Hardware', name: 'Hardware', icon: 'memory', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
<PageItem>{ id: AliasPath + 'Tasmota.Hardware', name: 'Hardware', icon: 'memory', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
||||||
<PageItem>{ id: AliasPath + 'Sensor.ESP32.Temperature', name: "ESP Temperatur", icon: "thermometer", unit: "°C", offColor: MSYellow, onColor: MSYellow, useColor: true},
|
<PageItem>{ id: AliasPath + 'Sensor.ESP32.Temperature', name: 'ESP Temperatur', icon: 'thermometer', unit: '°C', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
||||||
<PageItem>{ id: AliasPath + 'Tasmota.Uptime', name: "Uptime", icon: "timeline-clock-outline", offColor: MSYellow, onColor: MSYellow, useColor: true},
|
<PageItem>{ id: AliasPath + 'Tasmota.Uptime', name: 'Uptime', icon: 'timeline-clock-outline', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
||||||
<PageItem>{ id: AliasPath + 'Tasmota.Wifi.RSSI', name: "Wifi-Signal", icon: "signal-distance-variant", unit: "dBm", offColor: MSYellow, onColor: MSYellow, useColor: true}
|
<PageItem>{ id: AliasPath + 'Tasmota.Wifi.RSSI', name: 'Wifi-Signal', icon: 'signal-distance-variant', unit: 'dBm', offColor: MSYellow, onColor: MSYellow, useColor: true}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -330,6 +345,9 @@ let Service: PageEntities =
|
|||||||
'useColor': true,
|
'useColor': true,
|
||||||
'subPage': true,
|
'subPage': true,
|
||||||
'parent': Service,
|
'parent': Service,
|
||||||
|
'prev': undefined,
|
||||||
|
'next': undefined,
|
||||||
|
'home': undefined,
|
||||||
'items': [
|
'items': [
|
||||||
<PageItem>{ id: AliasPath + 'Dimmode.brightnessDay', name: 'Brightness Tag', icon: 'brightness-5', offColor: MSYellow, onColor: MSYellow, useColor: true, minValue: 5, maxValue: 10},
|
<PageItem>{ id: AliasPath + 'Dimmode.brightnessDay', name: 'Brightness Tag', icon: 'brightness-5', offColor: MSYellow, onColor: MSYellow, useColor: true, minValue: 5, maxValue: 10},
|
||||||
<PageItem>{ id: AliasPath + 'Dimmode.brightnessNight', name: 'Brightness Nacht', icon: 'brightness-4', offColor: MSYellow, onColor: MSYellow, useColor: true, minValue: 0, maxValue: 4},
|
<PageItem>{ id: AliasPath + 'Dimmode.brightnessNight', name: 'Brightness Nacht', icon: 'brightness-4', offColor: MSYellow, onColor: MSYellow, useColor: true, minValue: 0, maxValue: 4},
|
||||||
@@ -346,6 +364,9 @@ let Service: PageEntities =
|
|||||||
'useColor': true,
|
'useColor': true,
|
||||||
'subPage': true,
|
'subPage': true,
|
||||||
'parent': Service,
|
'parent': Service,
|
||||||
|
'prev': undefined,
|
||||||
|
'next': undefined,
|
||||||
|
'home': undefined,
|
||||||
'items': [
|
'items': [
|
||||||
<PageItem>{ id: AliasPath + 'Tasmota.Version', name: 'Tasmota Firmware', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
<PageItem>{ id: AliasPath + 'Tasmota.Version', name: 'Tasmota Firmware', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
||||||
<PageItem>{ id: AliasPath + 'Display.TFTVersion', name: 'TFT-Firmware', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
<PageItem>{ id: AliasPath + 'Display.TFTVersion', name: 'TFT-Firmware', offColor: MSYellow, onColor: MSYellow, useColor: true},
|
||||||
@@ -369,24 +390,96 @@ export const config: Config = {
|
|||||||
timeoutScreensaver: 20,
|
timeoutScreensaver: 20,
|
||||||
screenSaverDoubleClick: true,
|
screenSaverDoubleClick: true,
|
||||||
locale: 'de-DE', // en-US, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc.
|
locale: 'de-DE', // en-US, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc.
|
||||||
weatherEntity: 'alias.0.Wetter', // Dieser Alias muss erstellt werden, damit die 4 kleineren Icons (Wetter oder DP) angezeigt werden können
|
weatherEntity: 'alias.0.DasWetter', // Dieser Alias muss erstellt werden, damit die 4 kleineren Icons (Wetter oder DP) angezeigt werden können
|
||||||
defaultOffColor: Off,
|
defaultOffColor: Off,
|
||||||
defaultOnColor: On,
|
defaultOnColor: On,
|
||||||
defaultColor: Off,
|
defaultColor: Off,
|
||||||
defaultBackgroundColor: HMIDark, //New Parameter
|
defaultBackgroundColor: HMIDark, //New Parameter
|
||||||
temperatureUnit: '°C',
|
temperatureUnit: '°C',
|
||||||
pages: [
|
pages: [
|
||||||
|
Level_0_Grundstueck,
|
||||||
|
Buero_Seite_1, //Beispiel-Seite
|
||||||
|
WLED, //Beispiel-Seite
|
||||||
|
Radiosender, //Beispiel-Seite
|
||||||
|
SensorGrid, //Beispiel-Seite
|
||||||
|
CardChartExample, //Beispiel-Seite
|
||||||
|
CardPowerExample, //Beispiel-Seite
|
||||||
|
//SqueezeboxRPC, //Beispiel-Seite
|
||||||
|
Sonos, //Beispiel-Seite
|
||||||
|
SpotifyPremium, //Beispiel-Seite
|
||||||
|
Alexa, //Beispiel-Seite
|
||||||
|
Buero_Seite_2, //Beispiel-Seite
|
||||||
|
Buero_Klimaanlage, //Beispiel-Seite
|
||||||
|
Button_1, //Beispiel-Seite
|
||||||
|
Test_Licht1, //Beispiel-Seite
|
||||||
|
Test_Licht2, //Beispiel-Seite
|
||||||
|
Test_Funktionen, //Beispiel-Seite
|
||||||
|
Fenster_1, //Beispiel-Seite
|
||||||
|
Subpages_1, //Beispiel-Seite
|
||||||
|
Buero_Themostat, //Beispiel-Seite
|
||||||
|
Buero_Alarm, //Beispiel-Seite
|
||||||
|
|
||||||
Service //Auto-Alias Service Page
|
Service //Auto-Alias Service Page
|
||||||
],
|
],
|
||||||
subPages: [
|
subPages: [
|
||||||
|
Abfall, //Beispiel-Unterseite
|
||||||
|
WLAN, //Beispiel-Unterseite
|
||||||
|
|
||||||
NSPanel_Infos, //Auto-Alias Service Page
|
NSPanel_Infos, //Auto-Alias Service Page
|
||||||
NSPanel_Einstellungen, //Auto-Alias Service Page
|
NSPanel_Einstellungen, //Auto-Alias Service Page
|
||||||
NSPanel_Firmware_Info //Auto-Alias Service Page
|
NSPanel_Firmware_Info, //Auto-Alias Service Page
|
||||||
|
|
||||||
|
Level_1_Haus,
|
||||||
|
Level_2_Erdgeschoss_1,
|
||||||
|
Level_3_Wohnzimmer,
|
||||||
|
Level_4_Wohnzimmer_Licht_1,
|
||||||
|
Level_4_Wohnzimmer_Licht_2,
|
||||||
|
Level_4_Wohnzimmer_Sensoren_1,
|
||||||
|
Level_4_Wohnzimmer_Aktoren,
|
||||||
|
Level_4_Wohnzimmer_Thermostat,
|
||||||
|
Level_3_Esszimmer,
|
||||||
|
|
||||||
|
Level_3_Buero,
|
||||||
|
Level_4_Buero_Licht,
|
||||||
|
Level_4_Buero_Sensoren_1,
|
||||||
|
Level_4_Buero_Sensoren_2,
|
||||||
|
Level_4_Buero_Aktoren,
|
||||||
|
Level_4_Buero_Thermostat,
|
||||||
|
Level_3_Kueche,
|
||||||
|
|
||||||
|
Level_3_Bad,
|
||||||
|
|
||||||
|
Level_2_Erdgeschoss_2,
|
||||||
|
Level_3_Kaminzimmer,
|
||||||
|
|
||||||
|
Level_3_GaesteWC,
|
||||||
|
|
||||||
|
Level_3_Hauswirtschaftsraum,
|
||||||
|
|
||||||
|
Level_3_FlurVorne,
|
||||||
|
|
||||||
|
Level_3_FlurHinten,
|
||||||
|
|
||||||
|
Level_1_Gartenhaus,
|
||||||
|
Level_2_GH_Licht,
|
||||||
|
Level_3_GH_Lampen_1,
|
||||||
|
Level_3_GH_Lampen_2,
|
||||||
|
Level_3_GH_Lampen_3,
|
||||||
|
Level_3_GH_Lampen_4,
|
||||||
|
Level_3_GH_LED_Stripes,
|
||||||
|
Level_3_GH_WLED,
|
||||||
|
Level_3_GH_Aussenlampen,
|
||||||
|
Level_2_GH_Sensoren_1,
|
||||||
|
Level_2_GH_Sensoren_2,
|
||||||
|
Level_2_GH_Aktoren_1,
|
||||||
|
Level_2_GH_Aktoren_2,
|
||||||
|
Level_2_GH_Heizkoerper,
|
||||||
|
Level_1_Aussen,
|
||||||
|
|
||||||
|
Level_1_Garage
|
||||||
],
|
],
|
||||||
button1Page: null, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null,
|
button1Page: button1Page, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null,
|
||||||
button2Page: null //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null,
|
button2Page: button2Page //Beispiel-Seite auf Button 2, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
// _________________________________ Ab hier keine Konfiguration mehr _____________________________________
|
// _________________________________ Ab hier keine Konfiguration mehr _____________________________________
|
||||||
@@ -914,6 +1007,11 @@ setState(config.panelSendTopic, 'pageType~pageStartup');
|
|||||||
get_tasmota_status0();
|
get_tasmota_status0();
|
||||||
get_panel_update_data();
|
get_panel_update_data();
|
||||||
check_updates();
|
check_updates();
|
||||||
|
/*
|
||||||
|
setTimeout(async function () {
|
||||||
|
setState(config.panelSendTopic, 'pageType~pageStartup');
|
||||||
|
}, 60000);
|
||||||
|
*/
|
||||||
|
|
||||||
//------------------Begin Update Functions
|
//------------------Begin Update Functions
|
||||||
|
|
||||||
@@ -1179,8 +1277,15 @@ function get_current_berry_driver_version() {
|
|||||||
if (Debug) {
|
if (Debug) {
|
||||||
console.log('Requesting current berry driver version');
|
console.log('Requesting current berry driver version');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=GetDriverVersion`;
|
||||||
|
if (tasmota_web_admin_password != '') {
|
||||||
|
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=GetDriverVersion`;
|
||||||
|
}
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=GetDriverVersion`,
|
|
||||||
|
url: `${urlString}`,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
@@ -1206,8 +1311,14 @@ function get_tasmota_status0() {
|
|||||||
if (Debug) {
|
if (Debug) {
|
||||||
console.log('Requesting tasmota status0');
|
console.log('Requesting tasmota status0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=Status0`;
|
||||||
|
if (tasmota_web_admin_password != '') {
|
||||||
|
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=Status0`;
|
||||||
|
}
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Status0`,
|
url: `${urlString}`,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
@@ -1379,8 +1490,14 @@ on({ id: config.panelRecvTopic }, async (obj) => {
|
|||||||
|
|
||||||
function update_berry_driver_version() {
|
function update_berry_driver_version() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1`;
|
||||||
|
if (tasmota_web_admin_password != '') {
|
||||||
|
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1`;
|
||||||
|
}
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1`,
|
url: `${urlString}`,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
@@ -1396,8 +1513,14 @@ function update_tft_firmware() {
|
|||||||
const tft_version: string = 'v3.7.3';
|
const tft_version: string = 'v3.7.3';
|
||||||
const desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`;
|
const desired_display_firmware_url = `http://nspanel.pky.eu/lovelace-ui/github/nspanel-${tft_version}.tft`;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`;
|
||||||
|
if (tasmota_web_admin_password != '') {
|
||||||
|
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=FlashNextion ${desired_display_firmware_url}`;
|
||||||
|
}
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`,
|
url: `${urlString}`,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
@@ -1412,8 +1535,14 @@ function update_tft_firmware() {
|
|||||||
|
|
||||||
function update_tasmota_firmware() {
|
function update_tasmota_firmware() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
let urlString = `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`;
|
||||||
|
if (tasmota_web_admin_password != '') {
|
||||||
|
urlString = `http://${get_current_tasmota_ip_address()}/cm?user=${tasmota_web_admin_user}&password=${tasmota_web_admin_password}&cmnd=Upgrade 1`;
|
||||||
|
}
|
||||||
|
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`,
|
url: `${urlString}`,
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
@@ -2013,6 +2142,19 @@ function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean =
|
|||||||
|
|
||||||
case 'motion':
|
case 'motion':
|
||||||
|
|
||||||
|
type = 'text';
|
||||||
|
if (val === true) {
|
||||||
|
optVal = 'On';
|
||||||
|
iconColor = GetIconColor(pageItem, true, useColors);
|
||||||
|
iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('motion-sensor');
|
||||||
|
} else {
|
||||||
|
optVal = 'Off';
|
||||||
|
iconColor = GetIconColor(pageItem, false, useColors);
|
||||||
|
iconId = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : Icons.GetIcon('motion-sensor');
|
||||||
|
}
|
||||||
|
|
||||||
|
return '~' + type + '~' + pageItem.id + '~' + iconId + '~' + iconColor + '~' + name + '~' + optVal;
|
||||||
|
|
||||||
case 'info':
|
case 'info':
|
||||||
|
|
||||||
case 'humidity':
|
case 'humidity':
|
||||||
@@ -2547,9 +2689,9 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
|
|||||||
+ minTemp + '~' // Thermostat Min-Temperatur
|
+ minTemp + '~' // Thermostat Min-Temperatur
|
||||||
+ maxTemp + '~' // Thermostat Max-Temperatur
|
+ maxTemp + '~' // Thermostat Max-Temperatur
|
||||||
+ stepTemp + '~' // Schritte für Soll (5°C)
|
+ stepTemp + '~' // Schritte für Soll (5°C)
|
||||||
+ icon_res + '~' // Icons Status
|
+ icon_res // Icons Status
|
||||||
+ findLocale('thermostat', 'Currently') + '~' // Bezeichner vor Aktueller Raumtemperatur
|
+ findLocale('thermostat', 'Currently') + '~' // Bezeichner vor Aktueller Raumtemperatur
|
||||||
+ findLocale('thermostat', 'State') + '~' // Bezeichner vor State
|
+ findLocale('thermostat', 'State') + '~~' // Bezeichner vor State
|
||||||
+ config.temperatureUnit + '~' // iconTemperature dstTempTwoTempMode
|
+ config.temperatureUnit + '~' // iconTemperature dstTempTwoTempMode
|
||||||
+ destTemp2 + '~' // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp
|
+ destTemp2 + '~' // dstTempTwoTempMode --> Wenn Wert, dann 2 Temp
|
||||||
+ thermoPopup // PopUp
|
+ thermoPopup // PopUp
|
||||||
@@ -2688,6 +2830,33 @@ async function createAutoMediaAlias(id: string, mediaDevice: string, adapterPlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (adapterPlayerInstance.startsWith('volumio')) {
|
||||||
|
if (existsObject(id) == false){
|
||||||
|
console.log('Volumio Alias ' + id + ' existiert nicht - wird jetzt angelegt')
|
||||||
|
|
||||||
|
let dpPath: string = adapterPlayerInstance;
|
||||||
|
try {
|
||||||
|
setObject(id, {_id: id, type: 'channel', common: {role: 'media', name:'media'}, native: {}});
|
||||||
|
await createAliasAsync(id + '.ACTUAL', dpPath + 'playbackInfo.volume', true, <iobJS.StateCommon>{ type: 'number', role: 'value.volume', name: 'ACTUAL' });
|
||||||
|
await createAliasAsync(id + '.ALBUM', dpPath + 'playbackInfo.album', true, <iobJS.StateCommon>{ type: 'string', role: 'media.album', name: 'ALBUM' });
|
||||||
|
await createAliasAsync(id + '.ARTIST', dpPath + 'playbackInfo.artist', true, <iobJS.StateCommon>{ type: 'string', role: 'media.artist', name: 'ARTIST' });
|
||||||
|
await createAliasAsync(id + '.TITLE', dpPath + 'playbackInfo.title', true, <iobJS.StateCommon>{ type: 'string', role: 'media.title', name: 'TITLE' });
|
||||||
|
await createAliasAsync(id + '.NEXT', dpPath + 'player.next', true, <iobJS.StateCommon>{ type: 'boolean', role: 'button.next', name: 'NEXT' });
|
||||||
|
await createAliasAsync(id + '.PREV', dpPath + 'player.prev', true, <iobJS.StateCommon>{ type: 'boolean', role: 'button.prev', name: 'PREV' });
|
||||||
|
await createAliasAsync(id + '.PLAY', dpPath + 'player.play', true, <iobJS.StateCommon>{ type: 'boolean', role: 'button.play', name: 'PLAY' });
|
||||||
|
await createAliasAsync(id + '.PAUSE', dpPath + 'player.toggle', true, <iobJS.StateCommon>{ type: 'boolean', role: 'button.pause', name: 'PAUSE' });
|
||||||
|
await createAliasAsync(id + '.STOP', dpPath + 'player.stop', true, <iobJS.StateCommon>{ type: 'boolean', role: 'button.stop', name: 'STOP' });
|
||||||
|
await createAliasAsync(id + '.STATE', dpPath + 'playbackInfo.status', true, <iobJS.StateCommon>{ type: 'boolean', role: 'media.state', name: 'STATE' });
|
||||||
|
await createAliasAsync(id + '.VOLUME', dpPath + 'playbackInfo.volume', true, <iobJS.StateCommon>{ type: 'number', role: 'level.volume', name: 'VOLUME' });
|
||||||
|
await createAliasAsync(id + '.REPEAT', dpPath + 'playbackInfo.repeat', true, <iobJS.StateCommon>{ type: 'number', role: 'media.mode.repeat', name: 'REPEAT' });
|
||||||
|
await createAliasAsync(id + '.SHUFFLE', dpPath + 'queue.shuffle', true, <iobJS.StateCommon>{ type: 'boolean', role: 'media.mode.shuffle', name: 'SHUFFLE' });
|
||||||
|
await createAliasAsync(id + '.status', dpPath + 'playbackInfo.status', true, <iobJS.StateCommon>{ type: 'string', role: 'media.state', name: 'status' });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function createAutoMediaAlias: ' + err.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2792,6 +2961,13 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Volumio
|
||||||
|
if (v2Adapter == 'volumio') {
|
||||||
|
if (name != undefined) { author = author + " [" + name + "]"; }
|
||||||
|
name = getState(vInstance + 'info.name').val; /* page.heading;
|
||||||
|
getState(id + '.TRACK').val; */
|
||||||
|
}
|
||||||
|
|
||||||
let volume = getState(id + '.VOLUME').val;
|
let volume = getState(id + '.VOLUME').val;
|
||||||
let iconplaypause = Icons.GetIcon('pause'); //pause
|
let iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
let shuffle_icon = Icons.GetIcon('shuffle-variant'); //shuffle
|
let shuffle_icon = Icons.GetIcon('shuffle-variant'); //shuffle
|
||||||
@@ -2800,6 +2976,8 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
if (shuffle == 'off' || shuffle == false || shuffle == 0) {
|
if (shuffle == 'off' || shuffle == false || shuffle == 0) {
|
||||||
shuffle_icon = Icons.GetIcon('shuffle-disabled'); //shuffle
|
shuffle_icon = Icons.GetIcon('shuffle-disabled'); //shuffle
|
||||||
}
|
}
|
||||||
|
if (v2Adapter == 'volumio') { shuffle_icon = Icons.GetIcon('refresh'); } //Volumio: refresh playlist
|
||||||
|
|
||||||
|
|
||||||
//Für alle Player
|
//Für alle Player
|
||||||
if (getState(id + '.STATE').val) {
|
if (getState(id + '.STATE').val) {
|
||||||
@@ -2819,6 +2997,16 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Ausnahme Volumio: status = string: play, pause, stop usw.
|
||||||
|
if (v2Adapter == 'volumio') {
|
||||||
|
if (getState(id + '.status').val == 'play') {
|
||||||
|
onoffbutton = 65535;
|
||||||
|
iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
|
} else {
|
||||||
|
iconplaypause = Icons.GetIcon('play'); //play
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let currentSpeaker = 'kein Speaker gefunden';
|
let currentSpeaker = 'kein Speaker gefunden';
|
||||||
|
|
||||||
if (v2Adapter == 'alexa2') {
|
if (v2Adapter == 'alexa2') {
|
||||||
@@ -2834,7 +3022,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------
|
||||||
// nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
|
// nachfolgend alle Alexa-Devices (ist Online / Player- und Commands-Verzeichnis vorhanden) auflisten und verketten
|
||||||
// Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
|
// Wenn Konstante alexaSpeakerList mind. einen Eintrag enthält, wird die Konstante verwendet - ansonsten Alle Devices aus dem Alexa Adapter
|
||||||
let speakerList = '';
|
let speakerList = '';
|
||||||
if (page.items[0].speakerList.length > 0) {
|
if (page.items[0].speakerList.length > 0) {
|
||||||
for (let i_index in page.items[0].speakerList) {
|
for (let i_index in page.items[0].speakerList) {
|
||||||
@@ -2877,17 +3065,30 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
let playListString: string = '~~~~~~'
|
let playListString: string = '~~~~~~'
|
||||||
let playListIconCol = rgb_dec565(HMIOff);
|
let playListIconCol = rgb_dec565(HMIOff);
|
||||||
if (page.items[0].playList != undefined) {
|
if (page.items[0].playList != undefined) {
|
||||||
|
/* Volumio: get actual playlist if empty */
|
||||||
|
if (v2Adapter == 'volumio') {
|
||||||
|
if (page.items[0].playList.length == 0) {
|
||||||
|
request({ url: `${getState(vInstance+'info.host').val}/api/listplaylists`, headers: {'User-Agent': 'ioBroker'} },
|
||||||
|
async (error, response, result) => {
|
||||||
|
try {
|
||||||
|
page.items[0].playList = JSON.parse(result);
|
||||||
|
if (Debug) console.log(page.items[0].playList);
|
||||||
|
} catch (err) {
|
||||||
|
console.log('get_volumio-playlist: ' + err.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
playListIconCol = rgb_dec565(HMIOn);
|
playListIconCol = rgb_dec565(HMIOn);
|
||||||
playListString = 'input_sel' + '~' +
|
playListString = 'input_sel' + '~' +
|
||||||
id + '?playlist' + '~' +
|
id + '?playlist' + '~' +
|
||||||
Icons.GetIcon('playlist-play') + '~' +
|
Icons.GetIcon('playlist-play') + '~' +
|
||||||
playListIconCol + '~' +
|
playListIconCol + '~' +
|
||||||
'Playlist' + '~' +
|
'PlayL ' + page.heading + '~' +
|
||||||
'media1~'
|
'media1~'
|
||||||
}
|
}
|
||||||
|
|
||||||
//Testvariable ********************
|
|
||||||
|
|
||||||
//InSel Playlist
|
//InSel Playlist
|
||||||
let trackListString: string = '~~~~~~'
|
let trackListString: string = '~~~~~~'
|
||||||
let trackListIconCol = rgb_dec565(HMIOff);
|
let trackListIconCol = rgb_dec565(HMIOff);
|
||||||
@@ -2949,6 +3150,7 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
repeatIconCol = rgb_dec565(HMIOn);
|
repeatIconCol = rgb_dec565(HMIOn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Volumio todo: 2 boolean 'Repeat' + 'RepeatSingle' */
|
||||||
|
|
||||||
if (v2Adapter == 'spotify-premium' || v2Adapter == 'alexa2' || v2Adapter == 'sonos') {
|
if (v2Adapter == 'spotify-premium' || v2Adapter == 'alexa2' || v2Adapter == 'sonos') {
|
||||||
repeatButtonString = 'button' + '~' +
|
repeatButtonString = 'button' + '~' +
|
||||||
@@ -3357,6 +3559,10 @@ function HandleButtonEvent(words): void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (words[2] == 'bNext' || words[2] == 'bPrev' || words[2] == 'bUp' || words[2] == 'bHome' || words[2] == 'bSubNext' || words[2] == 'bSubPrev' ) {
|
||||||
|
buttonAction = words[2];
|
||||||
|
}
|
||||||
|
|
||||||
if (Debug) {
|
if (Debug) {
|
||||||
console.log(buttonAction);
|
console.log(buttonAction);
|
||||||
}
|
}
|
||||||
@@ -3395,6 +3601,10 @@ function HandleButtonEvent(words): void {
|
|||||||
UnsubscribeWatcher();
|
UnsubscribeWatcher();
|
||||||
GeneratePage(config.pages[pageId]);
|
GeneratePage(config.pages[pageId]);
|
||||||
break;
|
break;
|
||||||
|
case 'bSubNext':
|
||||||
|
UnsubscribeWatcher();
|
||||||
|
GeneratePage(eval(activePage.next));
|
||||||
|
break;
|
||||||
case 'bPrev':
|
case 'bPrev':
|
||||||
pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
|
pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
|
||||||
pageId = pageNum;
|
pageId = pageNum;
|
||||||
@@ -3413,6 +3623,10 @@ function HandleButtonEvent(words): void {
|
|||||||
GeneratePage(config.pages[pageId]);
|
GeneratePage(config.pages[pageId]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'bSubPrev':
|
||||||
|
UnsubscribeWatcher();
|
||||||
|
GeneratePage(eval(activePage.prev));
|
||||||
|
break;
|
||||||
case 'bExit':
|
case 'bExit':
|
||||||
if (config.screenSaverDoubleClick && words[2] == 'screensaver') {
|
if (config.screenSaverDoubleClick && words[2] == 'screensaver') {
|
||||||
if (words[4] >= 2) {
|
if (words[4] >= 2) {
|
||||||
@@ -3442,7 +3656,11 @@ function HandleButtonEvent(words): void {
|
|||||||
console.log('bExit: ' + words[4] + ' - ' + pageId);
|
console.log('bExit: ' + words[4] + ' - ' + pageId);
|
||||||
}
|
}
|
||||||
UnsubscribeWatcher();
|
UnsubscribeWatcher();
|
||||||
|
if (activePage.home != undefined) {
|
||||||
|
GeneratePage(eval(activePage.home));
|
||||||
|
} else {
|
||||||
GeneratePage(config.pages[0]);
|
GeneratePage(config.pages[0]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'notifyAction':
|
case 'notifyAction':
|
||||||
if (words[4] == 'yes') {
|
if (words[4] == 'yes') {
|
||||||
@@ -3684,6 +3902,7 @@ function HandleButtonEvent(words): void {
|
|||||||
setIfExists(id + '.NEXT', true);
|
setIfExists(id + '.NEXT', true);
|
||||||
break;
|
break;
|
||||||
case 'media-shuffle':
|
case 'media-shuffle':
|
||||||
|
if ((findPageItem(id).adapterPlayerInstance).startsWith("volumio")) { findPageItem(id).playList = []; break; } //Volumio: empty playlist $uha-20230103
|
||||||
if (getState(id + '.SHUFFLE').val == 'off') {
|
if (getState(id + '.SHUFFLE').val == 'off') {
|
||||||
setIfExists(id + '.SHUFFLE', 'on');
|
setIfExists(id + '.SHUFFLE', 'on');
|
||||||
} else {
|
} else {
|
||||||
@@ -3733,6 +3952,7 @@ function HandleButtonEvent(words): void {
|
|||||||
switch (deviceAdapterPL) {
|
switch (deviceAdapterPL) {
|
||||||
case 'spotify-premium':
|
case 'spotify-premium':
|
||||||
let strDevicePI = pageItemPL.playList[words[4]]
|
let strDevicePI = pageItemPL.playList[words[4]]
|
||||||
|
console.log(strDevicePI)
|
||||||
let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
|
let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
|
||||||
let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
|
let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
|
||||||
let playlistIndex = playlistListString.indexOf(strDevicePI);
|
let playlistIndex = playlistListString.indexOf(strDevicePI);
|
||||||
@@ -3745,6 +3965,11 @@ function HandleButtonEvent(words): void {
|
|||||||
let tempListItem = pageItemPL.playList[words[4]].split('.');
|
let tempListItem = pageItemPL.playList[words[4]].split('.');
|
||||||
setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
|
setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
|
||||||
break;
|
break;
|
||||||
|
case 'volumio':
|
||||||
|
let strDevicePL = pageItemPL.playList[words[4]];
|
||||||
|
request({ url:`${getState(adapterInstancePL+'info.host').val}/api/commands/?cmd=playplaylist&name=${strDevicePL}`, headers: {'User-Agent': 'ioBroker'} },
|
||||||
|
async (error, response, result)=>{}); /* nothing todo @ error */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'mode-tracklist':
|
case 'mode-tracklist':
|
||||||
@@ -4012,20 +4237,26 @@ function GetNavigationString(pageId: number): string {
|
|||||||
// 2|0 = (right) up navigation arrow
|
// 2|0 = (right) up navigation arrow
|
||||||
// 2|2 = (right) up navigation arrow | (left) home navigation icon
|
// 2|2 = (right) up navigation arrow | (left) home navigation icon
|
||||||
|
|
||||||
if (activePage.subPage)
|
if (activePage.subPage && activePage.prev == undefined && activePage.next == undefined) {
|
||||||
return '2|2';
|
return 'button~bUp~' + Icons.GetIcon('arrow-up-bold') + '~' + rgb_dec565(White) + '~~~button~bHome~' + Icons.GetIcon('home') + '~' + rgb_dec565(White) + '~~';
|
||||||
|
} else if (activePage.subPage && activePage.prev == undefined && activePage.next != undefined) {
|
||||||
|
return 'button~bUp~' + Icons.GetIcon('arrow-up-bold') + '~' + rgb_dec565(White) + '~~~button~bSubNext~' + Icons.GetIcon('arrow-right-bold') + '~' + rgb_dec565(White) + '~~';
|
||||||
|
} else if (activePage.subPage && activePage.prev != undefined && activePage.next != undefined) {
|
||||||
|
return 'button~bSubPrev~' + Icons.GetIcon('arrow-left-bold') + '~' + rgb_dec565(White) + '~~~button~bSubNext~' + Icons.GetIcon('arrow-right-bold') + '~' + rgb_dec565(White) + '~~';
|
||||||
|
} else if (activePage.subPage && activePage.prev != undefined && activePage.next == undefined) {
|
||||||
|
return 'button~bSubPrev~' + Icons.GetIcon('arrow-left-bold') + '~' + rgb_dec565(White) + '~~~button~bHome~' + Icons.GetIcon('home') + '~' + rgb_dec565(White) + '~~';
|
||||||
|
}
|
||||||
|
|
||||||
switch (pageId) {
|
switch (pageId) {
|
||||||
case 0:
|
case 0:
|
||||||
return '1|1';
|
|
||||||
case config.pages.length - 1:
|
case config.pages.length - 1:
|
||||||
return '1|1';
|
return 'button~bPrev~' + Icons.GetIcon('arrow-left-bold') + '~' + rgb_dec565(White) + '~~~button~bNext~' + Icons.GetIcon('arrow-right-bold') + '~' + rgb_dec565(White) + '~~';
|
||||||
case -1:
|
case -1:
|
||||||
return '2|0';
|
return 'button~bUp~' + Icons.GetIcon('arrow-up-bold') + '~' + rgb_dec565(White) + ' ~~~delete~~~~~';
|
||||||
case -2:
|
case -2:
|
||||||
return '2|0';
|
return 'button~bUp~' + Icons.GetIcon('arrow-up-bold') + '~' + rgb_dec565(White) + '~~~delete~~~~~';
|
||||||
default:
|
default:
|
||||||
return '1|1';
|
return 'button~bPrev~' + Icons.GetIcon('arrow-left-bold') + '~' + rgb_dec565(White) + '~~~button~bNext~' + Icons.GetIcon('arrow-right-bold') + '~' + rgb_dec565(White) + '~~';
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -4034,7 +4265,7 @@ function GetNavigationString(pageId: number): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function GenerateDetailPage(type: string, optional: string, pageItem: PageItem): Payload[] {
|
function GenerateDetailPage(type: string, optional: string, pageItem: PageItem): Payload[] {
|
||||||
//console.log(type + ' - ' + optional + ' - ' + pageItem.id)
|
if (Debug) console.log(type + ' - ' + optional + ' - ' + pageItem.id);
|
||||||
try {
|
try {
|
||||||
let out_msgs: Array<Payload> = [];
|
let out_msgs: Array<Payload> = [];
|
||||||
let id = pageItem.id
|
let id = pageItem.id
|
||||||
@@ -4660,7 +4891,15 @@ function GenerateDetailPage(type: string, optional: string, pageItem: PageItem):
|
|||||||
tempPlayList[i] = formatInSelText(tPlayList[i]);
|
tempPlayList[i] = formatInSelText(tPlayList[i]);
|
||||||
}
|
}
|
||||||
optionalString = pageItem.playList != undefined ? tempPlayList.join('?') : ''
|
optionalString = pageItem.playList != undefined ? tempPlayList.join('?') : ''
|
||||||
|
} else if (vAdapter == 'volumio') { /* Volumio: limit 900 chars */
|
||||||
|
actualState = ''; //todo: no actual playlistname saving
|
||||||
|
let tempPlayList = []; let tempPll = 0;
|
||||||
|
for (let i = 0; i < pageItem.playList.length; i++) {
|
||||||
|
tempPll += pageItem.playList[i].length; if (tempPll > 900) break;
|
||||||
|
tempPlayList[i] = formatInSelText(pageItem.playList[i]);
|
||||||
}
|
}
|
||||||
|
optionalString = pageItem.playList != undefined ? tempPlayList.join('?') : ''
|
||||||
|
} /**/
|
||||||
mode = 'playlist';
|
mode = 'playlist';
|
||||||
} else if (optional == 'tracklist') {
|
} else if (optional == 'tracklist') {
|
||||||
actualState = ''
|
actualState = ''
|
||||||
@@ -4668,7 +4907,7 @@ function GenerateDetailPage(type: string, optional: string, pageItem: PageItem):
|
|||||||
actualState = (actualState.replace('?','')).split(' -');
|
actualState = (actualState.replace('?','')).split(' -');
|
||||||
actualState = actualState[0].split(" (");
|
actualState = actualState[0].split(" (");
|
||||||
actualState = formatInSelText(actualState[0]);
|
actualState = formatInSelText(actualState[0]);
|
||||||
//Limit 900 Zeichen, danach Speicherüberlauf --> Soweit kürzen wie möglich
|
//Limit 900 Zeichen, danach Speicherüberlauf --> Soweit kürzen wie möglich
|
||||||
let temp_array = [];
|
let temp_array = [];
|
||||||
//let trackArray = (function () { try {return JSON.parse(getState(pageItem.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
//let trackArray = (function () { try {return JSON.parse(getState(pageItem.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
||||||
for (let track_index=0; track_index < 45; track_index++) {
|
for (let track_index=0; track_index < 45; track_index++) {
|
||||||
@@ -5809,7 +6048,10 @@ type Page = {
|
|||||||
items: PageItem[],
|
items: PageItem[],
|
||||||
useColor: boolean,
|
useColor: boolean,
|
||||||
subPage: boolean,
|
subPage: boolean,
|
||||||
parent: Page
|
parent: Page,
|
||||||
|
prev: string,
|
||||||
|
next: string,
|
||||||
|
home: string
|
||||||
};
|
};
|
||||||
|
|
||||||
interface PageEntities extends Page {
|
interface PageEntities extends Page {
|
||||||
|
|||||||
Reference in New Issue
Block a user