Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Alphatest NSPanel-lovelace-ui v0.1.1

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Alphatest NSPanel-lovelace-ui v0.1.1

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      ticaki Developer last edited by ticaki

      Oben ergänzt:

      EDIT Hab doch noch ein paar wichtige Dinge vergessen zu erwähnen:

      1. Der Adapter verwendet Rule2 und Rule3 auf dem Tasmota - Rule1 könnt ihr für eigene Regeln verwenden.
      2. Bei einem Update des Adapters muß immer das Konfigurationsskript ausgeführt werden - da zur Zeit die hauptsächliche Arbeit in der Konvertierung besteht und diese nur angestoßen wird wenn man das Skript ausführt! Wenn das bei Start des Adapters passieren würde, könnten wir im Skript keine Rückmeldungen ausgeben - bzw. eine nachdem Adapterupdate als fehlerhaft einzustufende Skriptkonfiguration würde den Adapter-Start verhindern
      Neuschwansteini 1 Reply Last reply Reply Quote 2
      • Neuschwansteini
        Neuschwansteini @ticaki last edited by

        @ticaki

        Hi, ich habe mal ein Panel vom Script auf den Adapter umgestellt. Leider komm ich da nicht weiter, kannste mir n Tipp geben?
        Fehlt oder ist bestimmt noch was falsch..
        Anscheinend gibts noch Probleme mit der Communikation zum Adapter vom Panel oder rumgedreht, das Panel zeigt nur den Spinner und wartet auf Content..

        Was muss ich im Panel bei mqtt umstellen? der Adapter hat den Port 1881 hierm al ein Screenshot von den Configs:
        Screenshot 2025-02-28 at 10.47.40.png Screenshot 2025-02-28 at 10.48.25.png

        Das Script sieht so aus (ich hab mal deine Beispiele rausgeworfen)

        async function configuration (): Promise<void> {
        
        
        
            
        
            // Ein Beispiel für eine Gridseite mit verschiedenen Farbskalen
            const irgendeinName: PageType = {
                type: 'cardGrid',
                uniqueName:'main',
                heading: 'Wohnzimmer',
                useColor: true,
                items: [
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.SmartTableLampe', name: 'Tischleuchte', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.Deckenleuchte', name: 'Deckenleuchte', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.TV_Wifilight', name: 'TV Wifilight', minValueBrightness: 0, maxValueBrightness: 100, interpolateColor: true},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.Rolladen', icon: 'window-shutter', name: 'Rolladen', interpolateColor: true},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.Arbeitsmodus', name: 'Arbeitsmodus', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.TFT_Schreibtisch', name: 'TFT Schreibtisch', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                   //  { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.Schloss', name: 'Schloss', icon: 'lock-open', icon2: 'lock',offColor: MSRed, onColor: MSGreen},
                     
                ]};
                
            const grid1: PageType = {
                uniqueName: 'grid1', // keine Navigation, am besten uniqueName von config.ts übernehmen
                heading: 'Grid 1',
                items: [
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.SmartTableLampe', name: 'Tischleuchte', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                     { id: 'alias.0.Haus.Obergeschoss.Arbeitszimmer_Bernd.Deckenleuchte', name: 'Deckenleuchte', icon: 'power', icon2: 'power',offColor: MSRed, onColor: MSGreen},
                  //  {navigate: true, targetPage:'Wohnzimmer'}, 
                    
                ],
                type: 'cardGrid',
                useColor: true
            }
        
            const config: ScriptConfig.Config = {
                panelTopic: 'NSPanel1/NSPanel1-BB',
                weatherEntity: 'accuweather.0.',
                defaultOffColor: Off,
                defaultOnColor: On,
                defaultColor: Off,
                defaultBackgroundColor: HMIDark,
        
                // Als Gedankenstütze, die Hauptseite muß main heißen!
                //panelName: 'NSPanel', //unique name for the panel
        
        
                // Seiteneinteilung / Page division
                // Hauptseiten / Mainpages
                pages: [
                     irgendeinName,
                     grid1,
                     
                    
                ],
                // Unterseiten / Subpages
                subPages: [
                //    fahrplan
                ],
        
                /***********************************************************************
                 **                                                                   **
                 **                    Screensaver Configuration                      **
                 **                                                                   **
                 ***********************************************************************/
                indicatorScreensaverEntity: [
                    // indicatorScreensaverEntity 1 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.allgemein.Status_offene_Fenster.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'window-open-variant',
                        ScreensaverEntityIconOff: 'window-closed-variant',
                        ScreensaverEntityText: 'Fenster',
                        ScreensaverEntityUnitText: '%',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 1},
                    },
                    // indicatorScreensaverEntity 2 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.allgemein.Status_offene_Tuer.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'door-open',
                        ScreensaverEntityIconOff: 'door-closed',
                        ScreensaverEntityText: 'Tür',
                        ScreensaverEntityUnitText: '',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 1},
                    },
                    // indicatorScreensaverEntity 3 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.allgemein.Status_Licht_An.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'lightbulb',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Licht',
                        ScreensaverEntityUnitText: '',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 1},
                    },
                    // indicatorScreensaverEntity 4 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.Türschloss.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'lock',
                        ScreensaverEntityIconOff: 'lock-open',
                        ScreensaverEntityText: 'Türschloss',
                        ScreensaverEntityUnitText: '',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 1, val_best: 1},
                    },
                    // indicatorScreensaverEntity 5 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.allgemein.Auto.Safety.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'car-key',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Auto',
                        ScreensaverEntityUnitText: '',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 1, val_best: 1},
                    },
                ],
        
                bottomScreensaverEntity: [
                    // bottomScreensaverEntity 1
                    {
                        ScreensaverEntity: 'accuweather.0.Daily.Day1.Sunrise',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityDateFormat: {hour: '2-digit', minute: '2-digit'}, // Description at Wiki-Pages
                        ScreensaverEntityIconOn: 'weather-sunset-up',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Sonne',
                        ScreensaverEntityUnitText: '%',
                        ScreensaverEntityIconColor: MSYellow //{'val_min': 0, 'val_max': 100}
                    },
                    // bottomScreensaverEntity 2
                    {
                        ScreensaverEntity: 'accuweather.0.Current.WindSpeed',
                        ScreensaverEntityFactor: (1000 / 3600),
                        ScreensaverEntityDecimalPlaces: 1,
                        ScreensaverEntityIconOn: 'weather-windy',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: "Wind",
                        ScreensaverEntityUnitText: 'm/s',
                        ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120}
                    },
                    // bottomScreensaverEntity 3
                    {
                        ScreensaverEntity: 'accuweather.0.Current.WindGust',
                        ScreensaverEntityFactor: (1000 / 3600),
                        ScreensaverEntityDecimalPlaces: 1,
                        ScreensaverEntityIconOn: 'weather-tornado',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Böen',
                        ScreensaverEntityUnitText: 'm/s',
                        ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120}
                    },
                    // bottomScreensaverEntity 4
                    {
                        ScreensaverEntity: 'accuweather.0.Current.WindDirectionText',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityIconOn: 'windsock',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Windr.',
                        ScreensaverEntityUnitText: '°',
                        ScreensaverEntityIconColor: White
                    },
                    // bottomScreensaverEntity 5 (for Alternative and Advanced Screensaver)
                    {
                        ScreensaverEntity: 'accuweather.0.Current.RelativeHumidity',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 1,
                        ScreensaverEntityIconOn: 'water-percent',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Feuchte',
                        ScreensaverEntityUnitText: '%',
                        ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65}
                    },
                    // bottomScreensaverEntity 6 (for Advanced Screensaver)
                    {
                        ScreensaverEntity: 'Relay.1',
                        ScreensaverEntityIconOn: 'coach-lamp-variant',
                        ScreensaverEntityText: 'Street',
                        ScreensaverEntityOnColor: Yellow,
                        ScreensaverEntityOffColor: White,
                        ScreensaverEntityOnText: 'Is ON',
                        ScreensaverEntityOffText: 'Not ON'
                    },
                    // Examples for Advanced-Screensaver: https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker-Config-Screensaver#entity-status-icons-ab-v400 
                ],
        
                leftScreensaverEntity: [
                    // leftScreensaverEntity 1 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.Flur.Sensor.ANALOG.Temperature.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 1,
                        ScreensaverEntityIconOn: 'thermometer',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Temperatur',
                        ScreensaverEntityUnitText: '°C',
                        ScreensaverEntityIconColor: {val_min: 0, val_max: 35, val_best: 22},
                    },
                    // leftScreensaverEntity 2 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.Heizung.WärmeTagesVerbrauch.ACTUAL',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 1,
                        ScreensaverEntityIconOn: 'counter',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Wärme',
                        ScreensaverEntityUnitText: ' kWh',
                        ScreensaverEntityIconColor: MSYellow, //{'val_min': 0, 'val_max': 5000}
                    },
                    // leftScreensaverEntity 3 (only Advanced Screensaver)
                    {
                        ScreensaverEntity: 'alias.0.NSPanel.allgemein.Abfall.event1.INFO',
                        ScreensaverEntityFactor: 1,
                        ScreensaverEntityDecimalPlaces: 0,
                        ScreensaverEntityDateFormat: {year: 'numeric', month: '2-digit', day: '2-digit'},
                        ScreensaverEntityIconOn: 'trash-can',
                        ScreensaverEntityIconOff: null,
                        ScreensaverEntityText: 'Abfall',
                        ScreensaverEntityUnitText: '',
                        ScreensaverEntityIconColor: '0_userdata.0.Abfallkalender.1.color',
                    },
                ],
        
                // Status Icon 
                mrIcon1ScreensaverEntity: {
                    ScreensaverEntity: 'Relay.1',
                    ScreensaverEntityIconOn: 'lightbulb',
                    ScreensaverEntityIconOff: null,
                    ScreensaverEntityValue: null,
                    ScreensaverEntityValueDecimalPlace: 0,
                    ScreensaverEntityValueUnit: null,
                    ScreensaverEntityOnColor: On,
                    ScreensaverEntityOffColor: HMIOff
                },
                mrIcon2ScreensaverEntity: {
                    ScreensaverEntity: 'Relay.2',
                    ScreensaverEntityIconOn: 'lightbulb',
                    ScreensaverEntityIconOff: null,
                    ScreensaverEntityValue: null,
                    ScreensaverEntityValueDecimalPlace: 0,
                    ScreensaverEntityValueUnit: null,
                    ScreensaverEntityOnColor: On,
                    ScreensaverEntityOffColor: HMIOff
                },
                // ------ DE: Ende der Screensaver Einstellungen --------------------
                // ------ EN: End of screensaver settings ---------------------------
        
                //-------DE: Anfang Einstellungen für Hardware Button, wenn Sie softwareseitig genutzt werden (Rule2) -------------
                //-------EN: Start Settings for Hardware Button, if used in software (Rule2) --------------------------------------
                // DE: Konfiguration des linken Schalters des NSPanels
                // EN: Configuration of the left switch of the NSPanel
                button1: {
                    // DE: Mögliche Werte wenn Rule2 definiert: 'page', 'toggle', 'set' - Wenn nicht definiert --> mode: null
                    // EN: Possible values if Rule2 defined: 'page', 'toggle', 'set' - If not defined --> mode: null
                    mode: null,
                    // DE: Zielpage - Verwendet wenn mode = page
                    // EN: Target page - Used if mode = page
                    page: null,
                    // DE: Zielentity - Verwendet wenn mode = set oder toggle
                    // EN: Target entity - Used if mode = set or toggle
                    entity: null,
                    // DE: Zielwert - Verwendet wenn mode = set
                    // EN: Target value - Used if mode = set
                    setValue: null
                },
        
                // DE: Konfiguration des rechten Schalters des NSPanels
                // EN: Configuration of the right switch of the NSPanel
                button2: {
                    mode: null,
                    page: null,
                    entity: null,
                    setValue: null
                },
        
                //--------- DE: Ende - Einstellungen für Hardware Button, wenn Sie softwareseitig genutzt werden (Rule2) -------------
                //--------- EN: End - settings for hardware button if they are used in software (Rule2) ------------------------------
        
                // DE: WICHTIG !! Parameter nicht ändern  WICHTIG!!
                // EN: IMPORTANT !! Do not change parameters IMPORTANT!!
        
            };
        
        
            /**
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             *  END STOP END STOP END - No more configuration - END STOP END STOP END       *
             ********************************************************************************
             *  For a update copy and paste the code below from orginal file.               *
             * ******************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             ********************************************************************************
             */
        
            log(await sendToAsync('nspanel-lovelace-ui.0', 'ScriptConfig', {...config, version}))
        }
        
        const version = '0.2.1';
        const HMIOff = {red: 68, green: 115, blue: 158};     // Blue-Off - Original Entity Off
        const HMIOn = {red: 3, green: 169, blue: 244};     // Blue-On
        const HMIDark = {red: 29, green: 29, blue: 29};     // Original Background Color
        const Off = {red: 253, green: 128, blue: 0};     // Orange-Off - nicer color transitions
        const On = {red: 253, green: 216, blue: 53};
        const MSRed = {red: 251, green: 105, blue: 98};
        const MSYellow = {red: 255, green: 235, blue: 156};
        const MSGreen = {red: 121, green: 222, blue: 121};
        const Red = {red: 255, green: 0, blue: 0};
        const White = {red: 255, green: 255, blue: 255};
        const Yellow = {red: 255, green: 255, blue: 0};
        const Green = {red: 0, green: 255, blue: 0};
        const Blue = {red: 0, green: 0, blue: 255};
        const DarkBlue = {red: 0, green: 0, blue: 136};
        const Gray = {red: 136, green: 136, blue: 136};
        const Black = {red: 0, green: 0, blue: 0};
        const Cyan = {red: 0, green: 255, blue: 255};
        const Magenta = {red: 255, green: 0, blue: 255};
        const colorSpotify = {red: 30, green: 215, blue: 96};
        const colorAlexa = {red: 49, green: 196, blue: 243};
        const colorSonos = {red: 216, green: 161, blue: 88};
        const colorRadio = {red: 255, green: 127, blue: 0};
        const BatteryFull = {red: 96, green: 176, blue: 62};
        const BatteryEmpty = {red: 179, green: 45, blue: 25};
        
        //Menu Icon Colors
        const Menu = {red: 150, green: 150, blue: 100};
        const MenuLowInd = {red: 255, green: 235, blue: 156};
        const MenuHighInd = {red: 251, green: 105, blue: 98};
        
        //Dynamische Indikatoren (Abstufung grün nach gelb nach rot)
        const colorScale0 = {red: 99, green: 190, blue: 123};
        const colorScale1 = {red: 129, green: 199, blue: 126};
        const colorScale2 = {red: 161, green: 208, blue: 127};
        const colorScale3 = {red: 129, green: 217, blue: 126};
        const colorScale4 = {red: 222, green: 226, blue: 131};
        const colorScale5 = {red: 254, green: 235, blue: 132};
        const colorScale6 = {red: 255, green: 210, blue: 129};
        const colorScale7 = {red: 251, green: 185, blue: 124};
        const colorScale8 = {red: 251, green: 158, blue: 117};
        const colorScale9 = {red: 248, green: 131, blue: 111};
        const colorScale10 = {red: 248, green: 105, blue: 107};
        
        //Screensaver Default Theme Colors
        const scbackground = {red: 0, green: 0, blue: 0};
        const scbackgroundInd1 = {red: 255, green: 0, blue: 0};
        const scbackgroundInd2 = {red: 121, green: 222, blue: 121};
        const scbackgroundInd3 = {red: 255, green: 255, blue: 0};
        const sctime = {red: 255, green: 255, blue: 255};
        const sctimeAMPM = {red: 255, green: 255, blue: 255};
        const scdate = {red: 255, green: 255, blue: 255};
        const sctMainIcon = {red: 255, green: 255, blue: 255};
        const sctMainText = {red: 255, green: 255, blue: 255};
        const sctForecast1 = {red: 255, green: 255, blue: 255};
        const sctForecast2 = {red: 255, green: 255, blue: 255};
        const sctForecast3 = {red: 255, green: 255, blue: 255};
        const sctForecast4 = {red: 255, green: 255, blue: 255};
        const sctF1Icon = {red: 255, green: 235, blue: 156};
        const sctF2Icon = {red: 255, green: 235, blue: 156};
        const sctF3Icon = {red: 255, green: 235, blue: 156};
        const sctF4Icon = {red: 255, green: 235, blue: 156};
        const sctForecast1Val = {red: 255, green: 255, blue: 255};
        const sctForecast2Val = {red: 255, green: 255, blue: 255};
        const sctForecast3Val = {red: 255, green: 255, blue: 255};
        const sctForecast4Val = {red: 255, green: 255, blue: 255};
        const scbar = {red: 255, green: 255, blue: 255};
        const sctMainIconAlt = {red: 255, green: 255, blue: 255};
        const sctMainTextAlt = {red: 255, green: 255, blue: 255};
        const sctTimeAdd = {red: 255, green: 255, blue: 255};
        
        //Auto-Weather-Colors
        const swClearNight = {red: 150, green: 150, blue: 100};
        const swCloudy = {red: 75, green: 75, blue: 75};
        const swExceptional = {red: 255, green: 50, blue: 50};
        const swFog = {red: 150, green: 150, blue: 150};
        const swHail = {red: 200, green: 200, blue: 200};
        const swLightning = {red: 200, green: 200, blue: 0};
        const swLightningRainy = {red: 200, green: 200, blue: 150};
        const swPartlycloudy = {red: 150, green: 150, blue: 150};
        const swPouring = {red: 50, green: 50, blue: 255};
        const swRainy = {red: 100, green: 100, blue: 255};
        const swSnowy = {red: 150, green: 150, blue: 150};
        const swSnowyRainy = {red: 150, green: 150, blue: 255};
        const swSunny = {red: 255, green: 255, blue: 0};
        const swWindy = {red: 150, green: 150, blue: 150};
        
        type PageType = ScriptConfig.PageType;
        type Config = ScriptConfig.Config;
        type PageBaseType = ScriptConfig.PageBaseType;
        type PageItem = ScriptConfig.PageItem;
        type PageBaseItem = ScriptConfig.PageBaseItem;
        type PageMediaItem = ScriptConfig.PageMediaItem;
        type PageThermoItem = ScriptConfig.PageThermoItem;
        type PageEntities = ScriptConfig.PageEntities;
        type PageGrid = ScriptConfig.PageGrid;
        type PageGrid2 = ScriptConfig.PageGrid2;
        type PageGrid3 = ScriptConfig.PageGrid3;
        type PageThermo = ScriptConfig.PageThermo;
        type PageMedia = ScriptConfig.PageMedia;
        type PageAlarm = ScriptConfig.PageAlarm;
        type PageUnlock = ScriptConfig.PageUnlock;
        type PageQR = ScriptConfig.PageQR;
        type PagePower = ScriptConfig.PagePower;
        type PageChart = ScriptConfig.PageChart;
        type PagetypeType = ScriptConfig.PagetypeType;
        type NavigationItemConfig = ScriptConfig.NavigationItemConfig;
        declare namespace ScriptConfig {
            export type PopupType =
                | 'popupFan'
                | 'popupInSel'
                | 'popupLight'
                | 'popupLightNew'
                | 'popupNotify'
                | 'popupShutter'
                | 'popupThermo'
                | 'popupTimer';
        
            export type EventMethod =
                | 'startup'
                | 'sleepReached'
                | 'pageOpenDetail'
                | 'buttonPress2'
                | 'renderCurrentPage'
                | 'button1'
                | 'button2';
            export type panelRecvType = {
                event: 'event';
                method: EventMethod;
            };
        
            export type NavigationItemConfig = {
                name: string;
                left?: {
                    single?: string;
                    double?: string;
                };
                right?: {
                    single?: string;
                    double?: string;
                };
                page: string;
                optional?: never;
            } | null;
        
            export type SerialType = 'button' | 'light' | 'shutter' | 'text' | 'input_sel' | 'timer' | 'number' | 'fan';
        
            /**
             * Defines the possible roles for entities in the NSPanel.
             *
             * This type represents the various roles that entities can have within the NSPanel system.
             *
             */
            export type roles =
                | 'light'
                | 'socket'
                | 'dimmer'
                | 'hue'
                | 'rgb'
                | 'rgbSingle'
                | 'ct'
                | 'blind'
                | 'door'
                | 'window'
                | 'volumeGroup'
                | 'volume'
                | 'info'
                | 'humidity'
                | 'temperature'
                | 'value.temperature'
                | 'value.humidity'
                | 'thermostat'
                | 'warning'
                | 'cie'
                | 'gate'
                | 'motion'
                | 'buttonSensor'
                | 'button'
                | 'value.time'
                | 'level.timer'
                | 'value.alarmtime'
                | 'level.mode.fan'
                | 'lock'
                | 'slider'
                | 'switch.mode.wlan'
                | 'media'
                | 'timeTable'
                | 'airCondition';
        
            export type ButtonActionType =
                | 'bExit'
                | 'bUp'
                | 'bNext'
                | 'bSubNext'
                | 'bPrev'
                | 'bSubPrev'
                | 'bHome'
                | 'notifyAction'
                | 'OnOff'
                | 'button'
                | 'up'
                | 'stop'
                | 'down'
                | 'positionSlider'
                | 'tiltOpen'
                | 'tiltStop'
                | 'tiltSlider'
                | 'tiltClose'
                | 'brightnessSlider'
                | 'colorTempSlider'
                | 'colorWheel'
                | 'tempUpd'
                | 'tempUpdHighLow'
                | 'media-back'
                | 'media-pause'
                | 'media-next'
                | 'media-shuffle'
                | 'volumeSlider'
                | 'mode-speakerlist'
                | 'mode-playlist'
                | 'mode-tracklist'
                | 'mode-repeat'
                | 'mode-equalizer'
                | 'mode-seek'
                | 'mode-crossfade'
                | 'mode-favorites'
                | 'mode-insel'
                | 'media-OnOff'
                | 'timer-start'
                | 'timer-pause'
                | 'timer-cancle'
                | 'timer-finish'
                | 'hvac_action'
                | 'mode-modus1'
                | 'mode-modus2'
                | 'mode-modus3'
                | 'number-set'
                | 'mode-preset_modes'
                | 'A1'
                | 'A2'
                | 'A3'
                | 'A4'
                | 'D1'
                | 'U1'
                | 'f1Icon'
                | 'f2Icon'
                | 'f3Icon'
                | 'f4Icon'
                | 'f5Icon';
        
            export type RGB = {
                red: number;
                green: number;
                blue: number;
            };
        
            export type Payload = {
                payload: string;
            };
        
            export type PageBaseType = {
                type: PagetypeType;
                uniqueName?: string;
                heading: string;
                items: PageItem[];
                useColor: boolean;
                subPage?: boolean;
                parent?: string;
                parentIcon?: string;
                parentIconColor?: RGB;
                prev?: string;
                prevIcon?: string;
                prevIconColor?: RGB;
                next?: string;
                nextIcon?: string;
                nextIconColor?: RGB;
                home?: string;
                homeIcon?: string;
                homeIconColor?: RGB;
                hiddenByTrigger?: boolean;
            };
        
            export type PagetypeType =
                | 'cardChart'
                | 'cardLChart'
                | 'cardEntities'
                | 'cardGrid'
                | 'cardGrid2'
                | 'cardGrid3'
                | 'cardThermo'
                | 'cardMedia'
                | 'cardUnlock'
                | 'cardQR'
                | 'cardAlarm'
                | 'cardPower'; //| 'cardBurnRec'
        
            export type PageType =
                | PageChart
                | PageEntities
                | PageGrid
                | PageGrid2
                | PageGrid3
                | PageThermo
                | PageMedia
                | PageUnlock
                | PageQR
                | PageAlarm
                | PagePower
                | {type: undefined; heading?: string; native: any};
        
            export type PageEntities = {
                type: 'cardEntities';
                items: PageItem[];
            } & PageBaseType;
        
            export type PageGrid = {
                type: 'cardGrid';
                items: PageItem[];
            } & PageBaseType;
        
            export type PageGrid2 = {
                type: 'cardGrid2';
                items: PageItem[];
            } & PageBaseType;
        
            export type PageGrid3 = {
                type: 'cardGrid3';
                items: PageItem[];
            } & PageBaseType;
        
            export type PageThermo = {
                type: 'cardThermo';
                items: [PageThermoItem];
            } & Omit<PageBaseType, 'useColor'>;
        
            export type PageMedia = {
                type: 'cardMedia';
                items: [PageMediaItem];
            } & Omit<PageBaseType, 'useColor' | 'autoCreateAlias'>;
        
            export type PageAlarm = {
                type: 'cardAlarm';
                items: [PageItem];
            } & Omit<PageBaseType, 'useColor'>;
        
            export type PageUnlock = {
                type: 'cardUnlock';
                items: [PageItem];
            } & Omit<PageBaseType, 'useColor'> &
                Partial<Pick<PageBaseType, 'useColor'>>;
        
            export type PageQR = {
                type: 'cardQR';
                items: [PageItem];
            } & Omit<PageBaseType, 'useColor'>;
        
            export type PagePower = {
                type: 'cardPower';
                items: [PageItem];
            } & Omit<PageBaseType, 'useColor'>;
        
            export type PageChart = {
                type: 'cardChart' | 'cardLChart';
                items: PageItem[];
            } & Omit<PageBaseType, 'useColor'>;
        
            export type PageItem = PageBaseItem | PageMediaItem | PageThermoItem;
        
            export type PageMediaItem = {
                adapterPlayerInstance: adapterPlayerInstanceType;
                mediaDevice?: string;
                colorMediaIcon?: RGB;
                colorMediaArtist?: RGB;
                colorMediaTitle?: RGB;
                speakerList?: string[];
                playList?: string[];
                equalizerList?: string[];
                repeatList?: string[];
                globalTracklist?: string[];
                crossfade?: boolean;
            } & PageBaseItem;
        
            export type PageThermoItem = {
                popupThermoMode1?: string[];
                popupThermoMode2?: string[];
                popupThermoMode3?: string[];
                popUpThermoName?: string[];
                setThermoAlias?: string[];
                setThermoDestTemp2?: string;
            } & PageBaseItem;
            // mean string start with getState(' and end with ').val
            type getStateID = string;
            export type PageBaseItem = {
                uniqueName?: string;
                role?: string;
                /**
                 * The data point with the data to be used.
                 */
                id?: string | null;
                /**
                 * The icon that is used in the standard case or if ID is true
                 */
                icon?: string;
                /**
                 * The icon that is used when id is false
                 */
                icon2?: string;
                /**
                 * Used with blinds for partially open.
                 */
                icon3?: string;
                /**
                 * The color that is used in the standard case or if ID is true
                 */
                onColor?: RGB;
                /**
                 * The color that is used when id is false
                 */
                offColor?: RGB;
                useColor?: boolean;
                /**
                 * Interpolate the icon colour by ID
                 */
                interpolateColor?: boolean;
                minValueBrightness?: number;
                maxValueBrightness?: number;
                minValueColorTemp?: number;
                maxValueColorTemp?: number;
                minValueLevel?: number;
                maxValueLevel?: number;
                minValueTilt?: number;
                maxValueTilt?: number;
                minValue?: number;
                maxValue?: number;
                stepValue?: number;
                prefixName?: string;
                suffixName?: string;
                name?: string;
                secondRow?: string;
                buttonText?: string;
                unit?: string;
                navigate?: boolean;
                colormode?: string;
                colorScale?: IconScaleElement;
                targetPage?: string;
                modeList?: string[];
                hidePassword?: boolean;
                autoCreateALias?: boolean;
                yAxis?: string;
                yAxisTicks?: number[] | string;
                xAxisDecorationId?: string;
                useValue?: boolean;
                monobutton?: boolean;
                inSel_ChoiceState?: boolean;
                iconArray?: string[];
                customIcons?: any[];
                fontSize?: number;
                actionStringArray?: string[];
                alwaysOnDisplay?: boolean;
            };
        
            export type DimMode = {
                dimmodeOn: boolean | undefined;
                brightnessDay: number | undefined;
                brightnessNight: number | undefined;
                timeDay: string | undefined;
                timeNight: string | undefined;
            };
        
            export type ConfigButtonFunction = {
                mode: 'page' | 'toggle' | 'set' | null;
                page:
                | PageThermo
                | PageMedia
                | PageAlarm
                | PageQR
                | PageEntities
                | PageGrid
                | PageGrid2
                | PagePower
                | PageChart
                | PageUnlock
                | null;
                entity: string | null;
                setValue: string | number | boolean | null;
                setOn?: {dp: string; val: iobJS.StateValue};
                setOff?: {dp: string; val: iobJS.StateValue};
            };
        
            export type Config = {
                panelName?: string;
                /**
                 * The topic to receive and send messages to the panel.
                 */
                panelTopic: string;
                weatherEntity: string;
                leftScreensaverEntity: leftScreensaverEntityType;
                bottomScreensaverEntity: ScreenSaverElement[];
                indicatorScreensaverEntity: indicatorScreensaverEntityType;
                mrIcon1ScreensaverEntity: ScreenSaverMRElement;
                mrIcon2ScreensaverEntity: ScreenSaverMRElement;
                defaultColor: RGB;
                defaultOnColor: RGB;
                defaultOffColor: RGB;
                defaultBackgroundColor: RGB;
                pages: PageType[];
                subPages: PageType[];
                button1: ConfigButtonFunction;
                button2: ConfigButtonFunction;
                /**
                 * Native page items for the panel
                 */
                nativePageItems?: any;
                navigation?: NavigationItemConfig[];
            };
            export type leftScreensaverEntityType =
                | [ScreenSaverElementWithUndefined?, ScreenSaverElementWithUndefined?, ScreenSaverElementWithUndefined?]
                | [];
            export type indicatorScreensaverEntityType =
                | [
                    ScreenSaverElementWithUndefined?,
                    ScreenSaverElementWithUndefined?,
                    ScreenSaverElementWithUndefined?,
                    ScreenSaverElementWithUndefined?,
                    ScreenSaverElementWithUndefined?,
                ]
                | [];
            export type ScreenSaverElementWithUndefined = null | undefined | ScreenSaverElement;
            export type ScreenSaverElement = {
                ScreensaverEntity: string;
                ScreensaverEntityText: string;
                /**
                 * Value wird mit diesem Factor multipliziert.
                 */
                ScreensaverEntityFactor?: number;
                ScreensaverEntityDecimalPlaces?: number;
                ScreensaverEntityDateFormat?: Intl.DateTimeFormatOptions;
                ScreensaverEntityIconOn?: string | null;
                ScreensaverEntityIconOff?: string | null;
                ScreensaverEntityUnitText?: string;
                ScreensaverEntityIconColor?: RGB | IconScaleElement | string;
                ScreensaverEntityOnColor?: RGB;
                ScreensaverEntityOffColor?: RGB;
                ScreensaverEntityOnText?: string | null;
                ScreensaverEntityOffText?: string | null;
                ScreensaverEntityNaviToPage?: PageType;
                /**
                 * To show different icons for different values in the screensaver
                 * 
                 * Value is the threshold for the icon. Lower values are first.
                 * Example:
                 * [
                            {icon: 'sun-thermometer', value:40},
                            {icon: 'sun-thermometer-outline', value: 35},
                            {icon: 'thermometer-high', value: 30},
                            {icon: 'thermometer', value: 25},
                            {icon: 'thermometer-low', value: 15},
                            {icon: 'snowflake-alert', value: 2},
                            {icon: 'snowflake-thermometer', value: -2},
                            {icon: 'snowflake', value: -10},
                            ]
                 */
                ScreensaverEntityIconSelect?: {icon: string; value: number}[] | null;
            };
        
            export type ScreenSaverMRElement = {
                ScreensaverEntity: string | null;
                ScreensaverEntityIconOn: string | null;
                ScreensaverEntityIconSelect?: {[key: string]: string} | null | undefined;
                ScreensaverEntityIconOff: string | null;
                ScreensaverEntityValue: string | null;
                ScreensaverEntityValueDecimalPlace: number | null;
                ScreensaverEntityValueUnit: string | null;
                ScreensaverEntityOnColor: RGB;
                ScreensaverEntityOffColor: RGB;
            };
            export type ScreenSaverMRDataElement = {
                ScreensaverEntity: string | number | boolean | null;
                ScreensaverEntityIconOn: string | null;
                ScreensaverEntityIconOff: string | null;
                ScreensaverEntityValue: string | number | boolean | null;
                ScreensaverEntityValueDecimalPlace: number | null;
                ScreensaverEntityValueUnit: string | null;
                ScreensaverEntityOnColor: RGB;
                ScreensaverEntityOffColor: RGB;
                ScreensaverEntityIconSelect: {[key: string]: string} | null;
            };
        
            export type IconScaleElement = {
                val_min: number;
                val_max: number;
                val_best?: number;
                /**
                 * The color mix mode. Default is 'mixed'.
                 * ‘mixed’: the target colour is achieved by scaling between the two RGB colours.
                 * 'cie': the target colour is achieved by mixing according to the CIE colour table. 
                 * 'hue': the target colour is calculated by scaling via colour, saturation and brightness.
                 */
                mode?: 'mixed' | 'hue' | 'cie';
                /**
                 * The logarithm scaling to max, min or leave undefined for linear scaling.
                 */
                log10?: 'max' | 'min';
            };
            /** we need this to have a nice order when using switch() */
            export type adapterPlayerInstanceType =
                | 'alexa2.0.'
                | 'alexa2.1.'
                | 'alexa2.2.'
                | 'alexa2.3.'
                | 'alexa2.4.'
                | 'alexa2.5.'
                | 'alexa2.6.'
                | 'alexa2.7.'
                | 'alexa2.8.'
                | 'alexa2.9.'
                | 'sonos.0.'
                | 'sonos.1.'
                | 'sonos.2.'
                | 'sonos.3.'
                | 'sonos.4.'
                | 'sonos.5.'
                | 'sonos.6.'
                | 'sonos.7.'
                | 'sonos.8.'
                | 'sonos.9.'
                | 'spotify-premium.0.'
                | 'spotify-premium.1.'
                | 'spotify-premium.2.'
                | 'spotify-premium.3.'
                | 'spotify-premium.4.'
                | 'spotify-premium.5.'
                | 'spotify-premium.6.'
                | 'spotify-premium.7.'
                | 'spotify-premium.8.'
                | 'spotify-premium.9.'
                | 'volumio.0.'
                | 'volumio.1.'
                | 'volumio.2.'
                | 'volumio.3.'
                | 'volumio.4.'
                | 'volumio.5.'
                | 'volumio.6.'
                | 'volumio.7.'
                | 'volumio.8.'
                | 'volumio.9.'
                | 'squeezeboxrpc.0.'
                | 'squeezeboxrpc.1.'
                | 'squeezeboxrpc.2.'
                | 'squeezeboxrpc.3.'
                | 'squeezeboxrpc.4.'
                | 'squeezeboxrpc.5.'
                | 'squeezeboxrpc.6.'
                | 'squeezeboxrpc.7.'
                | 'squeezeboxrpc.8.'
                | 'squeezeboxrpc.9.'
                | 'bosesoundtouch.0.'
                | 'bosesoundtouch.1.'
                | 'bosesoundtouch.2.'
                | 'bosesoundtouch.3.'
                | 'bosesoundtouch.4.'
                | 'bosesoundtouch.5.'
                | 'bosesoundtouch.6.'
                | 'bosesoundtouch.7.'
                | 'bosesoundtouch.8.'
                | 'bosesoundtouch.9.';
        
            export type PlayerType = _PlayerTypeWithMediaDevice | _PlayerTypeWithOutMediaDevice;
        
            export type _PlayerTypeWithOutMediaDevice = 'spotify-premium' | 'volumio' | 'bosesoundtouch';
            export type _PlayerTypeWithMediaDevice = 'alexa2' | 'sonos' | 'squeezeboxrpc';
        
            export type notSortedPlayerType =
                | `${PlayerType}.0.`
                | `${PlayerType}.1.`
                | `${PlayerType}.2.`
                | `${PlayerType}.3.`
                | `${PlayerType}.4.`
                | `${PlayerType}.5.`
                | `${PlayerType}.6.`
                | `${PlayerType}.7.`
                | `${PlayerType}.8.`
                | `${PlayerType}.9.`;
        
            export type mediaOptional =
                | 'seek'
                | 'crossfade'
                | 'speakerlist'
                | 'playlist'
                | 'tracklist'
                | 'equalizer'
                | 'repeat'
                | 'favorites';
        }
        configuration();
        

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

          @neuschwansteini sagte in Alphatest NSPanel-lovelace-ui v0.1.1:

          const config: ScriptConfig.Config = {
          panelTopic: 'NSPanel1/NSPanel1-BB',

          hier ein Fehler.

          da er die ID gelesen hat hat auch die Verbindung zum Panel geklappt.

          hast du noch Fehlermeldungen vom Starten des Script? Du musst das ConfigScript einmal Starten und wieder stoppen.

          ggf. zeige mal noch die Seite General von der UI

          Neuschwansteini 1 Reply Last reply Reply Quote 0
          • Neuschwansteini
            Neuschwansteini @TT-Tom last edited by

            @tt-tom

            und welcher Fehler ist das, ich versteh es leider nicht, wie es richtig sein muss.. ??
            Alias Errors kommen keine, das Script startet ohne Fehler.

            Seite General des Adapters:

            Screenshot 2025-02-28 at 11.57.05.png

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer last edited by ticaki

              Wir haben das per Voice geklärt. Für die die mitlesen -

              panelTopic im Skript muß den selben Eintrag haben, wie der panel topic im Admin. Daran erkennt der Adapter welches Panel konfiguriert werden soll.

              1 Reply Last reply Reply Quote 1
              • T
                ticaki Developer last edited by ticaki

                Bitte löscht den Ordner panels wenn ihr eine aktuelle Version zieht, hab da etwas umstrukturiert.

                In nspanel-lovelace-ui.0 wird im Objekt die Skriptkonfiguration gespeichert, wenn ihr den löscht müsst ihr die Konfig nochmal rüberschicken. Auch kein Problem, aber macht arbeit 🙂

                Und natürlich immer den Adapter neustarten, wenn ihr da was löscht.

                1 Reply Last reply Reply Quote 0
                • M
                  Max_yeah @ticaki last edited by

                  @ticaki Danke für die Erklärung und Klarstellung.

                  Allein der Vorteil durch die leichteren updates wäre es Wert umzusteigen, (sofern man die gleichen Funktionen hat).
                  Ich habe noch ein Panel rumliegen, mit dem ich das sobald ich zeit habe mal testen kann.
                  In einem produktiv einsatz wären aber PowerCard und Charts für mich essentiel.

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    ticaki Developer @Max_yeah last edited by

                    @max_yeah
                    Produktiv sehe ich leider noch kein Datum für - wir haben aktuell ca. 40% und davon 15% ausreichend getestet 🙂 Das installiert man um zu gucken und Einfluss zu nehmen - Wir sind für konsturktives Feedback auch negatives dankbar.

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      Max_yeah @ticaki last edited by

                      @ticaki natürlich, ist ein super Sache. Finde gefühlt Täglich neue Anwendungsmöglichkeiten für die Panels (Ob man die wirklich braucht ist eine andere sache xP ). Würde mich freuen wenn ich zum Erfolg etwas beisteuern kann.

                      H 1 Reply Last reply Reply Quote 1
                      • H
                        Hansi1234 @Max_yeah last edited by

                        @max_yeah kurz ot: z.B.?

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Max_yeah @Hansi1234 last edited by Max_yeah

                          @hansi1234 said in Alphatest NSPanel-lovelace-ui v0.1.1:

                          @max_yeah kurz ot: z.B.?

                          naja Geräte die ich im Haus habe (die zum Teil nicht smart sind) die ich dann damit steure oder deren Zustand anzeige. Aber auch Smarte Geräte die aktuell nur ich einstellen oder ablesen kann weil nur ich die App auf dem Handy hab. Zum Teil hat es auch nicht wirklich was mit dem Panel zu tun. Weil die Logic ja nicht auf dem Panel läuft. Das Panel dient dann nur als Anzeige oder als Alternative trigger methode zur Alexa.

                          Hier ein paar Beispiele.


                          Ein Beispiel ist, wir haben im Haus eine Lüftungsanlage. Die hatte bis zum Einzug nur einen Manuellen Drehschallter. Den hab ich dann erstmal gegen ein smart Relay getauscht. Das konnte ich dann schon über eine Alexa Routine steuern. War also noch relativ dumm. Jetzt dachte ich es wäre cool dafür auch so art Scenen zu erstellen. Das die Lüftung zb. Nachts im sommer bisschen mehr gas gibt um frische kühle luft ins Haus zu bringen, natürlich nur sofern die außen Temperatur < Innen Temperatur ist.
                          Dafür bräuchte man erstmal das Panel nicht, jedoch wäre es eben auch für andere Hausbewohner außer mir interessant welche Scene gereade läuft und diese eventuell zu ändern.

                          Anderes Beispiel ist, wir haben eine NAS für Datensicherungen. Diese geht aber automatisch in den Sleep Mode (ich will nicht das sie die ganze Zeit die Platten aktiv sind.
                          Drum hab ich mir jetzt einen Button ins panel gemacht das einen WOL(Wake On Lan) Befehl sendet. Damit muss ich nicht extra ins Büro laufen wenn ich die NAS aufwecken will.

                          Ich kann unseren Staubsauger Robotter, dessen App verküpung natürlich nur auf meinem Handy läuft, über das Panel starten. Das soll in zukunft noch ausgebaut werden, mit Werten über den Robbi sowie meldungen die er bringt bezüglich Verbrauchsgütern.
                          Das würde zum Teil natürlich auch über die Alexa gehen. Jedoch will ich eig bisschen weg von der sprachsteuerung, zumindest solange sie noch so "Dumm" ist und nur feste befehle befolgen kann. Mit der neuen Alexa+ könnte sich das natürlich ändern. Der Punkt ist das wenn man nicht den genauen Sprachbefehl kennt, dann kann man es nicht steuern. Auf dem Panel kamm man einfach danach suchen.

                          Die Anzeige der Solar Leistung ist warscheinlich üblich, die PowerCard liefert da einen super Überblick. Was in Zukunft dazu kommen soll, sobald wir ein eAuto haben, wird sein, das wir über das Panel steuern und einstellen können wann das Auto mit Solarstrom geladen werden soll. Und noch weiter wenn es mal soweit ist das man einen dynamischen Stromtarif hat.

                          1 Reply Last reply Reply Quote 0
                          • T
                            ticaki Developer last edited by ticaki

                            Kurz gemeldet

                            ab 0.1.5:
                            Wenn das Skript angepasst wird, muss zu jedem Bildschirmschonerelement noch die Eigenschaft type: "script" hinzugefügt werden.

                            0.1.5 ist ein bissle buggy, nix wirklich schlimmes aber lohnt nicht sich die fehler anzugucken

                            0.1.6 wird heute kommen und das ist dann schon deutlich besser

                            Neuschwansteini 1 Reply Last reply Reply Quote 1
                            • Neuschwansteini
                              Neuschwansteini @ticaki last edited by

                              @ticaki

                              freut mich, dass ihr so dran bleibt!
                              Bin mit meinem Testpanel wieder zurueck zum Script, mich hatte es ja erstmal nur interessiert, was muss ich am Panel aendern, was am iobroker..

                              Dann warte ich mal, bis ein "feuer frei fuer Beta tests" kommt.. 🙂

                              T 1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer @Neuschwansteini last edited by ticaki

                                @neuschwansteini sagte in Alphatest NSPanel-lovelace-ui v0.1.1:

                                Dann warte ich mal, bis ein "feuer frei fuer Beta tests" kommt.. 🙂

                                Roadmap ohne Datum sieht so aus:

                                0.2 Screensaver/cardGrid/cardEntities/Basisfunktionen laufen soweit und sind zum testen freigegeben
                                0.3 cardMedia ist verfügbar
                                0.4 alle cards sind verfügbar
                                0.5 erweiterte Funktionen (tasmota updates und ähnliches sind drin)

                                Kannst dann selbst entscheiden was du brauchst und wobei du dann helfen willst - aktuell ist der noch nix zum antesten. imho 🙂 Hab selbst nur ein unwichtiges Panel auf dem Adapter im produktiven Einsatz laufen.

                                P 1 Reply Last reply Reply Quote 1
                                • P
                                  patricknitsch @ticaki last edited by

                                  @ticaki Hi Ticaki,

                                  funktioniert denn die virtuelle Version über den Nextion Editor auch mit eurem Adapter? Würde ein normaler ESP32 Chip auch erkannt werden?

                                  Wäre ja zu Testzwecken auch interessant, da ich auch so mit dem Editor arbeite, um nicht ständig hinlaufen zu müssen.

                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    ticaki Developer @patricknitsch last edited by ticaki

                                    @patricknitsch
                                    Soweit ich weiß benutzt @Armilar das auf dem Emulator. Was nicht geht - man kann kein berry vom Adapter installieren lassen, soweit ich weiß ist das eine andere Version als die beim normalen NSpanel - Sind aber kaum richtige Bezeichnungen im Admin, nur Tokens für die Übersetzungen. Interner MQTT-Server ist gut getestet - aktuell nutzt das kaum wer mit einem Extern... Obwohl @TT-Tom hast du nicht einen externen am laufen?

                                    Kurze Einrichtungsanleitung für ein normales NSPanel

                                    Das hier sollte selbsterklärend sein - brokenCommen... bezieht sich auf info channels - da sind datenpunkte drunter die als common.type='state' haben - das ist natürlich vollkommen falsch - werden mit der option im ganzen alias.0 Datenzweig gefixt. Anschließend wird die option deaktiviert und der Adapter neugestartet.
                                    Bildschirmfoto 2025-03-16 um 13.38.33.png

                                    Dann das hinzufügen der Panels:
                                    Bildschirmfoto 2025-03-16 um 13.41.37.png

                                    -tasmotaIp: Die Ip des Gerätes das hinzugefügt/bearbeitet werden soll.
                                    -tasmotaName: Name des Gerätes der an vielen Stellen zu finden ist.
                                    -tasmotaTopic: Freiwählbarer kompletter Topic muss mit einem buchstaben anfangen - wenn da also 'a' steht, reicht das ist nur beim auseinanderhalten vielleicht nicht sinnvoll 🙂

                                    Ist das ausgefüllt werden die Schaltflächen unten aktiv - TasmotaSendTo stellt das NSPanel auf die Werte im Adapter und für den Adapter ein - keine Nutzer eingabe auf dem NSPanel nötig, außer man will was spezielles

                                    Diese Sachen werden geändert:

                                    ` MqttHost ${obj.message.mqttServer ? obj.message.internalServerIp : obj.message.mqttIp};` +
                                    ` MqttPort ${obj.message.mqttPort}; MqttUser ${obj.message.mqttUsername}; MqttPassword ${obj.message.mqttPassword};` +
                                    ` FullTopic ${`${obj.message.tasmotaTopic}/%prefix%/`.replaceAll('//', '/')};` +
                                    ` MqttRetry 10; FriendlyName1 ${obj.message.tasmotaName}; Hostname ${obj.message.tasmotaName.replaceAll(/[^a-zA-Z0-9_-]/g, '_')};` +
                                    ` WebLog 2; template {"NAME":"${obj.message.tasmotaName}", "GPIO":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],"FLAG":0,"BASE":1};` +
                                    ` Module 0; MqttClient ${obj.message.tasmotaName.replaceAll(/[^a-zA-Z0-9_-]/g, '_')}%06X;` +
                                    ` Restart 1`;
                                    

                                    Dann bitte 20 Sekunden warten - da muß ich noch ne "taasmota ist fertig" routine einbauen. Die das ganze blockiert bis er wieder da ist.

                                    Falls offene Änderungen aus einem der anderen Tabs nicht gespeichert sind, jetzt speichern
                                    Anschließend auf TasmotaAdd... klicken, das prüft ob der Tasmota über mqtt erreichbar ist und fügt ihn dann der oberen Tabelle hinzu - falls das geschieht, wird der browser neugeladen und der Tasmota ist eingetragen - alle nicht gespeicherten Änderungen gehen dabei aktuell verloren - deshalb speichern bevor du auf den Schalter drückst.


                                    Damit installierst du das aktuelle Berryscript (nicht für Emulator)
                                    Bildschirmfoto 2025-03-16 um 13.48.04.png


                                    Hiermit wird die aktuell von uns freigegebene TFT Version auf dem Tasmota installiert
                                    Bildschirmfoto 2025-03-16 um 13.48.51.png

                                    Bei beiden letzteren gibt es keine "ist fertig" anzeige.

                                    Noch fragen? Raus damit 🙂

                                    EDIT: Ich erkläre das so ausführlich, weils jemand anderes benutzen soll, so das wir wissen das es funktioniert.

                                    P 1 Reply Last reply Reply Quote 1
                                    • T
                                      ticaki Developer last edited by ticaki

                                      Zum Script - da bitte die Vorlage vergleich um die Unterschiede auszumachen, das ist noch lange nicht in der nähe von fertig.

                                      Merkpunkte für das Skript:

                                      Meine Panels die auf dem Adapter laufen, sind jetzt nach ca. 10 Minuten mit geringen umbauten (keine davon direkt an den Daten) betriebsbereit.

                                      Eine Page muß main heißen!
                                      Jede Page - muss einen uniqueName haben - jede Page muß entweder in pagesoder in subPages enthalten sein.
                                      Jedes parent muß ein String sein - ich hab da einfach um die Variablen ' ' gemacht und die uniqueName sind ebenfalls die Variablen namen der Seite.
                                      Jedes ScreensaverItem muß ein type: 'script', Property haben.
                                      Für den Screensaver gibts jetzt noch die beiden Arrays:

                                              favoritScreensaverEntity: [
                                                  {
                                                      type: 'template',
                                                      template: 'text.accuweather.favorit',
                                                      dpInit: `/^accuweather\\.0.+/`,
                                                      modeScr: 'favorit',
                                      // dat hier müsste gehen, habs aber im Forum geschrieben keine garantie - hm kann sein das es nur mit type: 'native', naitve: { template: 'text.accu... usw... geht
                                      //               data: {
                                      //                  entity2: {
                                      //                    value: { type: 'triggered', dp: 'meine.eigenen.temperaturen'}
                                      //                  }
                                      //               }
                                      
                                              ],
                                              alternateScreensaverEntity: [
                                                  // only used with alternate Screensaver
                                              ],
                                      

                                      button1 und button2 gibt es nicht mehr die heißen jetzt buttonLeft und buttonRight

                                      Die Typendefinition sieht so aus:

                                      export type ConfigButtonFunction =
                                              | {
                                                  /**
                                                   * Mode for navigating to a page.
                                                   *
                                                   */
                                                  mode: 'page';
                                                  /**
                                                   * The page to navigate to.
                                                   *
                                                   * @optional
                                                   */
                                                  page?: string;
                                              }
                                              | {
                                                  /**
                                                   * Mode for toggling a datapoint.
                                                   *
                                                   */
                                                  mode: 'switch';
                                                  /**
                                                   * The state of the datapoint to toggle.
                                                   *
                                                   */
                                                  state: string;
                                              }
                                              | {
                                                  /**
                                                   * Mode for triggering a button datapoint.
                                                   *
                                                   */
                                                  mode: 'button';
                                                  /**
                                                   * The state of the button datapoint to trigger.
                                                   *
                                                   */
                                                  state: string;
                                              }
                                              | null;
                                      

                                      Beispiel:

                                      buttonLeft: {
                                        mode: 'switch',
                                        state: 'irgendeineidzueinemschalter'
                                      }
                                      

                                      Edit: bei einigen Datenpunkten bekommt man eine Hilfe wenn man mit der Maus darüber hovert. Werden immer mehr werden.

                                      1 Reply Last reply Reply Quote 0
                                      • P
                                        patricknitsch @ticaki last edited by patricknitsch

                                        @ticaki Wollte es gerade mit der Version 0.1.8 ausprobieren. Ich kann aber im Feld "MQTT-Topic" nichts eingeben.

                                        8af3432a-2266-48d8-9a77-842f63cbf2d4-image.png

                                        Ebenso habe ich die Felder darunter ausgefüllt. Die Buttons werden aber nicht aktiviert. Oder passiert das nur, wenn das Gerät schon hinzugefügt wurde?

                                        a87d5569-11c6-46ab-851f-28f581105015-image.png

                                        Edit: Der erste Versuch war mit dem Safari Browser. In Chrome kann das Feld zwar ausgewählt werden, eine Eingabe ist aber auch da nicht möglich.

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          ticaki Developer @patricknitsch last edited by ticaki

                                          @patricknitsch bitte von GitHub installieren da sind heute noch wichtige fehlerbehebungen eingeflossen. Der Adapter muss aktiviert sein und laufen.

                                          P 1 Reply Last reply Reply Quote 0
                                          • P
                                            patricknitsch @ticaki last edited by

                                            @ticaki Der Adapter läuft. Hab die aktuellste Version von Github gezogen. Ich kann trotzdem nichts bei MQTT Topic eintragen

                                            T 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            792
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            54
                                            2681
                                            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