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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI (TypeScript Version)

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    309

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

SONOFF NSPanel mit Lovelace UI (TypeScript Version)

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
8.0k Posts 277 Posters 7.2m Views 262 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I icemanmw

    @armilar
    vielen Dank.... funktioniert alles perfekt. schönen Abend

    J Offline
    J Offline
    joBr99
    wrote on last edited by joBr99
    #2532

    @icemanmw

    zuerst hing ich an der Tasmota Version, wollte das ganze gerne in Deutsch und das ging dann nur mir der tasmota32-de.bin - Matthias hatte im Video gesagt man muss die tasmota32-nspanel.bin nehmen sollte bezüglich HASPmoto - welche Version ist jetzt richtiger!?

    In früheren Versionen brauchte man zwingend die nspanel Version; weil beim flashen mehr zwischengespeichert wurde, bevor es auf das panel gewandert ist, d.h. mehr (PS)RAM gebraucht wurde, aktuell geht beides. (Hab auch ein Panel mit der normalen Version, weil ich da das Shutter zeug von tasmota brauche, welches in der nspanel version nicht vorhanden ist)

    Ansonsten sollte die folgenden Einschränkungen weiterhin gelten:

    If using standard Tasmota32 builds: Current implementation of serial in Arduino core has a bug which can boot loop the device on soft reset. Power cycling the device solves the issue. PSRAM is also not supported.

    https://templates.blakadder.com/sonoff_NSPanel.html

    1 Reply Last reply
    0
    • D Offline
      D Offline
      danny_v1
      wrote on last edited by
      #2533

      Hallo, ich habe mich heute mal an die WLED Seite gewagt. Leider mit mäßigem Erfolg, bis auf ein- und ausschalten und Sync ein und aus funktioniert sonst nichts. Ich denke ich habe alles so wie in der Anleitung gemacht.

      T 1 Reply Last reply
      0
      • D danny_v1

        Hallo, ich habe mich heute mal an die WLED Seite gewagt. Leider mit mäßigem Erfolg, bis auf ein- und ausschalten und Sync ein und aus funktioniert sonst nichts. Ich denke ich habe alles so wie in der Anleitung gemacht.

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

        Hi @danny_v1
        ich ver suche dir mal zu helfen, habe zwar WLED hier am laufen, aber als RGBSingle.

        ich gehe mal davon aus, dass die Datenpunkte (Alias und 0_userdata) alle richtig angelegt sind.

        • Kannst du denn auf dem Panel alle Punkte sehen?

        • Zeige bitte mal die PageConfig aus dem PanelScript.

        • Zeige bitte mal das JS, welches du separat anlegen musst.

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

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

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

        D 1 Reply Last reply
        0
        • T TT-Tom

          @marc_d0810 sagte in SONOFF NSPanel mit Lovelace UI:

          MQTT im iOBroker läuft und bekommt anscheinend auch die Werte vom Display gesendet.

          Kannst du bitte mal den Inhalt vom MQTT Datenpunkt NSPanel.cmnd.CustomSend zeigen.

          Skript läuft auch und es tauchen keine Fehler auf.

          Hast du das Script bzw. die Java Instanz mal neu gestartet ?

          M Offline
          M Offline
          marc_d0810
          wrote on last edited by
          #2535

          Hey Tom,

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

          @marc_d0810 sagte in SONOFF NSPanel mit Lovelace UI:

          MQTT im iOBroker läuft und bekommt anscheinend auch die Werte vom Display gesendet.

          Kannst du bitte mal den Inhalt vom MQTT Datenpunkt NSPanel.cmnd.CustomSend zeigen.
          Ja klar:
          Bildschirm­foto 2023-03-14 um 19.23.45.png
          Und so sieht es in der Tasmota Console aus:
          Bildschirm­foto 2023-03-14 um 19.23.35.png

          Skript läuft auch und es tauchen keine Fehler auf.

          Hast du das Script bzw. die Java Instanz mal neu gestartet ?

          Ja wurde alles schon mehrfach neugestartet. :-(

          T 1 Reply Last reply
          0
          • ArmilarA Armilar

            @marc_d0810

            Kann es sein, dass irgendetwas um 00:30 mit dem Router passiert ist?

            Bekommt das Panel keine Daten mehr, dann bleibt es in der Urzeit stehen. Sieht auch so aus, als würde es keine Daten mehr empfangen. Spricht alles dafür das die IP des Panels sich geändert hat oder MQTT sich weggehängt hat. Also eher eine Kommunikationsgeschichte. Hat das Panel eine statische IP?

            M Offline
            M Offline
            marc_d0810
            wrote on last edited by
            #2536

            @armilar said in SONOFF NSPanel mit Lovelace UI:

            @marc_d0810

            Kann es sein, dass irgendetwas um 00:30 mit dem Router passiert ist?

            Bekommt das Panel keine Daten mehr, dann bleibt es in der Urzeit stehen. Sieht auch so aus, als würde es keine Daten mehr empfangen. Spricht alles dafür das die IP des Panels sich geändert hat oder MQTT sich weggehängt hat. Also eher eine Kommunikationsgeschichte. Hat das Panel eine statische IP?

            Hey,
            also am Router konnte ich nichts in den Logs sehen.
            Das Panel hat eine statische IP.
            Daten werden ja anscheinend per MQTT hin und her gesendet, aber das war es dann auch.

            1 Reply Last reply
            0
            • T TT-Tom

              Hi @danny_v1
              ich ver suche dir mal zu helfen, habe zwar WLED hier am laufen, aber als RGBSingle.

              ich gehe mal davon aus, dass die Datenpunkte (Alias und 0_userdata) alle richtig angelegt sind.

              • Kannst du denn auf dem Panel alle Punkte sehen?

              • Zeige bitte mal die PageConfig aus dem PanelScript.

              • Zeige bitte mal das JS, welches du separat anlegen musst.

              D Offline
              D Offline
              danny_v1
              wrote on last edited by
              #2537

              @tt-tom Ja auf dem Panel sehe ich alles.

              Hier die PageConfig

              let WLED_Bad= <PageGrid>
                                      {
                                          "type": "cardGrid",
                                          "heading": "WLED",
                                          "useColor": true,
                                          "subPage": true,
                                          "parent": Bad,
                                          "items": [
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Power", name: "Power", icon: "power", onColor: Blue, offColor: HMIOff},
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Synch", name: "Sync", icon: "sync", onColor: Blue, offColor: White},
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Timer", name: "Timer", icon: "moon-waxing-crescent", onColor: Blue, offColor: White},
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Presets", icon: "heart-outline", name: "Presets", onColor: White, modeList: ['Rainbow', 'Lake']},
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Colors", icon: "palette", name: "Colors", onColor: White,
                                                          modeList: ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc']},
                                              <PageItem>{ id: "alias.0.Bad.BadWLED.Effects", icon: "emoticon-outline", name: "Effects", onColor: White,
                                                          modeList: ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc']},
                                              //<PageItem>{ id: "alias.0.NSPanel_1.WLED.Example.Segments", icon: "layers", name: "Segments", onColor: White, modeList: ['Segment 0', 'Add Segment']},
                                          ]
                                      };
              
              

              und hier das JS Skript

              // Pfad zum WLED-Modul
              const wledPath = 'wled.0.ecfabcc58b7f.';
              
              // Pfad zu 0_userdata Datenpunkten
              const userdataPath = '0_userdata.0.BadWLED.';
              
              // WLED Effektliste als Konstante (Favoriten)
              // Listen müssen gleiche Werte wie im Panel haben
              
              const presetList =    ['Rainbow', 'Lake'];
                      
              const colorsList =    ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 
                                      'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 
                                      'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc'
                                  ];
                      
              const effectsList =   ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 
                                  'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 
                                  'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc'
                                  ];
              
              on({id: userdataPath + 'Presets', change: "ne"}, async function (obj) {
                  console.log(wledPath + 'ps' + ' = ' + obj.state.val);
                  setState(wledPath + 'ps', obj.state.val)
              });
              
              // Trigger auf NSPanel Colors
              on({id: userdataPath + 'Colors', change: "ne"}, async function (obj) {
                  let wledObj = getObject(wledPath + 'seg.0.pal');
                  let tempStringColor = colorsList[obj.state.val]
              
                  for (let i = 1; i < 71; i++) {
                      if (wledObj.common.states[i] == undefined) {
                          break;
                      }
                      if (wledObj.common.states[i] == tempStringColor) {
                          console.log(i + ' - ' + wledObj.common.states[i]);
                          setState(wledPath + 'seg.0.pal', i)
                          break;
                      }
                  }
              });
              
              // Trigger auf NSPanel Effekte
              on({id: userdataPath + 'Effects', change: "ne"}, async function (obj) {
                  let wledObj = getObject(wledPath + 'seg.0.fx');
                  let tempStringEffect = effectsList[obj.state.val]
              
                  for (let i = 1; i < 118; i++) {
                      if (wledObj.common.states[i] == undefined) {
                          break;
                      }
                      if (wledObj.common.states[i] == tempStringEffect) {
                          console.log(i + ' - ' + wledObj.common.states[i]);
                          setState(wledPath + 'seg.0.fx', i)
                          break;
                      }
                  }
              });
              

              Danke schon mal für die Hilfe!!!

              D T 2 Replies Last reply
              0
              • D danny_v1

                @tt-tom Ja auf dem Panel sehe ich alles.

                Hier die PageConfig

                let WLED_Bad= <PageGrid>
                                        {
                                            "type": "cardGrid",
                                            "heading": "WLED",
                                            "useColor": true,
                                            "subPage": true,
                                            "parent": Bad,
                                            "items": [
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Power", name: "Power", icon: "power", onColor: Blue, offColor: HMIOff},
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Synch", name: "Sync", icon: "sync", onColor: Blue, offColor: White},
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Timer", name: "Timer", icon: "moon-waxing-crescent", onColor: Blue, offColor: White},
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Presets", icon: "heart-outline", name: "Presets", onColor: White, modeList: ['Rainbow', 'Lake']},
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Colors", icon: "palette", name: "Colors", onColor: White,
                                                            modeList: ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc']},
                                                <PageItem>{ id: "alias.0.Bad.BadWLED.Effects", icon: "emoticon-outline", name: "Effects", onColor: White,
                                                            modeList: ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc']},
                                                //<PageItem>{ id: "alias.0.NSPanel_1.WLED.Example.Segments", icon: "layers", name: "Segments", onColor: White, modeList: ['Segment 0', 'Add Segment']},
                                            ]
                                        };
                
                

                und hier das JS Skript

                // Pfad zum WLED-Modul
                const wledPath = 'wled.0.ecfabcc58b7f.';
                
                // Pfad zu 0_userdata Datenpunkten
                const userdataPath = '0_userdata.0.BadWLED.';
                
                // WLED Effektliste als Konstante (Favoriten)
                // Listen müssen gleiche Werte wie im Panel haben
                
                const presetList =    ['Rainbow', 'Lake'];
                        
                const colorsList =    ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 
                                        'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 
                                        'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc'
                                    ];
                        
                const effectsList =   ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 
                                    'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 
                                    'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc'
                                    ];
                
                on({id: userdataPath + 'Presets', change: "ne"}, async function (obj) {
                    console.log(wledPath + 'ps' + ' = ' + obj.state.val);
                    setState(wledPath + 'ps', obj.state.val)
                });
                
                // Trigger auf NSPanel Colors
                on({id: userdataPath + 'Colors', change: "ne"}, async function (obj) {
                    let wledObj = getObject(wledPath + 'seg.0.pal');
                    let tempStringColor = colorsList[obj.state.val]
                
                    for (let i = 1; i < 71; i++) {
                        if (wledObj.common.states[i] == undefined) {
                            break;
                        }
                        if (wledObj.common.states[i] == tempStringColor) {
                            console.log(i + ' - ' + wledObj.common.states[i]);
                            setState(wledPath + 'seg.0.pal', i)
                            break;
                        }
                    }
                });
                
                // Trigger auf NSPanel Effekte
                on({id: userdataPath + 'Effects', change: "ne"}, async function (obj) {
                    let wledObj = getObject(wledPath + 'seg.0.fx');
                    let tempStringEffect = effectsList[obj.state.val]
                
                    for (let i = 1; i < 118; i++) {
                        if (wledObj.common.states[i] == undefined) {
                            break;
                        }
                        if (wledObj.common.states[i] == tempStringEffect) {
                            console.log(i + ' - ' + wledObj.common.states[i]);
                            setState(wledPath + 'seg.0.fx', i)
                            break;
                        }
                    }
                });
                

                Danke schon mal für die Hilfe!!!

                D Offline
                D Offline
                danny_v1
                wrote on last edited by
                #2538

                Und gleich noch eine Frage, gibt es eine Möglichkeit eine Zeichenkette oder JSON anzuzeigen als Info oder änliches?

                Ich möchte z.B. anzeigen wie viele Fenster offen sind und wenn ich dann auf einen Button klicke (so wie im Service Menü der "mehr..." Button auf eine Seite navigieren, die mir als Liste die geöffneten Fenster anzeigt.

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  TT-Tom
                  wrote on last edited by
                  #2539

                  @danny_v1
                  Es gibt eine Möglichkeit hier mal nachlesen

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

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

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

                  D 1 Reply Last reply
                  0
                  • T TT-Tom

                    @danny_v1
                    Es gibt eine Möglichkeit hier mal nachlesen

                    D Offline
                    D Offline
                    danny_v1
                    wrote on last edited by
                    #2540

                    @tt-tom
                    Also wenn ich es richtig verstanden habe muss ich einfach bei name: ein getstate einbauen und der Text wird dann dynamisch.

                    ArmilarA 1 Reply Last reply
                    0
                    • D danny_v1

                      @tt-tom Ja auf dem Panel sehe ich alles.

                      Hier die PageConfig

                      let WLED_Bad= <PageGrid>
                                              {
                                                  "type": "cardGrid",
                                                  "heading": "WLED",
                                                  "useColor": true,
                                                  "subPage": true,
                                                  "parent": Bad,
                                                  "items": [
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Power", name: "Power", icon: "power", onColor: Blue, offColor: HMIOff},
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Synch", name: "Sync", icon: "sync", onColor: Blue, offColor: White},
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Timer", name: "Timer", icon: "moon-waxing-crescent", onColor: Blue, offColor: White},
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Presets", icon: "heart-outline", name: "Presets", onColor: White, modeList: ['Rainbow', 'Lake']},
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Colors", icon: "palette", name: "Colors", onColor: White,
                                                                  modeList: ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc']},
                                                      <PageItem>{ id: "alias.0.Bad.BadWLED.Effects", icon: "emoticon-outline", name: "Effects", onColor: White,
                                                                  modeList: ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc']},
                                                      //<PageItem>{ id: "alias.0.NSPanel_1.WLED.Example.Segments", icon: "layers", name: "Segments", onColor: White, modeList: ['Segment 0', 'Add Segment']},
                                                  ]
                                              };
                      
                      

                      und hier das JS Skript

                      // Pfad zum WLED-Modul
                      const wledPath = 'wled.0.ecfabcc58b7f.';
                      
                      // Pfad zu 0_userdata Datenpunkten
                      const userdataPath = '0_userdata.0.BadWLED.';
                      
                      // WLED Effektliste als Konstante (Favoriten)
                      // Listen müssen gleiche Werte wie im Panel haben
                      
                      const presetList =    ['Rainbow', 'Lake'];
                              
                      const colorsList =    ['Default', '* Color 1', '* Color Gradient', '* Colors 1&2', '* Colors Only', '* Random Cycle', 'Analogus','April Night', 'Aqua Flash', 'Atlantica', 'Aurora', 
                                              'Beach', 'Beech', 'Blink Red', 'Breeze', 'C9', 'C9 New', 'Candy', 'Candy2', 'Cloud', 
                                              'Cyane', 'Departure', 'Drywet', 'Fairy Reaf', 'Fire', 'Forest', 'etc'
                                          ];
                              
                      const effectsList =   ['Solid', 'Android', 'Aurora', 'Blends', 'Blink', 'Blink Rainbow', 'Bouncing Balls','Bpm', 'Breathe', 'Candle', 'Candle Multi', 
                                          'Candy Cane', 'Chase', 'Chase 1', 'Chase 2', 'Chase 3', 'Chase Flash', 'Chase Flash Rnd', 'Chase Rainbow', 'Chase Random', 
                                          'Chunchun', 'Colorful', 'Colorloop', 'Colortwinkles', 'Colorwaves', 'Dancing Shadows', 'etc'
                                          ];
                      
                      on({id: userdataPath + 'Presets', change: "ne"}, async function (obj) {
                          console.log(wledPath + 'ps' + ' = ' + obj.state.val);
                          setState(wledPath + 'ps', obj.state.val)
                      });
                      
                      // Trigger auf NSPanel Colors
                      on({id: userdataPath + 'Colors', change: "ne"}, async function (obj) {
                          let wledObj = getObject(wledPath + 'seg.0.pal');
                          let tempStringColor = colorsList[obj.state.val]
                      
                          for (let i = 1; i < 71; i++) {
                              if (wledObj.common.states[i] == undefined) {
                                  break;
                              }
                              if (wledObj.common.states[i] == tempStringColor) {
                                  console.log(i + ' - ' + wledObj.common.states[i]);
                                  setState(wledPath + 'seg.0.pal', i)
                                  break;
                              }
                          }
                      });
                      
                      // Trigger auf NSPanel Effekte
                      on({id: userdataPath + 'Effects', change: "ne"}, async function (obj) {
                          let wledObj = getObject(wledPath + 'seg.0.fx');
                          let tempStringEffect = effectsList[obj.state.val]
                      
                          for (let i = 1; i < 118; i++) {
                              if (wledObj.common.states[i] == undefined) {
                                  break;
                              }
                              if (wledObj.common.states[i] == tempStringEffect) {
                                  console.log(i + ' - ' + wledObj.common.states[i]);
                                  setState(wledPath + 'seg.0.fx', i)
                                  break;
                              }
                          }
                      });
                      

                      Danke schon mal für die Hilfe!!!

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

                      @danny_v1

                      Muss das Thema mal nach hinten schieben und bei mir erstmal einrichten und nachvollziehen. Vielleicht kann aber schon ein anderer User helfen

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

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

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

                      1 Reply Last reply
                      0
                      • D danny_v1

                        @tt-tom
                        Also wenn ich es richtig verstanden habe muss ich einfach bei name: ein getstate einbauen und der Text wird dann dynamisch.

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

                        @danny_v1

                        Also wenn ich es richtig verstanden habe muss ich einfach bei name: ein getstate einbauen und der Text wird dann dynamisch.

                        ja, aber das getState als String übergeben name: "getState(...)"

                        Daher dann auch auf Groß- und Kleinschreibung achten, da im String keine Syntaxprüfung erfolgt.

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

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

                        D 1 Reply Last reply
                        0
                        • M marc_d0810

                          Hey Tom,

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

                          @marc_d0810 sagte in SONOFF NSPanel mit Lovelace UI:

                          MQTT im iOBroker läuft und bekommt anscheinend auch die Werte vom Display gesendet.

                          Kannst du bitte mal den Inhalt vom MQTT Datenpunkt NSPanel.cmnd.CustomSend zeigen.
                          Ja klar:
                          Bildschirm­foto 2023-03-14 um 19.23.45.png
                          Und so sieht es in der Tasmota Console aus:
                          Bildschirm­foto 2023-03-14 um 19.23.35.png

                          Skript läuft auch und es tauchen keine Fehler auf.

                          Hast du das Script bzw. die Java Instanz mal neu gestartet ?

                          Ja wurde alles schon mehrfach neugestartet. :-(

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

                          @marc_d0810

                          Deine Ausgaben in der Konsole sehen anders aus als bei mir. Vielleicht kann @Armilar nochmal rüber schauen. Dein MQTT sieht eigentlich richtig aus.

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

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

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

                          ArmilarA 1 Reply Last reply
                          0
                          • ArmilarA Armilar

                            @danny_v1

                            Also wenn ich es richtig verstanden habe muss ich einfach bei name: ein getstate einbauen und der Text wird dann dynamisch.

                            ja, aber das getState als String übergeben name: "getState(...)"

                            Daher dann auch auf Groß- und Kleinschreibung achten, da im String keine Syntaxprüfung erfolgt.

                            D Offline
                            D Offline
                            danny_v1
                            wrote on last edited by
                            #2544

                            @armilar
                            Ok alles klar, vielen Dank! Werd ich morgen mal testen.

                            Hat jemand noch einen Tipp zu dem WLED Problem?

                            ArmilarA T 3 Replies Last reply
                            0
                            • T TT-Tom

                              @marc_d0810

                              Deine Ausgaben in der Konsole sehen anders aus als bei mir. Vielleicht kann @Armilar nochmal rüber schauen. Dein MQTT sieht eigentlich richtig aus.

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

                              @tt-tom @marc_d0810

                              Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                              Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

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

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

                              M 1 Reply Last reply
                              0
                              • D danny_v1

                                @armilar
                                Ok alles klar, vielen Dank! Werd ich morgen mal testen.

                                Hat jemand noch einen Tipp zu dem WLED Problem?

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

                                @danny_v1

                                Hat jemand noch einen Tipp zu dem WLED Problem?

                                Müsste erstmal sehen, wo das Problem ist. Hatte gelesen, dass im Panel alles okay ist. Werden irgendwelche Fehler im Log ausgelöst, wenn du etwas auswählst?

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

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

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

                                  Wenn man außer Zahlen auch Text in der untersten Zeile anzeigen lassen will :

                                  da919a68-66b2-4afb-9687-7e1522fcc12c-image.png

                                  Die Entity muss dann als Value den Typ "string" haben.

                                   mrIcon1ScreensaverEntity: 
                                          { 
                                              ScreensaverEntity: '0_userdata.0.trashschedule.0.next.type', 
                                              ScreensaverEntityIconOn: null,,                   
                                              ScreensaverEntityIconOff: null, 
                                              ScreensaverEntityValue: '0_userdata.0.trashschedule.0.next.type',     
                                              ScreensaverEntityValueDecimalPlace : 0,                         
                                              ScreensaverEntityValueUnit: null,                               
                                              ScreensaverEntityOnColor: MSRed, 
                                              ScreensaverEntityOffColor: Yellow
                                          },
                                  

                                  Allerdings ist der Text auf 10 Zeichen begrenzt. Ich habe bei mir das HMI angepasst, deshalb geht da mehr rein.
                                  Aber evtl hat ja @joBr99 bald eine Lösung.

                                  Und bei mir ist nicht so kalt, das ist die Simulation :blush:

                                  Änderung im Script ( markiert mit //gargano) :

                                  
                                  // gargano new function
                                  function getMRIconcSreensaverValue (thisMRElement:ScreenSaverMRElement)
                                  {
                                      let payloadString='';
                                      if (thisMRElement.ScreensaverEntityValue != null) {
                                          if (typeof (getState(thisMRElement.ScreensaverEntityValue).val) == 'string') {
                                              payloadString = (getState(thisMRElement.ScreensaverEntityValue).val);
                                          } else {
                                              payloadString = (getState(thisMRElement.ScreensaverEntityValue).val).toFixed(thisMRElement.ScreensaverEntityValueDecimalPlace);
                                              payloadString += thisMRElement.ScreensaverEntityValueUnit;                        
                                          }                             
                                      }
                                      return payloadString;
                                  }
                                  
                                  function HandleScreensaverStatusIcons() : void {
                                      try {
                                          let payloadString = '';
                                          let hwBtn1Col: any = config.mrIcon1ScreensaverEntity.ScreensaverEntityOffColor;
                                          if (config.mrIcon1ScreensaverEntity.ScreensaverEntity != null) {
                                              if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'string') {
                                                  let hwBtn1: string = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val;
                                                  if (hwBtn1 == 'ON') {
                                                      hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
                                                  }
                                                  if (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) {
                                                      payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
                                                  } else {
                                                      if (config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff != null) {
                                                          payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff);
                                                      } else {
                                                          payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
                                                      }
                                                  } 
                                                  // gargano 
                                                  payloadString += getMRIconcSreensaverValue (config.mrIcon1ScreensaverEntity);
                                                  payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
                                              } else if (typeof (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) == 'boolean') {
                                                  let hwBtn1: boolean = getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val;
                                                  if (hwBtn1) {
                                                      hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
                                                  }
                                                  if (getState(config.mrIcon1ScreensaverEntity.ScreensaverEntity).val) {
                                                      payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
                                                  } else {
                                                      if (config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff != null) {
                                                          payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOff);
                                                      } else {
                                                          payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
                                                      }
                                                  } 
                                                  // gargano 
                                                  payloadString += getMRIconcSreensaverValue (config.mrIcon1ScreensaverEntity);
                                                  payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
                                              }
                                          } else if (config.mrIcon1ScreensaverEntity.ScreensaverEntity == null && config.mrIcon1ScreensaverEntity.ScreensaverEntityValue != null){
                                              
                                              if(config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor != null){
                                                  hwBtn1Col = config.mrIcon1ScreensaverEntity.ScreensaverEntityOnColor;
                                              }
                                              if(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn != null){
                                                  payloadString += Icons.GetIcon(config.mrIcon1ScreensaverEntity.ScreensaverEntityIconOn);
                                              }
                                              // gargano 
                                              payloadString += getMRIconcSreensaverValue (config.mrIcon1ScreensaverEntity);
                                              payloadString += '~' + rgb_dec565(hwBtn1Col) + '~';
                                          }
                                          else {
                                              hwBtn1Col = Black;
                                              payloadString += '~~';
                                          }
                                  
                                          let hwBtn2Col: any = config.mrIcon2ScreensaverEntity.ScreensaverEntityOffColor;
                                          if (config.mrIcon2ScreensaverEntity.ScreensaverEntity != null) {
                                              if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'string') {
                                                  let hwBtn2: string = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val;
                                                  if (hwBtn2 == 'ON') {
                                                      hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
                                                  }
                                                  if (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) {
                                                      payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
                                                  } else {
                                                      if (config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff != null) {
                                                          payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff);
                                                      } else {
                                                          payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
                                                      }
                                                  } 
                                                   // gargano 
                                                  payloadString += getMRIconcSreensaverValue (config.mrIcon2ScreensaverEntity);
                                                  payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
                                              } else if (typeof (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) == 'boolean') {
                                                  let hwBtn2: boolean = getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val;
                                                  if (hwBtn2) {
                                                      hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
                                                  }
                                                  if (getState(config.mrIcon2ScreensaverEntity.ScreensaverEntity).val) {
                                                      payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
                                                  } else {
                                                      if (config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff != null) {
                                                          payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOff);
                                                      } else {
                                                          payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
                                                      }
                                                  } 
                                                   // gargano 
                                                  payloadString += getMRIconcSreensaverValue (config.mrIcon2ScreensaverEntity);
                                                  payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
                                              }
                                          } else if (config.mrIcon2ScreensaverEntity.ScreensaverEntity == null && config.mrIcon2ScreensaverEntity.ScreensaverEntityValue != null){
                                              
                                              if(config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor != null){
                                                  hwBtn2Col = config.mrIcon2ScreensaverEntity.ScreensaverEntityOnColor;
                                              }
                                  
                                              if(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn != null){
                                                  payloadString += Icons.GetIcon(config.mrIcon2ScreensaverEntity.ScreensaverEntityIconOn);
                                              }
                                              // gargano 
                                              payloadString += getMRIconcSreensaverValue (config.mrIcon2ScreensaverEntity);
                                              payloadString += '~' + rgb_dec565(hwBtn2Col) + '~';
                                          } else {
                                              hwBtn2Col = Black;
                                              payloadString += '~~';
                                          }
                                  
                                          let alternateScreensaverMFRIcon1Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.1').val
                                          let alternateScreensaverMFRIcon2Size = getState(NSPanel_Path + 'Config.MRIcons.alternateMRIconSize.2').val
                                          //Alternate MRIcon Size
                                          if (alternateScreensaverMFRIcon1Size) {
                                              payloadString += '1~';
                                          } else {
                                              payloadString += '~';
                                          }
                                          if (alternateScreensaverMFRIcon2Size) {
                                              payloadString += '1~';
                                          } else {
                                              payloadString += '~';
                                          }
                                  
                                          SendToPanel(<Payload>{ payload: 'statusUpdate~' + payloadString });
                                  
                                      } catch (err) {
                                          console.log('HandleScreensaverStatusIcons: ' + err.message);
                                      }
                                  }
                                  
                                  
                                  B 1 Reply Last reply
                                  1
                                  • D danny_v1

                                    @armilar
                                    Ok alles klar, vielen Dank! Werd ich morgen mal testen.

                                    Hat jemand noch einen Tipp zu dem WLED Problem?

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

                                    @danny_v1

                                    so habe es bei mir mal eingestellt. Funktioniert mit den Standards aus dem Wiki.
                                    Kontrolliere bitte deine Datenpunkte unter 0_userdata, ob die sich ändern, wenn du die Effekte oder Farbe veränderst.

                                    Gleichzeitig kannst du im Log kontrolieren, ob das Script mitarbeitet.

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

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

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

                                    D 1 Reply Last reply
                                    0
                                    • ArmilarA Armilar

                                      @tt-tom @marc_d0810

                                      Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                                      Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

                                      M Offline
                                      M Offline
                                      marc_d0810
                                      wrote on last edited by marc_d0810
                                      #2549

                                      @armilar said in SONOFF NSPanel mit Lovelace UI:

                                      @tt-tom @marc_d0810

                                      Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                                      Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

                                      @armilar said in SONOFF NSPanel mit Lovelace UI:

                                      @tt-tom @marc_d0810

                                      Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                                      Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

                                      Ja ich hatte mal an irgendeiner Stelle das Loglevel hochgesetzt.
                                      Hatte Gestern auch nochmal versucht das TFT mit der aktuellsten Version zu flashen, aber da komme ich wieder bei dem alten Fehler an. :-(
                                      Something gone wrong....

                                      Was ich Gestern noch gesehen habe, waren die Datenpunkte vom TFT.
                                      Muss die Version so aussehen?

                                      Bildschirm­foto 2023-03-15 um 18.57.24.png

                                      Wie kann ich den den BerryDriver checken?

                                      ArmilarA 1 Reply Last reply
                                      0
                                      • M marc_d0810

                                        @armilar said in SONOFF NSPanel mit Lovelace UI:

                                        @tt-tom @marc_d0810

                                        Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                                        Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

                                        @armilar said in SONOFF NSPanel mit Lovelace UI:

                                        @tt-tom @marc_d0810

                                        Sieht soweit okay aus. Hast du da irgendetwas eingestellt, dass das Log so ausführlich ist?

                                        Hast du mal versucht nachzusehen, ob der Berry-Driver okay ist? Ansonsten da nochmal die Dateien rauswerfen und erneuern.

                                        Ja ich hatte mal an irgendeiner Stelle das Loglevel hochgesetzt.
                                        Hatte Gestern auch nochmal versucht das TFT mit der aktuellsten Version zu flashen, aber da komme ich wieder bei dem alten Fehler an. :-(
                                        Something gone wrong....

                                        Was ich Gestern noch gesehen habe, waren die Datenpunkte vom TFT.
                                        Muss die Version so aussehen?

                                        Bildschirm­foto 2023-03-15 um 18.57.24.png

                                        Wie kann ich den den BerryDriver checken?

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

                                        @marc_d0810

                                        Den Berry analog der Wiki-Beschreibung. Alle Dateien (autoexec.be, autoexec.bec, ...) rauswerfen (Flammensymbol) und dann nach einem Tasmota-Neustart den Berry-Treiber neu erstellen. Dann erneut Rebooten...

                                        Kann auch daran liegen, dass die Version nicht ermittelt werden kann. Ebenso, dass das TFT sich nicht flashen lässt.

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

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

                                        M 1 Reply Last reply
                                        0
                                        • ArmilarA Armilar

                                          @marc_d0810

                                          Den Berry analog der Wiki-Beschreibung. Alle Dateien (autoexec.be, autoexec.bec, ...) rauswerfen (Flammensymbol) und dann nach einem Tasmota-Neustart den Berry-Treiber neu erstellen. Dann erneut Rebooten...

                                          Kann auch daran liegen, dass die Version nicht ermittelt werden kann. Ebenso, dass das TFT sich nicht flashen lässt.

                                          M Offline
                                          M Offline
                                          marc_d0810
                                          wrote on last edited by
                                          #2551

                                          @armilar Ich habe alles nochmal rausgeworfen und neu gemacht.
                                          Aber es sieht schlecht aus :-(

                                          Bildschirm­foto 2023-03-16 um 06.50.46.png

                                          Ist das Ding jetzt für die Tonne?

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          554

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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