Skip to content
  • 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
  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.9k

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

Ecovacs Deebot Adapter: Status und Feedback

Geplant Angeheftet Gesperrt Verschoben Entwicklung
deebotecovacsecovacs-deebotecovacs-deebot adaptersaugrobotervacuum
576 Beiträge 36 Kommentatoren 141.6k Aufrufe 31 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 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antworten Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                      0
                      • Chris76eC Chris76e

                        @mrbungle64

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

                        mrbungle64M Offline
                        mrbungle64M Offline
                        mrbungle64
                        Developer
                        schrieb am zuletzt editiert von
                        #384

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

                        @mrbungle64

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

                        Wieso hilft Dir das dabei wenn Du das pro Raum machst?

                        Chris76eC 1 Antwort Letzte Antwort
                        0
                        • mrbungle64M mrbungle64

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

                          @mrbungle64

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

                          Wieso hilft Dir das dabei wenn Du das pro Raum machst?

                          Chris76eC Online
                          Chris76eC Online
                          Chris76e
                          schrieb am zuletzt editiert von
                          #385

                          @mrbungle64

                          Weil ich nur SpotReinigungen mache.

                          1 Antwort Letzte Antwort
                          0
                          • Chris76eC Chris76e

                            @ofri2607

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

                            mrbungle64M Offline
                            mrbungle64M Offline
                            mrbungle64
                            Developer
                            schrieb am zuletzt editiert von mrbungle64
                            #386

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

                            @ofri2607

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

                            Ich gebe @ofri2607 da Recht:
                            Du solltest auf die Aktualisierung von "last20Logs" triggern. Da solltest du auf jeden Fall die gesamte Dauer der Reinigung haben.

                            Chris76eC 1 Antwort Letzte Antwort
                            0
                            • mrbungle64M mrbungle64

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

                              @ofri2607

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

                              Ich gebe @ofri2607 da Recht:
                              Du solltest auf die Aktualisierung von "last20Logs" triggern. Da solltest du auf jeden Fall die gesamte Dauer der Reinigung haben.

                              Chris76eC Online
                              Chris76eC Online
                              Chris76e
                              schrieb am zuletzt editiert von Chris76e
                              #387

                              @mrbungle64

                              auf welchen ich trigger ist doch egal, die daten kommen ja alle gleichzeitig rein. Und wenn ich die Daten dann schreiben und der Deebot noch 2.35 min für die fahrt zurück braucht habe ich ja immer noch nicht die gesamte Dauer der Reinigung....

                              Screenshot 2023-02-27 120414.png

                              mrbungle64M 1 Antwort Letzte Antwort
                              0
                              • Chris76eC Chris76e

                                @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 Offline
                                ofri2607O Offline
                                ofri2607
                                schrieb am zuletzt editiert von
                                #388

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

                                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.

                                Dann würde ich den Trigger auf Beide setzen und die Zeitstempel vom Status, als auch von der Änderung im "last...." Datenpunkt mit einbeziehen.
                                Wenn der Zeitstempel von der Änderung im "last..." Datenpunkt nach dem Zeitstempel der Statusänderung auf "charging" ist, dann das Log schreiben, sonst auf die Änderung im Status warten und erst dann das Log schreiben.

                                Chris76eC 1 Antwort Letzte Antwort
                                0
                                • ofri2607O ofri2607

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

                                  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.

                                  Dann würde ich den Trigger auf Beide setzen und die Zeitstempel vom Status, als auch von der Änderung im "last...." Datenpunkt mit einbeziehen.
                                  Wenn der Zeitstempel von der Änderung im "last..." Datenpunkt nach dem Zeitstempel der Statusänderung auf "charging" ist, dann das Log schreiben, sonst auf die Änderung im Status warten und erst dann das Log schreiben.

                                  Chris76eC Online
                                  Chris76eC Online
                                  Chris76e
                                  schrieb am zuletzt editiert von Chris76e
                                  #389

                                  @ofri2607 das habe ich ja, aber aus irgenwelchen gründen funktioniert das nicht wenn die aktualsierung nach charging kommt und der Deebot vorher auf dem Wartungsplatz war.

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

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

                                  Das ist das Problem im script

                                  } 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;
                                  }
                                  
                                  ofri2607O 1 Antwort Letzte Antwort
                                  0
                                  • Chris76eC Chris76e

                                    @mrbungle64

                                    auf welchen ich trigger ist doch egal, die daten kommen ja alle gleichzeitig rein. Und wenn ich die Daten dann schreiben und der Deebot noch 2.35 min für die fahrt zurück braucht habe ich ja immer noch nicht die gesamte Dauer der Reinigung....

                                    Screenshot 2023-02-27 120414.png

                                    mrbungle64M Offline
                                    mrbungle64M Offline
                                    mrbungle64
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #390

                                    @chris76e

                                    Und wenn ich die Daten dann schreiben und der Deebot noch 2.35 min für die fahrt zurück braucht habe ich ja immer noch nicht die gesamte Dauer der Reinigung

                                    Dein Problem besteht ja nur, weil die Reinigung schon am Wartungspunkt beendet ist (und der eine Wert nicht von der API bereitgestellt wird)...

                                    Chris76eC 1 Antwort Letzte Antwort
                                    0
                                    • mrbungle64M mrbungle64

                                      @chris76e

                                      Und wenn ich die Daten dann schreiben und der Deebot noch 2.35 min für die fahrt zurück braucht habe ich ja immer noch nicht die gesamte Dauer der Reinigung

                                      Dein Problem besteht ja nur, weil die Reinigung schon am Wartungspunkt beendet ist (und der eine Wert nicht von der API bereitgestellt wird)...

                                      Chris76eC Online
                                      Chris76eC Online
                                      Chris76e
                                      schrieb am zuletzt editiert von
                                      #391

                                      @mrbungle64

                                      und deswegen will ich das mit dem script berrechen was ja auch funktioniert bis auf denn fall was ich jetzt schon mehrmals gesagt habe

                                      mrbungle64M 1 Antwort Letzte Antwort
                                      0
                                      • Chris76eC Chris76e

                                        @mrbungle64

                                        und deswegen will ich das mit dem script berrechen was ja auch funktioniert bis auf denn fall was ich jetzt schon mehrmals gesagt habe

                                        mrbungle64M Offline
                                        mrbungle64M Offline
                                        mrbungle64
                                        Developer
                                        schrieb am zuletzt editiert von mrbungle64
                                        #392

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

                                        @mrbungle64

                                        und deswegen will ich das mit dem script berrechen was ja auch funktioniert bis auf denn fall was ich jetzt schon mehrmals gesagt habe

                                        Vom mehrmals sagen lösen sich aber nicht alle Probleme 😉

                                        Ich kann jetzt nicht einfach eine bestehende Funktion vom Adapter ändern, weil man vermutet, dass es sich dann bei deinem (nicht mehr unterstützen) Modell dann wie gewünscht verhält.
                                        Es gibt keinen Befehl der explizit die Daten für die "current" Werte liefert. Die werden beim clean report mitgeliefert.
                                        Ich kann nicht sagen, ob und wann die API bei deinem Modell die Werte von selbst auf 0 setzt. Von daher bin ich mit der Änderung auch aktuell zurückhaltend.

                                        Chris76eC 1 Antwort Letzte Antwort
                                        0
                                        • mrbungle64M mrbungle64

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

                                          @mrbungle64

                                          und deswegen will ich das mit dem script berrechen was ja auch funktioniert bis auf denn fall was ich jetzt schon mehrmals gesagt habe

                                          Vom mehrmals sagen lösen sich aber nicht alle Probleme 😉

                                          Ich kann jetzt nicht einfach eine bestehende Funktion vom Adapter ändern, weil man vermutet, dass es sich dann bei deinem (nicht mehr unterstützen) Modell dann wie gewünscht verhält.
                                          Es gibt keinen Befehl der explizit die Daten für die "current" Werte liefert. Die werden beim clean report mitgeliefert.
                                          Ich kann nicht sagen, ob und wann die API bei deinem Modell die Werte von selbst auf 0 setzt. Von daher bin ich mit der Änderung auch aktuell zurückhaltend.

                                          Chris76eC Online
                                          Chris76eC Online
                                          Chris76e
                                          schrieb am zuletzt editiert von
                                          #393

                                          @mrbungle64 Wenn es nicht geht, dann ist es halt so, ich ja nicht schlimm 😀 .

                                          War ja nur die Frage ob es möglich ist oder nicht. Wenn es nicht möglich ist, muss ich halt schauen wie ich das mi dem Script hinbekomme. Das andere wäre halt nur sehr viel einfacher.

                                          mrbungle64M 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

                                          311

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe