Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Ecovacs Deebot Adapter: Status und Feedback

NEWS

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

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

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

Ecovacs Deebot Adapter: Status und Feedback

Scheduled Pinned Locked Moved Entwicklung
deebotecovacsecovacs-deebotecovacs-deebot adaptersaugrobotervacuum
576 Posts 36 Posters 141.5k Views 31 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Chris76eC Chris76e

    @mrbungle64 ist ein javascript. Ich möchte mir eine Tabelle erstellen wo, Datum, Start, Ende Fläche, Raum und Dauer gespeichert werden nach jedem reinigungs durchgang. Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

    Hoffe du verstehts jetzt was ich meine 🤔

    mrbungle64M Offline
    mrbungle64M Offline
    mrbungle64
    Developer
    wrote on last edited by mrbungle64
    #364

    @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

    @mrbungle64 ist ein javascript. Ich möchte mir eine Tabelle erstellen wo, Datum, Start, Ende Fläche, Raum und Dauer gespeichert werden nach jedem reinigungs durchgang. Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

    Hoffe du verstehts jetzt was ich meine 🤔

    Sorry, ja das ist JavaScript Script (kein Blockly), aber bitte schreib das doch bitte nicht alles in einen großen Absatz bzw. Fließtext.
    Ich hatte das doch extra schon so aufgeteilt wie ich das gerne hätte 😉

    Chris76eC 1 Reply Last reply
    0
    • mrbungle64M mrbungle64

      @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

      @mrbungle64 ist ein javascript. Ich möchte mir eine Tabelle erstellen wo, Datum, Start, Ende Fläche, Raum und Dauer gespeichert werden nach jedem reinigungs durchgang. Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

      Hoffe du verstehts jetzt was ich meine 🤔

      Sorry, ja das ist JavaScript Script (kein Blockly), aber bitte schreib das doch bitte nicht alles in einen großen Absatz bzw. Fließtext.
      Ich hatte das doch extra schon so aufgeteilt wie ich das gerne hätte 😉

      Chris76eC Online
      Chris76eC Online
      Chris76e
      wrote on last edited by Chris76e
      #365

      @mrbungle64

      Sorry, versuche jetzt seit fast 3 Tagen das Script zuschreiben, mal bin ich nah an der Lösung dran, aber dann biege ich wieder ganz falsch ab und bin dann wieder ganz weit weg. Mit meine wunsch zur Änderung wäre das sehr einfach 😁

      Welches geändertes oder fehlerhaftest Verhalten vom Adapter hast du genau festgestellt?
      - das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht
      - das ist kein fehlverhalten aber die DP unter ecovacs-deebot.0.cleaninglog die mit last anfangen,
      werden ja Zeitversetzt aktualisiert, da kannst du ja nicht sändern.

      Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?
      - das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
      wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
      ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.

      Welche Fragen hast du speziell zur Fertigstellung des Scripts?
      - wie mann es hinbekommt das wenn der DP ecovacs-deebot.0.status.device auf "charing" geändert hat
      und sich der DP ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp (dient als trigger) aktualisiert hat.
      Die aktualisierung soll aber während der aktuellen Reinigung passieren werden.

      Damit bin ich wieder nah dran.....

      var idTable = '0_userdata.0.JSON.Deebot';
      var idRaum = 'ecovacs-deebot.0.map.lastCleanedSpotArea.spotAreaName';
      var idFlaeche = 'ecovacs-deebot.0.cleaninglog.lastSquareMeters';
      var idDauer = 'ecovacs-deebot.0.cleaninglog.lastTotalTimeString';
      var idAktiv = 'ecovacs-deebot.0.status.device';
      var idWartungsplatz = '0_userdata.0.Deebot.Wartungsplatz';
      var idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
      var idCleaningTimestamp = 'ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp';
      var lastCleaningTimestamp = getState(idCleaningTimestamp).val;
      var table = [];
      if (getState(idTable).val) table = JSON.parse(getState(idTable).val);
      var obj = {};
      var startDate = new Date();
      var lastExecutionTime = 0;
      var isCleaning = false;
      var hasCleaned = false;
      var hasCharged = false;
      
      on({id: idAktiv, change: "ne"}, function (dp) {
        if (getState(idWartungsplatz).val === false && dp.state.val === 'cleaning') {
          obj = {};
          obj.Datum = formatDate(new Date(), 'YYYY-MM-DD ');
          obj.Start = formatDate(new Date(), 'hh:mm');
          startDate = new Date();
          var lastCleaningTimestamp = getState(idCleaningTimestamp).val; // speichere den vorherigen Wert von idCleaningTimestamp
          isCleaning = true;
          setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf false setzen
          lastExecutionTime = dp.state.ts;
        }
      });
      on({id: "ecovacs-deebot.0.status.device", val: "charging"}, function (dp) {
        hasCharged = true;
        checkWrite();
      });
      on({ id: idCleaningTimestamp, change: 'ne' }, function (dp) {
        if (isCleaning && dp.state.val != lastCleaningTimestamp) { // überprüfe, ob sich idCleaningTimestamp seit der letzten Reinigung geändert hat
          hasCleaned = true;
          lastCleaningTimestamp = dp.state.val; // speichere den aktuellen Wert von idCleaningTimestamp als vorherigen Wert für den nächsten Durchlauf
          checkWrite();
        }
      });
      
      function checkWrite() {
        if (isCleaning && hasCleaned && hasCharged && getState(idWartungsplatzEIN).val === false) {
          obj.Ende = formatDate(new Date(), 'hh:mm');
          obj.Flaeche = getState(idFlaeche).val;
          obj.Raum = getState(idRaum).val;
          obj.Dauer = getState(idDauer).val;
          obj.Dauergesamt = formatDuration(Math.floor((new Date() - startDate) / 1000));
          table.unshift(obj);
          if (table.length > 100) {
            table.pop();
          }
          setState(idTable, JSON.stringify(table), true);
          isCleaning = false;
          hasCleaned = false;
          hasCharged = false;
        }
      }
      function formatDuration(seconds) {
        var minutes = Math.floor(seconds / 60);
        var remainingSeconds = seconds % 60;
        return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
      }
      
      function pad(number, length) {
        var str = '' + number;
        while (str.length < length) {
          str = '0' + str;
        }
        return str;
      }
      
      
      mrbungle64M 1 Reply Last reply
      0
      • Chris76eC Chris76e

        @mrbungle64

        Sorry, versuche jetzt seit fast 3 Tagen das Script zuschreiben, mal bin ich nah an der Lösung dran, aber dann biege ich wieder ganz falsch ab und bin dann wieder ganz weit weg. Mit meine wunsch zur Änderung wäre das sehr einfach 😁

        Welches geändertes oder fehlerhaftest Verhalten vom Adapter hast du genau festgestellt?
        - das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht
        - das ist kein fehlverhalten aber die DP unter ecovacs-deebot.0.cleaninglog die mit last anfangen,
        werden ja Zeitversetzt aktualisiert, da kannst du ja nicht sändern.

        Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?
        - das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
        wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
        ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.

        Welche Fragen hast du speziell zur Fertigstellung des Scripts?
        - wie mann es hinbekommt das wenn der DP ecovacs-deebot.0.status.device auf "charing" geändert hat
        und sich der DP ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp (dient als trigger) aktualisiert hat.
        Die aktualisierung soll aber während der aktuellen Reinigung passieren werden.

        Damit bin ich wieder nah dran.....

        var idTable = '0_userdata.0.JSON.Deebot';
        var idRaum = 'ecovacs-deebot.0.map.lastCleanedSpotArea.spotAreaName';
        var idFlaeche = 'ecovacs-deebot.0.cleaninglog.lastSquareMeters';
        var idDauer = 'ecovacs-deebot.0.cleaninglog.lastTotalTimeString';
        var idAktiv = 'ecovacs-deebot.0.status.device';
        var idWartungsplatz = '0_userdata.0.Deebot.Wartungsplatz';
        var idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
        var idCleaningTimestamp = 'ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp';
        var lastCleaningTimestamp = getState(idCleaningTimestamp).val;
        var table = [];
        if (getState(idTable).val) table = JSON.parse(getState(idTable).val);
        var obj = {};
        var startDate = new Date();
        var lastExecutionTime = 0;
        var isCleaning = false;
        var hasCleaned = false;
        var hasCharged = false;
        
        on({id: idAktiv, change: "ne"}, function (dp) {
          if (getState(idWartungsplatz).val === false && dp.state.val === 'cleaning') {
            obj = {};
            obj.Datum = formatDate(new Date(), 'YYYY-MM-DD ');
            obj.Start = formatDate(new Date(), 'hh:mm');
            startDate = new Date();
            var lastCleaningTimestamp = getState(idCleaningTimestamp).val; // speichere den vorherigen Wert von idCleaningTimestamp
            isCleaning = true;
            setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf false setzen
            lastExecutionTime = dp.state.ts;
          }
        });
        on({id: "ecovacs-deebot.0.status.device", val: "charging"}, function (dp) {
          hasCharged = true;
          checkWrite();
        });
        on({ id: idCleaningTimestamp, change: 'ne' }, function (dp) {
          if (isCleaning && dp.state.val != lastCleaningTimestamp) { // überprüfe, ob sich idCleaningTimestamp seit der letzten Reinigung geändert hat
            hasCleaned = true;
            lastCleaningTimestamp = dp.state.val; // speichere den aktuellen Wert von idCleaningTimestamp als vorherigen Wert für den nächsten Durchlauf
            checkWrite();
          }
        });
        
        function checkWrite() {
          if (isCleaning && hasCleaned && hasCharged && getState(idWartungsplatzEIN).val === false) {
            obj.Ende = formatDate(new Date(), 'hh:mm');
            obj.Flaeche = getState(idFlaeche).val;
            obj.Raum = getState(idRaum).val;
            obj.Dauer = getState(idDauer).val;
            obj.Dauergesamt = formatDuration(Math.floor((new Date() - startDate) / 1000));
            table.unshift(obj);
            if (table.length > 100) {
              table.pop();
            }
            setState(idTable, JSON.stringify(table), true);
            isCleaning = false;
            hasCleaned = false;
            hasCharged = false;
          }
        }
        function formatDuration(seconds) {
          var minutes = Math.floor(seconds / 60);
          var remainingSeconds = seconds % 60;
          return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
        }
        
        function pad(number, length) {
          var str = '' + number;
          while (str.length < length) {
            str = '0' + str;
          }
          return str;
        }
        
        
        mrbungle64M Offline
        mrbungle64M Offline
        mrbungle64
        Developer
        wrote on last edited by
        #366

        @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

        • das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

        Bist du dir eigentlich sicher, dass das vorher funktioniert hatte?

        Chris76eC 2 Replies Last reply
        0
        • mrbungle64M mrbungle64

          @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

          • das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

          Bist du dir eigentlich sicher, dass das vorher funktioniert hatte?

          Chris76eC Online
          Chris76eC Online
          Chris76e
          wrote on last edited by Chris76e
          #367

          @mrbungle64

          Nein 😎

          Ist mir erst aufgefallen als ich festgestellt habe das ecovacs-deebot.0.control.extended.savedGoToPositionValues auch bei Deebot 901 sehr gut funktioniert.

          Hatte mich länger nicht mehr ausführlich mit den ganzen DP´s beschäftigt.......

          mrbungle64M 1 Reply Last reply
          0
          • Chris76eC Chris76e

            @mrbungle64

            Nein 😎

            Ist mir erst aufgefallen als ich festgestellt habe das ecovacs-deebot.0.control.extended.savedGoToPositionValues auch bei Deebot 901 sehr gut funktioniert.

            Hatte mich länger nicht mehr ausführlich mit den ganzen DP´s beschäftigt.......

            mrbungle64M Offline
            mrbungle64M Offline
            mrbungle64
            Developer
            wrote on last edited by
            #368

            @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

            @mrbungle64

            Nein 😎

            Ist mir erst aufgefallen als ich festgestellt habe das ecovacs-deebot.0.control.extended.savedGoToPositionValues auch bei Deebot 901 sehr gut funktioniert.

            Hatte mich länger nicht mehr ausführlich mit den ganzen DP´s beschäftigt.......

            Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
            Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

            Chris76eC 1 Reply Last reply
            0
            • mrbungle64M mrbungle64

              @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

              @mrbungle64

              Nein 😎

              Ist mir erst aufgefallen als ich festgestellt habe das ecovacs-deebot.0.control.extended.savedGoToPositionValues auch bei Deebot 901 sehr gut funktioniert.

              Hatte mich länger nicht mehr ausführlich mit den ganzen DP´s beschäftigt.......

              Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
              Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

              Chris76eC Online
              Chris76eC Online
              Chris76e
              wrote on last edited by
              #369

              @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

              Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
              Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

              Ist bei der Version auch nicht vorhanden

              mrbungle64M 1 Reply Last reply
              0
              • Chris76eC Chris76e

                @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
                Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

                Ist bei der Version auch nicht vorhanden

                mrbungle64M Offline
                mrbungle64M Offline
                mrbungle64
                Developer
                wrote on last edited by
                #370

                @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
                Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

                Ist bei der Version auch nicht vorhanden

                Dann würde ich sagen, dass die API beim Deebot 901 dazu leider keinen Wert liefert ...

                Chris76eC 1 Reply Last reply
                0
                • mrbungle64M mrbungle64

                  @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                  @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                  Dann installier' doch bitte mal die letzte Stable (1.4.11) und schau mal ob der DP einen Wert hat.
                  Von den Datenpunkten her sollte sich eigentlich seit dem nichts mehr relevantes für den Deebot 901 geändert haben.

                  Ist bei der Version auch nicht vorhanden

                  Dann würde ich sagen, dass die API beim Deebot 901 dazu leider keinen Wert liefert ...

                  Chris76eC Online
                  Chris76eC Online
                  Chris76e
                  wrote on last edited by Chris76e
                  #371

                  @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                  Dann würde ich sagen, dass die API beim Deebot 901 dazu leider keinen Wert liefert ...

                  Okay, aber dann würde das ja auch egal sein wenn die DP´s und current erst später zurückgesetzt werden, dann da gibt es den DP 😜

                  mrbungle64M 1 Reply Last reply
                  0
                  • Chris76eC Chris76e

                    @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                    Dann würde ich sagen, dass die API beim Deebot 901 dazu leider keinen Wert liefert ...

                    Okay, aber dann würde das ja auch egal sein wenn die DP´s und current erst später zurückgesetzt werden, dann da gibt es den DP 😜

                    mrbungle64M Offline
                    mrbungle64M Offline
                    mrbungle64
                    Developer
                    wrote on last edited by
                    #372

                    @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                    @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                    Dann würde ich sagen, dass die API beim Deebot 901 dazu leider keinen Wert liefert ...

                    Okay, aber dann würde das ja auch egal sein wenn die DP´s und current erst später zurückgesetzt werden, dann da gibt es den DP 😜

                    Auf was ist das bezogen? 🙂

                    1 Reply Last reply
                    0
                    • mrbungle64M mrbungle64

                      @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                      • das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

                      Bist du dir eigentlich sicher, dass das vorher funktioniert hatte?

                      Chris76eC Online
                      Chris76eC Online
                      Chris76e
                      wrote on last edited by
                      #373

                      auf das

                      @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                      das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

                      und das

                      @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                      Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?

                      • das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
                        wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
                        ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.
                      mrbungle64M 1 Reply Last reply
                      0
                      • Chris76eC Chris76e

                        auf das

                        @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                        das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

                        und das

                        @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                        Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?

                        • das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
                          wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
                          ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.
                        mrbungle64M Offline
                        mrbungle64M Offline
                        mrbungle64
                        Developer
                        wrote on last edited by
                        #374

                        @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                        auf das

                        @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                        das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

                        und das

                        @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                        Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?

                        • das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
                          wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
                          ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.

                        Ja, aber ich meine:

                        • ist es dann "egal", ob dein Wunsch umgesetzt wird?
                        • oder ist es "egal", weil der Datenpunkt eh keinen Wert hat man den Wunsch erst recht umsetzen kann?

                        Ich würde gerne Deine Erwartungshaltung an mich verstehen 🙂

                        Chris76eC 1 Reply Last reply
                        0
                        • mrbungle64M mrbungle64

                          @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                          auf das

                          @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                          das der DP ecovacs-deebot.0.cleaninglog.lastTotalSeconds auf (null) steht

                          und das

                          @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                          Was wären jetzt deine Wünsche an den Adapter um das Script umzusetzen?

                          • das die DP unter ecovacs-deebot.0.cleaninglog.current erst dann zurückgesetzt werden,
                            wenn eine neue Reinigung stattfindet und nicht sofort wenn sich der Status von
                            ecovacs-deebot.0.status.device von "cleaning" auf "returing" ändert.

                          Ja, aber ich meine:

                          • ist es dann "egal", ob dein Wunsch umgesetzt wird?
                          • oder ist es "egal", weil der Datenpunkt eh keinen Wert hat man den Wunsch erst recht umsetzen kann?

                          Ich würde gerne Deine Erwartungshaltung an mich verstehen 🙂

                          Chris76eC Online
                          Chris76eC Online
                          Chris76e
                          wrote on last edited by
                          #375

                          @mrbungle64 Wenn das mit den current umgesetzt würde, währe das andere, zumindest für mich nicht mehr wichtig, da ich ja denn da die sekunden habe. 😉

                          ofri2607O 1 Reply Last reply
                          0
                          • mrbungle64M mrbungle64

                            @sigi234 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                            @mrbungle64

                            Hallo,

                            ecovacs-deebot.0
                            2023-02-25 11:42:50.180	info	Entering spot area with ID 8 (cleanStatus: spot_area)
                            
                            ecovacs-deebot.0
                            2023-02-25 11:42:45.737	info	Loading map image
                            
                            ecovacs-deebot.0
                            2023-02-25 11:42:36.961	info	Loading map image
                            
                            ecovacs-deebot.0
                            2023-02-25 11:42:34.036	info	Entering spot area with ID 6 (cleanStatus: spot_area)
                            
                            ecovacs-deebot.0
                            2023-02-25 11:42:21.493	info	Entering spot area with ID 4 (cleanStatus: spot_area)
                            
                            ecovacs-deebot.0
                            2023-02-25 11:42:09.026	info	Entering spot area with ID 3 (cleanStatus: spot_area)
                            
                            ecovacs-deebot.0
                            2023-02-25 11:41:35.987	info	Entering spot area with ID 2 (cleanStatus: spot_area)
                            
                            ecovacs-deebot.0
                            2023-02-25 11:41:22.436	warn	Error: Error: IndexSizeError: The source width is 0.
                            

                            Ich nehme mal an, dass du die "IndexSizeError: The source width is 0" Warnung meinst ...
                            Hast du in dem Zusammenhang ein Fehlverhalten festgestellt?

                            sigi234S Online
                            sigi234S Online
                            sigi234
                            Forum Testing Most Active
                            wrote on last edited by
                            #376

                            @mrbungle64 sagte in Ecovacs Deebot Adapter: Status und Feedback:

                            Ich nehme mal an, dass du die "IndexSizeError: The source width is 0" Warnung meinst ...

                            ja, aber bis jetzt nicht mehr aufgetreten.

                            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                            Immer Daten sichern!

                            1 Reply Last reply
                            0
                            • Chris76eC Chris76e

                              @mrbungle64 Wenn das mit den current umgesetzt würde, währe das andere, zumindest für mich nicht mehr wichtig, da ich ja denn da die sekunden habe. 😉

                              ofri2607O Offline
                              ofri2607O Offline
                              ofri2607
                              wrote on last edited by
                              #377

                              @chris76e ganz klar ist mir zwar auch nicht was du vor hast, aber ich denke dein Problem lässt sich in Javascript relativ leicht, auch ohne Adapteranpassung, beim Setzen der Werte in "current" auf 0 mit oldState des jeweiligen Datenpunktes lösen.

                              Als einfaches Beispiel:

                              var Wert = 0;
                              on({id: 'ecovacs-deebot.0.cleaninglog.current.cleanedSeconds', change: 'le'}, function(obj){
                                  //Wert wenn cleanedSeconds auf 0 gesetzt wird
                                  Wert = obj.oldState.val;  
                              });
                              

                              Ich nutze das so ähnlich z.B., um mir den vorhergehenden Raum zu holen um damit dann eine Markierung auf der Karte zu setzen.

                              Chris76eC 1 Reply Last reply
                              0
                              • ofri2607O ofri2607

                                @chris76e ganz klar ist mir zwar auch nicht was du vor hast, aber ich denke dein Problem lässt sich in Javascript relativ leicht, auch ohne Adapteranpassung, beim Setzen der Werte in "current" auf 0 mit oldState des jeweiligen Datenpunktes lösen.

                                Als einfaches Beispiel:

                                var Wert = 0;
                                on({id: 'ecovacs-deebot.0.cleaninglog.current.cleanedSeconds', change: 'le'}, function(obj){
                                    //Wert wenn cleanedSeconds auf 0 gesetzt wird
                                    Wert = obj.oldState.val;  
                                });
                                

                                Ich nutze das so ähnlich z.B., um mir den vorhergehenden Raum zu holen um damit dann eine Markierung auf der Karte zu setzen.

                                Chris76eC Online
                                Chris76eC Online
                                Chris76e
                                wrote on last edited by Chris76e
                                #378

                                @ofri2607

                                Aber die Werte von current sind ja nicht immer aktuell. Die werden ja nur in bestimmten intervallen aktualisiert. Da durch bekomme ich ja keine zuverlässigen Daten.

                                Versuche nochmal zuerklären was ich genau vorhabe.

                                Möchte eine eigenes LastCleaningLog erstellen wo auch der Raum und die Gesamtdauer der aktuellen Reinigung erfasst wird.

                                Screenshot 2023-02-27 102138.png

                                und weil ich noch ein 2. log habe wo nur die Fahrten zum Wartungsplatzt gesichert werden kommt das 1. Script wohl nicht mehr richtig mit.

                                Screenshot 2023-02-27 102121.png

                                const idTable = '0_userdata.0.Deebot.WartungsplatzJSON';
                                const idStatus = 'ecovacs-deebot.0.status.device';
                                const idWartungsplatzDatum = '0_userdata.0.Deebot.WartungsplatzDatum';
                                const idWartungsplatzUhrzeit = '0_userdata.0.Deebot.WartungsplatzUhrzeit';
                                const idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
                                
                                var table = [];
                                if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                                var obj = {};
                                var startDate = null;
                                var endDate = null;
                                var stopTime = null;
                                
                                on({id: "0_userdata.0.Deebot.Wartungsplatz"/*Wartungsplatz*/, change: "ge"}, function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  
                                  if (value >= oldValue) {
                                    startDate = new Date();
                                    setState(idWartungsplatzEIN, true, true); // WartungsplatzEIN auf true setzen
                                  }
                                });
                                
                                on({id: idStatus, change: 'ne'}, function (obj) {
                                  if (obj.state.val === 'charging' && startDate) {
                                    endDate = new Date();
                                    setState('0_userdata.0.Deebot.WartungsplatzUhrzeit', formatDate(new Date(), 'hh:mm'), true);
                                    obj = {};
                                    obj.Datum = formatDate(new Date(), 'YYYY-MM-DD');
                                    obj.Start = formatDate(startDate, 'hh:mm');
                                    obj.Ende = formatDate(endDate, 'hh:mm');
                                    obj.Dauer = formatDuration(Math.floor((endDate - startDate) / 1000));
                                
                                    // Setze Ladestation und Wartungsplatz auf false
                                    setState(idWartungsplatzDatum, obj.Datum, true);
                                    setState('0_userdata.0.Deebot.Ladestation', false, true);
                                    setState('0_userdata.0.Deebot.Wartungsplatz', false, true);
                                    //setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf false setzen
                                
                                    if (stopTime) {
                                      obj.Uhrzeit = formatDate(stopTime, 'hh:mm');
                                      stopTime = null;
                                    }
                                
                                    table.unshift(obj);
                                    if (table.length > 100) {
                                      table.pop();
                                    }
                                    setState(idTable, JSON.stringify(table), true);
                                    startDate = null;
                                    endDate = null;
                                  } else if (obj.state.val === 'stopped') {
                                    stopTime = new Date();
                                  }
                                });
                                
                                function formatDuration(seconds) {
                                  var minutes = Math.floor(seconds / 60);
                                  var remainingSeconds = seconds % 60;
                                  return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
                                }
                                
                                function pad(number, length) {
                                  var str = '' + number;
                                  while (str.length < length) {
                                    str = '0' + str;
                                  }
                                  return str;
                                }
                                
                                
                                mrbungle64M ofri2607O 2 Replies Last reply
                                0
                                • Chris76eC Chris76e

                                  @ofri2607

                                  Aber die Werte von current sind ja nicht immer aktuell. Die werden ja nur in bestimmten intervallen aktualisiert. Da durch bekomme ich ja keine zuverlässigen Daten.

                                  Versuche nochmal zuerklären was ich genau vorhabe.

                                  Möchte eine eigenes LastCleaningLog erstellen wo auch der Raum und die Gesamtdauer der aktuellen Reinigung erfasst wird.

                                  Screenshot 2023-02-27 102138.png

                                  und weil ich noch ein 2. log habe wo nur die Fahrten zum Wartungsplatzt gesichert werden kommt das 1. Script wohl nicht mehr richtig mit.

                                  Screenshot 2023-02-27 102121.png

                                  const idTable = '0_userdata.0.Deebot.WartungsplatzJSON';
                                  const idStatus = 'ecovacs-deebot.0.status.device';
                                  const idWartungsplatzDatum = '0_userdata.0.Deebot.WartungsplatzDatum';
                                  const idWartungsplatzUhrzeit = '0_userdata.0.Deebot.WartungsplatzUhrzeit';
                                  const idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
                                  
                                  var table = [];
                                  if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                                  var obj = {};
                                  var startDate = null;
                                  var endDate = null;
                                  var stopTime = null;
                                  
                                  on({id: "0_userdata.0.Deebot.Wartungsplatz"/*Wartungsplatz*/, change: "ge"}, function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    
                                    if (value >= oldValue) {
                                      startDate = new Date();
                                      setState(idWartungsplatzEIN, true, true); // WartungsplatzEIN auf true setzen
                                    }
                                  });
                                  
                                  on({id: idStatus, change: 'ne'}, function (obj) {
                                    if (obj.state.val === 'charging' && startDate) {
                                      endDate = new Date();
                                      setState('0_userdata.0.Deebot.WartungsplatzUhrzeit', formatDate(new Date(), 'hh:mm'), true);
                                      obj = {};
                                      obj.Datum = formatDate(new Date(), 'YYYY-MM-DD');
                                      obj.Start = formatDate(startDate, 'hh:mm');
                                      obj.Ende = formatDate(endDate, 'hh:mm');
                                      obj.Dauer = formatDuration(Math.floor((endDate - startDate) / 1000));
                                  
                                      // Setze Ladestation und Wartungsplatz auf false
                                      setState(idWartungsplatzDatum, obj.Datum, true);
                                      setState('0_userdata.0.Deebot.Ladestation', false, true);
                                      setState('0_userdata.0.Deebot.Wartungsplatz', false, true);
                                      //setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf false setzen
                                  
                                      if (stopTime) {
                                        obj.Uhrzeit = formatDate(stopTime, 'hh:mm');
                                        stopTime = null;
                                      }
                                  
                                      table.unshift(obj);
                                      if (table.length > 100) {
                                        table.pop();
                                      }
                                      setState(idTable, JSON.stringify(table), true);
                                      startDate = null;
                                      endDate = null;
                                    } else if (obj.state.val === 'stopped') {
                                      stopTime = new Date();
                                    }
                                  });
                                  
                                  function formatDuration(seconds) {
                                    var minutes = Math.floor(seconds / 60);
                                    var remainingSeconds = seconds % 60;
                                    return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
                                  }
                                  
                                  function pad(number, length) {
                                    var str = '' + number;
                                    while (str.length < length) {
                                      str = '0' + str;
                                    }
                                    return str;
                                  }
                                  
                                  
                                  mrbungle64M Offline
                                  mrbungle64M Offline
                                  mrbungle64
                                  Developer
                                  wrote on last edited by
                                  #379

                                  @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                                  Aber die Werte von current sind ja nicht immer aktuell. Die werden ja nur in bestimmten intervallen aktualisiert. Da durch bekomme ich ja keine zuverlässigen Daten.

                                  Was ist Deine Erwartungshaltung an die Daten, damit Du diese als "aktuell" und "zuverlässig" bezeichnen kannst?

                                  Möchte eine eigenes LastCleaningLog erstellen wo auch der Raum und die Gesamtdauer der aktuellen Reinigung erfasst wird.

                                  Wie hilft Dir die gewünschte Änderung, dass die Werte unter "current" erst später zurückgesetzt werden dabei?

                                  Chris76eC 1 Reply Last reply
                                  0
                                  • Chris76eC Chris76e

                                    @ofri2607

                                    Aber die Werte von current sind ja nicht immer aktuell. Die werden ja nur in bestimmten intervallen aktualisiert. Da durch bekomme ich ja keine zuverlässigen Daten.

                                    Versuche nochmal zuerklären was ich genau vorhabe.

                                    Möchte eine eigenes LastCleaningLog erstellen wo auch der Raum und die Gesamtdauer der aktuellen Reinigung erfasst wird.

                                    Screenshot 2023-02-27 102138.png

                                    und weil ich noch ein 2. log habe wo nur die Fahrten zum Wartungsplatzt gesichert werden kommt das 1. Script wohl nicht mehr richtig mit.

                                    Screenshot 2023-02-27 102121.png

                                    const idTable = '0_userdata.0.Deebot.WartungsplatzJSON';
                                    const idStatus = 'ecovacs-deebot.0.status.device';
                                    const idWartungsplatzDatum = '0_userdata.0.Deebot.WartungsplatzDatum';
                                    const idWartungsplatzUhrzeit = '0_userdata.0.Deebot.WartungsplatzUhrzeit';
                                    const idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
                                    
                                    var table = [];
                                    if(getState(idTable).val) table = JSON.parse(getState(idTable).val);
                                    var obj = {};
                                    var startDate = null;
                                    var endDate = null;
                                    var stopTime = null;
                                    
                                    on({id: "0_userdata.0.Deebot.Wartungsplatz"/*Wartungsplatz*/, change: "ge"}, function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      
                                      if (value >= oldValue) {
                                        startDate = new Date();
                                        setState(idWartungsplatzEIN, true, true); // WartungsplatzEIN auf true setzen
                                      }
                                    });
                                    
                                    on({id: idStatus, change: 'ne'}, function (obj) {
                                      if (obj.state.val === 'charging' && startDate) {
                                        endDate = new Date();
                                        setState('0_userdata.0.Deebot.WartungsplatzUhrzeit', formatDate(new Date(), 'hh:mm'), true);
                                        obj = {};
                                        obj.Datum = formatDate(new Date(), 'YYYY-MM-DD');
                                        obj.Start = formatDate(startDate, 'hh:mm');
                                        obj.Ende = formatDate(endDate, 'hh:mm');
                                        obj.Dauer = formatDuration(Math.floor((endDate - startDate) / 1000));
                                    
                                        // Setze Ladestation und Wartungsplatz auf false
                                        setState(idWartungsplatzDatum, obj.Datum, true);
                                        setState('0_userdata.0.Deebot.Ladestation', false, true);
                                        setState('0_userdata.0.Deebot.Wartungsplatz', false, true);
                                        //setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf false setzen
                                    
                                        if (stopTime) {
                                          obj.Uhrzeit = formatDate(stopTime, 'hh:mm');
                                          stopTime = null;
                                        }
                                    
                                        table.unshift(obj);
                                        if (table.length > 100) {
                                          table.pop();
                                        }
                                        setState(idTable, JSON.stringify(table), true);
                                        startDate = null;
                                        endDate = null;
                                      } else if (obj.state.val === 'stopped') {
                                        stopTime = new Date();
                                      }
                                    });
                                    
                                    function formatDuration(seconds) {
                                      var minutes = Math.floor(seconds / 60);
                                      var remainingSeconds = seconds % 60;
                                      return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
                                    }
                                    
                                    function pad(number, length) {
                                      var str = '' + number;
                                      while (str.length < length) {
                                        str = '0' + str;
                                      }
                                      return str;
                                    }
                                    
                                    
                                    ofri2607O Offline
                                    ofri2607O Offline
                                    ofri2607
                                    wrote on last edited by
                                    #380

                                    @chris76e ok, ich glaube jetzt verstehe ich etwas besser was du vor hast, vor Allem in Kombination mit deinem Post zuvor:
                                    @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                                    Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

                                    Warum nimmst du als Trigger für das Schreiben deines LastCleaningLogs den StatusDP mit "charging"?
                                    Ich nehme hier als Trigger für eine Anzeige der letzten Reinigung in der Vis, die Änderung des Datenpunktes "last20Logs" - geht aber mE jeder andere Datenpunkt mit "last...." auch, die kommen bei mir ziemlich zeitgleich herein.
                                    D.h. jedesmal wenn der neu geschrieben wird, hast du dann auch sicher alle Infos in den "last..." Datenpunkten und brauchst gar nicht auf die Datenpunkte in "current" zurückgreifen.

                                    Das funktioniert bei mir zur Anzeige "Letzte Reinigung" sehr zuverlässig (die 0 m² sind nur, weil er testweise nur ganz kurz gelaufen ist):
                                    91743174-2e9d-449c-b8fa-5815bc2ba0d6-image.png

                                    Chris76eC 2 Replies Last reply
                                    0
                                    • mrbungle64M mrbungle64

                                      @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                                      Aber die Werte von current sind ja nicht immer aktuell. Die werden ja nur in bestimmten intervallen aktualisiert. Da durch bekomme ich ja keine zuverlässigen Daten.

                                      Was ist Deine Erwartungshaltung an die Daten, damit Du diese als "aktuell" und "zuverlässig" bezeichnen kannst?

                                      Möchte eine eigenes LastCleaningLog erstellen wo auch der Raum und die Gesamtdauer der aktuellen Reinigung erfasst wird.

                                      Wie hilft Dir die gewünschte Änderung, dass die Werte unter "current" erst später zurückgesetzt werden dabei?

                                      Chris76eC Online
                                      Chris76eC Online
                                      Chris76e
                                      wrote on last edited by
                                      #381

                                      @mrbungle64

                                      dann kann ich direkt die Werte von current erfassen wenn der status auf charging steht, ohne irgendwelche zusätlichen bedinungen einzubauen.

                                      mrbungle64M 1 Reply Last reply
                                      0
                                      • ofri2607O ofri2607

                                        @chris76e ok, ich glaube jetzt verstehe ich etwas besser was du vor hast, vor Allem in Kombination mit deinem Post zuvor:
                                        @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                                        Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

                                        Warum nimmst du als Trigger für das Schreiben deines LastCleaningLogs den StatusDP mit "charging"?
                                        Ich nehme hier als Trigger für eine Anzeige der letzten Reinigung in der Vis, die Änderung des Datenpunktes "last20Logs" - geht aber mE jeder andere Datenpunkt mit "last...." auch, die kommen bei mir ziemlich zeitgleich herein.
                                        D.h. jedesmal wenn der neu geschrieben wird, hast du dann auch sicher alle Infos in den "last..." Datenpunkten und brauchst gar nicht auf die Datenpunkte in "current" zurückgreifen.

                                        Das funktioniert bei mir zur Anzeige "Letzte Reinigung" sehr zuverlässig (die 0 m² sind nur, weil er testweise nur ganz kurz gelaufen ist):
                                        91743174-2e9d-449c-b8fa-5815bc2ba0d6-image.png

                                        Chris76eC Online
                                        Chris76eC Online
                                        Chris76e
                                        wrote on last edited by Chris76e
                                        #382

                                        @ofri2607

                                        weil wenn der Deebot auf charging steht, ich die gesamte Dauer der Reinigung habe, also auch mit hin und zurückfahren.

                                        mrbungle64M 1 Reply Last reply
                                        0
                                        • ofri2607O ofri2607

                                          @chris76e ok, ich glaube jetzt verstehe ich etwas besser was du vor hast, vor Allem in Kombination mit deinem Post zuvor:
                                          @chris76e sagte in Ecovacs Deebot Adapter: Status und Feedback:

                                          Als bedingung dafür habe ich das wenn der deebot wieder an der Ladestation befindet, also ecovacs-deebot.0.status.device auf "charging" steht. Aber ab und zu kommt es vor das die Daten die ich von lastCleaning brauche noch nicht da sind von der DP auf charging steht. Würden die Daten von current nicht direkt zurückgesetzt werden, könnte ich diese nehmen, sind ja die gleichen die dann und lastCleaning kommen.

                                          Warum nimmst du als Trigger für das Schreiben deines LastCleaningLogs den StatusDP mit "charging"?
                                          Ich nehme hier als Trigger für eine Anzeige der letzten Reinigung in der Vis, die Änderung des Datenpunktes "last20Logs" - geht aber mE jeder andere Datenpunkt mit "last...." auch, die kommen bei mir ziemlich zeitgleich herein.
                                          D.h. jedesmal wenn der neu geschrieben wird, hast du dann auch sicher alle Infos in den "last..." Datenpunkten und brauchst gar nicht auf die Datenpunkte in "current" zurückgreifen.

                                          Das funktioniert bei mir zur Anzeige "Letzte Reinigung" sehr zuverlässig (die 0 m² sind nur, weil er testweise nur ganz kurz gelaufen ist):
                                          91743174-2e9d-449c-b8fa-5815bc2ba0d6-image.png

                                          Chris76eC Online
                                          Chris76eC Online
                                          Chris76e
                                          wrote on last edited by Chris76e
                                          #383

                                          @ofri2607 Diese Version funktioniert solange die aktualisierung vor charging kommt. Wenn die erst danach kommt, kommen noch alte Werte zum Beispiel von der Fahrt zum Wartungsplatz.

                                          Wenn ich das richtig verstehe hat sich ja auch der DP geändert im vergleich zur letzten aufgezeichnent Renigung.
                                          Bekomme es einfach nicht hin das er auf die aktualisierung während der Reinigung achten soll, egal ob vorher schon auf charging oder danach auf charging steht.

                                          var idTable = '0_userdata.0.JSON.Deebot';
                                          var idRaum = 'ecovacs-deebot.0.map.lastCleanedSpotArea.spotAreaName';
                                          var idFlaeche = 'ecovacs-deebot.0.cleaninglog.lastSquareMeters';
                                          var idDauer = 'ecovacs-deebot.0.cleaninglog.lastTotalTimeString';
                                          var idAktiv = 'ecovacs-deebot.0.status.device';
                                          var idWartungsplatz = '0_userdata.0.Deebot.Wartungsplatz';
                                          var idWartungsplatzEIN = '0_userdata.0.Deebot.WartungsplatzEIN';
                                          var idCleaningTimestamp = 'ecovacs-deebot.0.cleaninglog.lastCleaningTimestamp';
                                          var table = [];
                                          if (getState(idTable).val) table = JSON.parse(getState(idTable).val);
                                          var obj = {};
                                          var startDate = new Date();
                                          var lastExecutionTime = 0;
                                          var isCleaning = false;
                                          setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf true setzen
                                          
                                          on(idAktiv, function (dp) {
                                            if (getState(idWartungsplatz).val === false && dp.state.val === 'cleaning') {
                                              obj = {};
                                              obj.Datum = formatDate(new Date(), 'YYYY-MM-DD ');
                                              obj.Start = formatDate(new Date(), 'hh:mm');
                                              startDate = new Date();
                                              isCleaning = true;
                                              setState(idWartungsplatzEIN, false, true); // WartungsplatzEIN auf true setzen
                                              lastExecutionTime = dp.state.ts;
                                            } else if (getState(idWartungsplatzEIN).val === false && dp.state.val === 'charging' && hasStateChanged(idCleaningTimestamp)) {
                                              obj.Ende = formatDate(new Date(), 'hh:mm');
                                              obj.Flaeche = getState(idFlaeche).val;
                                              obj.Raum = getState(idRaum).val;
                                              obj.Dauer = getState(idDauer).val;
                                              obj.Dauergesamt = formatDuration(Math.floor((new Date() - startDate) / 1000));
                                              table.unshift(obj);
                                              if (table.length > 100) {
                                                table.pop();
                                              }
                                              setState(idTable, JSON.stringify(table), true);
                                              lastExecutionTime = dp.state.ts;
                                              isCleaning = false;
                                            }
                                          });
                                          function hasStateChanged(id) {
                                            const state = getState(id);
                                            if(!state) return false; // Die State-Variable existiert nicht
                                            if(state.ts <= lastExecutionTime || state.val === null) return false; // Der State hat sich seit dem letzten Ausführen des Scripts nicht geändert oder hat keinen Wert
                                            return true;
                                          }
                                          
                                          function formatDuration(seconds) {
                                            var minutes = Math.floor(seconds / 60);
                                            var remainingSeconds = seconds % 60;
                                            return pad(minutes, 2) + ':' + pad(remainingSeconds, 2);
                                          }
                                          
                                          function pad(number, length) {
                                            var str = '' + number;
                                            while (str.length < length) {
                                              str = '0' + str;
                                            }
                                            return str;
                                          }
                                          
                                          
                                          //on({id: idWartungsplatz, change: "ne"}, function(obj) {
                                            //if (obj.state.val) {
                                              // Deebot ist am Wartungsplatz
                                             // isCleaning = false;
                                            //}
                                          //});
                                          
                                          
                                          ofri2607O 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          254

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe