mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 15:04:24 +01:00
Update v3.1.1.3 (Breaking Changes) - refactoring cardMedia, Bug Fixes
* V3.3.1.3 BugFix Screensaver Toggle * V3.3.1.3 Refactoring and bug fix and refresh features for cardMedia (breaking changes) * V3.3.1.3 Adding SpotifyPremium, Sonos and Chromecast (Google home) to the cardMedia logic
This commit is contained in:
@@ -1,10 +1,13 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*--!!! BREAKING CHANGES---------------------------------------------------------------------
|
||||||
TypeScript zur Steuerung des SONOFF NSPanel mit dem ioBroker
|
TypeScript zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar/@Britzelpuf
|
||||||
- abgestimmt auf TFT 41 / v3.3.1 / BerryDriver 4 / Tasmota 12.1.1
|
- abgestimmt auf TFT 41 / v3.3.1.3 / BerryDriver 4 / Tasmota 12.1.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)
|
||||||
|
|
||||||
ioBroker-Unterstützung: https://forum.iobroker.net/topic/50888/sonoff-nspanel
|
ioBroker-Unterstützung: https://forum.iobroker.net/topic/50888/sonoff-nspanel
|
||||||
|
WIKI zu diesem Projekt unter: https://github.com/joBr99/nspanel-lovelace-ui/wiki (siehe Sidebar)
|
||||||
|
|
||||||
ReleaseNotes:
|
ReleaseNotes:
|
||||||
Bugfixes und Erweiterungen:
|
Bugfixes und Erweiterungen:
|
||||||
@@ -32,6 +35,9 @@ ReleaseNotes:
|
|||||||
- 29.08.2022 - V3.3.0 - Upgrade TFT 40
|
- 29.08.2022 - V3.3.0 - Upgrade TFT 40
|
||||||
- 29.08.2022 - V3.3.1 - Upgrade TFT 41
|
- 29.08.2022 - V3.3.1 - Upgrade TFT 41
|
||||||
- 04.09.2022 - V3.3.1 - Überarbeitung und BugFix für cardAlarm
|
- 04.09.2022 - V3.3.1 - Überarbeitung und BugFix für cardAlarm
|
||||||
|
- 13.09.2022 - V3.3.1.3 BugFix Screensaver Toggle
|
||||||
|
- 13.09.2022 - V3.3.1.3 Überarbeitung und BugFix und Refresh Features für cardMedia (Breaking Changes)
|
||||||
|
- 13.09.2022 - V3.3.1.3 Hinzufügen von SpotifyPremium, Sonos und Chromecast (Google home) zur cardMedia-Logik
|
||||||
|
|
||||||
Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Releais) genutzt werden
|
Wenn Rule definiert, dann können die Hardware-Tasten ebenfalls für Seitensteuerung (dann nicht mehr als Releais) genutzt werden
|
||||||
Tasmota Konsole:
|
Tasmota Konsole:
|
||||||
@@ -101,10 +107,16 @@ Upgrades in Konsole:
|
|||||||
*/
|
*/
|
||||||
var Icons = new IconsSelector();
|
var Icons = new IconsSelector();
|
||||||
var timeoutSlider: any;
|
var timeoutSlider: any;
|
||||||
|
var manually_Update = false;
|
||||||
|
|
||||||
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
|
const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.'; //Neuer Pfad für gemeinsame Nutzung durch mehrere Panels (bei Nutzung der cardAlarm)
|
||||||
const Debug = false;
|
const Debug = false;
|
||||||
var manually_Update = true;
|
|
||||||
|
// Variablen zur Steuerung der Wettericons auf dem Screensaver (Steuerung in 0_userdata.0.XPANELX.ScreensaverInfo)
|
||||||
|
// Wenn weatherForecastTimer auf true, dann Wechsel zwischen Datenpunkten und Wettervorhersage (30 Sekunden nach Minute (Zeit))
|
||||||
|
// Wenn weatherForecastTimer auf false, dann Möglichkeit über weatherForecast, ob Datenpunkte oder Wettervorhersage (true = WeatherForecast/false = Datenpunkte)
|
||||||
|
var weatherForecast //= getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val
|
||||||
|
|
||||||
//const Off: RGB = { red: 68, green: 115, blue: 158 }; // Blau-Off
|
//const Off: RGB = { red: 68, green: 115, blue: 158 }; // Blau-Off
|
||||||
const Off: RGB = { red: 253, green: 128, blue: 0 }; // Orange-Off - schönere Farbübergänge
|
const Off: RGB = { red: 253, green: 128, blue: 0 }; // Orange-Off - schönere Farbübergänge
|
||||||
@@ -125,26 +137,7 @@ const colorRadio: RGB = { red: 255, green: 127, blue: 0 };
|
|||||||
const BatteryFull: RGB = { red: 96, green: 176, blue: 62 };
|
const BatteryFull: RGB = { red: 96, green: 176, blue: 62 };
|
||||||
const BatteryEmpty: RGB = { red: 179, green: 45, blue: 25 };
|
const BatteryEmpty: RGB = { red: 179, green: 45, blue: 25 };
|
||||||
|
|
||||||
// Variablen zur Steuerung der Wettericons auf dem Screensaver (Steuerung in 0_userdata.0.XPANELX.ScreensaverInfo)
|
//-- Anfang der Beispiele für Seitengestaltung -- Aliase erforderlich ----------------
|
||||||
// Wenn weatherForecastTimer auf true, dann Wechsel zwischen Datenpunkten und Wettervorhersage (30 Sekunden nach Minute (Zeit))
|
|
||||||
// Wenn weatherForecastTimer auf false, dann Möglichkeit über weatherForecast, ob Datenpunkte oder Wettervorhersage (true = WeatherForecast/false = Datenpunkte)
|
|
||||||
var weatherForecast = getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val
|
|
||||||
|
|
||||||
// Alexa-Instanz
|
|
||||||
var alexaInstanz = 'alexa2.0';
|
|
||||||
var alexaDevice = 'G0XXXXXXXXXXXXXX'; // Primär zu steuerndes Device oder Gruppe aus alexa2-Adapter (Seriennummer)
|
|
||||||
|
|
||||||
// Wenn alexaSpeakerList definiert, dann werden Einträge verwendet, sonst alle relevanten Devices aus Alexa-Instanz
|
|
||||||
// Speakerwechsel funktioniert nicht bei Radio/TuneIn sonden bei Playlists
|
|
||||||
const alexaSpeakerList = [
|
|
||||||
'Echo Spot Buero',
|
|
||||||
'Überall',
|
|
||||||
'Gartenhaus',
|
|
||||||
'Esszimmer',
|
|
||||||
'Heimkino',
|
|
||||||
'Echo Dot Küche'
|
|
||||||
];
|
|
||||||
|
|
||||||
var Test_Licht: PageEntities =
|
var Test_Licht: PageEntities =
|
||||||
{
|
{
|
||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
@@ -154,8 +147,8 @@ var Test_Licht: PageEntities =
|
|||||||
"parent": undefined,
|
"parent": undefined,
|
||||||
"items": [
|
"items": [
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestRGBLichteinzeln", name: "RGB-Licht Hex-Color", interpolateColor: true},
|
<PageItem>{ id: "alias.0.NSPanel_1.TestRGBLichteinzeln", name: "RGB-Licht Hex-Color", interpolateColor: true},
|
||||||
//<PageItem>{ id: "alias.0.NSPanel_1.TestFarbtemperatur", name: "Farbtemperatur", interpolateColor: true},
|
<PageItem>{ id: "alias.0.NSPanel_1.TestFarbtemperatur", name: "Farbtemperatur", interpolateColor: true},
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestRGBLicht", name: "RGB-Licht", minValueBrightness: 0, maxValueBrightness: 100, interpolateColor: true},
|
//<PageItem>{ id: "alias.0.NSPanel_1.TestRGBLicht", name: "RGB-Licht", minValueBrightness: 0, maxValueBrightness: 100, interpolateColor: true},
|
||||||
//Beispiel für RGB Light mit neuem PageItem-Parameter colormode: "xy" alternativ colormode: "rgb" oder weglassen
|
//Beispiel für RGB Light mit neuem PageItem-Parameter colormode: "xy" alternativ colormode: "rgb" oder weglassen
|
||||||
//Steuert im z.B. DeConz Adapter unter Lampen die Farben per CIE (XY)
|
//Steuert im z.B. DeConz Adapter unter Lampen die Farben per CIE (XY)
|
||||||
<PageItem>{ id: "alias.0.NSPanel_2.WZ_E14_Fenster_rechts", name: "Fensterbank rechts", minValueBrightness: 0, maxValueBrightness: 100, minValueColorTemp: 500, maxValueColorTemp: 150, interpolateColor: false, colormode: "xy"},
|
<PageItem>{ id: "alias.0.NSPanel_2.WZ_E14_Fenster_rechts", name: "Fensterbank rechts", minValueBrightness: 0, maxValueBrightness: 100, minValueColorTemp: 500, maxValueColorTemp: 150, interpolateColor: false, colormode: "xy"},
|
||||||
@@ -172,7 +165,7 @@ var Test_Funktionen: PageEntities =
|
|||||||
"subPage": false,
|
"subPage": false,
|
||||||
"parent": undefined,
|
"parent": undefined,
|
||||||
"items": [
|
"items": [
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestLautstärke", offColor: MSRed /*if mute=true*/, onColor: MSGreen, name: "Echo Spot Büro", minValue: 0, maxValue: 100 },
|
<PageItem>{ id: "alias.0.NSPanel_1.TestLautstärke", offColor: MSRed, onColor: MSGreen, name: "Echo Spot Büro", minValue: 0, maxValue: 100 },
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestTemperatur",name: "Temperatur außen", icon: "thermometer", onColor: White },
|
<PageItem>{ id: "alias.0.NSPanel_1.TestTemperatur",name: "Temperatur außen", icon: "thermometer", onColor: White },
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestFeuchtigkeit", name: "Luftfeuchte außen", icon: "water-percent", unit: "%H", onColor: White },
|
<PageItem>{ id: "alias.0.NSPanel_1.TestFeuchtigkeit", name: "Luftfeuchte außen", icon: "water-percent", unit: "%H", onColor: White },
|
||||||
<PageItem>{ id: "alias.0.NSPanel_1.TestInfo", name: "Windstärke", icon: "wind-power-outline", offColor: MSRed, onColor: MSGreen, unit: "bft", minValue: 0, maxValue: 12, interpolateColor: true, useColor: true }
|
<PageItem>{ id: "alias.0.NSPanel_1.TestInfo", name: "Windstärke", icon: "wind-power-outline", offColor: MSRed, onColor: MSGreen, unit: "bft", minValue: 0, maxValue: 12, interpolateColor: true, useColor: true }
|
||||||
@@ -269,6 +262,19 @@ var Buero_Seite_2: PageGrid =
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var Radiosender: PageGrid =
|
||||||
|
{
|
||||||
|
"type": "cardGrid",
|
||||||
|
"heading": "Büro 2",
|
||||||
|
"useColor": true,
|
||||||
|
"subPage": false,
|
||||||
|
"parent": undefined,
|
||||||
|
"items": [<PageItem>{ id: "alias.0.NSPanel_1.Radio.Bob", icon: "radio", name: "Radio BOB", onColor: colorRadio}]
|
||||||
|
};
|
||||||
|
|
||||||
|
// NEW: Neue Definition von Medien-Aliasen
|
||||||
|
// adapterPlayerInstance = alexa2.0. or spotify-premium.0. or sonos.0. or chromecast.0.
|
||||||
|
// MEDIA ALIASE können auch per JS-Script erstellt werden https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-ALIAS-Definitionen#medien---cardmedia
|
||||||
var Alexa: PageMedia =
|
var Alexa: PageMedia =
|
||||||
{
|
{
|
||||||
"type": "cardMedia",
|
"type": "cardMedia",
|
||||||
@@ -276,7 +282,41 @@ var Alexa: PageMedia =
|
|||||||
"useColor": true,
|
"useColor": true,
|
||||||
"subPage": false,
|
"subPage": false,
|
||||||
"parent": undefined,
|
"parent": undefined,
|
||||||
"items": [<PageItem>{ id: "alias.0.NSPanel_1.Alexa.PlayerBuero" }]
|
"items": [<PageItem>{
|
||||||
|
id: "alias.0.NSPanel_1.Media.PlayerBuero",
|
||||||
|
adapterPlayerInstance: "alexa2.0.",
|
||||||
|
mediaDevice: "G0XXXXXXXXXXXXXX", //Primäres Alexa Device
|
||||||
|
speakerList: ['Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero']
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
var Sonos: PageMedia =
|
||||||
|
{
|
||||||
|
"type": "cardMedia",
|
||||||
|
"heading": "Sonos",
|
||||||
|
"useColor": true,
|
||||||
|
"subPage": false,
|
||||||
|
"parent": undefined,
|
||||||
|
"items": [<PageItem>{
|
||||||
|
id: "alias.0.NSPanel_1.Media.PlayerSonos",
|
||||||
|
adapterPlayerInstance: "sonos.0.",
|
||||||
|
mediaDevice: "192_168_1_212", //Primäres Sonos-Device
|
||||||
|
speakerList: ['Terrasse']
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
var SpotifyPremium: PageMedia =
|
||||||
|
{
|
||||||
|
"type": "cardMedia",
|
||||||
|
"heading": "Spotify-Premium",
|
||||||
|
"useColor": true,
|
||||||
|
"subPage": false,
|
||||||
|
"parent": undefined,
|
||||||
|
"items": [<PageItem>{
|
||||||
|
id: "alias.0.NSPanel_1.Media.PlayerSpotifyPremium",
|
||||||
|
adapterPlayerInstance: "spotify-premium.0.",
|
||||||
|
speakerList: ['LOGINT-W11-JB','Terrasse','Überall','Gartenhaus','Esszimmer','Heimkino','Echo Dot Küche','Echo Spot Buero']
|
||||||
|
}]
|
||||||
};
|
};
|
||||||
|
|
||||||
var Buero_Themostat: PageThermo =
|
var Buero_Themostat: PageThermo =
|
||||||
@@ -412,6 +452,8 @@ var NSPanel_Firmware_Updates: PageEntities =
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//-- ENDE der Beispiele für Seitengestaltung -- Aliase erforderlich ------------------
|
||||||
|
|
||||||
export const config: Config = {
|
export const config: Config = {
|
||||||
panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT', // anpassen
|
panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT', // anpassen
|
||||||
panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend', // anpassen
|
panelSendTopic: 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend', // anpassen
|
||||||
@@ -432,28 +474,30 @@ export const config: Config = {
|
|||||||
defaultColor: Off,
|
defaultColor: Off,
|
||||||
temperatureUnit: '°C',
|
temperatureUnit: '°C',
|
||||||
pages: [
|
pages: [
|
||||||
Buero_Seite_2,
|
Sonos, //Beispiel-Seite
|
||||||
Buero_Seite_1,
|
SpotifyPremium, //Beispiel-Seite
|
||||||
Buero_Klimaanlage,
|
Alexa, //Beispiel-Seite
|
||||||
Button_1,
|
Buero_Seite_2, //Beispiel-Seite
|
||||||
Test_Licht,
|
Buero_Seite_1, //Beispiel-Seite
|
||||||
Test_Funktionen,
|
Buero_Klimaanlage, //Beispiel-Seite
|
||||||
Fenster_1,
|
Button_1, //Beispiel-Seite
|
||||||
Subpages_1,
|
Test_Licht, //Beispiel-Seite
|
||||||
Alexa,
|
Test_Funktionen, //Beispiel-Seite
|
||||||
Buero_Themostat,
|
Fenster_1, //Beispiel-Seite
|
||||||
Buero_Alarm,
|
Subpages_1, //Beispiel-Seite
|
||||||
Service
|
Buero_Themostat, //Beispiel-Seite
|
||||||
|
Buero_Alarm, //Beispiel-Seite
|
||||||
|
Service //Beispiel-Seite
|
||||||
],
|
],
|
||||||
subPages: [
|
subPages: [
|
||||||
Abfall,
|
Abfall, //Beispiel-Unterseite
|
||||||
WLAN,
|
WLAN, //Beispiel-Unterseite
|
||||||
NSPanel_Infos,
|
NSPanel_Infos, //Beispiel-Unterseite
|
||||||
NSPanel_Einstellungen,
|
NSPanel_Einstellungen, //Beispiel-Unterseite
|
||||||
NSPanel_Firmware_Updates
|
NSPanel_Firmware_Updates //Beispiel-Unterseite
|
||||||
],
|
],
|
||||||
button1Page: button1Page,
|
button1Page: button1Page, //Beispiel-Seite auf Button 1, wenn Rule2 definiert - Wenn nicht definiert --> button1Page: null,
|
||||||
button2Page: button2Page
|
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 _____________________________________
|
||||||
@@ -610,7 +654,7 @@ schedule('* * * * *', () => {
|
|||||||
//WeatherForcast true/false Umschaltung halbe Minute verzögert
|
//WeatherForcast true/false Umschaltung halbe Minute verzögert
|
||||||
if (getState(NSPanel_Path + "ScreensaverInfo.popupNotifyHeading").val == '' && getState(NSPanel_Path + "ScreensaverInfo.popupNotifyText").val == '' && getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val == true && getState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer").val == true) {
|
if (getState(NSPanel_Path + "ScreensaverInfo.popupNotifyHeading").val == '' && getState(NSPanel_Path + "ScreensaverInfo.popupNotifyText").val == '' && getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val == true && getState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer").val == true) {
|
||||||
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", false, 30000, false);
|
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", false, 30000, false);
|
||||||
} else {
|
} else if (getState(NSPanel_Path + "ScreensaverInfo.popupNotifyHeading").val == '' && getState(NSPanel_Path + "ScreensaverInfo.popupNotifyText").val == '' && getState(NSPanel_Path + "ScreensaverInfo.weatherForecast").val == false && getState(NSPanel_Path + "ScreensaverInfo.weatherForecastTimer").val == true) {
|
||||||
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, 30000, false);
|
setStateDelayed(NSPanel_Path + "ScreensaverInfo.weatherForecast", true, 30000, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -647,6 +691,7 @@ check_updates();
|
|||||||
//------------------Begin Update Functions
|
//------------------Begin Update Functions
|
||||||
|
|
||||||
function get_locales() {
|
function get_locales() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting locales');
|
if (Debug) console.log('Requesting locales');
|
||||||
request({
|
request({
|
||||||
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/ioBroker/ioBroker_NSPanel_locales.json',
|
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/ioBroker/ioBroker_NSPanel_locales.json',
|
||||||
@@ -654,11 +699,18 @@ function get_locales() {
|
|||||||
'User-Agent': 'ioBroker'
|
'User-Agent': 'ioBroker'
|
||||||
}
|
}
|
||||||
}, async (error, response, result) => {
|
}, async (error, response, result) => {
|
||||||
|
try {
|
||||||
if (result) {
|
if (result) {
|
||||||
await createStateAsync(NSPanel_Path + 'NSPanel_locales_json', <iobJS.StateCommon>{ type: 'string', role: 'json' });
|
await createStateAsync(NSPanel_Path + 'NSPanel_locales_json', <iobJS.StateCommon>{ type: 'string', role: 'json' });
|
||||||
await setStateAsync(NSPanel_Path + 'NSPanel_locales_json', <iobJS.State>{ val: result, ack: true });
|
await setStateAsync(NSPanel_Path + 'NSPanel_locales_json', <iobJS.State>{ val: result, ack: true });
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err.message);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error('error requesting locales in function get_locales: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function check_updates() {
|
async function check_updates() {
|
||||||
@@ -818,6 +870,7 @@ function get_current_tasmota_ip_address() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function get_online_tasmota_firmware_version() {
|
function get_online_tasmota_firmware_version() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting tasmota firmware version');
|
if (Debug) console.log('Requesting tasmota firmware version');
|
||||||
request({
|
request({
|
||||||
url: 'https://api.github.com/repositories/80286288/releases/latest',
|
url: 'https://api.github.com/repositories/80286288/releases/latest',
|
||||||
@@ -833,12 +886,16 @@ function get_online_tasmota_firmware_version() {
|
|||||||
await createStateAsync(NSPanel_Path + 'Tasmota_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'Tasmota_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(NSPanel_Path + 'Tasmota_Firmware.onlineVersion', <iobJS.State>{ val: TasmotaVersionOnline, ack: true });
|
await setStateAsync(NSPanel_Path + 'Tasmota_Firmware.onlineVersion', <iobJS.State>{ val: TasmotaVersionOnline, ack: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function get_online_tasmota_firmware_version: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_current_berry_driver_version() {
|
function get_current_berry_driver_version() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting current berry driver version');
|
if (Debug) console.log('Requesting current berry driver version');
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=GetDriverVersion`,
|
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=GetDriverVersion`,
|
||||||
@@ -850,12 +907,16 @@ function get_current_berry_driver_version() {
|
|||||||
await createStateAsync(NSPanel_Path + 'Berry_Driver.currentVersion', <iobJS.StateCommon>{ type: 'number' });
|
await createStateAsync(NSPanel_Path + 'Berry_Driver.currentVersion', <iobJS.StateCommon>{ type: 'number' });
|
||||||
await setStateAsync(NSPanel_Path + 'Berry_Driver.currentVersion', <iobJS.State>{ val: JSON.parse(result).nlui_driver_version, ack: true });
|
await setStateAsync(NSPanel_Path + 'Berry_Driver.currentVersion', <iobJS.State>{ val: JSON.parse(result).nlui_driver_version, ack: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.warn(err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function get_current_berry_driver_version: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_tasmota_status0() {
|
function get_tasmota_status0() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting tasmota status0');
|
if (Debug) console.log('Requesting tasmota status0');
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Status0`,
|
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Status0`,
|
||||||
@@ -891,12 +952,16 @@ function get_tasmota_status0() {
|
|||||||
await setStateAsync(NSPanel_Path + 'Tasmota.Wifi.RSSI', <iobJS.State>{ val: Tasmota_JSON.StatusSTS.Wifi.RSSI, ack: true });
|
await setStateAsync(NSPanel_Path + 'Tasmota.Wifi.RSSI', <iobJS.State>{ val: Tasmota_JSON.StatusSTS.Wifi.RSSI, ack: true });
|
||||||
await setStateAsync(NSPanel_Path + 'Tasmota.Wifi.Signal', <iobJS.State>{ val: Tasmota_JSON.StatusSTS.Wifi.Signal, ack: true });
|
await setStateAsync(NSPanel_Path + 'Tasmota.Wifi.Signal', <iobJS.State>{ val: Tasmota_JSON.StatusSTS.Wifi.Signal, ack: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.warn(err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function get_tasmota_status0: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_online_berry_driver_version() {
|
function get_online_berry_driver_version() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting online berry driver version');
|
if (Debug) console.log('Requesting online berry driver version');
|
||||||
request({
|
request({
|
||||||
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be',
|
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be',
|
||||||
@@ -905,14 +970,22 @@ function get_online_berry_driver_version() {
|
|||||||
}
|
}
|
||||||
}, async (error, response, result) => {
|
}, async (error, response, result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
try {
|
||||||
const BerryDriverVersionOnline = result.substring((result.indexOf('version_of_this_script = ') + 24), result.indexOf('version_of_this_script = ') + 27).replace(/\s+/g, '');
|
const BerryDriverVersionOnline = result.substring((result.indexOf('version_of_this_script = ') + 24), result.indexOf('version_of_this_script = ') + 27).replace(/\s+/g, '');
|
||||||
await createStateAsync(NSPanel_Path + 'Berry_Driver.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'Berry_Driver.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(NSPanel_Path + 'Berry_Driver.onlineVersion', <iobJS.State>{ val: BerryDriverVersionOnline, ack: true });
|
await setStateAsync(NSPanel_Path + 'Berry_Driver.onlineVersion', <iobJS.State>{ val: BerryDriverVersionOnline, ack: true });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function get_online_berry_driver_version: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_version_tft_firmware() {
|
function check_version_tft_firmware() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting online TFT version');
|
if (Debug) console.log('Requesting online TFT version');
|
||||||
request({
|
request({
|
||||||
url: 'https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/latest',
|
url: 'https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/latest',
|
||||||
@@ -929,13 +1002,17 @@ function check_version_tft_firmware() {
|
|||||||
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: NSPanelVersion, ack: true });
|
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: NSPanelVersion, ack: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.warn(err.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function check_version_tft_firmware: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_online_display_firmware() {
|
function check_online_display_firmware() {
|
||||||
|
try {
|
||||||
if (Debug) console.log('Requesting online firmware version');
|
if (Debug) console.log('Requesting online firmware version');
|
||||||
request({
|
request({
|
||||||
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py',
|
url: 'https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/apps/nspanel-lovelace-ui/nspanel-lovelace-ui.py',
|
||||||
@@ -944,12 +1021,19 @@ function check_online_display_firmware() {
|
|||||||
}
|
}
|
||||||
}, async (error, response, result) => {
|
}, async (error, response, result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
try {
|
||||||
let desired_display_firmware_version = result.substring((result.indexOf('desired_display_firmware_version =') + 34), result.indexOf('desired_display_firmware_version =') + 38).replace(/\s+/g, '');
|
let desired_display_firmware_version = result.substring((result.indexOf('desired_display_firmware_version =') + 34), result.indexOf('desired_display_firmware_version =') + 38).replace(/\s+/g, '');
|
||||||
|
|
||||||
await createStateAsync(NSPanel_Path + 'Display_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'Display_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(NSPanel_Path + 'Display_Firmware.onlineVersion', <iobJS.State>{ val: desired_display_firmware_version, ack: true });
|
await setStateAsync(NSPanel_Path + 'Display_Firmware.onlineVersion', <iobJS.State>{ val: desired_display_firmware_version, ack: true });
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error requesting firmware in function check_online_display_firmware: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on({ id: config.panelRecvTopic }, async (obj) => {
|
on({ id: config.panelRecvTopic }, async (obj) => {
|
||||||
@@ -965,12 +1049,13 @@ on({ id: config.panelRecvTopic }, async (obj) => {
|
|||||||
await setStateAsync(NSPanel_Path + 'NSPanel_Version', <iobJS.State>{ val: split[3], ack: true });
|
await setStateAsync(NSPanel_Path + 'NSPanel_Version', <iobJS.State>{ val: split[3], ack: true });
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.warn('error rceiving CustomRecv: ' + err.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function update_berry_driver_version() {
|
function update_berry_driver_version() {
|
||||||
|
try {
|
||||||
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: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Backlog UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1`,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -979,12 +1064,15 @@ function update_berry_driver_version() {
|
|||||||
}, async function (error, response, result) {
|
}, async function (error, response, result) {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error at function update_berry_driver_version: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_tft_firmware() {
|
function update_tft_firmware() {
|
||||||
const tft_version: string = 'v3.3.1';
|
const tft_version: string = 'v3.3.1';
|
||||||
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 {
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`,
|
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=FlashNextion ${desired_display_firmware_url}`,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -994,9 +1082,13 @@ function update_tft_firmware() {
|
|||||||
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
await createStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.StateCommon>{ type: 'string' });
|
||||||
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: tft_version, ack: true });
|
await setStateAsync(NSPanel_Path + 'TFT_Firmware.onlineVersion', <iobJS.State>{ val: tft_version, ack: true });
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error at function update_tft_firmware: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_tasmota_firmware() {
|
function update_tasmota_firmware() {
|
||||||
|
try {
|
||||||
request({
|
request({
|
||||||
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`,
|
url: `http://${get_current_tasmota_ip_address()}/cm?cmnd=Upgrade 1`,
|
||||||
headers: {
|
headers: {
|
||||||
@@ -1004,6 +1096,9 @@ function update_tasmota_firmware() {
|
|||||||
}
|
}
|
||||||
}, async function (error, response, result) {
|
}, async function (error, response, result) {
|
||||||
});
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('error at function update_tasmota_firmware: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//------------------End Update Functions
|
//------------------End Update Functions
|
||||||
|
|
||||||
@@ -1887,14 +1982,76 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
|
|||||||
function GenerateMediaPage(page: PageMedia): Payload[] {
|
function GenerateMediaPage(page: PageMedia): Payload[] {
|
||||||
var id = page.items[0].id
|
var id = page.items[0].id
|
||||||
|
|
||||||
// RegisterEntityWatcher(id + '.TITLE');
|
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
|
|
||||||
|
try {
|
||||||
out_msgs.push({ payload: 'pageType~cardMedia' });
|
out_msgs.push({ payload: 'pageType~cardMedia' });
|
||||||
if (existsObject(id)) {
|
if (existsObject(id)) {
|
||||||
let name = getState(id + '.ALBUM').val;
|
let name = getState(id + '.ALBUM').val;
|
||||||
let media_icon = Icons.GetIcon('playlist-music');
|
|
||||||
let title = getState(id + '.TITLE').val;
|
let title = getState(id + '.TITLE').val;
|
||||||
let author = getState(id + '.ARTIST').val;
|
let author = getState(id + '.ARTIST').val;
|
||||||
|
|
||||||
|
let vInstance = page.items[0].adapterPlayerInstance;
|
||||||
|
let v1Adapter = vInstance.split('.');
|
||||||
|
let v2Adapter = v1Adapter[0];
|
||||||
|
|
||||||
|
//Alexa
|
||||||
|
let media_icon = Icons.GetIcon('playlist-music');
|
||||||
|
//Spotify-Premium
|
||||||
|
if (v2Adapter == 'spotify-premium') {
|
||||||
|
media_icon = Icons.GetIcon('spotify');
|
||||||
|
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
||||||
|
let nameLenght = name.length;
|
||||||
|
if (name.substring(0,9) == 'Playlist:') {
|
||||||
|
let nameLenght = name.length;
|
||||||
|
name = name.slice(10, nameLenght);
|
||||||
|
} else if (name.substring(0,6) == 'Album:') {
|
||||||
|
let nameLenght = name.length;
|
||||||
|
name = name.slice(10, nameLenght);
|
||||||
|
} else if (name.substring(0,6) == 'Track') {
|
||||||
|
name = 'Spotify-Premium';
|
||||||
|
}
|
||||||
|
if (nameLenght == 0) {
|
||||||
|
name = 'Spotify-Premium';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Spotify-Premium
|
||||||
|
if (v2Adapter == 'sonos') {
|
||||||
|
media_icon = Icons.GetIcon('music');
|
||||||
|
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
||||||
|
let nameLenght = name.length;
|
||||||
|
if (nameLenght == 0) {
|
||||||
|
name = 'Sonos Player';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Alexa2
|
||||||
|
if (v2Adapter == 'alexa2') {
|
||||||
|
media_icon = Icons.GetIcon('playlist-music');
|
||||||
|
let nameLenght = name.length;
|
||||||
|
if (nameLenght == 0) {
|
||||||
|
name = 'Alexa Player';
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v2Adapter == 'spotify-premium') {
|
||||||
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
|
if (author.length > 30) {
|
||||||
|
author = getState(id + '.ARTIST').val;
|
||||||
|
}
|
||||||
|
if ((getState(id + '.ARTIST').val).length == 0) {
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v2Adapter == 'sonos') {
|
||||||
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
|
if ((getState(id + '.ARTIST').val).length == 0) {
|
||||||
|
author = 'no music to control';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let volume = getState(id + '.VOLUME').val;
|
let volume = getState(id + '.VOLUME').val;
|
||||||
var iconplaypause = Icons.GetIcon('pause'); //pause
|
var iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
var onoffbutton = 1374;
|
var onoffbutton = 1374;
|
||||||
@@ -1905,25 +2062,34 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
iconplaypause = Icons.GetIcon('play'); //play
|
iconplaypause = Icons.GetIcon('play'); //play
|
||||||
}
|
}
|
||||||
|
|
||||||
let currentSpeaker = getState(([alexaInstanz, '.Echo-Devices.', alexaDevice, '.Info.name'].join(''))).val;
|
if (Debug) console.log(v2Adapter);
|
||||||
|
|
||||||
|
let currentSpeaker = 'kein Speaker gefunden';
|
||||||
|
|
||||||
|
if (v2Adapter == 'alexa2') {
|
||||||
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', page.items[0].mediaDevice, '.Info.name'].join(''))).val;
|
||||||
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'player.device.name'].join(''))).val;
|
||||||
|
} else if (v2Adapter == 'sonos') {
|
||||||
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'root.', page.items[0].mediaDevice, '.members'].join(''))).val;
|
||||||
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------
|
||||||
// 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 (alexaSpeakerList.length > 0) {
|
if (page.items[0].speakerList.length > 0) {
|
||||||
for (let i_index in alexaSpeakerList) {
|
for (let i_index in page.items[0].speakerList) {
|
||||||
speakerlist = speakerlist + alexaSpeakerList[i_index] + '?';
|
speakerlist = speakerlist + page.items[0].speakerList[i_index] + '?';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let i_list = Array.prototype.slice.apply($('[state.id="' + alexaInstanz + '.Echo-Devices.*.Info.name"]'));
|
let i_list = Array.prototype.slice.apply($('[state.id="' + page.items[0].adapterPlayerInstance + 'Echo-Devices.*.Info.name"]'));
|
||||||
for (let i_index in i_list) {
|
for (let i_index in i_list) {
|
||||||
let i = i_list[i_index];
|
let i = i_list[i_index];
|
||||||
let deviceId = i;
|
let deviceId = i;
|
||||||
deviceId = deviceId.split('.');
|
deviceId = deviceId.split('.');
|
||||||
if (getState(([alexaInstanz, '.Echo-Devices.', deviceId[3], '.online'].join(''))).val &&
|
if (getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.online'].join(''))).val &&
|
||||||
existsObject(([alexaInstanz, '.Echo-Devices.', deviceId[3], '.Player'].join(''))) &&
|
existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Player'].join(''))) &&
|
||||||
existsObject(([alexaInstanz, '.Echo-Devices.', deviceId[3], '.Commands'].join('')))) {
|
existsObject(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', deviceId[3], '.Commands'].join('')))) {
|
||||||
speakerlist = speakerlist + getState(i).val + '?';
|
speakerlist = speakerlist + getState(i).val + '?';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1948,6 +2114,9 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
|
|||||||
}
|
}
|
||||||
if (Debug) console.log(out_msgs);
|
if (Debug) console.log(out_msgs);
|
||||||
return out_msgs
|
return out_msgs
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('function GenerateMediaPage: ' + err.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateAlarmPage(page: PageAlarm): Payload[] {
|
function GenerateAlarmPage(page: PageAlarm): Payload[] {
|
||||||
@@ -2186,6 +2355,8 @@ function HandleButtonEvent(words): void {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Debug) console.log('bExit: ' + words[4] + ' - ' + pageId);
|
if (Debug) console.log('bExit: ' + words[4] + ' - ' + pageId);
|
||||||
|
setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
|
||||||
|
setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
|
||||||
GeneratePage(activePage);
|
GeneratePage(activePage);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2348,6 +2519,9 @@ function HandleButtonEvent(words): void {
|
|||||||
break;
|
break;
|
||||||
case 'media-back':
|
case 'media-back':
|
||||||
setIfExists(id + '.PREV', true);
|
setIfExists(id + '.PREV', true);
|
||||||
|
setTimeout(function(){
|
||||||
|
GeneratePage(activePage);
|
||||||
|
},3000)
|
||||||
break;
|
break;
|
||||||
case 'media-pause':
|
case 'media-pause':
|
||||||
if (getState(id + '.STATE').val === true) {
|
if (getState(id + '.STATE').val === true) {
|
||||||
@@ -2355,25 +2529,48 @@ function HandleButtonEvent(words): void {
|
|||||||
} else {
|
} else {
|
||||||
setIfExists(id + '.PLAY', true);
|
setIfExists(id + '.PLAY', true);
|
||||||
}
|
}
|
||||||
|
setTimeout(function(){
|
||||||
|
GeneratePage(activePage);
|
||||||
|
},3000)
|
||||||
break;
|
break;
|
||||||
case 'media-next':
|
case 'media-next':
|
||||||
setIfExists(id + '.NEXT', true);
|
setIfExists(id + '.NEXT', true);
|
||||||
|
setTimeout(function(){
|
||||||
|
GeneratePage(activePage);
|
||||||
|
},3000)
|
||||||
break;
|
break;
|
||||||
case 'volumeSlider':
|
case 'volumeSlider':
|
||||||
setIfExists(id + '.VOLUME', parseInt(words[4]))
|
setIfExists(id + '.VOLUME', parseInt(words[4]))
|
||||||
break;
|
break;
|
||||||
case 'speaker-sel':
|
case 'speaker-sel':
|
||||||
let i_list = Array.prototype.slice.apply($('[state.id="' + alexaInstanz + '.Echo-Devices.*.Info.name"]'));
|
let pageItem = findPageItem(id);
|
||||||
|
let adapterInstance = pageItem.adapterPlayerInstance;
|
||||||
|
let adapter = adapterInstance.split('.')
|
||||||
|
let deviceAdapter = adapter[0];
|
||||||
|
|
||||||
|
switch (deviceAdapter) {
|
||||||
|
case 'spotify-premium':
|
||||||
|
var strDeviceID = spotifyGetDeviceID(words[4]);
|
||||||
|
setState(adapterInstance + 'devices.' + strDeviceID + ".useForPlayback", true);
|
||||||
|
break;
|
||||||
|
case 'alexa2':
|
||||||
|
let i_list = Array.prototype.slice.apply($('[state.id="' + adapterInstance + 'Echo-Devices.*.Info.name"]'));
|
||||||
for (let i_index in i_list) {
|
for (let i_index in i_list) {
|
||||||
let i = i_list[i_index];
|
let i = i_list[i_index];
|
||||||
if ((getState(i).val) === words[4]) {
|
if ((getState(i).val) === words[4]) {
|
||||||
let deviceId = i;
|
let deviceId = i;
|
||||||
deviceId = deviceId.split('.');
|
deviceId = deviceId.split('.');
|
||||||
setIfExists(alexaInstanz + '.Echo-Devices.' + alexaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + words[4]);
|
setIfExists(adapterInstance + 'Echo-Devices.' + pageItem.mediaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + words[4]);
|
||||||
alexaDevice = deviceId[3];
|
pageItem.mediaDevice = deviceId[3];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'sonos':
|
||||||
|
break;
|
||||||
|
case 'chromecast':
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'media-OnOff':
|
case 'media-OnOff':
|
||||||
setIfExists(id + '.STOP', true)
|
setIfExists(id + '.STOP', true)
|
||||||
break;
|
break;
|
||||||
@@ -2470,9 +2667,8 @@ function HandleButtonEvent(words): void {
|
|||||||
},250)
|
},250)
|
||||||
break;
|
break;
|
||||||
case 'D1': // Alarm-Page Alarm Deaktivieren
|
case 'D1': // Alarm-Page Alarm Deaktivieren
|
||||||
//if (Debug)
|
if (Debug) console.log('D1: ' + getState(id + '.PIN').val);
|
||||||
console.log('D1: ' + getState(id + '.PIN').val);
|
if (Debug) console.log(words[4]);
|
||||||
console.log(words[4]);
|
|
||||||
if (words[4] != '') {
|
if (words[4] != '') {
|
||||||
if (getState(id + '.PIN').val == words[4]) {
|
if (getState(id + '.PIN').val == words[4]) {
|
||||||
setIfExists(id + '.PIN', '0000');
|
setIfExists(id + '.PIN', '0000');
|
||||||
@@ -3041,7 +3237,7 @@ on({ id: config.panelRecvTopic.substring(0, config.panelRecvTopic.length - 'RESU
|
|||||||
await setStateAsync(NSPanel_Path + 'Sensor.ANALOG.Temperature', <iobJS.State>{ val: parseFloat(Tasmota_Sensor.ANALOG.Temperature1), ack: true });
|
await setStateAsync(NSPanel_Path + 'Sensor.ANALOG.Temperature', <iobJS.State>{ val: parseFloat(Tasmota_Sensor.ANALOG.Temperature1), ack: true });
|
||||||
await setStateAsync(NSPanel_Path + 'Sensor.ESP32.Temperature', <iobJS.State>{ val: parseFloat(Tasmota_Sensor.ESP32.Temperature), ack: true });
|
await setStateAsync(NSPanel_Path + 'Sensor.ESP32.Temperature', <iobJS.State>{ val: parseFloat(Tasmota_Sensor.ESP32.Temperature), ack: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.warn('error with reading senor-data: '+ err.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//------------------End Read Internal Sensor Data
|
//------------------End Read Internal Sensor Data
|
||||||
@@ -3171,6 +3367,16 @@ function rgb_to_cie(red, green, blue)
|
|||||||
return cie;
|
return cie;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function spotifyGetDeviceID(vDeviceString) {
|
||||||
|
const availableDeviceIDs = getState("spotify-premium.0.devices.availableDeviceListIds").val;
|
||||||
|
const availableDeviceNames = getState("spotify-premium.0.devices.availableDeviceListString").val;
|
||||||
|
var arrayDeviceListIds = availableDeviceIDs.split(";");
|
||||||
|
var arrayDeviceListSting = availableDeviceNames.split(";");
|
||||||
|
var indexPos = arrayDeviceListSting.indexOf(vDeviceString);
|
||||||
|
var strDevID = arrayDeviceListIds[indexPos];
|
||||||
|
return strDevID;
|
||||||
|
}
|
||||||
|
|
||||||
type RGB = {
|
type RGB = {
|
||||||
red: number,
|
red: number,
|
||||||
green: number,
|
green: number,
|
||||||
@@ -3238,7 +3444,10 @@ type PageItem = {
|
|||||||
buttonText: (string | undefined),
|
buttonText: (string | undefined),
|
||||||
unit: (string | undefined),
|
unit: (string | undefined),
|
||||||
navigate: (boolean | undefined),
|
navigate: (boolean | undefined),
|
||||||
colormode: (string | undefined)
|
colormode: (string | undefined),
|
||||||
|
adapterPlayerInstance: (string | undefined),
|
||||||
|
mediaDevice: (string | undefined),
|
||||||
|
speakerList: (string[] | undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
type DimMode = {
|
type DimMode = {
|
||||||
|
|||||||
Reference in New Issue
Block a user