Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Skripten / Logik
  4. JavaScript
  5. (gelöst)state von DP umbenennen

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    2.8k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    4.9k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    4.1k

(gelöst)state von DP umbenennen

Geplant Angeheftet Gesperrt Verschoben JavaScript
5 Beiträge 2 Kommentatoren 410 Aufrufe 1 Beobachtet
  • Ä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.
  • Chris76eC Offline
    Chris76eC Offline
    Chris76e
    schrieb am zuletzt editiert von Chris76e
    #1

    Hi,
    möchte ein script erweitern.
    der inhalt des neuen DP kann

    standart, 
    deep, 
    oder fast
    

    enthalten.
    Die möchte ich in

    standard = standard (kann also bleiben)
    deep = tief
    fast = schnell
    

    ändern
    so lese ich die ein

    var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
    

    und so ist die Ausgabe

    var newData = {
    "Effizienz": Moppingmode 
    };
    

    Wie mache ich das am besten?

    paul53P 1 Antwort Letzte Antwort
    0
    • Chris76eC Chris76e

      Hi,
      möchte ein script erweitern.
      der inhalt des neuen DP kann

      standart, 
      deep, 
      oder fast
      

      enthalten.
      Die möchte ich in

      standard = standard (kann also bleiben)
      deep = tief
      fast = schnell
      

      ändern
      so lese ich die ein

      var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
      

      und so ist die Ausgabe

      var newData = {
      "Effizienz": Moppingmode 
      };
      

      Wie mache ich das am besten?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @chris76e sagte: Wie mache ich das am besten?

      Ohne Skript mit Alias Typ "Zeichenkette" und Lesekonvertierung:

      val == 'deep' ? 'tief' : val == 'fast' ? 'schnell' : val
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

      Chris76eC 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @chris76e sagte: Wie mache ich das am besten?

        Ohne Skript mit Alias Typ "Zeichenkette" und Lesekonvertierung:

        val == 'deep' ? 'tief' : val == 'fast' ? 'schnell' : val
        
        Chris76eC Offline
        Chris76eC Offline
        Chris76e
        schrieb am zuletzt editiert von
        #3

        @paul53 sagte in state von DP umbenennen:

        Ohne Skript mit Alias Typ "Zeichenkette" und Lesekonvertierung:

        Ohne Script?

        @chris76e sagte in state von DP umbenennen:

        möchte ein script erweitern.

        Hier mal das gesamte script

        // Variablen für die Zeitmessung
        var cleaningStartTime = null;
        
        // Funktion zum Überwachen von Änderungen im JSON und Speichern in 0_userdata
        function monitorAndSaveJson() {
        // Überwache Änderungen im JSON-Datenpunkt
        on({ id: "ecovacs-deebot.0.cleaninglog.last20Logs", change: "ne", ack: true }, function (obj) {
            // Überprüfe, ob die Zeitmessung läuft        
            if (cleaningStartTime !== null) {
                // Beende die Zeitmessung
                setTimeout(function() {
                    var cleaningEndTime = new Date();
                    var totalCleaningTimeInSeconds = (cleaningEndTime - cleaningStartTime) / 1000;
                    var totalCleaningTimeFormatted = formatTime(totalCleaningTimeInSeconds);
        
                    // Lese die aktuellen Daten aus dem JSON-Datenpunkt
                    getState("0_userdata.0.Deebot.JSON", function (err, state) {
                        if (!err && state) {
                            var currentJson = state.val ? JSON.parse(state.val) : []; // Aktuelles JSON oder leeres Array
        
                            // Lese die Datenpunkte
                            var spotAreaName = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.spotAreaName").val || "";
                            var lastTimeStamp = getState("ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp").val || "";
                            var lastCleaningDate = getState("ecovacs-deebot.0.cleaninglog.lastCleaningDate").val || "";
                            lastCleaningDate = removeTimeFromDate(lastCleaningDate); // Entferne die Uhrzeit aus dem Datum
                            var lastSquareMeters = getState("ecovacs-deebot.0.cleaninglog.lastSquareMeters").val || "";
                            //var lastTotalTime = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.totalTime").val || "";
                            var lastTotalSeconds = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.totalSeconds").val || ""; 
                            //var cleaningMode = getState("ecovacs-deebot.0.control.extended.cleaningMode").val || "";
                            var cleaningMode = getState("0_userdata.0.Deebot.lastCleaning.CleanMode").val || "";
                            var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
                            
        
                            // Erstelle das neue Objekt
                            var newData = {
                                "Raum": spotAreaName,
                                "Datum": lastCleaningDate,
                                "Timestamp": lastTimeStamp,
                                "Fläche": lastSquareMeters,
                                "Dauer": formatTime(lastTotalSeconds), // Dauer der letzten Reinigung in m:s
                                "Gesamtdauer": totalCleaningTimeFormatted, // Gesamtdauer der aktuellen Reinigung
                                "Reinigungsmodus": cleaningMode, // Aktueller Reinigungsmodus
                                "Effizienz": Moppingmode,
                                "Startzeit": formatTimeComponents(new Date(cleaningStartTime)), // Startzeit umgewandelt in Zeichenfolge
                                "Endzeit": formatTimeComponents(new Date(cleaningEndTime)) // Endzeit umgewandelt in Zeichenfolge
                            };
        
                            // Füge das neue Objekt zum aktuellen JSON hinzu
                            currentJson.unshift(newData); // Hinzufügen an den Anfang des Arrays
        
                            // Speichere das aktualisierte JSON in 0_userdata
                            setState("0_userdata.0.Deebot.JSON", JSON.stringify(currentJson), function () {
                                log("JSON erfolgreich aktualisiert und gespeichert.", "info");
                                
                                // Setze die Zeitmessung zurück nach dem Schreiben des JSON
                                cleaningStartTime = null;
        
                                 // Setze zusätzliche Datenpunkte für die letzte Reinigung
                                    setState("0_userdata.0.Deebot.lastCleaning.Dauer", formatTime(lastTotalSeconds));
                                    setState("0_userdata.0.Deebot.lastCleaning.Fläche", lastSquareMeters);
                                    setState("0_userdata.0.Deebot.lastCleaning.Gesamtdauer", totalCleaningTimeFormatted);
                                    setState("0_userdata.0.Deebot.lastCleaning.Raum", spotAreaName);
                                    setState("0_userdata.0.Deebot.lastCleaning.Reinigungsmodus", cleaningMode);                       
                            });
                        } else {
                            log("Fehler beim Lesen des Datenpunkts 0_userdata.0.Deebot.JSON", "error");
                        }
                    });
                }, 2000); // 2-Sekunden-Verzögerung hinzugefügt
            }
        });
        
            // Überwache Änderungen im Reinigungsstatus-Datenpunkt
        on({ id: "ecovacs-deebot.0.map.currentUsedSpotAreas", change: "ne", ack: true }, function (obj) {
            // Überprüfe, ob das Reinigungsgerät im Reinigungsmodus ist
            if (cleaningStartTime === null) {
                cleaningStartTime = new Date();
            }
        });
        
        }
        
        // Starte die Überwachung
        monitorAndSaveJson();
        
        // Hilfsfunktion zur Formatierung von Zeit in Minuten und Sekunden (m:s)
        function formatTime(totalSeconds) {
            var minutes = Math.floor(totalSeconds / 60);
            var seconds = Math.floor(totalSeconds % 60);
        
            // Manuelle Formatierung der Minuten und Sekunden
            var minutesString = minutes < 10 ? "0" + minutes : minutes.toString();
            var secondsString = seconds < 10 ? "0" + seconds : seconds.toString();
        
            return minutesString + ":" + secondsString;
        }
        
        // Hilfsfunktion zur Formatierung von Stunden, Minuten und Sekunden als Zeitzeichenfolge
        function formatTimeComponents(date) {
            var hours = pad(date.getHours(), 2);
            var minutes = pad(date.getMinutes(), 2);
            var seconds = pad(date.getSeconds(), 2);
            return hours + ":" + minutes;
        }
        
        // Hilfsfunktion zum Entfernen der Uhrzeit aus dem Datum
        function removeTimeFromDate(dateString) {
            // Teilen Sie das Datum in Datum und Uhrzeit auf
            var parts = dateString.split(" ");
            // Nur das Datum zurückgeben
            return parts[0];
        }
        
        // Hilfsfunktion zum Auffüllen von Zahlen mit führenden Nullen
        function pad(num, size) {
            var s = num.toString();
            while (s.length < size) s = "0" + s;
            return s;
        }
        
        paul53P 1 Antwort Letzte Antwort
        0
        • Chris76eC Chris76e

          @paul53 sagte in state von DP umbenennen:

          Ohne Skript mit Alias Typ "Zeichenkette" und Lesekonvertierung:

          Ohne Script?

          @chris76e sagte in state von DP umbenennen:

          möchte ein script erweitern.

          Hier mal das gesamte script

          // Variablen für die Zeitmessung
          var cleaningStartTime = null;
          
          // Funktion zum Überwachen von Änderungen im JSON und Speichern in 0_userdata
          function monitorAndSaveJson() {
          // Überwache Änderungen im JSON-Datenpunkt
          on({ id: "ecovacs-deebot.0.cleaninglog.last20Logs", change: "ne", ack: true }, function (obj) {
              // Überprüfe, ob die Zeitmessung läuft        
              if (cleaningStartTime !== null) {
                  // Beende die Zeitmessung
                  setTimeout(function() {
                      var cleaningEndTime = new Date();
                      var totalCleaningTimeInSeconds = (cleaningEndTime - cleaningStartTime) / 1000;
                      var totalCleaningTimeFormatted = formatTime(totalCleaningTimeInSeconds);
          
                      // Lese die aktuellen Daten aus dem JSON-Datenpunkt
                      getState("0_userdata.0.Deebot.JSON", function (err, state) {
                          if (!err && state) {
                              var currentJson = state.val ? JSON.parse(state.val) : []; // Aktuelles JSON oder leeres Array
          
                              // Lese die Datenpunkte
                              var spotAreaName = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.spotAreaName").val || "";
                              var lastTimeStamp = getState("ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp").val || "";
                              var lastCleaningDate = getState("ecovacs-deebot.0.cleaninglog.lastCleaningDate").val || "";
                              lastCleaningDate = removeTimeFromDate(lastCleaningDate); // Entferne die Uhrzeit aus dem Datum
                              var lastSquareMeters = getState("ecovacs-deebot.0.cleaninglog.lastSquareMeters").val || "";
                              //var lastTotalTime = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.totalTime").val || "";
                              var lastTotalSeconds = getState("ecovacs-deebot.0.map.lastCleanedSpotArea.totalSeconds").val || ""; 
                              //var cleaningMode = getState("ecovacs-deebot.0.control.extended.cleaningMode").val || "";
                              var cleaningMode = getState("0_userdata.0.Deebot.lastCleaning.CleanMode").val || "";
                              var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
                              
          
                              // Erstelle das neue Objekt
                              var newData = {
                                  "Raum": spotAreaName,
                                  "Datum": lastCleaningDate,
                                  "Timestamp": lastTimeStamp,
                                  "Fläche": lastSquareMeters,
                                  "Dauer": formatTime(lastTotalSeconds), // Dauer der letzten Reinigung in m:s
                                  "Gesamtdauer": totalCleaningTimeFormatted, // Gesamtdauer der aktuellen Reinigung
                                  "Reinigungsmodus": cleaningMode, // Aktueller Reinigungsmodus
                                  "Effizienz": Moppingmode,
                                  "Startzeit": formatTimeComponents(new Date(cleaningStartTime)), // Startzeit umgewandelt in Zeichenfolge
                                  "Endzeit": formatTimeComponents(new Date(cleaningEndTime)) // Endzeit umgewandelt in Zeichenfolge
                              };
          
                              // Füge das neue Objekt zum aktuellen JSON hinzu
                              currentJson.unshift(newData); // Hinzufügen an den Anfang des Arrays
          
                              // Speichere das aktualisierte JSON in 0_userdata
                              setState("0_userdata.0.Deebot.JSON", JSON.stringify(currentJson), function () {
                                  log("JSON erfolgreich aktualisiert und gespeichert.", "info");
                                  
                                  // Setze die Zeitmessung zurück nach dem Schreiben des JSON
                                  cleaningStartTime = null;
          
                                   // Setze zusätzliche Datenpunkte für die letzte Reinigung
                                      setState("0_userdata.0.Deebot.lastCleaning.Dauer", formatTime(lastTotalSeconds));
                                      setState("0_userdata.0.Deebot.lastCleaning.Fläche", lastSquareMeters);
                                      setState("0_userdata.0.Deebot.lastCleaning.Gesamtdauer", totalCleaningTimeFormatted);
                                      setState("0_userdata.0.Deebot.lastCleaning.Raum", spotAreaName);
                                      setState("0_userdata.0.Deebot.lastCleaning.Reinigungsmodus", cleaningMode);                       
                              });
                          } else {
                              log("Fehler beim Lesen des Datenpunkts 0_userdata.0.Deebot.JSON", "error");
                          }
                      });
                  }, 2000); // 2-Sekunden-Verzögerung hinzugefügt
              }
          });
          
              // Überwache Änderungen im Reinigungsstatus-Datenpunkt
          on({ id: "ecovacs-deebot.0.map.currentUsedSpotAreas", change: "ne", ack: true }, function (obj) {
              // Überprüfe, ob das Reinigungsgerät im Reinigungsmodus ist
              if (cleaningStartTime === null) {
                  cleaningStartTime = new Date();
              }
          });
          
          }
          
          // Starte die Überwachung
          monitorAndSaveJson();
          
          // Hilfsfunktion zur Formatierung von Zeit in Minuten und Sekunden (m:s)
          function formatTime(totalSeconds) {
              var minutes = Math.floor(totalSeconds / 60);
              var seconds = Math.floor(totalSeconds % 60);
          
              // Manuelle Formatierung der Minuten und Sekunden
              var minutesString = minutes < 10 ? "0" + minutes : minutes.toString();
              var secondsString = seconds < 10 ? "0" + seconds : seconds.toString();
          
              return minutesString + ":" + secondsString;
          }
          
          // Hilfsfunktion zur Formatierung von Stunden, Minuten und Sekunden als Zeitzeichenfolge
          function formatTimeComponents(date) {
              var hours = pad(date.getHours(), 2);
              var minutes = pad(date.getMinutes(), 2);
              var seconds = pad(date.getSeconds(), 2);
              return hours + ":" + minutes;
          }
          
          // Hilfsfunktion zum Entfernen der Uhrzeit aus dem Datum
          function removeTimeFromDate(dateString) {
              // Teilen Sie das Datum in Datum und Uhrzeit auf
              var parts = dateString.split(" ");
              // Nur das Datum zurückgeben
              return parts[0];
          }
          
          // Hilfsfunktion zum Auffüllen von Zahlen mit führenden Nullen
          function pad(num, size) {
              var s = num.toString();
              while (s.length < size) s = "0" + s;
              return s;
          }
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @chris76e sagte: das gesamte script

          Dann erweitere Zeile 32

                              var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
                              if(Moppingmode == 'deep') Moppingmode = 'tief';
                              else if(Moppingmode == 'fast') Moppingmode = 'schnell';
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

          Chris76eC 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @chris76e sagte: das gesamte script

            Dann erweitere Zeile 32

                                var Moppingmode = getState("ecovacs-deebot.0.info.extended.moppingMode").val || "";
                                if(Moppingmode == 'deep') Moppingmode = 'tief';
                                else if(Moppingmode == 'fast') Moppingmode = 'schnell';
            
            Chris76eC Offline
            Chris76eC Offline
            Chris76e
            schrieb am zuletzt editiert von
            #5

            @paul53

            Danke

            1 Antwort Letzte Antwort
            0

            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

            Registrieren Anmelden
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            440

            Online

            33.0k

            Benutzer

            83.4k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2026
            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