Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

SONOFF NSPanel mit Lovelace UI

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
7.7k Posts 271 Posters 6.7m Views 253 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • wendy2702W wendy2702

    @armilar bin unterwegs.

    Kommt spätestens morgen.

    Edit:

    @Armilar : meinst du das?

     Parameter - Bitte anpassen - siehe auch Wiki
        firstScreensaverEntity:   { ScreensaverEntity: 'modbus.3.holdingRegisters.20498_Wirkenergie_Total',
                                    ScreensaverEntityFactor: 1,                                 //New
                                    ScreensaverEntityDecimalPlaces: 0,                          //New 
                                    ScreensaverEntityIcon: 'solar-power', 
                                    ScreensaverEntityText: 'Leistung', 
                                    ScreensaverEntityUnitText: ' W', 
                                    ScreensaverEntityIconColor: {'val_min': -2500, 'val_max': 2500} 
                                  },
        secondScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.windgusts_value', 
                                    ScreensaverEntityFactor: (1000/3600),                       //New
                                    ScreensaverEntityDecimalPlaces: 1,                          //New 
                                    ScreensaverEntityIcon: 'weather-windy', 
                                    ScreensaverEntityText: "Wind", 
                                    ScreensaverEntityUnitText: 'km/h', 
                                    ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35} 
                                  },
        thirdScreensaverEntity:   { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.uv_index_value',
                                    ScreensaverEntityFactor: 1,                                 //New
                                    ScreensaverEntityDecimalPlaces: 0,                          //New  
                                    ScreensaverEntityIcon: 'solar-power', 
                                    ScreensaverEntityText: 'UV', 
                                    ScreensaverEntityUnitText: '', 
                                    ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} 
                                  },
        fourthScreensaverEntity:  { ScreensaverEntity: 'daswetter.0.NextHours.Location_1.Day_1.current.humidity_value', 
                                    ScreensaverEntityFactor: 1,                                 //New
                                    ScreensaverEntityDecimalPlaces: 0,                          //New 
                                    ScreensaverEntityIcon: 'water-percent', 
                                    ScreensaverEntityText: 'Luft', 
                                    ScreensaverEntityUnitText: '%', 
                                    ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                  },
    
    
    T Offline
    T Offline
    TT-Tom
    wrote on last edited by TT-Tom
    #2061

    @wendy2702

    so wir haben eine Lösung gefunden, bitte als Hotfix die Funktion HandleButtonEvent komplett austauschen mit folgendem Code im Spoiler

    function HandleButtonEvent(words: any): void {
       try {
           let tempid = words[2].split('?');
           let id = tempid[0];
           let buttonAction = words[3];
    
           if (Debug) {
               console.log(words[0] + ' - ' + words[1] + ' - ' + words[2] + ' - ' + words[3] + ' - ' + words[4] + ' - PageId: ' + pageId);
           }
    
           if ((words[2]).substring(0, 8) == 'navigate') {
               GeneratePage(eval((words[2]).substring(9, (words[2]).length)));
               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) {
               console.log(buttonAction);
           }
    
           let pageNum:number = 0;
    
           if (buttonAction.startsWith('swipe')) {
               buttonAction = 'bExit';
           }
           switch (buttonAction) {
    
               case 'bUp':
                   if (pageId < 0) { // Prüfen, ob button1page oder button2page
                       pageId = 0;
                       UnsubscribeWatcher();
                       GeneratePage(config.pages[pageId]);
                   } else {
                       pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                       pageId = pageNum;
                       UnsubscribeWatcher();
                       if (activePage != undefined && activePage.parent != undefined) {
                           //update pageID
                           for (let i = 0; i < config.pages.length; i++) {
                               if (config.pages[i] == activePage.parent) {
                                   pageId = i;
                                   break;
                               }
                           }
                           GeneratePage(activePage.parent);
                       }
                       else {
                           GeneratePage(config.pages[pageId]);
                       }
                       break;
                   }
                   break;
               case 'bNext':
                   pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length;
                   pageId = pageNum;
                   UnsubscribeWatcher();
                   GeneratePage(config.pages[pageId]);
                   break;
               case 'bSubNext':
                   UnsubscribeWatcher();
                   GeneratePage(eval(activePage.next));
                   break;
               case 'bPrev':
                   pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                   pageId = pageNum;
                   UnsubscribeWatcher();
                   if (activePage != undefined && activePage.parent != undefined) {
                       //update pageID
                       for (let i = 0; i < config.pages.length; i++) {
                           if (config.pages[i] == activePage.parent) {
                               pageId = i;
                               break;
                           }
                       }
                       GeneratePage(activePage.parent);
                   }
                   else {
                       GeneratePage(config.pages[pageId]);
                   }
                   break;
               case 'bSubPrev':          
                   UnsubscribeWatcher();
                   GeneratePage(eval(activePage.prev));
                   break;
               case 'bExit':
                   if (getState(NSPanel_Path + 'Config.Screensaver.screenSaverDoubleClick').val && words[2] == 'screensaver') {
                       if (words[4] >= 2) {
                           setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                           setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                           if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                               pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val;
                               activePage = config.pages[pageId];
                               GeneratePage(activePage);
                           } else {
                               GeneratePage(activePage);
                           }
                       } else {
                           setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                           setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                           screensaverEnabled = true;
                           break;
                       }
                   } else {
                       if (Debug) {
                           console.log('bExit: ' + words[4] + ' - ' + pageId);
                       }
                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                       setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                       if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                           pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val
                           activePage = config.pages[pageId];
                           GeneratePage(activePage);
                       } else {
                           GeneratePage(activePage);
                       }    
                   }
                   break;
               case 'bHome':
                   if (Debug) {
                       console.log('bExit: ' + words[4] + ' - ' + pageId);
                   }
                   UnsubscribeWatcher();
                   if (activePage.home != undefined) {
                       GeneratePage(eval(activePage.home));
                   } else {
                       GeneratePage(config.pages[0]);
                   }
                   break;
               case 'notifyAction':
                   if (words[4] == 'yes') {
                       setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                       setState(popupNotifyAction, <iobJS.State>{ val: true, ack: true });
                   } else if (words[4] == 'no') {
                       setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                       setState(popupNotifyAction, <iobJS.State>{ val: false, ack: true });
                   }
    
                   setIfExists(config.panelSendTopic, 'exitPopup');
    
                   break;
               case 'OnOff':
                   if (existsObject(id)) {
                       let action = false;
                       if (words[4] == '1')
                           action = true;
                       let o = getObject(id);
                       switch (o.common.role) {
                           case 'level.mode.fan':
                           case 'socket':
                           case 'light':
                               let pageItem = findPageItem(id);	
       						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
       							triggerButton(id + ".SET");
       						}	
       						else {	
       							setIfExists(id + '.SET', action);
       						}		
       						break;
                           case 'dimmer':
                               setIfExists(id + '.ON_SET', action) ? true : setIfExists(id + '.ON_ACTUAL', action);
                               break;
                           case 'ct':
                               setIfExists(id + '.ON', action);
                               break;
                           case 'rgb':
                           case 'rgbSingle':
                           case 'hue':
                               setIfExists(id + '.ON_ACTUAL', action);
                       }
                   }
                   break;
               case 'button':
                   if (existsObject(id)) {
                       let action = false;
                       if (words[4] == '1')
                           action = true;
                       let o = getObject(id);
                       switch (o.common.role) {
                           case 'lock':
                           case 'button':
                               toggleState(id + '.SET') ? true : toggleState(id + '.ON_SET');
                               break; 
                           case 'buttonSensor':
                               if (existsObject(id + '.ACTUAL')) {
                                   toggleState(id + '.ACTUAL');
                               }
                               break;
                           case 'socket':
                           case 'light':
                               // Änderung für Monobutton	
                               let pageItem = findPageItem(id);	
       						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
       							triggerButton(id + ".SET");
       						}	
       						else {	
       							toggleState(id + ".SET") ? true : toggleState(id + ".ON_SET");
       						}	
       						break;	
                           case 'dimmer':
                               toggleState(id + '.ON_SET') ? true : toggleState(id + '.ON_ACTUAL');
                               break;
                           case 'ct':
                               toggleState(id + '.ON');
                               break;
                           case 'rgb':
                           case 'rgbSingle':
                           case 'hue': // Armilar
                               toggleState(id + '.ON_ACTUAL');
                           case 'media':
                               if (tempid[1] == 'repeat') {
                                   let pageItemRepeat = findPageItem(id);
                                   let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance;
                                   let adapterRepeat = adapterInstanceRepeat.split('.');
                                   let deviceAdapterRP = adapterRepeat[0];
    
                                   switch (deviceAdapterRP) {
                                       case 'spotify-premium':
                                           let stateSpotifyRepeat = getState(id + '.REPEAT').val
                                           if (stateSpotifyRepeat == 'off') {
                                               setIfExists(id + '.REPEAT', 'context');
                                           } else if (stateSpotifyRepeat == 'context') {
                                               setIfExists(id + '.REPEAT', 'track');
                                           } else if (stateSpotifyRepeat == 'track') {
                                               setIfExists(id + '.REPEAT', 'off');
                                           }
                                           break;
                                       case 'alexa2':
                                           try {
                                               if (getState(id + '.REPEAT').val == 'false') {
                                                   setIfExists(id + '.REPEAT', true);
                                               } else {
                                                   setIfExists(id + '.REPEAT', false);
                                               }
                                           } catch (err) {
                                               console.log('Repeat kann nicht verändert werden');
                                           }
                                           break;
                                       case 'volumio':
                                           request({ url:`${getState(adapterInstanceRepeat+'info.host').val}/api/commands/?cmd=repeat`, headers: {'User-Agent': 'ioBroker'} }, 
                                               async (error, response, result)=>{}); /* nothing todo @ error */
                                           break;
                                   }
                               }
                       }
                   }
                   break;
               case 'up':
                   setIfExists(id + '.OPEN', true);
                   break;
               case 'stop':
                   setIfExists(id + '.STOP', true);
                   break;
               case 'down':
                   setIfExists(id + '.CLOSE', true);
                   break;
               case 'positionSlider':
                   (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                   timeoutSlider = setTimeout(async function () {
                       setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                   }, 250);
                   break;
               case 'tiltOpen':
                   setIfExists(id + '.TILT_OPEN', true);
                   break;
               case 'tiltStop':
                   setIfExists(id + '.TILT_STOP', true);
                   break;
               case 'tiltClose':
                   setIfExists(id + '.TILT_CLOSE', true);
                   break;
               case 'tiltSlider':
                   (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                   timeoutSlider = setTimeout(async function () {
                       setIfExists(id + '.TILT_SET', parseInt(words[4])) ? true : setIfExists(id + '.TILT_ACTUAL', parseInt(words[4]));
                   }, 250);
                   break;
               case 'brightnessSlider':
                   (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                   timeoutSlider = setTimeout(async function () {
                       if (existsObject(id)) {
                           let o = getObject(id);
                           let pageItem = findPageItem(id);
    
                           switch (o.common.role) {
                               case 'dimmer':
                                   if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                       let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                       setIfExists(id + '.SET', sliderPos) ? true : setIfExists(id + '.ACTUAL', sliderPos);
                                   } else {
                                       setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                   }
                                   break;
                               case 'rgb':
                               case 'ct':
                               case 'rgbSingle':
                               case 'hue':
                                   if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                       let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                       setIfExists(id + '.DIMMER', sliderPos);
                                   } else {
                                       setIfExists(id + '.DIMMER', parseInt(words[4]));
                                   }
                                   break;
                           }
                       }
                   }, 250);
                   break;
               case 'colorTempSlider': // Armilar - Slider tickt verkehrt - Hell = 0 / Dunkel = 100 -> Korrektur
                   (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                   timeoutSlider = setTimeout(async function () {
                       let pageItem = findPageItem(id);
                       if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) {
                           let colorTempK = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.minValueColorTemp, pageItem.maxValueColorTemp));
                           setIfExists(id + '.TEMPERATURE', (colorTempK));
                       } else {
                           setIfExists(id + '.TEMPERATURE', 100 - words[4]);
                       }
                   }, 250);
                   break;
               case 'colorWheel':
                   let colorCoordinates = words[4].split('|');
                   let rgb = pos_to_color(colorCoordinates[0], colorCoordinates[1]);
                   if (Debug) {
                       console.log(rgb);
                   }
                   if (Debug) {
                       console.log(getHue(rgb.red, rgb.green, rgb.blue));
                   }
                   let o = getObject(id);
                   switch (o.common.role) {
                       case 'hue':
                           setIfExists(id + '.HUE', getHue(rgb.red, rgb.green, rgb.blue));
                           break;
                       case 'rgb':
                           setIfExists(id + '.RED', rgb.red);
                           setIfExists(id + '.GREEN', rgb.green);
                           setIfExists(id + '.BLUE', rgb.blue);
                           break;
                       case 'rgbSingle':
                           let pageItem = findPageItem(id);
                           if (pageItem.colormode == "xy") {
                               //Für z.B. Deconz XY
                               setIfExists(id + ".RGB", rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                               if (Debug) {
                                   console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                               }
                           }
                           else {
                               //Für RGB
                               setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue));
                           }
                           break;
                   }
                   break;
               case 'tempUpd':
                   setIfExists(id + '.SET', parseInt(words[4]) / 10);
                   break;
               case 'media-back':
                   setIfExists(id + '.PREV', true);
                   break;
               case 'media-pause':
                   let pageItemTemp = findPageItem(id);
                   let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                   if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                       let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val;
                       if (stateVal == 0) {
                           setState(pageItemTemp.adapterPlayerInstance + 'state', 1);
                       } else if (stateVal == 1) {
                           setState(pageItemTemp.adapterPlayerInstance + 'state', 0);
                       } else if (stateVal == null) {
                           setState(pageItemTemp.adapterPlayerInstance + 'state', 1);
                       }
                   } else {
                       if (getState(id + '.STATE').val === true) {
                           setIfExists(id + '.PAUSE', true);
                       } else {
                           setIfExists(id + '.PLAY', true);
                       }
                   }
                   break;
               case 'media-next':
                   setIfExists(id + '.NEXT', true);
                   break;
               case 'media-shuffle':
                   if ((findPageItem(id).adapterPlayerInstance).startsWith("volumio")) { findPageItem(id).playList = []; break; } //Volumio: empty playlist $uha-20230103
                   if (getState(id + '.SHUFFLE').val == 'off') {
                       setIfExists(id + '.SHUFFLE', 'on');
                   } else {
                       setIfExists(id + '.SHUFFLE', 'off');
                   }
                   break;
               case 'volumeSlider':
                   setIfExists(id + '.VOLUME', parseInt(words[4]))
                   break;
               case 'mode-speakerlist':
                   let pageItem = findPageItem(id);
                   let adapterInstance = pageItem.adapterPlayerInstance;
                   let adapter = adapterInstance.split('.');
                   let deviceAdapter = adapter[0];
    
                   switch (deviceAdapter) {
                       case 'spotify-premium':
                           let strDevicePI = pageItem.speakerList[words[4]];
                           let strDeviceID = spotifyGetDeviceID(strDevicePI);
                           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) {
                               let i = i_list[i_index];
                               if ((getState(i).val) === pageItem.speakerList[words[4]]) {
                                   console.log(getState(i).val + ' - ' + pageItem.speakerList[words[4]]);
                                   let deviceId = i;
                                   deviceId = deviceId.split('.');
                                   setIfExists(adapterInstance + 'Echo-Devices.' + pageItem.mediaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + pageItem.speakerList[words[4]]);
                                   pageItem.mediaDevice = deviceId[3];
                               } 
                           }
                           break;
                       case 'sonos':
                           break;
                       case 'chromecast':
                           break;
                   }
                   break;
               case 'mode-playlist':
                   let pageItemPL = findPageItem(id);
                   let adapterInstancePL = pageItemPL.adapterPlayerInstance;
                   let adapterPL = adapterInstancePL.split('.');
                   let deviceAdapterPL = adapterPL[0];
    
                   switch (deviceAdapterPL) {
                       case 'spotify-premium':
                           let strDevicePI = pageItemPL.playList[words[4]];
                           console.log(strDevicePI);
                           let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
                           let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
                           let playlistIndex = playlistListString.indexOf(strDevicePI);
                           setState(adapterInstancePL + 'playlists.playlistList', playlistListIds[playlistIndex]);
                           setTimeout(async function () {
                               globalTracklist = (function () { try {return JSON.parse(getState(adapterInstancePL + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                           }, 2000);
                           break;
                       case 'alexa2':
                           let tempListItem = pageItemPL.playList[words[4]].split('.');
                           setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
                           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;
               case 'mode-tracklist':
                   let pageItemTL = findPageItem(id);
                   let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
                   let adapterTL = adapterInstanceTL.split('.')
                   let deviceAdapterTL = adapterTL[0];
    
                   switch (deviceAdapterTL) {
                       case 'spotify-premium':
                           let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                           setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
                           break;
                       case 'alexa2':
                           if (Debug) console.log('Aktuell hat alexa2 keine Tracklist');
                           break;
                       case 'volumio':
                           request({ url:`${getState(adapterInstanceTL+'info.host').val}/api/commands/?cmd=play&N=${words[4]}`, headers: {'User-Agent': 'ioBroker'} }, 
                               async (error, response, result)=>{}); /* nothing todo @ error */
                           break;
                   }
                   break;
               case 'mode-repeat':
                   let pageItemRP = findPageItem(id);
                   let adapterInstanceRP = pageItemRP.adapterPlayerInstance;
                   let adapterRP = adapterInstanceRP.split('.');
                   let deviceAdapterRP = adapterRP[0];
    
                   switch (deviceAdapterRP) {
                       case 'spotify-premium':
                           setIfExists(id + '.REPEAT', pageItemRP.repeatList[words[4]]);
                           break;
                       case 'alexa2':
                           break;
                   }
                   break;
               case 'mode-equalizer':
                   let pageItemEQ = findPageItem(id);
                   if (Debug) console.log(id);
                   let lastIndex = (id.split('.')).pop();
                   setState(NSPanel_Path + 'Media.Player.' + lastIndex + '.EQ.activeMode', pageItemEQ.equalizerList[words[4]]);
                   setTimeout(async function () {
                       GenerateDetailPage('popupInSel','equalizer', pageItemEQ);
                   }, 2000);
                   break;
               case 'mode-insel':
                   setIfExists(id + '.VALUE', parseInt(words[4]));
                   break;
               case 'media-OnOff':
                   let pageItemTem = findPageItem(id);
                   let adaInstanceSpli = pageItemTem.adapterPlayerInstance.split('.');
                   if (adaInstanceSpli[0] == 'squeezeboxrpc') {
                       let stateVal = getState(pageItemTem.adapterPlayerInstance + 'Power').val;
                       if (stateVal === 0) {
                           setState(pageItemTem.adapterPlayerInstance + 'Power', 1);
                           setIfExists(id + '.STOP', false);
                           setIfExists(id + '.STATE', 1);
                       } else {
                           setState(pageItemTem.adapterPlayerInstance + 'Power', 0);
                           setIfExists(id + '.STOP', true);
                           setIfExists(id + '.STATE', 0);
                       }
                   } else {
                       setIfExists(id + '.STOP', true);
                   }
                   break;
               case 'timer-start':
                   if (words[4] != undefined) {
                       let timer_panel = words[4].split(':');
                       setIfExists(id + '.ACTUAL', (parseInt(timer_panel[1]) * 60) + parseInt(timer_panel[2]));
                   }
                   setIfExists(id + '.STATE', 'active');
                   break;
               case 'timer-pause':
                   setIfExists(id + '.STATE', 'paused');
                   break;
               case 'timer-cancle':
                   setIfExists(id + '.STATE', 'idle');
                   setIfExists(id + '.ACTUAL', 0);
                   break;
               case 'timer-finish':
                   setIfExists(id + '.STATE', 'idle');
                   setIfExists(id + '.ACTUAL', 0);
                   break;
               case 'hvac_action':
                   if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
    
                       switch (words[4]) {
                           case 'BOOT':
                               setIfExists(words[2] + '.' + 'BOOST', !getState(words[2] + '.' + 'BOOST').val);
                               break;
                           case 'PART':
                               setIfExists(words[2] + '.' + 'PARTY', !getState(words[2] + '.' + 'PARTY').val);
                               break;
                           case 'AUTT':
                               setIfExists(words[2] + '.' + 'AUTOMATIC', !getState(words[2] + '.' + 'AUTOMATIC').val);
                               break;
                           case 'MANT':
                               setIfExists(words[2] + '.' + 'MANUAL', !getState(words[2] + '.' + 'MANUAL').val);
                               break;
                           case 'VACT':
                               setIfExists(words[2] + '.' + 'VACATION', !getState(words[2] + '.' + 'VACATION').val);
                               break;
                       }
                       let modes = ['BOOT', 'PART', 'AUTT', 'MANT', 'VACT'];
                       let modesDP = ['BOOST', 'PARTY', 'AUTOMATIC', 'MANUAL', 'VACATION'];
                       for (let mode=0; mode < 5; mode++) {
                           if (words[4] != modes[mode]) {
                               setIfExists(words[2] + '.' + modesDP[mode], false);
                           }
                       }
                       GeneratePage(config.pages[pageId]);
                   } else {
                       let HVACMode = 0;
                       switch (words[4]) {
                           case 'POWER':
                               HVACMode = 0;
                               setIfExists(words[2] + '.' + words[4], !getState(words[2] + '.' + words[4]).val);
                               if (getState(words[2] + '.' + words[4]).val) {
                                   HVACMode = 1;
                               }
                               break;
                           case 'AUTO':
                               HVACMode = 1;
                               break;
                           case 'COOL':
                               HVACMode = 2;
                               break;
                           case 'HEAT':
                               HVACMode = 3;
                               break;
                           case 'ECO':
                               HVACMode = 4;
                               break;
                           case 'FAN':
                               HVACMode = 5;
                               break;
                           case 'DRY':
                               HVACMode = 6;
                               break;
                           case 'SWING':
                               HVACMode = getState(words[2] + '.MODE').val;
                               if (getState(words[2] + '.SWING').val == 0) {
                                   setIfExists(words[2] + '.SWING', 1);
                               } else {
                                   setIfExists(words[2] + '.' + 'SWING', 0);
                               }
                               break;
                       }
                       setIfExists(words[2] + '.' + 'MODE', HVACMode);
                       GeneratePage(config.pages[pageId]);
                   }
                   break;
               case 'mode-modus1':
                   let pageItemT1 = findPageItem(id);
                   setIfExists(id + '.' + pageItemT1.setThermoAlias[0], pageItemT1.popupThermoMode1[parseInt(words[4])]);
                   break;
               case 'mode-modus2':
                   let pageItemT2 = findPageItem(id);
                   setIfExists(id + '.' + pageItemT2.setThermoAlias[1], pageItemT2.popupThermoMode2[parseInt(words[4])]);
                   break;
               case 'mode-modus3':
                   let pageItemT3 = findPageItem(id);
                   setIfExists(id + '.' + pageItemT3.setThermoAlias[2], pageItemT3.popupThermoMode3[parseInt(words[4])]);
                   break;
               case 'number-set':
                   let nobj = getObject(id);
                   switch (nobj.common.role) {
                       case 'level.mode.fan':
                           (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                           timeoutSlider = setTimeout(async function () {
                               setIfExists(id + '.SPEED', parseInt(words[4]));
                           }, 250);
                           break;
                       default:    
                           (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                           timeoutSlider = setTimeout(async function () {
                               setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                           }, 250);
                           break;
                   }
                   break;
               case 'mode-preset_modes':
                   setIfExists(id + '.MODE', parseInt(words[4]));
                   break; 
               case 'A1': // Alarm-Page Alarm 1 aktivieren
                   if (words[4] != '') {
                       setIfExists(id + '.TYPE', 'A1');
                       setIfExists(id + '.PIN', words[4]);
                       setIfExists(id + '.ACTUAL', 'arming');
                       setIfExists(id + '.PANEL', NSPanel_Path);
                   }
                   setTimeout(function(){
                       GeneratePage(activePage);
                   },250);
                   break;
               case 'A2': // Alarm-Page Alarm 2 aktivieren
                   if (words[4] != '') {
                       setIfExists(id + '.TYPE', 'A2');
                       setIfExists(id + '.PIN', words[4]);
                       setIfExists(id + '.ACTUAL', 'arming');
                       setIfExists(id + '.PANEL', NSPanel_Path);
                   }
                   setTimeout(function(){
                       GeneratePage(activePage);
                   },250);
                   break;
               case 'A3': // Alarm-Page Alarm 3 aktivieren
                   if (words[4] != '') {
                       setIfExists(id + '.TYPE', 'A3');
                       setIfExists(id + '.PIN', words[4]);
                       setIfExists(id + '.ACTUAL', 'arming');
                       setIfExists(id + '.PANEL', NSPanel_Path);
                   }
                   setTimeout(function(){
                       GeneratePage(activePage);
                   },250);
                   break;
               case 'A4': // Alarm-Page Alarm 4 aktivieren
                   if (words[4] != '') {
                       setIfExists(id + '.TYPE', 'A4');
                       setIfExists(id + '.PIN', words[4]);
                       setIfExists(id + '.ACTUAL', 'arming');
                       setIfExists(id + '.PANEL', NSPanel_Path);
                   }
                   setTimeout(function(){
                       GeneratePage(activePage);
                   },250);
                   break;
               case 'D1': // Alarm-Page Alarm Deaktivieren
                   if (Debug) {
                       console.log('D1: ' + getState(id + '.PIN').val);
                   }
                   if (Debug) {
                       console.log(words[4]);
                   }
                   if (words[4] != '') {
                       if (getState(id + '.PIN').val == words[4]) {
                           setIfExists(id + '.PIN', '0000');
                           setIfExists(id + '.TYPE', 'D1');
                           setIfExists(id + '.ACTUAL', 'pending');
                           setIfExists(id + '.PIN_Failed', 0);
                       } else {
                           setIfExists(id + '.PIN_Failed', getState(id + '.PIN_Failed').val + 1);
                           setIfExists(id + '.ACTUAL', 'triggered');
                       }
                       setIfExists(id + '.PANEL', NSPanel_Path);
                       setTimeout(function(){
                           GeneratePage(activePage);
                       },500);
                   }
                   break;
               default:
                   break;
           }
       } catch (err) {
           console.log('function HandleButtonEvent: ' + err.message);
       }
    }
    

    EDIT: Hotfix ist jetzt auch auf Github verfügbar v3.9.0.2

    Gruß Tom
    https://github.com/tt-tom17
    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

    NSPanel Script Wiki
    https://github.com/joBr99/nspanel-lovelace-ui/wiki

    NSPanel Adapter Wiki
    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

    ArmilarA 1 Reply Last reply
    0
    • T TT-Tom

      @wendy2702

      so wir haben eine Lösung gefunden, bitte als Hotfix die Funktion HandleButtonEvent komplett austauschen mit folgendem Code im Spoiler

      function HandleButtonEvent(words: any): void {
         try {
             let tempid = words[2].split('?');
             let id = tempid[0];
             let buttonAction = words[3];
      
             if (Debug) {
                 console.log(words[0] + ' - ' + words[1] + ' - ' + words[2] + ' - ' + words[3] + ' - ' + words[4] + ' - PageId: ' + pageId);
             }
      
             if ((words[2]).substring(0, 8) == 'navigate') {
                 GeneratePage(eval((words[2]).substring(9, (words[2]).length)));
                 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) {
                 console.log(buttonAction);
             }
      
             let pageNum:number = 0;
      
             if (buttonAction.startsWith('swipe')) {
                 buttonAction = 'bExit';
             }
             switch (buttonAction) {
      
                 case 'bUp':
                     if (pageId < 0) { // Prüfen, ob button1page oder button2page
                         pageId = 0;
                         UnsubscribeWatcher();
                         GeneratePage(config.pages[pageId]);
                     } else {
                         pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                         pageId = pageNum;
                         UnsubscribeWatcher();
                         if (activePage != undefined && activePage.parent != undefined) {
                             //update pageID
                             for (let i = 0; i < config.pages.length; i++) {
                                 if (config.pages[i] == activePage.parent) {
                                     pageId = i;
                                     break;
                                 }
                             }
                             GeneratePage(activePage.parent);
                         }
                         else {
                             GeneratePage(config.pages[pageId]);
                         }
                         break;
                     }
                     break;
                 case 'bNext':
                     pageNum = (((pageId + 1) % config.pages.length) + config.pages.length) % config.pages.length;
                     pageId = pageNum;
                     UnsubscribeWatcher();
                     GeneratePage(config.pages[pageId]);
                     break;
                 case 'bSubNext':
                     UnsubscribeWatcher();
                     GeneratePage(eval(activePage.next));
                     break;
                 case 'bPrev':
                     pageNum = (((pageId - 1) % config.pages.length) + config.pages.length) % config.pages.length;
                     pageId = pageNum;
                     UnsubscribeWatcher();
                     if (activePage != undefined && activePage.parent != undefined) {
                         //update pageID
                         for (let i = 0; i < config.pages.length; i++) {
                             if (config.pages[i] == activePage.parent) {
                                 pageId = i;
                                 break;
                             }
                         }
                         GeneratePage(activePage.parent);
                     }
                     else {
                         GeneratePage(config.pages[pageId]);
                     }
                     break;
                 case 'bSubPrev':          
                     UnsubscribeWatcher();
                     GeneratePage(eval(activePage.prev));
                     break;
                 case 'bExit':
                     if (getState(NSPanel_Path + 'Config.Screensaver.screenSaverDoubleClick').val && words[2] == 'screensaver') {
                         if (words[4] >= 2) {
                             setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                             setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                             if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                                 pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val;
                                 activePage = config.pages[pageId];
                                 GeneratePage(activePage);
                             } else {
                                 GeneratePage(activePage);
                             }
                         } else {
                             setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                             setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                             screensaverEnabled = true;
                             break;
                         }
                     } else {
                         if (Debug) {
                             console.log('bExit: ' + words[4] + ' - ' + pageId);
                         }
                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyHeading', '');
                         setIfExists(NSPanel_Path + 'ScreensaverInfo.popupNotifyText', '');
                         if (existsObject(NSPanel_Path + 'ScreensaverInfo.bExitPage') && getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val != null) {
                             pageId = getState(NSPanel_Path + 'ScreensaverInfo.bExitPage').val
                             activePage = config.pages[pageId];
                             GeneratePage(activePage);
                         } else {
                             GeneratePage(activePage);
                         }    
                     }
                     break;
                 case 'bHome':
                     if (Debug) {
                         console.log('bExit: ' + words[4] + ' - ' + pageId);
                     }
                     UnsubscribeWatcher();
                     if (activePage.home != undefined) {
                         GeneratePage(eval(activePage.home));
                     } else {
                         GeneratePage(config.pages[0]);
                     }
                     break;
                 case 'notifyAction':
                     if (words[4] == 'yes') {
                         setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                         setState(popupNotifyAction, <iobJS.State>{ val: true, ack: true });
                     } else if (words[4] == 'no') {
                         setState(popupNotifyInternalName, <iobJS.State>{ val: words[2], ack: true });
                         setState(popupNotifyAction, <iobJS.State>{ val: false, ack: true });
                     }
      
                     setIfExists(config.panelSendTopic, 'exitPopup');
      
                     break;
                 case 'OnOff':
                     if (existsObject(id)) {
                         let action = false;
                         if (words[4] == '1')
                             action = true;
                         let o = getObject(id);
                         switch (o.common.role) {
                             case 'level.mode.fan':
                             case 'socket':
                             case 'light':
                                 let pageItem = findPageItem(id);	
         						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
         							triggerButton(id + ".SET");
         						}	
         						else {	
         							setIfExists(id + '.SET', action);
         						}		
         						break;
                             case 'dimmer':
                                 setIfExists(id + '.ON_SET', action) ? true : setIfExists(id + '.ON_ACTUAL', action);
                                 break;
                             case 'ct':
                                 setIfExists(id + '.ON', action);
                                 break;
                             case 'rgb':
                             case 'rgbSingle':
                             case 'hue':
                                 setIfExists(id + '.ON_ACTUAL', action);
                         }
                     }
                     break;
                 case 'button':
                     if (existsObject(id)) {
                         let action = false;
                         if (words[4] == '1')
                             action = true;
                         let o = getObject(id);
                         switch (o.common.role) {
                             case 'lock':
                             case 'button':
                                 toggleState(id + '.SET') ? true : toggleState(id + '.ON_SET');
                                 break; 
                             case 'buttonSensor':
                                 if (existsObject(id + '.ACTUAL')) {
                                     toggleState(id + '.ACTUAL');
                                 }
                                 break;
                             case 'socket':
                             case 'light':
                                 // Änderung für Monobutton	
                                 let pageItem = findPageItem(id);	
         						if(pageItem.monobutton != undefined && pageItem.monobutton == true){	
         							triggerButton(id + ".SET");
         						}	
         						else {	
         							toggleState(id + ".SET") ? true : toggleState(id + ".ON_SET");
         						}	
         						break;	
                             case 'dimmer':
                                 toggleState(id + '.ON_SET') ? true : toggleState(id + '.ON_ACTUAL');
                                 break;
                             case 'ct':
                                 toggleState(id + '.ON');
                                 break;
                             case 'rgb':
                             case 'rgbSingle':
                             case 'hue': // Armilar
                                 toggleState(id + '.ON_ACTUAL');
                             case 'media':
                                 if (tempid[1] == 'repeat') {
                                     let pageItemRepeat = findPageItem(id);
                                     let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance;
                                     let adapterRepeat = adapterInstanceRepeat.split('.');
                                     let deviceAdapterRP = adapterRepeat[0];
      
                                     switch (deviceAdapterRP) {
                                         case 'spotify-premium':
                                             let stateSpotifyRepeat = getState(id + '.REPEAT').val
                                             if (stateSpotifyRepeat == 'off') {
                                                 setIfExists(id + '.REPEAT', 'context');
                                             } else if (stateSpotifyRepeat == 'context') {
                                                 setIfExists(id + '.REPEAT', 'track');
                                             } else if (stateSpotifyRepeat == 'track') {
                                                 setIfExists(id + '.REPEAT', 'off');
                                             }
                                             break;
                                         case 'alexa2':
                                             try {
                                                 if (getState(id + '.REPEAT').val == 'false') {
                                                     setIfExists(id + '.REPEAT', true);
                                                 } else {
                                                     setIfExists(id + '.REPEAT', false);
                                                 }
                                             } catch (err) {
                                                 console.log('Repeat kann nicht verändert werden');
                                             }
                                             break;
                                         case 'volumio':
                                             request({ url:`${getState(adapterInstanceRepeat+'info.host').val}/api/commands/?cmd=repeat`, headers: {'User-Agent': 'ioBroker'} }, 
                                                 async (error, response, result)=>{}); /* nothing todo @ error */
                                             break;
                                     }
                                 }
                         }
                     }
                     break;
                 case 'up':
                     setIfExists(id + '.OPEN', true);
                     break;
                 case 'stop':
                     setIfExists(id + '.STOP', true);
                     break;
                 case 'down':
                     setIfExists(id + '.CLOSE', true);
                     break;
                 case 'positionSlider':
                     (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                     timeoutSlider = setTimeout(async function () {
                         setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                     }, 250);
                     break;
                 case 'tiltOpen':
                     setIfExists(id + '.TILT_OPEN', true);
                     break;
                 case 'tiltStop':
                     setIfExists(id + '.TILT_STOP', true);
                     break;
                 case 'tiltClose':
                     setIfExists(id + '.TILT_CLOSE', true);
                     break;
                 case 'tiltSlider':
                     (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                     timeoutSlider = setTimeout(async function () {
                         setIfExists(id + '.TILT_SET', parseInt(words[4])) ? true : setIfExists(id + '.TILT_ACTUAL', parseInt(words[4]));
                     }, 250);
                     break;
                 case 'brightnessSlider':
                     (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                     timeoutSlider = setTimeout(async function () {
                         if (existsObject(id)) {
                             let o = getObject(id);
                             let pageItem = findPageItem(id);
      
                             switch (o.common.role) {
                                 case 'dimmer':
                                     if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                         let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                         setIfExists(id + '.SET', sliderPos) ? true : setIfExists(id + '.ACTUAL', sliderPos);
                                     } else {
                                         setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                                     }
                                     break;
                                 case 'rgb':
                                 case 'ct':
                                 case 'rgbSingle':
                                 case 'hue':
                                     if (pageItem.minValueBrightness != undefined && pageItem.maxValueBrightness != undefined) {
                                         let sliderPos = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.maxValueBrightness, pageItem.minValueBrightness));
                                         setIfExists(id + '.DIMMER', sliderPos);
                                     } else {
                                         setIfExists(id + '.DIMMER', parseInt(words[4]));
                                     }
                                     break;
                             }
                         }
                     }, 250);
                     break;
                 case 'colorTempSlider': // Armilar - Slider tickt verkehrt - Hell = 0 / Dunkel = 100 -> Korrektur
                     (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                     timeoutSlider = setTimeout(async function () {
                         let pageItem = findPageItem(id);
                         if (pageItem.minValueColorTemp !== undefined && pageItem.maxValueColorTemp !== undefined) {
                             let colorTempK = Math.trunc(scale(parseInt(words[4]), 0, 100, pageItem.minValueColorTemp, pageItem.maxValueColorTemp));
                             setIfExists(id + '.TEMPERATURE', (colorTempK));
                         } else {
                             setIfExists(id + '.TEMPERATURE', 100 - words[4]);
                         }
                     }, 250);
                     break;
                 case 'colorWheel':
                     let colorCoordinates = words[4].split('|');
                     let rgb = pos_to_color(colorCoordinates[0], colorCoordinates[1]);
                     if (Debug) {
                         console.log(rgb);
                     }
                     if (Debug) {
                         console.log(getHue(rgb.red, rgb.green, rgb.blue));
                     }
                     let o = getObject(id);
                     switch (o.common.role) {
                         case 'hue':
                             setIfExists(id + '.HUE', getHue(rgb.red, rgb.green, rgb.blue));
                             break;
                         case 'rgb':
                             setIfExists(id + '.RED', rgb.red);
                             setIfExists(id + '.GREEN', rgb.green);
                             setIfExists(id + '.BLUE', rgb.blue);
                             break;
                         case 'rgbSingle':
                             let pageItem = findPageItem(id);
                             if (pageItem.colormode == "xy") {
                                 //Für z.B. Deconz XY
                                 setIfExists(id + ".RGB", rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                 if (Debug) {
                                     console.log(rgb_to_cie(rgb.red, rgb.green, rgb.blue));
                                 }
                             }
                             else {
                                 //Für RGB
                                 setIfExists(id + ".RGB", ConvertRGBtoHex(rgb.red, rgb.green, rgb.blue));
                             }
                             break;
                     }
                     break;
                 case 'tempUpd':
                     setIfExists(id + '.SET', parseInt(words[4]) / 10);
                     break;
                 case 'media-back':
                     setIfExists(id + '.PREV', true);
                     break;
                 case 'media-pause':
                     let pageItemTemp = findPageItem(id);
                     let adaInstanceSplit = pageItemTemp.adapterPlayerInstance.split('.');
                     if (adaInstanceSplit[0] == 'squeezeboxrpc') {
                         let stateVal = getState(pageItemTemp.adapterPlayerInstance + 'state').val;
                         if (stateVal == 0) {
                             setState(pageItemTemp.adapterPlayerInstance + 'state', 1);
                         } else if (stateVal == 1) {
                             setState(pageItemTemp.adapterPlayerInstance + 'state', 0);
                         } else if (stateVal == null) {
                             setState(pageItemTemp.adapterPlayerInstance + 'state', 1);
                         }
                     } else {
                         if (getState(id + '.STATE').val === true) {
                             setIfExists(id + '.PAUSE', true);
                         } else {
                             setIfExists(id + '.PLAY', true);
                         }
                     }
                     break;
                 case 'media-next':
                     setIfExists(id + '.NEXT', true);
                     break;
                 case 'media-shuffle':
                     if ((findPageItem(id).adapterPlayerInstance).startsWith("volumio")) { findPageItem(id).playList = []; break; } //Volumio: empty playlist $uha-20230103
                     if (getState(id + '.SHUFFLE').val == 'off') {
                         setIfExists(id + '.SHUFFLE', 'on');
                     } else {
                         setIfExists(id + '.SHUFFLE', 'off');
                     }
                     break;
                 case 'volumeSlider':
                     setIfExists(id + '.VOLUME', parseInt(words[4]))
                     break;
                 case 'mode-speakerlist':
                     let pageItem = findPageItem(id);
                     let adapterInstance = pageItem.adapterPlayerInstance;
                     let adapter = adapterInstance.split('.');
                     let deviceAdapter = adapter[0];
      
                     switch (deviceAdapter) {
                         case 'spotify-premium':
                             let strDevicePI = pageItem.speakerList[words[4]];
                             let strDeviceID = spotifyGetDeviceID(strDevicePI);
                             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) {
                                 let i = i_list[i_index];
                                 if ((getState(i).val) === pageItem.speakerList[words[4]]) {
                                     console.log(getState(i).val + ' - ' + pageItem.speakerList[words[4]]);
                                     let deviceId = i;
                                     deviceId = deviceId.split('.');
                                     setIfExists(adapterInstance + 'Echo-Devices.' + pageItem.mediaDevice + '.Commands.textCommand', 'Schiebe meine Musik auf ' + pageItem.speakerList[words[4]]);
                                     pageItem.mediaDevice = deviceId[3];
                                 } 
                             }
                             break;
                         case 'sonos':
                             break;
                         case 'chromecast':
                             break;
                     }
                     break;
                 case 'mode-playlist':
                     let pageItemPL = findPageItem(id);
                     let adapterInstancePL = pageItemPL.adapterPlayerInstance;
                     let adapterPL = adapterInstancePL.split('.');
                     let deviceAdapterPL = adapterPL[0];
      
                     switch (deviceAdapterPL) {
                         case 'spotify-premium':
                             let strDevicePI = pageItemPL.playList[words[4]];
                             console.log(strDevicePI);
                             let playlistListString = (getState(adapterInstancePL + 'playlists.playlistListString').val).split(';');
                             let playlistListIds = (getState(adapterInstancePL + 'playlists.playlistListIds').val).split(';');
                             let playlistIndex = playlistListString.indexOf(strDevicePI);
                             setState(adapterInstancePL + 'playlists.playlistList', playlistListIds[playlistIndex]);
                             setTimeout(async function () {
                                 globalTracklist = (function () { try {return JSON.parse(getState(adapterInstancePL + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                             }, 2000);
                             break;
                         case 'alexa2':
                             let tempListItem = pageItemPL.playList[words[4]].split('.');
                             setState(adapterInstancePL + 'Echo-Devices.' + pageItemPL.mediaDevice + '.Music-Provider.' + tempListItem[0], tempListItem[1]);
                             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;
                 case 'mode-tracklist':
                     let pageItemTL = findPageItem(id);
                     let adapterInstanceTL = pageItemTL.adapterPlayerInstance;
                     let adapterTL = adapterInstanceTL.split('.')
                     let deviceAdapterTL = adapterTL[0];
      
                     switch (deviceAdapterTL) {
                         case 'spotify-premium':
                             let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
                             setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
                             break;
                         case 'alexa2':
                             if (Debug) console.log('Aktuell hat alexa2 keine Tracklist');
                             break;
                         case 'volumio':
                             request({ url:`${getState(adapterInstanceTL+'info.host').val}/api/commands/?cmd=play&N=${words[4]}`, headers: {'User-Agent': 'ioBroker'} }, 
                                 async (error, response, result)=>{}); /* nothing todo @ error */
                             break;
                     }
                     break;
                 case 'mode-repeat':
                     let pageItemRP = findPageItem(id);
                     let adapterInstanceRP = pageItemRP.adapterPlayerInstance;
                     let adapterRP = adapterInstanceRP.split('.');
                     let deviceAdapterRP = adapterRP[0];
      
                     switch (deviceAdapterRP) {
                         case 'spotify-premium':
                             setIfExists(id + '.REPEAT', pageItemRP.repeatList[words[4]]);
                             break;
                         case 'alexa2':
                             break;
                     }
                     break;
                 case 'mode-equalizer':
                     let pageItemEQ = findPageItem(id);
                     if (Debug) console.log(id);
                     let lastIndex = (id.split('.')).pop();
                     setState(NSPanel_Path + 'Media.Player.' + lastIndex + '.EQ.activeMode', pageItemEQ.equalizerList[words[4]]);
                     setTimeout(async function () {
                         GenerateDetailPage('popupInSel','equalizer', pageItemEQ);
                     }, 2000);
                     break;
                 case 'mode-insel':
                     setIfExists(id + '.VALUE', parseInt(words[4]));
                     break;
                 case 'media-OnOff':
                     let pageItemTem = findPageItem(id);
                     let adaInstanceSpli = pageItemTem.adapterPlayerInstance.split('.');
                     if (adaInstanceSpli[0] == 'squeezeboxrpc') {
                         let stateVal = getState(pageItemTem.adapterPlayerInstance + 'Power').val;
                         if (stateVal === 0) {
                             setState(pageItemTem.adapterPlayerInstance + 'Power', 1);
                             setIfExists(id + '.STOP', false);
                             setIfExists(id + '.STATE', 1);
                         } else {
                             setState(pageItemTem.adapterPlayerInstance + 'Power', 0);
                             setIfExists(id + '.STOP', true);
                             setIfExists(id + '.STATE', 0);
                         }
                     } else {
                         setIfExists(id + '.STOP', true);
                     }
                     break;
                 case 'timer-start':
                     if (words[4] != undefined) {
                         let timer_panel = words[4].split(':');
                         setIfExists(id + '.ACTUAL', (parseInt(timer_panel[1]) * 60) + parseInt(timer_panel[2]));
                     }
                     setIfExists(id + '.STATE', 'active');
                     break;
                 case 'timer-pause':
                     setIfExists(id + '.STATE', 'paused');
                     break;
                 case 'timer-cancle':
                     setIfExists(id + '.STATE', 'idle');
                     setIfExists(id + '.ACTUAL', 0);
                     break;
                 case 'timer-finish':
                     setIfExists(id + '.STATE', 'idle');
                     setIfExists(id + '.ACTUAL', 0);
                     break;
                 case 'hvac_action':
                     if (words[4] == 'BOOT' || words[4] == 'PART' || words[4] == 'AUTT' || words[4] == 'MANT' || words[4] == 'VACT') {
      
                         switch (words[4]) {
                             case 'BOOT':
                                 setIfExists(words[2] + '.' + 'BOOST', !getState(words[2] + '.' + 'BOOST').val);
                                 break;
                             case 'PART':
                                 setIfExists(words[2] + '.' + 'PARTY', !getState(words[2] + '.' + 'PARTY').val);
                                 break;
                             case 'AUTT':
                                 setIfExists(words[2] + '.' + 'AUTOMATIC', !getState(words[2] + '.' + 'AUTOMATIC').val);
                                 break;
                             case 'MANT':
                                 setIfExists(words[2] + '.' + 'MANUAL', !getState(words[2] + '.' + 'MANUAL').val);
                                 break;
                             case 'VACT':
                                 setIfExists(words[2] + '.' + 'VACATION', !getState(words[2] + '.' + 'VACATION').val);
                                 break;
                         }
                         let modes = ['BOOT', 'PART', 'AUTT', 'MANT', 'VACT'];
                         let modesDP = ['BOOST', 'PARTY', 'AUTOMATIC', 'MANUAL', 'VACATION'];
                         for (let mode=0; mode < 5; mode++) {
                             if (words[4] != modes[mode]) {
                                 setIfExists(words[2] + '.' + modesDP[mode], false);
                             }
                         }
                         GeneratePage(config.pages[pageId]);
                     } else {
                         let HVACMode = 0;
                         switch (words[4]) {
                             case 'POWER':
                                 HVACMode = 0;
                                 setIfExists(words[2] + '.' + words[4], !getState(words[2] + '.' + words[4]).val);
                                 if (getState(words[2] + '.' + words[4]).val) {
                                     HVACMode = 1;
                                 }
                                 break;
                             case 'AUTO':
                                 HVACMode = 1;
                                 break;
                             case 'COOL':
                                 HVACMode = 2;
                                 break;
                             case 'HEAT':
                                 HVACMode = 3;
                                 break;
                             case 'ECO':
                                 HVACMode = 4;
                                 break;
                             case 'FAN':
                                 HVACMode = 5;
                                 break;
                             case 'DRY':
                                 HVACMode = 6;
                                 break;
                             case 'SWING':
                                 HVACMode = getState(words[2] + '.MODE').val;
                                 if (getState(words[2] + '.SWING').val == 0) {
                                     setIfExists(words[2] + '.SWING', 1);
                                 } else {
                                     setIfExists(words[2] + '.' + 'SWING', 0);
                                 }
                                 break;
                         }
                         setIfExists(words[2] + '.' + 'MODE', HVACMode);
                         GeneratePage(config.pages[pageId]);
                     }
                     break;
                 case 'mode-modus1':
                     let pageItemT1 = findPageItem(id);
                     setIfExists(id + '.' + pageItemT1.setThermoAlias[0], pageItemT1.popupThermoMode1[parseInt(words[4])]);
                     break;
                 case 'mode-modus2':
                     let pageItemT2 = findPageItem(id);
                     setIfExists(id + '.' + pageItemT2.setThermoAlias[1], pageItemT2.popupThermoMode2[parseInt(words[4])]);
                     break;
                 case 'mode-modus3':
                     let pageItemT3 = findPageItem(id);
                     setIfExists(id + '.' + pageItemT3.setThermoAlias[2], pageItemT3.popupThermoMode3[parseInt(words[4])]);
                     break;
                 case 'number-set':
                     let nobj = getObject(id);
                     switch (nobj.common.role) {
                         case 'level.mode.fan':
                             (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                             timeoutSlider = setTimeout(async function () {
                                 setIfExists(id + '.SPEED', parseInt(words[4]));
                             }, 250);
                             break;
                         default:    
                             (function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
                             timeoutSlider = setTimeout(async function () {
                                 setIfExists(id + '.SET', parseInt(words[4])) ? true : setIfExists(id + '.ACTUAL', parseInt(words[4]));
                             }, 250);
                             break;
                     }
                     break;
                 case 'mode-preset_modes':
                     setIfExists(id + '.MODE', parseInt(words[4]));
                     break; 
                 case 'A1': // Alarm-Page Alarm 1 aktivieren
                     if (words[4] != '') {
                         setIfExists(id + '.TYPE', 'A1');
                         setIfExists(id + '.PIN', words[4]);
                         setIfExists(id + '.ACTUAL', 'arming');
                         setIfExists(id + '.PANEL', NSPanel_Path);
                     }
                     setTimeout(function(){
                         GeneratePage(activePage);
                     },250);
                     break;
                 case 'A2': // Alarm-Page Alarm 2 aktivieren
                     if (words[4] != '') {
                         setIfExists(id + '.TYPE', 'A2');
                         setIfExists(id + '.PIN', words[4]);
                         setIfExists(id + '.ACTUAL', 'arming');
                         setIfExists(id + '.PANEL', NSPanel_Path);
                     }
                     setTimeout(function(){
                         GeneratePage(activePage);
                     },250);
                     break;
                 case 'A3': // Alarm-Page Alarm 3 aktivieren
                     if (words[4] != '') {
                         setIfExists(id + '.TYPE', 'A3');
                         setIfExists(id + '.PIN', words[4]);
                         setIfExists(id + '.ACTUAL', 'arming');
                         setIfExists(id + '.PANEL', NSPanel_Path);
                     }
                     setTimeout(function(){
                         GeneratePage(activePage);
                     },250);
                     break;
                 case 'A4': // Alarm-Page Alarm 4 aktivieren
                     if (words[4] != '') {
                         setIfExists(id + '.TYPE', 'A4');
                         setIfExists(id + '.PIN', words[4]);
                         setIfExists(id + '.ACTUAL', 'arming');
                         setIfExists(id + '.PANEL', NSPanel_Path);
                     }
                     setTimeout(function(){
                         GeneratePage(activePage);
                     },250);
                     break;
                 case 'D1': // Alarm-Page Alarm Deaktivieren
                     if (Debug) {
                         console.log('D1: ' + getState(id + '.PIN').val);
                     }
                     if (Debug) {
                         console.log(words[4]);
                     }
                     if (words[4] != '') {
                         if (getState(id + '.PIN').val == words[4]) {
                             setIfExists(id + '.PIN', '0000');
                             setIfExists(id + '.TYPE', 'D1');
                             setIfExists(id + '.ACTUAL', 'pending');
                             setIfExists(id + '.PIN_Failed', 0);
                         } else {
                             setIfExists(id + '.PIN_Failed', getState(id + '.PIN_Failed').val + 1);
                             setIfExists(id + '.ACTUAL', 'triggered');
                         }
                         setIfExists(id + '.PANEL', NSPanel_Path);
                         setTimeout(function(){
                             GeneratePage(activePage);
                         },500);
                     }
                     break;
                 default:
                     break;
             }
         } catch (err) {
             console.log('function HandleButtonEvent: ' + err.message);
         }
      }
      

      EDIT: Hotfix ist jetzt auch auf Github verfügbar v3.9.0.2

      ArmilarA Offline
      ArmilarA Offline
      Armilar
      Most Active Forum Testing
      wrote on last edited by Armilar
      #2062

      @tt-tom @wendy2702

      Es gab tatsächlich 2 Lücken, die den Screensaver zum anhalten gebracht haben.

      1. Unbekannte Befehle, die in der HMI ausgelöst wurden, jedoch im Script nicht behandelt wurden
      2. Ein Event hat den Screensaver angehalten, für den Fall, das eine Notify aufgeschaltet wird und die Screensaver-Updates die Notify nicht überschreiben. Das passiert auch immer noch, jedoch wird das bei einem einfachen Druck auf den Screensaver jetzt verhindert.

      Sollte jetzt funktionieren...

      Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
      https://github.com/joBr99/nspanel-lovelace-ui/wiki

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      wendy2702W 1 Reply Last reply
      0
      • ArmilarA Armilar

        @tt-tom @wendy2702

        Es gab tatsächlich 2 Lücken, die den Screensaver zum anhalten gebracht haben.

        1. Unbekannte Befehle, die in der HMI ausgelöst wurden, jedoch im Script nicht behandelt wurden
        2. Ein Event hat den Screensaver angehalten, für den Fall, das eine Notify aufgeschaltet wird und die Screensaver-Updates die Notify nicht überschreiben. Das passiert auch immer noch, jedoch wird das bei einem einfachen Druck auf den Screensaver jetzt verhindert.

        Sollte jetzt funktionieren...

        wendy2702W Online
        wendy2702W Online
        wendy2702
        wrote on last edited by wendy2702
        #2063

        @armilar @TT-Tom

        Danke.

        Werde ich morgen testen

        EDIT: Der Hotfix funktioniert. Danke für die schnelle Lösung

        Bitte keine Fragen per PN, die gehören ins Forum!

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        1 Reply Last reply
        0
        • D Offline
          D Offline
          Dieter Kurz
          wrote on last edited by
          #2064

          Hallo zusammen,
          ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
          Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
          Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
          Welche Vorgehensweise würdet ihr mir empfehlen?
          Freue mich auf Tipps und Anregungen ....

          Dieter

          ArmilarA T 2 Replies Last reply
          0
          • D Dieter Kurz

            Hallo zusammen,
            ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
            Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
            Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
            Welche Vorgehensweise würdet ihr mir empfehlen?
            Freue mich auf Tipps und Anregungen ....

            Dieter

            ArmilarA Offline
            ArmilarA Offline
            Armilar
            Most Active Forum Testing
            wrote on last edited by Armilar
            #2065

            @dieter-kurz

            Im Script gibt es einen Pfad für jedes Panel:

            const NSPanel_Path = '0_userdata.0.NSPanel.2.'; // Anpassen an das jeweilige NSPanel

            Die MQTT-Parameter müssen natürlich auch auf das neue Panel angepasst werden.

            panelRecvTopic: 'mqtt.0.SmartHome.NSPanel_2.tele.RESULT',       // anpassen
            panelSendTopic: 'mqtt.0.SmartHome.NSPanel_2.cmnd.CustomSend',   // anpassen
            

            Das wäre alles...

            Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
            https://github.com/joBr99/nspanel-lovelace-ui/wiki

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            1 Reply Last reply
            0
            • D Dieter Kurz

              Hallo zusammen,
              ich habe ein Panel mit 3.6.0 erfolgreich am laufen, zumindest mit dem was ich brauche 😉
              Nun habe ich ein zweites Panel und möchte dies mit der aktuellen Version installieren.
              Können dann beide parallel betrieben werden, oder bringt das alles durcheinander?
              Welche Vorgehensweise würdet ihr mir empfehlen?
              Freue mich auf Tipps und Anregungen ....

              Dieter

              T Offline
              T Offline
              TT-Tom
              wrote on last edited by
              #2066

              @dieter-kurz

              Es gibt schon Unterschiede bei den Parameter zwischen 3.6.0 und 3.9.0. im Script.

              Gruß Tom
              https://github.com/tt-tom17
              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

              NSPanel Script Wiki
              https://github.com/joBr99/nspanel-lovelace-ui/wiki

              NSPanel Adapter Wiki
              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

              1 Reply Last reply
              0
              • D Offline
                D Offline
                Dieter Kurz
                wrote on last edited by
                #2067

                Danke für die Info, läuft so weit mit einer cardEntities Licht1 und Sonos, hab aber jede Menge Warnhinweise
                Und noch eine Frage, wir haben insgesamt 4 Sonos Play1 am laufen und ich würde wenigstens zwei davon integrieren, geht das?

                ArmilarA 1 Reply Last reply
                0
                • D Dieter Kurz

                  Danke für die Info, läuft so weit mit einer cardEntities Licht1 und Sonos, hab aber jede Menge Warnhinweise
                  Und noch eine Frage, wir haben insgesamt 4 Sonos Play1 am laufen und ich würde wenigstens zwei davon integrieren, geht das?

                  ArmilarA Offline
                  ArmilarA Offline
                  Armilar
                  Most Active Forum Testing
                  wrote on last edited by Armilar
                  #2068

                  @dieter-kurz

                  sofern diese im Sonosadapter eine IP haben, ja

                  Zu den Warnungen im Log kann ich erst etwas sagen, wenn du es sendest 😉

                  Kleiner Hinweis, in den MRIcons (Script-Config) sind auch Relays mit MQTT-Parametern

                  Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                  https://github.com/joBr99/nspanel-lovelace-ui/wiki

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  D 1 Reply Last reply
                  0
                  • GarganoG Offline
                    GarganoG Offline
                    Gargano
                    wrote on last edited by
                    #2069

                    @Armilar
                    Johannes hat freundlicherweise meine Anregung für einen alternativen Screensaver mit mehr Infos umgesetzt.
                    Machst Du da noch die Erweiterungen im NSPanelsTS.ts für IObroker ?

                    VG Werner

                    ArmilarA 1 Reply Last reply
                    0
                    • ArmilarA Armilar

                      @dieter-kurz

                      sofern diese im Sonosadapter eine IP haben, ja

                      Zu den Warnungen im Log kann ich erst etwas sagen, wenn du es sendest 😉

                      Kleiner Hinweis, in den MRIcons (Script-Config) sind auch Relays mit MQTT-Parametern

                      D Offline
                      D Offline
                      Dieter Kurz
                      wrote on last edited by
                      #2070

                      @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                      @dieter-kurz

                      sofern diese im Sonosadapter eine IP haben, ja

                      Zu den Warnungen im Log kann ich erst etwas sagen, wenn du es sendest 😉

                      Kleiner Hinweis, in den MRIcons (Script-Config) sind auch Relays mit MQTT-Parametern

                      Hier mein Log

                      2023-02-04 15:56:00.476 - info: javascript.0 (327597) Stop script script.js.NSPanels.NSPanel_1_3_9_0
                      2023-02-04 15:56:00.579 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: compiling TypeScript source...
                      2023-02-04 15:56:01.888 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: source code did not change, using cached compilation result...
                      2023-02-04 15:56:02.006 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Wetter-Alias für accuweather.0. existiert bereits
                      2023-02-04 15:56:02.097 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                      2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                      2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at get_tasmota_status0 (script.js.NSPanels.NSPanel_1_3_9_0:2899:42)
                      2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2480:1
                      2023-02-04 15:56:02.101 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                      2023-02-04 15:56:02.105 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function check_updates: Cannot read properties of null (reading 'split')
                      2023-02-04 15:56:02.106 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: registered 31 subscriptions, 7 schedules, 0 messages, 0 logs and 0 file subscriptions
                      2023-02-04 15:56:02.137 - error: javascript.0 (327597) Request error: Error: getaddrinfo ENOTFOUND undefined
                      2023-02-04 15:56:02.514 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Desired TFT Firmware: 49 / v3.9.0
                      2023-02-04 15:56:02.515 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Installed TFT Firmware: 49 / v3.9.0
                      2023-02-04 15:56:02.602 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: get_tasmota_status0Unexpected token u in JSON at position 0
                      2023-02-04 15:56:02.632 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                      2023-02-04 15:56:02.633 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                      2023-02-04 15:56:02.634 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2764:99
                      2023-02-04 15:56:02.634 - warn: javascript.0 (327597) at step (script.js.NSPanels.NSPanel_1_3_9_0:33:23)
                      2023-02-04 15:56:02.635 - warn: javascript.0 (327597) at Object.next (script.js.NSPanels.NSPanel_1_3_9_0:14:53)
                      2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at fulfilled (script.js.NSPanels.NSPanel_1_3_9_0:5:58)
                      2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at runMicrotasks ()
                      2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at runNextTicks (node:internal/process/task_queues:61:5)
                      2023-02-04 15:56:02.637 - warn: javascript.0 (327597) at processImmediate (node:internal/timers:437:9)
                      2023-02-04 15:56:02.637 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                      2023-02-04 15:56:02.756 - info: javascript.0 (327597) State value to set for "0_userdata.0.NSPanel.NSPanel_1.NSPanel_ipAddress" has to be type "string" but received type "object"
                      2023-02-04 15:56:03.065 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                      2023-02-04 15:56:03.066 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at get_current_berry_driver_version (script.js.NSPanels.NSPanel_1_3_9_0:2852:42)
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2775:21
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at step (script.js.NSPanels.NSPanel_1_3_9_0:33:23)
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at Object.next (script.js.NSPanels.NSPanel_1_3_9_0:14:53)
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at fulfilled (script.js.NSPanels.NSPanel_1_3_9_0:5:58)
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at runMicrotasks ()
                      2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at processTicksAndRejections (node:internal/process/task_queues:96:5)
                      2023-02-04 15:56:03.068 - warn: javascript.0 (327597) at runNextTicks (node:internal/process/task_queues:65:3)
                      2023-02-04 15:56:03.068 - warn: javascript.0 (327597) at processImmediate (node:internal/timers:437:9)
                      2023-02-04 15:56:03.068 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                      2023-02-04 15:56:03.094 - error: javascript.0 (327597) Request error: Error: getaddrinfo ENOTFOUND undefined
                      2023-02-04 15:56:03.101 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: get_current_berry_driver_version: Unexpected token u in JSON at position 0
                      
                      
                      T 1 Reply Last reply
                      0
                      • D Dieter Kurz

                        @armilar sagte in SONOFF NSPanel mit Lovelace UI:

                        @dieter-kurz

                        sofern diese im Sonosadapter eine IP haben, ja

                        Zu den Warnungen im Log kann ich erst etwas sagen, wenn du es sendest 😉

                        Kleiner Hinweis, in den MRIcons (Script-Config) sind auch Relays mit MQTT-Parametern

                        Hier mein Log

                        2023-02-04 15:56:00.476 - info: javascript.0 (327597) Stop script script.js.NSPanels.NSPanel_1_3_9_0
                        2023-02-04 15:56:00.579 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: compiling TypeScript source...
                        2023-02-04 15:56:01.888 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: source code did not change, using cached compilation result...
                        2023-02-04 15:56:02.006 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Wetter-Alias für accuweather.0. existiert bereits
                        2023-02-04 15:56:02.097 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                        2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                        2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at get_tasmota_status0 (script.js.NSPanels.NSPanel_1_3_9_0:2899:42)
                        2023-02-04 15:56:02.101 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2480:1
                        2023-02-04 15:56:02.101 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                        2023-02-04 15:56:02.105 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function check_updates: Cannot read properties of null (reading 'split')
                        2023-02-04 15:56:02.106 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: registered 31 subscriptions, 7 schedules, 0 messages, 0 logs and 0 file subscriptions
                        2023-02-04 15:56:02.137 - error: javascript.0 (327597) Request error: Error: getaddrinfo ENOTFOUND undefined
                        2023-02-04 15:56:02.514 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Desired TFT Firmware: 49 / v3.9.0
                        2023-02-04 15:56:02.515 - info: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: Installed TFT Firmware: 49 / v3.9.0
                        2023-02-04 15:56:02.602 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: get_tasmota_status0Unexpected token u in JSON at position 0
                        2023-02-04 15:56:02.632 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                        2023-02-04 15:56:02.633 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                        2023-02-04 15:56:02.634 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2764:99
                        2023-02-04 15:56:02.634 - warn: javascript.0 (327597) at step (script.js.NSPanels.NSPanel_1_3_9_0:33:23)
                        2023-02-04 15:56:02.635 - warn: javascript.0 (327597) at Object.next (script.js.NSPanels.NSPanel_1_3_9_0:14:53)
                        2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at fulfilled (script.js.NSPanels.NSPanel_1_3_9_0:5:58)
                        2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at runMicrotasks ()
                        2023-02-04 15:56:02.636 - warn: javascript.0 (327597) at runNextTicks (node:internal/process/task_queues:61:5)
                        2023-02-04 15:56:02.637 - warn: javascript.0 (327597) at processImmediate (node:internal/timers:437:9)
                        2023-02-04 15:56:02.637 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                        2023-02-04 15:56:02.756 - info: javascript.0 (327597) State value to set for "0_userdata.0.NSPanel.NSPanel_1.NSPanel_ipAddress" has to be type "string" but received type "object"
                        2023-02-04 15:56:03.065 - warn: javascript.0 (327597) getState "mqtt.0.SmartHome.tele.NSPanel_1.INFO2" not found (3)
                        2023-02-04 15:56:03.066 - warn: javascript.0 (327597) at get_current_tasmota_ip_address (script.js.NSPanels.NSPanel_1_3_9_0:2792:34)
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at get_current_berry_driver_version (script.js.NSPanels.NSPanel_1_3_9_0:2852:42)
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at script.js.NSPanels.NSPanel_1_3_9_0:2775:21
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at step (script.js.NSPanels.NSPanel_1_3_9_0:33:23)
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at Object.next (script.js.NSPanels.NSPanel_1_3_9_0:14:53)
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at fulfilled (script.js.NSPanels.NSPanel_1_3_9_0:5:58)
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at runMicrotasks ()
                        2023-02-04 15:56:03.067 - warn: javascript.0 (327597) at processTicksAndRejections (node:internal/process/task_queues:96:5)
                        2023-02-04 15:56:03.068 - warn: javascript.0 (327597) at runNextTicks (node:internal/process/task_queues:65:3)
                        2023-02-04 15:56:03.068 - warn: javascript.0 (327597) at processImmediate (node:internal/timers:437:9)
                        2023-02-04 15:56:03.068 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: function get_current_tasmota_ip_address: Cannot read properties of null (reading 'Info2')
                        2023-02-04 15:56:03.094 - error: javascript.0 (327597) Request error: Error: getaddrinfo ENOTFOUND undefined
                        2023-02-04 15:56:03.101 - warn: javascript.0 (327597) script.js.NSPanels.NSPanel_1_3_9_0: get_current_berry_driver_version: Unexpected token u in JSON at position 0
                        
                        
                        T Offline
                        T Offline
                        TT-Tom
                        wrote on last edited by TT-Tom
                        #2071

                        @dieter-kurz

                        Du hast noch Fehler in der Config. Der MQTT Pfad stimmt eventuell nicht. Welche Version vom Script nutz du den jetzt für das Panel. Zeige bitte mal auch den Teil der Config aus dem Script. We.che Tasmota Version läuft auf dem Panel?

                        Gruß Tom
                        https://github.com/tt-tom17
                        Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                        NSPanel Script Wiki
                        https://github.com/joBr99/nspanel-lovelace-ui/wiki

                        NSPanel Adapter Wiki
                        https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                        D 1 Reply Last reply
                        0
                        • T TT-Tom

                          @dieter-kurz

                          Du hast noch Fehler in der Config. Der MQTT Pfad stimmt eventuell nicht. Welche Version vom Script nutz du den jetzt für das Panel. Zeige bitte mal auch den Teil der Config aus dem Script. We.che Tasmota Version läuft auf dem Panel?

                          D Offline
                          D Offline
                          Dieter Kurz
                          wrote on last edited by
                          #2072

                          @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

                          @dieter-kurz

                          Du hast noch Fehler in der Config. Den MQTT Pfad stimmt nicht. Welche Version vom Script nutz du den jetzt für das Panel. Zeige bitte mal auch den Teil der Config aus dem Script

                          Erstmal DANKE für Deine Hilfe!
                          Hier meine Config:

                          export const config: Config = {
                          panelRecvTopic: 'mqtt.0.SmartHome.tele.NSPanel_1.RESULT', // Bitte anpassen
                          panelSendTopic: 'mqtt.0.SmartHome.cmnd.NSPanel_1.CustomSend', // Bitte anpassen

                          // 4 kleine Icons im Screensaver
                          // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                          firstScreensaverEntity:   { ScreensaverEntity: 'accuweather.0.Hourly.h0.PrecipitationProbability',
                                                      ScreensaverEntityFactor: 1,                                 //New
                                                      ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                      ScreensaverEntityIcon: 'weather-pouring', 
                                                      ScreensaverEntityText: 'Regen', 
                                                      ScreensaverEntityUnitText: '%', 
                                                      ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} 
                                                    },
                          secondScreensaverEntity:  { ScreensaverEntity: 'parser.0.windSpeed', 
                                                      ScreensaverEntityFactor: (1000/1000),                       //New
                                                      ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                      ScreensaverEntityIcon: 'weather-windy', 
                                                      ScreensaverEntityText: "Wind", 
                                                      ScreensaverEntityUnitText: 'km/h', 
                                                      ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120} 
                                                    },
                          thirdScreensaverEntity:   { ScreensaverEntity: 'hm-rpc.0.LEQ0227831.1.TEMPERATURE',
                                                      ScreensaverEntityFactor: 1,                                 //New
                                                      ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                      ScreensaverEntityIcon: 'home-thermometer-outline', 
                                                      ScreensaverEntityText: 'Innen', 
                                                      ScreensaverEntityUnitText: '°C', 
                                                      ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 40, 'val_best': 22 } 
                                                    },
                          fourthScreensaverEntity:  { ScreensaverEntity: 'parser.0.outHumidity', 
                                                      ScreensaverEntityFactor: 1,                                 //New
                                                      ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                      ScreensaverEntityIcon: 'water-percent', 
                                                      ScreensaverEntityText: 'Luft', 
                                                      ScreensaverEntityUnitText: '%', 
                                                      ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                    },
                          
                          // Indikator Icons im oberen Teil des Screensavers
                          // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                          mrIcon1ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER1', 
                                                      ScreensaverEntityIconOn: 'lightbulb',                           //Rename
                                                      ScreensaverEntityIconOff: null, 
                                                      ScreensaverEntityValue: null,                                   //New
                                                      ScreensaverEntityValueDecimalPlace : 0,                         //New
                                                      ScreensaverEntityValueUnit: null,                               //New
                                                      ScreensaverEntityOnColor: On, 
                                                      ScreensaverEntityOffColor: HMIOff },
                          mrIcon2ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER2', 
                                                      ScreensaverEntityIconOn: 'heat-wave',
                                                      ScreensaverEntityIconOff: null, 
                                                      ScreensaverEntityValue: NSPanel_Path + 'Sensor.ANALOG.Temperature',
                                                      ScreensaverEntityValueDecimalPlace : 1,
                                                      ScreensaverEntityValueUnit: '°', 
                                                      ScreensaverEntityOnColor: MSRed, 
                                                      ScreensaverEntityOffColor: Yellow },
                          
                          weatherEntity: 'alias.0.Wetter.Pliezhausen',    // Dieser Alias wird automatisch für den gewählten Wetter erstellt und kann entsprechend angepasst werden
                          defaultOffColor: Off,               // Default-Farbe für Off-Zustände
                          defaultOnColor: On,                 // Default-Farbe für On-Zustände
                          defaultColor: Off,
                          defaultBackgroundColor: HMIDark,    // Default-Hintergrundfarbe HMIDark oder Black
                          
                          // Mit 3.9.0 in Datenpunkte verschoben. Auch über Service Pages konfigurierbar
                              //alternativeScreensaverLayout: false,
                              //autoWeatherColorScreensaverLayout: true,
                              //timeoutScreensaver: 10,
                              //screenSaverDoubleClick: true,
                              //temperatureUnit: '°C',
                              //locale: 'de-DE',                    
                          
                          pages: [
                          
                                  Licht1,
                                  Sonos,
                                  NSPanel_Service         //Auto-Alias Service Page
                                  
                          ],
                          subPages: [
                                      
                                      NSPanel_Infos,                          //Auto-Alias Service Page
                                          NSPanel_Wifi_Info_1,                //Auto-Alias Service Page
                                          NSPanel_Wifi_Info_2,                //Auto-Alias Service Page
                                          NSPanel_Sensoren,                   //Auto-Alias Service Page
                                          NSPanel_Hardware,                   //Auto-Alias Service Page
                                      NSPanel_Einstellungen,                  //Auto-Alias Service Page
                                          NSPanel_Screensaver,                //Auto-Alias Service Page
                                              NSPanel_ScreensaverDimmode,     //Auto-Alias Service Page
                                              NSPanel_ScreensaverOther,       //Auto-Alias Service Page
                                              NSPanel_Weather,                //Auto-Alias Service Page
                                              NSPanel_Dateformat,             //Auto-Alias Service Page
                                              NSPanel_Indicators,             //Auto-Alias Service Page
                                              NSPanel_Relays,                 //Auto-Alias Service Page
                                      NSPanel_Firmware,                       //Auto-Alias Service Page
                                          NSPanel_FirmwareTasmota,            //Auto-Alias Service Page
                                          NSPanel_FirmwareBerry,              //Auto-Alias Service Page
                                          NSPanel_FirmwareNextion,            //Auto-Alias Service Page
                          ],
                          button1Page: null,   //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,
                          

                          };

                          :

                          T ArmilarA 2 Replies Last reply
                          0
                          • GarganoG Gargano

                            @Armilar
                            Johannes hat freundlicherweise meine Anregung für einen alternativen Screensaver mit mehr Infos umgesetzt.
                            Machst Du da noch die Erweiterungen im NSPanelsTS.ts für IObroker ?

                            VG Werner

                            ArmilarA Offline
                            ArmilarA Offline
                            Armilar
                            Most Active Forum Testing
                            wrote on last edited by
                            #2073

                            @gargano

                            ist schon fertig... kommt mit der 4.0.0

                            Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                            https://github.com/joBr99/nspanel-lovelace-ui/wiki

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            GarganoG 1 Reply Last reply
                            0
                            • D Dieter Kurz

                              @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

                              @dieter-kurz

                              Du hast noch Fehler in der Config. Den MQTT Pfad stimmt nicht. Welche Version vom Script nutz du den jetzt für das Panel. Zeige bitte mal auch den Teil der Config aus dem Script

                              Erstmal DANKE für Deine Hilfe!
                              Hier meine Config:

                              export const config: Config = {
                              panelRecvTopic: 'mqtt.0.SmartHome.tele.NSPanel_1.RESULT', // Bitte anpassen
                              panelSendTopic: 'mqtt.0.SmartHome.cmnd.NSPanel_1.CustomSend', // Bitte anpassen

                              // 4 kleine Icons im Screensaver
                              // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                              firstScreensaverEntity:   { ScreensaverEntity: 'accuweather.0.Hourly.h0.PrecipitationProbability',
                                                          ScreensaverEntityFactor: 1,                                 //New
                                                          ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                          ScreensaverEntityIcon: 'weather-pouring', 
                                                          ScreensaverEntityText: 'Regen', 
                                                          ScreensaverEntityUnitText: '%', 
                                                          ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} 
                                                        },
                              secondScreensaverEntity:  { ScreensaverEntity: 'parser.0.windSpeed', 
                                                          ScreensaverEntityFactor: (1000/1000),                       //New
                                                          ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                          ScreensaverEntityIcon: 'weather-windy', 
                                                          ScreensaverEntityText: "Wind", 
                                                          ScreensaverEntityUnitText: 'km/h', 
                                                          ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120} 
                                                        },
                              thirdScreensaverEntity:   { ScreensaverEntity: 'hm-rpc.0.LEQ0227831.1.TEMPERATURE',
                                                          ScreensaverEntityFactor: 1,                                 //New
                                                          ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                          ScreensaverEntityIcon: 'home-thermometer-outline', 
                                                          ScreensaverEntityText: 'Innen', 
                                                          ScreensaverEntityUnitText: '°C', 
                                                          ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 40, 'val_best': 22 } 
                                                        },
                              fourthScreensaverEntity:  { ScreensaverEntity: 'parser.0.outHumidity', 
                                                          ScreensaverEntityFactor: 1,                                 //New
                                                          ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                          ScreensaverEntityIcon: 'water-percent', 
                                                          ScreensaverEntityText: 'Luft', 
                                                          ScreensaverEntityUnitText: '%', 
                                                          ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                        },
                              
                              // Indikator Icons im oberen Teil des Screensavers
                              // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                              mrIcon1ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER1', 
                                                          ScreensaverEntityIconOn: 'lightbulb',                           //Rename
                                                          ScreensaverEntityIconOff: null, 
                                                          ScreensaverEntityValue: null,                                   //New
                                                          ScreensaverEntityValueDecimalPlace : 0,                         //New
                                                          ScreensaverEntityValueUnit: null,                               //New
                                                          ScreensaverEntityOnColor: On, 
                                                          ScreensaverEntityOffColor: HMIOff },
                              mrIcon2ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER2', 
                                                          ScreensaverEntityIconOn: 'heat-wave',
                                                          ScreensaverEntityIconOff: null, 
                                                          ScreensaverEntityValue: NSPanel_Path + 'Sensor.ANALOG.Temperature',
                                                          ScreensaverEntityValueDecimalPlace : 1,
                                                          ScreensaverEntityValueUnit: '°', 
                                                          ScreensaverEntityOnColor: MSRed, 
                                                          ScreensaverEntityOffColor: Yellow },
                              
                              weatherEntity: 'alias.0.Wetter.Pliezhausen',    // Dieser Alias wird automatisch für den gewählten Wetter erstellt und kann entsprechend angepasst werden
                              defaultOffColor: Off,               // Default-Farbe für Off-Zustände
                              defaultOnColor: On,                 // Default-Farbe für On-Zustände
                              defaultColor: Off,
                              defaultBackgroundColor: HMIDark,    // Default-Hintergrundfarbe HMIDark oder Black
                              
                              // Mit 3.9.0 in Datenpunkte verschoben. Auch über Service Pages konfigurierbar
                                  //alternativeScreensaverLayout: false,
                                  //autoWeatherColorScreensaverLayout: true,
                                  //timeoutScreensaver: 10,
                                  //screenSaverDoubleClick: true,
                                  //temperatureUnit: '°C',
                                  //locale: 'de-DE',                    
                              
                              pages: [
                              
                                      Licht1,
                                      Sonos,
                                      NSPanel_Service         //Auto-Alias Service Page
                                      
                              ],
                              subPages: [
                                          
                                          NSPanel_Infos,                          //Auto-Alias Service Page
                                              NSPanel_Wifi_Info_1,                //Auto-Alias Service Page
                                              NSPanel_Wifi_Info_2,                //Auto-Alias Service Page
                                              NSPanel_Sensoren,                   //Auto-Alias Service Page
                                              NSPanel_Hardware,                   //Auto-Alias Service Page
                                          NSPanel_Einstellungen,                  //Auto-Alias Service Page
                                              NSPanel_Screensaver,                //Auto-Alias Service Page
                                                  NSPanel_ScreensaverDimmode,     //Auto-Alias Service Page
                                                  NSPanel_ScreensaverOther,       //Auto-Alias Service Page
                                                  NSPanel_Weather,                //Auto-Alias Service Page
                                                  NSPanel_Dateformat,             //Auto-Alias Service Page
                                                  NSPanel_Indicators,             //Auto-Alias Service Page
                                                  NSPanel_Relays,                 //Auto-Alias Service Page
                                          NSPanel_Firmware,                       //Auto-Alias Service Page
                                              NSPanel_FirmwareTasmota,            //Auto-Alias Service Page
                                              NSPanel_FirmwareBerry,              //Auto-Alias Service Page
                                              NSPanel_FirmwareNextion,            //Auto-Alias Service Page
                              ],
                              button1Page: null,   //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,
                              

                              };

                              :

                              T Offline
                              T Offline
                              TT-Tom
                              wrote on last edited by
                              #2074

                              @dieter-kurz

                              Kannst du mal die Tasmota Version senden.

                              Gruß Tom
                              https://github.com/tt-tom17
                              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                              NSPanel Script Wiki
                              https://github.com/joBr99/nspanel-lovelace-ui/wiki

                              NSPanel Adapter Wiki
                              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                              D 1 Reply Last reply
                              0
                              • T TT-Tom

                                @dieter-kurz

                                Kannst du mal die Tasmota Version senden.

                                D Offline
                                D Offline
                                Dieter Kurz
                                wrote on last edited by
                                #2075

                                @tt-tom Ist die 12.3.1

                                T 1 Reply Last reply
                                0
                                • ArmilarA Armilar

                                  @gargano

                                  ist schon fertig... kommt mit der 4.0.0

                                  GarganoG Offline
                                  GarganoG Offline
                                  Gargano
                                  wrote on last edited by
                                  #2076

                                  @armilar Danke . Ist ja wie Weihnachten und Ostern zusammen 😊

                                  1 Reply Last reply
                                  0
                                  • D Dieter Kurz

                                    @tt-tom Ist die 12.3.1

                                    T Offline
                                    T Offline
                                    TT-Tom
                                    wrote on last edited by
                                    #2077

                                    @dieter-kurz

                                    Bildschirmfoto 2023-02-04 um 16.20.17.png

                                    sieht das bei dir auch so aus?

                                    Gruß Tom
                                    https://github.com/tt-tom17
                                    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

                                    NSPanel Script Wiki
                                    https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                    NSPanel Adapter Wiki
                                    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                                    D 1 Reply Last reply
                                    0
                                    • D Dieter Kurz

                                      @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

                                      @dieter-kurz

                                      Du hast noch Fehler in der Config. Den MQTT Pfad stimmt nicht. Welche Version vom Script nutz du den jetzt für das Panel. Zeige bitte mal auch den Teil der Config aus dem Script

                                      Erstmal DANKE für Deine Hilfe!
                                      Hier meine Config:

                                      export const config: Config = {
                                      panelRecvTopic: 'mqtt.0.SmartHome.tele.NSPanel_1.RESULT', // Bitte anpassen
                                      panelSendTopic: 'mqtt.0.SmartHome.cmnd.NSPanel_1.CustomSend', // Bitte anpassen

                                      // 4 kleine Icons im Screensaver
                                      // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                                      firstScreensaverEntity:   { ScreensaverEntity: 'accuweather.0.Hourly.h0.PrecipitationProbability',
                                                                  ScreensaverEntityFactor: 1,                                 //New
                                                                  ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                                  ScreensaverEntityIcon: 'weather-pouring', 
                                                                  ScreensaverEntityText: 'Regen', 
                                                                  ScreensaverEntityUnitText: '%', 
                                                                  ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} 
                                                                },
                                      secondScreensaverEntity:  { ScreensaverEntity: 'parser.0.windSpeed', 
                                                                  ScreensaverEntityFactor: (1000/1000),                       //New
                                                                  ScreensaverEntityDecimalPlaces: 1,                          //New 
                                                                  ScreensaverEntityIcon: 'weather-windy', 
                                                                  ScreensaverEntityText: "Wind", 
                                                                  ScreensaverEntityUnitText: 'km/h', 
                                                                  ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120} 
                                                                },
                                      thirdScreensaverEntity:   { ScreensaverEntity: 'hm-rpc.0.LEQ0227831.1.TEMPERATURE',
                                                                  ScreensaverEntityFactor: 1,                                 //New
                                                                  ScreensaverEntityDecimalPlaces: 0,                          //New  
                                                                  ScreensaverEntityIcon: 'home-thermometer-outline', 
                                                                  ScreensaverEntityText: 'Innen', 
                                                                  ScreensaverEntityUnitText: '°C', 
                                                                  ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 40, 'val_best': 22 } 
                                                                },
                                      fourthScreensaverEntity:  { ScreensaverEntity: 'parser.0.outHumidity', 
                                                                  ScreensaverEntityFactor: 1,                                 //New
                                                                  ScreensaverEntityDecimalPlaces: 0,                          //New 
                                                                  ScreensaverEntityIcon: 'water-percent', 
                                                                  ScreensaverEntityText: 'Luft', 
                                                                  ScreensaverEntityUnitText: '%', 
                                                                  ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} 
                                                                },
                                      
                                      // Indikator Icons im oberen Teil des Screensavers
                                      // Mit 3.9.0 neue Parameter - Bitte anpassen - siehe auch Wiki
                                      mrIcon1ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER1', 
                                                                  ScreensaverEntityIconOn: 'lightbulb',                           //Rename
                                                                  ScreensaverEntityIconOff: null, 
                                                                  ScreensaverEntityValue: null,                                   //New
                                                                  ScreensaverEntityValueDecimalPlace : 0,                         //New
                                                                  ScreensaverEntityValueUnit: null,                               //New
                                                                  ScreensaverEntityOnColor: On, 
                                                                  ScreensaverEntityOffColor: HMIOff },
                                      mrIcon2ScreensaverEntity: { ScreensaverEntity: 'mqtt.0.SmartHome.stat.NSPanel_1.POWER2', 
                                                                  ScreensaverEntityIconOn: 'heat-wave',
                                                                  ScreensaverEntityIconOff: null, 
                                                                  ScreensaverEntityValue: NSPanel_Path + 'Sensor.ANALOG.Temperature',
                                                                  ScreensaverEntityValueDecimalPlace : 1,
                                                                  ScreensaverEntityValueUnit: '°', 
                                                                  ScreensaverEntityOnColor: MSRed, 
                                                                  ScreensaverEntityOffColor: Yellow },
                                      
                                      weatherEntity: 'alias.0.Wetter.Pliezhausen',    // Dieser Alias wird automatisch für den gewählten Wetter erstellt und kann entsprechend angepasst werden
                                      defaultOffColor: Off,               // Default-Farbe für Off-Zustände
                                      defaultOnColor: On,                 // Default-Farbe für On-Zustände
                                      defaultColor: Off,
                                      defaultBackgroundColor: HMIDark,    // Default-Hintergrundfarbe HMIDark oder Black
                                      
                                      // Mit 3.9.0 in Datenpunkte verschoben. Auch über Service Pages konfigurierbar
                                          //alternativeScreensaverLayout: false,
                                          //autoWeatherColorScreensaverLayout: true,
                                          //timeoutScreensaver: 10,
                                          //screenSaverDoubleClick: true,
                                          //temperatureUnit: '°C',
                                          //locale: 'de-DE',                    
                                      
                                      pages: [
                                      
                                              Licht1,
                                              Sonos,
                                              NSPanel_Service         //Auto-Alias Service Page
                                              
                                      ],
                                      subPages: [
                                                  
                                                  NSPanel_Infos,                          //Auto-Alias Service Page
                                                      NSPanel_Wifi_Info_1,                //Auto-Alias Service Page
                                                      NSPanel_Wifi_Info_2,                //Auto-Alias Service Page
                                                      NSPanel_Sensoren,                   //Auto-Alias Service Page
                                                      NSPanel_Hardware,                   //Auto-Alias Service Page
                                                  NSPanel_Einstellungen,                  //Auto-Alias Service Page
                                                      NSPanel_Screensaver,                //Auto-Alias Service Page
                                                          NSPanel_ScreensaverDimmode,     //Auto-Alias Service Page
                                                          NSPanel_ScreensaverOther,       //Auto-Alias Service Page
                                                          NSPanel_Weather,                //Auto-Alias Service Page
                                                          NSPanel_Dateformat,             //Auto-Alias Service Page
                                                          NSPanel_Indicators,             //Auto-Alias Service Page
                                                          NSPanel_Relays,                 //Auto-Alias Service Page
                                                  NSPanel_Firmware,                       //Auto-Alias Service Page
                                                      NSPanel_FirmwareTasmota,            //Auto-Alias Service Page
                                                      NSPanel_FirmwareBerry,              //Auto-Alias Service Page
                                                      NSPanel_FirmwareNextion,            //Auto-Alias Service Page
                                      ],
                                      button1Page: null,   //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,
                                      

                                      };

                                      :

                                      ArmilarA Offline
                                      ArmilarA Offline
                                      Armilar
                                      Most Active Forum Testing
                                      wrote on last edited by
                                      #2078

                                      @dieter-kurz

                                      Du sprichst von einem 2. Panel

                                      Kannst du kurz einen Auszug aus den Objekten des MQTT-Adapter machen, aus denen die Pfade der beiden Panels hervorgehen?

                                      Ich sehe hier im Log irgendwie so etwas:

                                      mqtt.0.SmartHome.tele.NSPanel_1.INFO2 (Sollte es nicht ein anderes Panel sein?)
                                      

                                      Also Prefix entweder vorne oder hinten. Aber nicht in der Mitte... Das unterstützt selbst Tasmota nur mit wiederwillen.

                                      Also einmal den Auszug von beiden Panels aus Tasmota und die MQTT-Objekte. Sonst kommen wir ins schleudern.

                                      Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                                      https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      D 1 Reply Last reply
                                      0
                                      • T TT-Tom

                                        @dieter-kurz

                                        Bildschirmfoto 2023-02-04 um 16.20.17.png

                                        sieht das bei dir auch so aus?

                                        D Offline
                                        D Offline
                                        Dieter Kurz
                                        wrote on last edited by
                                        #2079

                                        @tt-tom INFO1, INFO2 und INFO3 fehlen, allerdings bei beiden Panels ..

                                        T ArmilarA 2 Replies Last reply
                                        0
                                        • ArmilarA Armilar

                                          @dieter-kurz

                                          Du sprichst von einem 2. Panel

                                          Kannst du kurz einen Auszug aus den Objekten des MQTT-Adapter machen, aus denen die Pfade der beiden Panels hervorgehen?

                                          Ich sehe hier im Log irgendwie so etwas:

                                          mqtt.0.SmartHome.tele.NSPanel_1.INFO2 (Sollte es nicht ein anderes Panel sein?)
                                          

                                          Also Prefix entweder vorne oder hinten. Aber nicht in der Mitte... Das unterstützt selbst Tasmota nur mit wiederwillen.

                                          Also einmal den Auszug von beiden Panels aus Tasmota und die MQTT-Objekte. Sonst kommen wir ins schleudern.

                                          D Offline
                                          D Offline
                                          Dieter Kurz
                                          wrote on last edited by
                                          #2080

                                          @armilar d01e3201-1c3a-440a-a5e3-5d3429a9a713-image.png

                                          T 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          440

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe