Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (gelöst)state von DP umbenennen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    (gelöst)state von DP umbenennen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Chris76e
      Chris76e last edited by 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?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Chris76e last edited by

        @chris76e sagte: Wie mache ich das am besten?

        Ohne Skript mit Alias Typ "Zeichenkette" und Lesekonvertierung:

        val == 'deep' ? 'tief' : val == 'fast' ? 'schnell' : val
        
        Chris76e 1 Reply Last reply Reply Quote 0
        • Chris76e
          Chris76e @paul53 last edited by

          @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;
          }
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Chris76e last edited by

            @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';
            
            Chris76e 1 Reply Last reply Reply Quote 0
            • Chris76e
              Chris76e @paul53 last edited by

              @paul53

              Danke

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              384
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              2
              5
              151
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo