Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Betatest Adapter NSPanel-lovelace-ui v0.13.x

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    443

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

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

Betatest Adapter NSPanel-lovelace-ui v0.13.x

Geplant Angeheftet Gesperrt Verschoben Tester
981 Beiträge 30 Kommentatoren 169.4k Aufrufe 35 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T ticaki

    Ja sind nur 100ms - ne Sekunde wird aufwendiger kannst du, wenn es deine faähigkeiiten mit Blockes zu lassen mal schauen ob 250ms oder 500ms reichen?

    1 Online
    1 Online
    13patrick37
    schrieb am zuletzt editiert von
    #939

    @ticaki sagte in Betatest Adapter NSPanel-lovelace-ui v0.13.x:

    Ja sind nur 100ms - ne Sekunde wird aufwendiger kannst du, wenn es deine faähigkeiiten mit Blockes zu lassen mal schauen ob 250ms oder 500ms reichen?

    250ms passen. Eben getestet

    1 Antwort Letzte Antwort
    0
    • T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #940

      Das hier ist zwar genau genommen Breaking da die Funktion aber erste letztes Patch reingekommen ist, mach ich da keinen Major change draus.

      0.13.4 (2026-03-07)

      • (ticaki) added: buttonOnDelayOff / buttonOffDelayOn / buttonDelayOn / buttonDelayOff modes for HW button actions
      • (ticaki) removed: buttonBackFlip

      Neue HW-Button-Modi für Datenpunkte

      Es gibt vier neue Modi, um einen HW-Button-Datenpunkt zeitgesteuert zu schalten:

      • buttonOnDelayOff – Setzt den Datenpunkt sofort auf true und wechselt nach der eingestellten Verzögerung automatisch zurück auf false.
      • buttonOffDelayOn – Setzt den Datenpunkt sofort auf false und wechselt nach der Verzögerung automatisch zurück auf true.
      • buttonDelayOn – Setzt den Datenpunkt erst nach Ablauf der Verzögerung auf true.
      • buttonDelayOff – Setzt den Datenpunkt erst nach Ablauf der Verzögerung auf false.

      Die Verzögerung (delay) wird in Sekunden angegeben. Der Standardwert beträgt 0,25 s. Gültige Werte liegen zwischen 0,001 s und 2.147.483 s (ca. 24 Tage).

      Über den Parameter state wird der Datenpunkt angegeben, der geschaltet werden soll.

      Beispiel:

              buttonLeft: {
                  mode: 'buttonOnDelayOff',
                  delay: 3,
                  state: '0_userdata.0.example_state',
              },
      

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      1 1 Antwort Letzte Antwort
      2
      • T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von ticaki
        #941

        Dazu gilt dann noch wiederholtes Drücken startet den Timer neu

        Außerdem gibts noch states, die für detached Buttons erstellt werden, um die Buttonfunktion auch durch ein externes Skript / VIS / whatever schalten zu lassen.

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        1 Antwort Letzte Antwort
        1
        • T ticaki

          Das hier ist zwar genau genommen Breaking da die Funktion aber erste letztes Patch reingekommen ist, mach ich da keinen Major change draus.

          0.13.4 (2026-03-07)

          • (ticaki) added: buttonOnDelayOff / buttonOffDelayOn / buttonDelayOn / buttonDelayOff modes for HW button actions
          • (ticaki) removed: buttonBackFlip

          Neue HW-Button-Modi für Datenpunkte

          Es gibt vier neue Modi, um einen HW-Button-Datenpunkt zeitgesteuert zu schalten:

          • buttonOnDelayOff – Setzt den Datenpunkt sofort auf true und wechselt nach der eingestellten Verzögerung automatisch zurück auf false.
          • buttonOffDelayOn – Setzt den Datenpunkt sofort auf false und wechselt nach der Verzögerung automatisch zurück auf true.
          • buttonDelayOn – Setzt den Datenpunkt erst nach Ablauf der Verzögerung auf true.
          • buttonDelayOff – Setzt den Datenpunkt erst nach Ablauf der Verzögerung auf false.

          Die Verzögerung (delay) wird in Sekunden angegeben. Der Standardwert beträgt 0,25 s. Gültige Werte liegen zwischen 0,001 s und 2.147.483 s (ca. 24 Tage).

          Über den Parameter state wird der Datenpunkt angegeben, der geschaltet werden soll.

          Beispiel:

                  buttonLeft: {
                      mode: 'buttonOnDelayOff',
                      delay: 3,
                      state: '0_userdata.0.example_state',
                  },
          
          1 Online
          1 Online
          13patrick37
          schrieb am zuletzt editiert von
          #942

          @ticaki Hi Tim, funktioniert wunderbar. Also wenn ich "delay" weglassen, dann nimmt es automatisch die 0,25?

          1 Antwort Letzte Antwort
          0
          • 1 Online
            1 Online
            13patrick37
            schrieb am zuletzt editiert von
            #943

            b4af192a-2149-4214-b277-cb7c9147d37f-image.png

            Wollte die Zeit bei delay auf 0,3sek setzen.
            Bringt mir allerdings einen Fehler:

            ERROR: Expression expected.
            
                        delay: 0, 3: ,
                                  ^
            ERROR: Object literal may only specify known properties, and '3' does not exist in type '{ mode: "buttonOnDelayOff" | "buttonOffDelayOn" | "buttonDelayOn" | "buttonDelayOff"; delay?: number; state: string; }'.
            
            
            T 1 Antwort Letzte Antwort
            0
            • 1 13patrick37

              b4af192a-2149-4214-b277-cb7c9147d37f-image.png

              Wollte die Zeit bei delay auf 0,3sek setzen.
              Bringt mir allerdings einen Fehler:

              ERROR: Expression expected.
              
                          delay: 0, 3: ,
                                    ^
              ERROR: Object literal may only specify known properties, and '3' does not exist in type '{ mode: "buttonOnDelayOff" | "buttonOffDelayOn" | "buttonDelayOn" | "buttonDelayOff"; delay?: number; state: string; }'.
              
              
              T Offline
              T Offline
              TT-Tom
              schrieb am zuletzt editiert von
              #944

              @13patrick37

              Englisch, da kommt ein Punkt hin.

              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 1 Antwort Letzte Antwort
              0
              • T TT-Tom

                @13patrick37

                Englisch, da kommt ein Punkt hin.

                1 Online
                1 Online
                13patrick37
                schrieb am zuletzt editiert von
                #945

                @TT-Tom Das war zu einfach. :D Danke

                1 Antwort Letzte Antwort
                0
                • 1 Online
                  1 Online
                  13patrick37
                  schrieb am zuletzt editiert von 13patrick37
                  #946

                  Hallo zusammen,
                  habe gerade ein riesen Problem. Bei uns war zum wiederholten Male Stromausfall.

                  Und seitdem zweiten Abschalten vom Strom sind meine Panels alle tot.

                  Hatte jemand mal ähnliches Problem?

                  Display zeigt nichts mehr an.
                  Lt. Tasmota alle im Safeboot.

                  T 1 Antwort Letzte Antwort
                  0
                  • lobomauL Offline
                    lobomauL Offline
                    lobomau
                    schrieb am zuletzt editiert von lobomau
                    #947

                    Ich habe den Adapter paar Wochen auf einem NSPanel am Laufen.
                    Nun wollte ich gerne das zweite NSPanel ebenfalls vom reinen Script zum Adapter wechseln. Der Anfang hat soweit geklappt. Das zweite NSPanel startet und der Standardbildschirm kommt mit dem Wetter und es gibt die andere Seite "Leere". Ebenfalls wurde ein neues Script angelegt für das zweite NSPanel. Nun möchte erstmal das das zweite Panel den gleichen Inhalt zeigt wie das erste Panel. Ich habe den ersten Abschnitt des ersten Scripts (vom NSPanel, das mit dem Adapter läuft) kopiert und in das neue Script des zweiten Panels eingesetzt. Wenn ich das Script starte läuft es ohne nennenswerte Fehler durch, aber beim Panel ändert sich nichts. Habe ich irgendwas dabei vergessen?

                    Host: NUC8i3 mit Proxmox:

                    • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                    • Slave: Pi4
                    T 1 Antwort Letzte Antwort
                    0
                    • lobomauL lobomau

                      Ich habe den Adapter paar Wochen auf einem NSPanel am Laufen.
                      Nun wollte ich gerne das zweite NSPanel ebenfalls vom reinen Script zum Adapter wechseln. Der Anfang hat soweit geklappt. Das zweite NSPanel startet und der Standardbildschirm kommt mit dem Wetter und es gibt die andere Seite "Leere". Ebenfalls wurde ein neues Script angelegt für das zweite NSPanel. Nun möchte erstmal das das zweite Panel den gleichen Inhalt zeigt wie das erste Panel. Ich habe den ersten Abschnitt des ersten Scripts (vom NSPanel, das mit dem Adapter läuft) kopiert und in das neue Script des zweiten Panels eingesetzt. Wenn ich das Script starte läuft es ohne nennenswerte Fehler durch, aber beim Panel ändert sich nichts. Habe ich irgendwas dabei vergessen?

                      T Offline
                      T Offline
                      TT-Tom
                      schrieb am zuletzt editiert von
                      #948

                      @lobomau
                      Das Script gestartet? Hast du alles kopiert oder nur die Seiten. Nicht das jetzt das falsche Topic und Panel drin steht.

                      Bitte das log vom Script nach dem Start zeigen.

                      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

                      lobomauL 1 Antwort Letzte Antwort
                      0
                      • 1 13patrick37

                        Hallo zusammen,
                        habe gerade ein riesen Problem. Bei uns war zum wiederholten Male Stromausfall.

                        Und seitdem zweiten Abschalten vom Strom sind meine Panels alle tot.

                        Hatte jemand mal ähnliches Problem?

                        Display zeigt nichts mehr an.
                        Lt. Tasmota alle im Safeboot.

                        T Offline
                        T Offline
                        TT-Tom
                        schrieb am zuletzt editiert von
                        #949

                        @13patrick37
                        Ich würde Tasmota wieder rauf spielen. Hoffentlich hat sich nicht alles zerschossen

                        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 Antwort Letzte Antwort
                        0
                        • T TT-Tom

                          @lobomau
                          Das Script gestartet? Hast du alles kopiert oder nur die Seiten. Nicht das jetzt das falsche Topic und Panel drin steht.

                          Bitte das log vom Script nach dem Start zeigen.

                          lobomauL Offline
                          lobomauL Offline
                          lobomau
                          schrieb am zuletzt editiert von
                          #950

                          @TT-Tom sagte in Betatest Adapter NSPanel-lovelace-ui v0.13.x:

                          falsche Topic und Panel drin steh

                          irgendsowas vermute ich auch. Ich habe den Anhaltspunkt nicht im Script gefunden. Zumal ich nur oben den Kopf geändert habe... oder habe ich diese topic übersehen.
                          Aber ok, ich schicke danach das log.

                          Host: NUC8i3 mit Proxmox:

                          • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                          • Slave: Pi4
                          T 1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            muuulle
                            schrieb am zuletzt editiert von
                            #951

                            Moin,
                            ich bin von einem Raspberry auf eine Synology umgezogen. Ich habe das Panel aus den NSPanel-Einstellungen herausgelöscht und auf dem Panel reset 4 in die Konsole eingegeben.
                            Beim erneuten hinzufügen des Panels wird mir nun diese Fehlermeldung angezeigt. Ich habe in der Dokumentation keinen Hinweis auf die Ursache hierfür gefunden. Kann mir jemand helfen?

                            Bildschirmfoto 2026-03-13 um 15.21.42.png

                            Nach einem verzweifelten Versuch auch die Objekte zu löschen, variiert die Meldung zu sendToRequetFail2.

                            Vielen Dank
                            Christopher

                            T 1 Antwort Letzte Antwort
                            0
                            • T Nicht stören
                              T Nicht stören
                              ticaki
                              schrieb am zuletzt editiert von
                              #952

                              Die Fehlermeldung aus dem Log hilft mir den Fehler einzugrenzen.

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              1 Antwort Letzte Antwort
                              0
                              • lobomauL lobomau

                                @TT-Tom sagte in Betatest Adapter NSPanel-lovelace-ui v0.13.x:

                                falsche Topic und Panel drin steh

                                irgendsowas vermute ich auch. Ich habe den Anhaltspunkt nicht im Script gefunden. Zumal ich nur oben den Kopf geändert habe... oder habe ich diese topic übersehen.
                                Aber ok, ich schicke danach das log.

                                T Offline
                                T Offline
                                TT-Tom
                                schrieb am zuletzt editiert von
                                #953

                                @lobomau

                                du kannst eigentlich das komplette Script kopieren, du musst nur hier ganz am Anfang die Daten anpassen, ganz wichtig panelTopic richtig setzen. Mit overrideConfig werden die Einstellungen weiter unten überschrieben.

                                    const overrideConfig: Partial<ScriptConfig.Config> = {
                                        // hier kann man die Werte von unten überschreiben bzw nicht ewig im Skript suchen wo nochmal die Farbe steht :)
                                        // pages und subpages geht hier nicht, weil die Seiten ja erst später angelegt werden. Bei const gehts nach Reihenfolge.
                                        panelTopic: 'nspanel/ns_panel4',
                                        weatherEntity: 'pirate-weather.0.',
                                        defaultOffColor: Off,
                                        defaultOnColor: On,
                                
                                        // weatherAddDefaultItems:
                                        // - true  => alle Standard-Wetterelemente hinzufügen
                                        // - false => keine hinzufügen
                                        // - { ... } => selektiv per Schlüssel aktivieren:
                                        //   sunriseSet, forecastDay1, forecastDay2, forecastDay3, forecastDay4, forecastDay5, forecastDay6,
                                        //   windSpeed, windGust, windDirection, uvIndex, solar
                                        // Hinweis: Die einzelnen Schlüssel funktionieren nur, wenn der gewählte Wetteranbieter
                                        // die entsprechenden Daten liefert und diese im Adapter vorbereitet wurden
                                        "weatherAddDefaultItems": false
                                
                                    }
                                

                                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

                                lobomauL 1 Antwort Letzte Antwort
                                0
                                • M muuulle

                                  Moin,
                                  ich bin von einem Raspberry auf eine Synology umgezogen. Ich habe das Panel aus den NSPanel-Einstellungen herausgelöscht und auf dem Panel reset 4 in die Konsole eingegeben.
                                  Beim erneuten hinzufügen des Panels wird mir nun diese Fehlermeldung angezeigt. Ich habe in der Dokumentation keinen Hinweis auf die Ursache hierfür gefunden. Kann mir jemand helfen?

                                  Bildschirmfoto 2026-03-13 um 15.21.42.png

                                  Nach einem verzweifelten Versuch auch die Objekte zu löschen, variiert die Meldung zu sendToRequetFail2.

                                  Vielen Dank
                                  Christopher

                                  T Offline
                                  T Offline
                                  TT-Tom
                                  schrieb am zuletzt editiert von
                                  #954

                                  @muuulle

                                  welche Version hast du im Einsatz?

                                  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 Antwort Letzte Antwort
                                  0
                                  • T Nicht stören
                                    T Nicht stören
                                    ticaki
                                    schrieb am zuletzt editiert von ticaki
                                    #955

                                    0.14.0 (2026-03-14)

                                    • (tt-tom17) refactored: timezone selection code moved from adapter to admin handler (internal, no UI changes)
                                    • (ticaki) added: TempOffset configurable in objects and admin tab (#629)
                                    • (ticaki) added: "Update scripts for all panels" button in Maintain tab

                                    Anmerkung

                                    Vorab ist nicht vollständig getestet - zumindest der Kram den ich gerade eben eingebaut habe :)

                                    Um die Temperatur zu verwenden müssen die Panels per Aktualisieren auf den neuesten Konfigurationsstand gebracht werden:

                                    Bildschirmfoto 2026-03-14 um 06.41.01.png

                                    Auf den Stift klicken und dann oben auf nspanelkonfiguration aktualisieren - dann dauerts 30 Sekunden und dann das nächste.

                                    Alternativ auf der Tasmota Konsole folgendes eingeben

                                    AdcParam 2,14600,10000,3950
                                    

                                    Bei der Alternative am Ende den Adapter neustarten - sicher ist sicher.

                                    Temperatur einstellen

                                    Das geht dann am einfachsten hier:

                                    Bildschirmfoto_2026-03-14_um_06.22.49.png Bildschirmfoto 2026-03-14 um 07.11.54.png

                                    Bei 4k wird wirklich alles riesig :D


                                    @muuulle
                                    Ich hab ein hoffentlich besseres error log eingefügt für dein Problem - Die Adminfehlermeldungen werden aber nie genug infos enthalten, dass es mehr als ein "da läuft was schief" geben kann. Daher bitte IMMER im Protokoll gucken.

                                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                    Spenden

                                    M 1 Antwort Letzte Antwort
                                    0
                                    • T Nicht stören
                                      T Nicht stören
                                      ticaki
                                      schrieb am zuletzt editiert von ticaki
                                      #956

                                      Mein aktuelles Dauerprojekt

                                      Roborock-Adapter (Saugroboter)

                                      Ich bastel da immer wieder dran rum, weil der Roborock Adapter nicht so will wie ich, oder ich schnell was rein baue, was aber nicht optimal ist.

                                      Übersichtsseite:

                                      IMG_1262.jpeg
                                      Favoriten: Sind die gespeicherten Programme
                                      Raumreinigung: Multiselekt-Seite für die Räume s.u.
                                      Lädt: Status - adapter interne Funktion - angepasste icons und text zu dem jeweiligen Status
                                      Mop: hab ich vergessen :D
                                      Im Dock: ist er unterwegs oder im dock
                                      Alles: Ist eine Funktion für mein Automatikscript ob nur saugen oder halt alles

                                          const Saugroboter: PageType = {
                                              'type': 'cardGrid',
                                              uniqueName: 'Saugroboter',
                                              'heading': 'Saugroboter',
                                              parent: 'main',
                                              'items': [
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Favorite', name: 'Favoriten', onColor: MSGreen, icon: 'select-multiple-marker' },
                                                  { navigate: true, name: 'Raumreinigung', icon: 'play-speed', targetPage: 'Saugroboter-Rooms' },
                                                  {
                                                      native: {
                                                          dpInit: 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr',
                                                          template: 'text.roborock.status',
                                                      }
                                                  },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Trocken', icon: 'hair-dryer-outline', icon2: 'check-outline', name: 'Mop', onColor: Red, offColor: Blue , enabled:'alias.0.zuhause.og.Technik.Saugroboter.Trocken'},
                                                  {id: 'alias.0.zuhause.og.Technik.Saugroboter.Home', icon: 'home', icon2: 'home-export-outline', onColor: Green, offColor: Red},
                                                  {id: 'alias.0.zuhause.og.Technik.Saugroboter.nextRunWipeState', icon: 'water', icon2: 'water-off', buttonText: 'Alles', buttonTextOff: 'Nur Saugen'}
                                              ]
                                          };
                                      


                                      Favoriten:
                                      Bildschirmfoto 2026-03-14 um 07.37.09.png

                                      "common": {
                                          "name": "select",
                                          "desc": "Manuell erzeugt",
                                          "role": "level.mode.select",
                                          "type": "string",
                                          "read": true,
                                          "write": true,
                                          "def": "",
                                          "states": null,
                                          "alias": {
                                            "id": "roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.programs.startProgram"
                                          }
                                      

                                      Raumreinigung:

                                      IMG_1263.jpeg

                                      Reinigung s: Multifuktionaler Button mit short und longpress

                                          const Saugroboter2: PageType = {
                                              'type': 'cardGrid2',
                                              uniqueName: 'Saugroboter-Rooms',
                                              'heading': 'Raumreinigung',
                                              parent: 'Saugroboter',
                                              'items': [
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Reinigung', icon: 'restart', targetPageLongPress: 'Saugroboter-CleanDetails', offColor: Gray, targetPage:'Saugroboter' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Kueche', icon: 'cookie-outline' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Badezimmer', icon: 'bathtub-outline' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Flur', icon: 'floor-plan' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Sarah', icon: 'teddy-bear' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Schlafzimmer', icon: 'sleep' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Wohnzimmer', icon: 'youtube-tv' },
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.Raeme.Ankleidezimmer', icon: 'tshirt-v-outline' },
                                              ]
                                          };
                                      
                                          const SaugroboterCleanDetails: PageType = {
                                              'type': 'cardGrid2',
                                              uniqueName: 'Saugroboter-CleanDetails',
                                              'heading': 'Reinigungsoptionen',
                                              parent: 'Saugroboter-Rooms',
                                              'items': [
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.customModeWaterBox', icon: 'water', name: 'wischen', onColor: Blue, offColor: Gray},
                                                  { id: 'alias.0.zuhause.og.Technik.Saugroboter.customMode', icon: 'broom', name: 'saugen' , onColor: Green, offColor: Gray},
                                              ]
                                          };
                                      

                                      SaugroboterCleanDetails ist das was erscheint wenn man auf Reinigung s lange drückt.

                                      So schauen die Alias aus:
                                      Bildschirmfoto 2026-03-14 um 07.43.40.png

                                      und so die für die CleanDetails:
                                      Bildschirmfoto 2026-03-14 um 07.50.57.png

                                      Und hier das aussehen von CleanDetails also wenn man auf Reinigung s lange drückt
                                      IMG_1264.jpeg

                                      und hier wenn man auf saugen klickt:
                                      IMG_1265.jpeg

                                      Mein persönliches Automatikscript (für leutz die es sehen wollen)

                                      Mein Automatik-, Nachricht- und alles mögliche was mit Saugroboter zu tun hat Skript
                                      Bei Verwendung müssen die Datenpunkte angepasst werden und die raumsteuerung gelöscht oder auf verhandene Datenpunkte gelegt werden.

                                      export { };
                                      
                                      // ── Datenpunkte – Gerätestatus ────────────────────────────────────────────────
                                      // Datenpunkt: aktueller Gerätestatus des Saugroboters (Zahlenwert)
                                      const currentStateDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.deviceStatus.state';
                                      // Datenpunkt: Reinigungsstatus (0 = inaktiv, sonst aktiv)
                                      const cleaningState = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.deviceStatus.in_cleaning';
                                      // Datenpunkt: Frischzustand (Roboter auf der Basis und einsatzbereit)
                                      const freshState = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.deviceStatus.in_fresh_state';
                                      // Datenpunkt: Akkustand des Saugroboters in Prozent
                                      const batteryState = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.deviceStatus.battery';
                                      // Datenpunkt: Fehlercode des Saugroboters
                                      const errorCodeDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.deviceStatus.error_code';
                                      
                                      // ── Datenpunkte – Befehle & Programme ────────────────────────────────────────
                                      // Datenpunkt: Reinigungsprogramm starten
                                      const startProgramDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.programs.startProgram';
                                      // Datenpunkt: Reinigung stoppen und zur Basis zurückkehren
                                      const stopCommandDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.commands.app_stop';
                                      
                                      // ── Datenpunkte – Dockingstation ─────────────────────────────────────────────
                                      // Datenpunkt: Status des Frischwassertanks (1 = leer, nachfüllen)
                                      const clearWaterBoxDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.dockingStationStatus.clearWaterBoxStatus';
                                      // Datenpunkt: Status des Schmutzwassertanks (1 = voll, leeren)
                                      const dirtyWaterBoxDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.dockingStationStatus.dirtyWaterBoxStatus';
                                      // Datenpunkt: Status des Staubbeutels (1 = voll, wechseln)
                                      const dustBagDP = 'roborock.0.Devices.2LF69GkMA1fMm7kfa4Grr.dockingStationStatus.dustBagStatus';
                                      
                                      // ── Datenpunkte – Automation & Anwesenheit ────────────────────────────────────
                                      // Datenpunkt: Soll beim nächsten Durchlauf auch gewischt werden?
                                      const nextRunWipeState = '0_userdata.0.Automation.Saugroboter.nextRunWipe';
                                      // Datenpunkt: Automatische Reinigung aktiviert/deaktiviert
                                      const automaticDP = '0_userdata.0.Automation.Saugroboter.automatic';
                                      // Datenpunkt: Aktueller Reinigungsauftrag (0 = kein Auftrag)
                                      const currentWorkDP = '0_userdata.0.Automation.Saugroboter.CurrentWork';
                                      // Datenpunkt: Ist jemand zu Hause?
                                      const anyoneDP = '0_userdata.0.Sensoren.Anwesenheit.Anyone';
                                      // Datenpunkt: Ist der Besuchermodus aktiv?
                                      const besuchermodusDP = '0_userdata.0.Kontrollzentrum.Anwesenheit.Besuchermodus';
                                      
                                      // ── Datenpunkte – NsPanel ─────────────────────────────────────────────────────
                                      // Basispfad des NsPanel-Screensaver-Datenpunkts
                                      const panelScreensaverDP = 'nspanel-lovelace-ui.0.panels.C0_49_EF_FA_69_38.cmd.screenSaver';
                                      
                                      // ── Programm-IDs (Roborock) ───────────────────────────────────────────────────
                                      // Programm-ID: Küche reinigen
                                      const programmKueche = '8580588';
                                      // Programm-ID: Bad reinigen
                                      const programmBad = '8580579';
                                      // Programm-ID: Wohnung saugen und wischen
                                      const programmWohnungSaugenWischen = '8580560';
                                      // Programm-ID: Wohnung nur saugen (ohne Wischen)
                                      const programmWohnungSaugen = '8580573';
                                      
                                      // ── Zeitkonstanten ────────────────────────────────────────────────────────────
                                      // Pausezeit in Millisekunden (3 Stunden) – reserviert für spätere Nutzung
                                      const pauseTime = 180 * 60 * 1000;
                                      // Cron-Ausdruck: täglich um 01:00:10 – setzt den Tagesauftrag
                                      const zeitplanTagesreset = '10 0 1 * * *';
                                      // Cron-Ausdruck: alle 15 Minuten zwischen 9 und 19 Uhr – prüft auf Reinigungsbedarf
                                      const zeitplanReinigungscheck = '10 */15 9-19 * * *';
                                      
                                      // ── Reinigungsparameter ───────────────────────────────────────────────────────
                                      // Wochentage, an denen zusätzlich gewischt wird (0=So, 1=Mo, ..., 6=Sa)
                                      const wischTage = [0, 3, 5, 6];
                                      // Mindestakkustand in Prozent, ab dem die automatische Reinigung startet
                                      const minAkkustand = 80;
                                      
                                      // ── Laufzeitvariablen ─────────────────────────────────────────────────────────
                                      let autoStart = false;
                                      // Merker: soll der Roboter nach Beendigung erneut automatisch starten?
                                      let targetAutoStart = autoStart;
                                      // Zähler für aufeinanderfolgende Prüfintervalle ohne Anwesenheit
                                      let counter = 0;
                                      // Aktuell gemeldeter Gerätestatus
                                      let currentState = getState(currentStateDP).val
                                      // Letzter bekannter Zustand war ein Fehler
                                      let lastError = false;
                                      // Ist der Roboter gerade in Betrieb?
                                      let isCleaning = getState(cleaningState).val != 0;
                                      // Ist der Roboter auf der Basis und frisch bereit?
                                      let isFresh = getState(freshState).val != 0;
                                      // Aktueller Akkustand
                                      let battery = getState(batteryState).val;
                                      // Ist die automatische Reinigung aktiviert?
                                      let automaticOn = getState(automaticDP).val;
                                      // Ist jemand da?
                                      let anyone = getState(anyoneDP).val;
                                      
                                      // ── Raumsteuerung ─────────────────────────────────────────────────────────────
                                      
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Wohnzimmer', val: true, ack: false }, function (obj) {
                                         //    _helper('mihome-vacuum.0.rooms.414001031069.roomClean', true, obj);
                                      })
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Küche', val: true, ack: false }, function (obj) {
                                         _helper(startProgramDP, programmKueche, obj);
                                      })
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Flur', val: true, ack: false }, function (obj) {
                                         //    _helper('mihome-vacuum.0.rooms.414001031075.roomClean', true, obj);
                                      })
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Schlafzimmer', val: true, ack: false }, function (obj) {
                                         log('sauge Schlafzimmer');
                                         //    _helper('mihome-vacuum.0.rooms.414001031074.roomClean', true, obj);
                                      })
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Bad', val: true, ack: false }, function (obj) {
                                         _helper(startProgramDP, programmBad, obj);
                                      })
                                      
                                      //Wohnung saugen
                                      on({ id: '0_userdata.0.Automation.Saugroboter.Wohnung_saugen', val: true, ack: false }, function (obj) {
                                         _helper(startProgramDP, programmWohnungSaugenWischen, obj);
                                      })
                                      
                                      // nach Hause
                                      on({ id: '0_userdata.0.Automation.Saugroboter.home', val: true, ack: false }, function (obj) {
                                         targetAutoStart = true;
                                         _helper(stopCommandDP, true, obj);
                                      })
                                      
                                      /** 
                                      * Ab hier sollte alles passen
                                      */
                                      
                                      on({ id: currentStateDP, change: 'ne' }, function (obj) {
                                         currentState = obj.state.val;
                                         // Error
                                         if (currentState === 12) {
                                             lastError = true;
                                         }
                                         // ignore sleeping and idle
                                         else if (currentState != 2 && currentState != 3) {
                                             lastError = false;
                                         }
                                      })
                                      
                                      on({ id: clearWaterBoxDP, change: 'ne' }, function (dp) {
                                         alert()
                                      })
                                      
                                      
                                      on({ id: dirtyWaterBoxDP, change: 'ne' }, function (dp) {
                                         alert()
                                      })
                                      
                                      on({ id: dustBagDP, change: 'ne' }, function (dp) {
                                         alert()
                                      })
                                      function alert() {
                                         let itemAlert = getState(clearWaterBoxDP).val === 1
                                         let alert = itemAlert
                                         if (itemAlert) sendToPanel(itemAlert, 'Saugroboter-Service', 'Wasser nachfüllen');
                                      
                                         itemAlert = getState(dustBagDP).val === 1
                                         if (itemAlert && !alert) sendToPanel(itemAlert, 'Saugroboter-Service', 'Staubsaugerbeutel wechseln');
                                         alert = alert || itemAlert
                                      
                                         itemAlert = getState(dirtyWaterBoxDP).val === 1
                                         if (itemAlert && !alert) sendToPanel(itemAlert, 'Saugroboter-Service', 'Schutzwasser entleeren');
                                         alert = alert || itemAlert
                                      
                                         if (!alert) sendToPanel(false, '', '');
                                      }
                                      alert()
                                      
                                      function sendToPanel(val: boolean, headline: string, text: string): void {
                                         if (val) {
                                             sendTo('nspanel-lovelace-ui.0', 'setPopupNotification', { id: 'RoboterService', headline, text })
                                      
                                             setState(`${panelScreensaverDP}.headingNotification`, headline)
                                             setState(`${panelScreensaverDP}.textNotification`, text)
                                             setState(`${panelScreensaverDP}.activateNotification`, true);
                                         } else {
                                             sendTo('nspanel-lovelace-ui.0', 'setPopupNotification', { id: 'RoboterService', priority: -1 })
                                             setState(`${panelScreensaverDP}.activateNotification`, false);
                                         }
                                      }
                                      
                                      
                                      on({ id: cleaningState, change: 'ne' }, (obj) => {
                                         isCleaning = obj.state.val != 0;
                                      })
                                      on({ id: freshState, change: 'ne' }, (obj) => {
                                         isFresh = obj.state.val != 0;
                                         if (isFresh && targetAutoStart) {
                                             setState(currentWorkDP, 0, true);
                                             setState(nextRunWipeState, false, true);
                                             targetAutoStart = false;
                                         }
                                      })
                                      on({ id: batteryState, change: 'ne' }, (obj) => {
                                         battery = obj.state.val;
                                      })
                                      
                                      function _helper(id, value, obj) {
                                         setState(id, value);
                                         setState(obj.id, true, true);
                                         setStateDelayed(obj.id, false, true, 3000);
                                      }
                                      
                                      on({ id: errorCodeDP, change: 'ne' }, (obj) => {
                                         errorMsg(obj.state.val);
                                      })
                                      errorMsg(getState(errorCodeDP).val)
                                      
                                      function errorMsg(code: number): void {
                                         const messages = {
                                             "0": "Kein Fehler",
                                             "1": "Lasersensorfehler",
                                             "2": "Kollisionssensorfehler",
                                             "3": "Rad schwebt",
                                             "4": "Abgrundsensorfehler",
                                             "5": "Hauptbürste blockiert",
                                             "6": "Seitenbürste blockiert",
                                             "7": "Rad blockiert",
                                             "8": "Gerät festgefahren",
                                             "9": "Staubbehälter fehlt",
                                             "10": "Filter blockiert",
                                             "11": "Magnetfeld erkannt",
                                             "12": "Niedriger Akkustand",
                                             "13": "Ladeproblem",
                                             "14": "Batteriefehler",
                                             "15": "Wandsensorfehler",
                                             "16": "Unebene Oberfläche",
                                             "17": "Seitenbürstenfehler",
                                             "18": "Sauggebläsefehler",
                                             "19": "Ladestation ohne Strom",
                                             "20": "Unbekannter Fehler",
                                             "21": "Laser-Drucksensorproblem",
                                             "22": "Ladesensorproblem",
                                             "23": "Dockproblem",
                                             "24": "No-Go-Zone oder unsichtbare Wand erkannt",
                                             "254": "Behälter voll",
                                             "255": "Interner Fehler",
                                             "-1": "Unbekannter Fehler"
                                         }
                                         if (code > 0) sendTo('nspanel-lovelace-ui.0', 'setPopupNotification', { id: 'RoboterFehler', headline: 'Saugroboterfehler', text: messages[String(code)], priority: 40, colorHeadline: '#FF0000', textSize: 3, type: 'acknowledge', buttonRight: 'Ok' })
                                         else sendTo('nspanel-lovelace-ui.0', 'setPopupNotification', { id: 'RoboterFehler', headline: 'Saugroboterfehler', text: messages[String(code)], priority: -1 })
                                      }
                                      
                                      schedule(zeitplanTagesreset, setCurrentWork);
                                      
                                      schedule(zeitplanReinigungscheck, startCurrentWork);
                                      
                                      
                                      function checkAndSendMsg() {
                                         let msg = 'Saugroboterservice nötig: - Staubbehälter leeren ';
                                         if (getState('mihome-vacuum.0.consumable.filter').val <= 0) msg += '- Filter austauschen '
                                         if (getState('mihome-vacuum.0.consumable.main_brush').val <= 0) msg += '- Bodenbürste austauschen '
                                         if (getState('mihome-vacuum.0.consumable.sensors').val <= 0) msg += '- Sensoren reinigen '
                                         if (getState('mihome-vacuum.0.consumable.side_brush').val <= 0) msg += '- Seitenbürste austauschen '
                                         //sendTo('telegram', {user: 'Tim', text: msg }); 
                                      }
                                      
                                      function setCurrentWork() {
                                         setState(currentWorkDP, 1, true);
                                         setState(nextRunWipeState, getState(nextRunWipeState).val || wischTage.includes(new Date().getDay()), true)
                                      }
                                      
                                      function isReady(): boolean {
                                         if (isCleaning) return false;
                                         if (battery < minAkkustand) return false
                                         if (lastError) return false;
                                         return true;
                                      }
                                      
                                      function startCurrentWork(anyone?: boolean) {
                                         if (!automaticOn) return;
                                         if ((anyone === undefined ? getState(anyoneDP).val : anyone)) {
                                             counter = 0;
                                             return;
                                         }
                                         if (getState(currentWorkDP).val <= 0) return;
                                         if (getState(besuchermodusDP).val) return;
                                         //log('targetAutoStart: ' + targetAutoStart + ' - isReady(): ' + isReady()) + ' - dontStartNewWork: ' + dontStartNewWork;
                                         if ( !isReady() || targetAutoStart) return;
                                         if (counter++ < 2) return;
                                         targetAutoStart = true;
                                         log('Starte automatische Reinigung')
                                         setState(startProgramDP, (getState(nextRunWipeState).val ? programmWohnungSaugenWischen : programmWohnungSaugen));
                                         setState(currentWorkDP, 0, true);
                                      }
                                      
                                      on({ id: anyoneDP, change: 'ne' }, function (obj) {
                                         anyone = obj.state.val
                                         if (!automaticOn) return;
                                         if (obj.state.val) {
                                             if ( targetAutoStart && !isReady && isCleaning) {
                                                 setState(stopCommandDP, true);
                                                 targetAutoStart = false;
                                                 autoStart = false;
                                             }
                                         }
                                      });
                                      on({ id: automaticDP, change: 'ne' }, function (obj) {
                                         automaticOn = obj.state.val;
                                         setState(obj.id, obj.state.val, true);
                                      })
                                      
                                      
                                      

                                      Zur Funktionsweise:

                                      Automatikkram:
                                      Das Skript prüft alle 15 Minuten zwischen 9-19 Uhr ob die Bedingungen erfüllt sind. Bei 2 mal hinter einander wird die Reinigung gestartet

                                      Bedingungen:

                                      • ist es aktiviert
                                      • ist keiner da
                                      • ist es noch nicht heute gelaufen
                                      • ist der besuchermodus aus
                                      • ist der roboter bereit (läuft nicht, batterie voll genug, kein fehler) und soll er lt. Skript gerade nicht laufen.
                                      • sind alle bedingungen 2 mal erfüllt wärend niemand da war.

                                      Rücksetzen:
                                      Um 01:00 täglich wird das "heute nicht gelaufen" zurück gesetzt und ermittelt ob heute wischen auf true gesetzt werden soll. Wischen wird nach erfolgreichem durchführen vom automatikteil auf false gesetzt. Heißt wenn Montag gewischt werden soll, aber keine autoreinigung surchgeführt wurde, wird am Dienstag gewischt.

                                      Vorbeitungen:
                                      Es müssen 2 Programme angelegt werden ich hab dafür 1 mal nur saugen und 1 mal saugen dann wischen in der app angelegt - alle States die oben im Skript stehen müssen angepasst oder angelegt werden.

                                      Nachrichten:
                                      Ich hab für Probleme mit Schmutzwasser, Wischwasser und Staubbeutel eine Benachrichtigung fürs panel drin - das wird sowohl als Popup und als Screensaver Benachrichtigung angezeigt - denke das ist doppelgemoppelt aber wurscht. :D

                                      Raumsteuerung:
                                      Hab auf 2 shellys den longpress verwendet fürs aktivieren der Raumreinigung - das muß dann natürlich angepasst werden und entsprechende Programme müssen eingerichtet werden.

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      1 Antwort Letzte Antwort
                                      2
                                      • T TT-Tom

                                        @lobomau

                                        du kannst eigentlich das komplette Script kopieren, du musst nur hier ganz am Anfang die Daten anpassen, ganz wichtig panelTopic richtig setzen. Mit overrideConfig werden die Einstellungen weiter unten überschrieben.

                                            const overrideConfig: Partial<ScriptConfig.Config> = {
                                                // hier kann man die Werte von unten überschreiben bzw nicht ewig im Skript suchen wo nochmal die Farbe steht :)
                                                // pages und subpages geht hier nicht, weil die Seiten ja erst später angelegt werden. Bei const gehts nach Reihenfolge.
                                                panelTopic: 'nspanel/ns_panel4',
                                                weatherEntity: 'pirate-weather.0.',
                                                defaultOffColor: Off,
                                                defaultOnColor: On,
                                        
                                                // weatherAddDefaultItems:
                                                // - true  => alle Standard-Wetterelemente hinzufügen
                                                // - false => keine hinzufügen
                                                // - { ... } => selektiv per Schlüssel aktivieren:
                                                //   sunriseSet, forecastDay1, forecastDay2, forecastDay3, forecastDay4, forecastDay5, forecastDay6,
                                                //   windSpeed, windGust, windDirection, uvIndex, solar
                                                // Hinweis: Die einzelnen Schlüssel funktionieren nur, wenn der gewählte Wetteranbieter
                                                // die entsprechenden Daten liefert und diese im Adapter vorbereitet wurden
                                                "weatherAddDefaultItems": false
                                        
                                            }
                                        
                                        lobomauL Offline
                                        lobomauL Offline
                                        lobomau
                                        schrieb am zuletzt editiert von lobomau
                                        #957

                                        @TT-Tom ja, so hat es funktioniert. Bei dem ersten Script und auch beim zweiten Script ist jeweils standarmäßig auskommentiert. Habe da nie hingeschaut.
                                        Warum funktioniert es beim ersten Script obwohl es auskommentiert ist?

                                        //panelTopic: 'nspanel/ns_panel4',

                                        Host: NUC8i3 mit Proxmox:

                                        • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                                        • Slave: Pi4
                                        T 1 Antwort Letzte Antwort
                                        0
                                        • T ticaki

                                          0.14.0 (2026-03-14)

                                          • (tt-tom17) refactored: timezone selection code moved from adapter to admin handler (internal, no UI changes)
                                          • (ticaki) added: TempOffset configurable in objects and admin tab (#629)
                                          • (ticaki) added: "Update scripts for all panels" button in Maintain tab

                                          Anmerkung

                                          Vorab ist nicht vollständig getestet - zumindest der Kram den ich gerade eben eingebaut habe :)

                                          Um die Temperatur zu verwenden müssen die Panels per Aktualisieren auf den neuesten Konfigurationsstand gebracht werden:

                                          Bildschirmfoto 2026-03-14 um 06.41.01.png

                                          Auf den Stift klicken und dann oben auf nspanelkonfiguration aktualisieren - dann dauerts 30 Sekunden und dann das nächste.

                                          Alternativ auf der Tasmota Konsole folgendes eingeben

                                          AdcParam 2,14600,10000,3950
                                          

                                          Bei der Alternative am Ende den Adapter neustarten - sicher ist sicher.

                                          Temperatur einstellen

                                          Das geht dann am einfachsten hier:

                                          Bildschirmfoto_2026-03-14_um_06.22.49.png Bildschirmfoto 2026-03-14 um 07.11.54.png

                                          Bei 4k wird wirklich alles riesig :D


                                          @muuulle
                                          Ich hab ein hoffentlich besseres error log eingefügt für dein Problem - Die Adminfehlermeldungen werden aber nie genug infos enthalten, dass es mehr als ein "da läuft was schief" geben kann. Daher bitte IMMER im Protokoll gucken.

                                          M Offline
                                          M Offline
                                          muuulle
                                          schrieb am zuletzt editiert von muuulle
                                          #958

                                          @muuulle
                                          Ich hab ein hoffentlich besseres error log eingefügt für dein Problem - Die Adminfehlermeldungen werden aber nie genug infos enthalten, dass es mehr als ein "da läuft was schief" geben kann. Daher bitte IMMER im Protokoll gucken.

                                          Hallo,
                                          ich habe Version 0.14 installiert; hier ist der entsprechende Auszug als Bildschirmfoto:

                                          Bildschirmfoto 2026-03-14 um 14.02.29.png

                                          Vielen Dank für eure Arbeit!

                                          Edit:
                                          Es wird mit sendToRequestFail2 quittiert.

                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          583

                                          Online

                                          32.7k

                                          Benutzer

                                          82.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe