Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. SONOFF NSPanel mit Lovelace UI

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SONOFF NSPanel mit Lovelace UI

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TT-Tom @wendy2702 last edited by

      @wendy2702

      ich kann es bei mir jetzt nachstellen, wir arbeiten an der Problemlösung.

      1 Reply Last reply Reply Quote 0
      • T
        TT-Tom @wendy2702 last edited by 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

        Armilar 1 Reply Last reply Reply Quote 0
        • Armilar
          Armilar Most Active Forum Testing @TT-Tom last edited by 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...

          wendy2702 1 Reply Last reply Reply Quote 0
          • wendy2702
            wendy2702 @Armilar last edited by wendy2702

            @armilar @TT-Tom

            Danke.

            Werde ich morgen testen

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

            1 Reply Last reply Reply Quote 0
            • D
              Dieter Kurz last edited by

              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

              Armilar T 2 Replies Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @Dieter Kurz last edited by Armilar

                @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...

                1 Reply Last reply Reply Quote 0
                • T
                  TT-Tom @Dieter Kurz last edited by

                  @dieter-kurz

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

                  1 Reply Last reply Reply Quote 0
                  • D
                    Dieter Kurz last edited by

                    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?

                    Armilar 1 Reply Last reply Reply Quote 0
                    • Armilar
                      Armilar Most Active Forum Testing @Dieter Kurz last edited by 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 1 Reply Last reply Reply Quote 0
                      • Gargano
                        Gargano last edited by

                        @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

                        Armilar 1 Reply Last reply Reply Quote 0
                        • D
                          Dieter Kurz @Armilar last edited by

                          @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 Reply Quote 0
                          • T
                            TT-Tom @Dieter Kurz last edited by 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 1 Reply Last reply Reply Quote 0
                            • D
                              Dieter Kurz @TT-Tom last edited by

                              @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 Armilar 2 Replies Last reply Reply Quote 0
                              • Armilar
                                Armilar Most Active Forum Testing @Gargano last edited by

                                @gargano

                                ist schon fertig... kommt mit der 4.0.0

                                Gargano 1 Reply Last reply Reply Quote 0
                                • T
                                  TT-Tom @Dieter Kurz last edited by

                                  @dieter-kurz

                                  Kannst du mal die Tasmota Version senden.

                                  D 1 Reply Last reply Reply Quote 0
                                  • D
                                    Dieter Kurz @TT-Tom last edited by

                                    @tt-tom Ist die 12.3.1

                                    T 1 Reply Last reply Reply Quote 0
                                    • Gargano
                                      Gargano @Armilar last edited by

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

                                      1 Reply Last reply Reply Quote 0
                                      • T
                                        TT-Tom @Dieter Kurz last edited by

                                        @dieter-kurz

                                        Bildschirmfoto 2023-02-04 um 16.20.17.png

                                        sieht das bei dir auch so aus?

                                        D 1 Reply Last reply Reply Quote 0
                                        • Armilar
                                          Armilar Most Active Forum Testing @Dieter Kurz last edited by

                                          @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 1 Reply Last reply Reply Quote 0
                                          • D
                                            Dieter Kurz @TT-Tom last edited by

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

                                            T Armilar 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            818
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            lovelace ui nspanel sonoff
                                            261
                                            7176
                                            4880429
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo