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
    438

  • 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.2k 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 13patrick37
    #937

    @ticaki wenn du mir erklärst wie. 😅 Gern auch per Discord

    Edit: ach du meintest blockly 😁
    Habe im Moment ein Skript mit einer Sekunde. Das funktioniert .Ich teste dann mit weniger...

    T 1 Antwort Letzte Antwort
    0
    • 1 13patrick37

      @ticaki wenn du mir erklärst wie. 😅 Gern auch per Discord

      Edit: ach du meintest blockly 😁
      Habe im Moment ein Skript mit einer Sekunde. Das funktioniert .Ich teste dann mit weniger...

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

      @13patrick37 bin da

      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 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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          534

                                          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