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. Skripten / Logik
  4. JavaScript
  5. (gelöst)state von DP umbenennen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

(gelöst)state von DP umbenennen

Geplant Angeheftet Gesperrt Verschoben JavaScript
5 Beiträge 2 Kommentatoren 272 Aufrufe 1 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.
  • 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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

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


            Support us

            ioBroker
            Community Adapters
            Donate

            832

            Online

            32.4k

            Benutzer

            81.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