mrbungle64 / ioBroker.ecovacs-deebot

Control your Ecovacs Deebot and yeedi vacuum cleaner with ioBroker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

T20 zusätzliche DP für Airdrying

chris76e opened this issue · comments

The feature request

In der App kann man die Zeiten für das Airdrying der Wischmöpse einstellen, 2,3 oder 4 Stunden, die fehlen im Adapter. Wenn es möglich ist die einzufügen, kann man dann auch direkt die restdauer, prozentzahl und endzeit mit einbinden?

Which model do you own?

Deebot T20 series

Which version of the ioBroker adapter are you currently using?

No response

Additional information

Habe es mit einem Script gemacht für 2 Stunden

var totalDuration = 2 * 60 * 60 * 1000; // Gesamtdauer in Millisekunden (2 Stunden)
var startTimestamp;
var timerId;

// Funktion zur Aktualisierung der Trockenzeitdaten
function updateDryingData() {
    var currentTimestamp = Date.now();
    var elapsedTime = currentTimestamp - startTimestamp;
    var remainingTime = totalDuration - elapsedTime;
    var percentComplete = Math.floor((elapsedTime / totalDuration) * 100);

    // Schreibe die aktualisierten Werte in die entsprechenden Datenpunkte
    setState('0_userdata.0.Deebot.Trocknen.Dauer', formatTime(elapsedTime));
    setState('0_userdata.0.Deebot.Trocknen.Endzeit', formatEndTime(currentTimestamp + remainingTime));
    setState('0_userdata.0.Deebot.Trocknen.Prozent', percentComplete.toFixed(0));
    setState('0_userdata.0.Deebot.Trocknen.RestDauer', formatTime(remainingTime)); // Restdauer aktualisieren

    // Überprüfe, ob die Trockenzeit abgeschlossen ist
    if (elapsedTime >= totalDuration) {
        clearInterval(timerId);
    }
}

// Funktion zum Formatieren der Zeit in Stunden und Minuten (ohne Sekunden)
function formatTime(milliseconds) {
    var hours = Math.floor(milliseconds / (1000 * 60 * 60));
    var minutes = Math.floor((milliseconds % (1000 * 60 * 60)) / (1000 * 60));
    return addZero(hours) + ':' + addZero(minutes);
}

// Funktion zum Formatieren der Endzeit als Uhrzeit (ohne Sekunden)
function formatEndTime(timestamp) {
    var date = new Date(timestamp);
    var hours = date.getHours();
    var minutes = date.getMinutes();
    return addZero(hours) + ':' + addZero(minutes);
}

// Funktion zum Hinzufügen einer führenden Null, wenn der Wert kleiner als 10 ist
function addZero(value) {
    return value < 10 ? '0' + value : value;
}

// Starte die Trocknungszeit, wenn der entsprechende Datenpunkt auf "true" wechselt
on({id: 'ecovacs-deebot.0.control.extended.airDrying', change: 'ne'}, function (obj) {
    if (obj.state.val === true) {
        startTimestamp = Date.now();
        setState('0_userdata.0.Deebot.Trocknen.Prozent', '0'); // Setze die Prozentzahl auf 0, wenn die Trocknung beginnt
        setState('0_userdata.0.Deebot.Trocknen.RestDauer', formatTime(totalDuration)); // Setze die Restdauer auf die Gesamtdauer, wenn die Trocknung beginnt
        timerId = setInterval(updateDryingData, 1000); // Aktualisiere alle 1 Sekunde
        updateDryingData(); // Aktualisiere sofort beim Start
    } else {
        clearInterval(timerId);
    }
});

Which "other" models are you using?

No response

@chris76e

Ich muss dafür erst mal die Befehle (getDryingDuration, setDryingDuration) in der Library implementieren und das anschließend im Adapter behandeln.

Die Idee mit der Restdauer etc. ist eigentlich ganz gut - ich würde nur ganz gerne erst mal den Adapter entschlacken bevor ich weitere Features einbaue. Mal schauen also 😉

@chris76e

Ich habe das jetzt erst mal so implementiert, dass das nicht abhängig von der einstellbaren Restdauer ist und ich das für meinen Deebot X1 Turbo verwenden kann.

Es gibt 5 neue Datenpunkte:

  • info.extended.airDryingActiveTime
  • info.extended.airDryingDateTime.endDateTime
  • info.extended.airDryingDateTime.endTimestamp
  • info.extended.airDryingDateTime.startDateTime
  • info.extended.airDryingDateTime.startTimestamp

Kurzbeschreibung:

  • "startDateTime" und "startTimestamp" werden gesetzt, wenn das Air Drying beginnt
  • "endDateTime" und "endTimestamp", wenn es beendet wird
  • die "DateTime" Varianten sind human readable und bleiben dauerhaft befüllt bis zum nächsten Air Drying
  • die "Timestamp" Varianten enthalten den Unix Timestamp und werden 1 Min. nach Beendigung auf 0 gesetzt
  • "airDryingActiveTime" zeigt die aktive Dauer in Minuten an (wird entsprechend 1/min. aktualisiert) und 1 Min. nach Beendigung auf 0 gesetzt

Wenn das soweit sauber funktioniert können wir mal weiterschauen 😉

@mrbungle64

Der erste Test war erfolgreich. Die DP wurden, wie von dir beschrieben, erstellt und gefüllt.

@chris76e

In der aktuellen Alpha gibt es nun 2 weitere Datenpunkte:

  • control.extended.airDryingDuration (Dauer mit der Auswahl 60, 120, 180, 240 min.)
  • info.extended.airDryingRemainingTime (Restdauer in min.)

Ich bin gerade am überlegen, ob ich die errechnete "Endzeit" bereits während der Trocknung in den Datenpunkt "info.extended.airDryingDateTime.endDateTime" schreibe und
ob ich "info.extended.airDryingDateTime.endTimestamp" wieder entferne (weil eher kein Nutzen gegeben).

Die Prozentangabe möchte ich ehrlich gesagt erst mal nicht einbauen.

@mrbungle64

Funktioniert

Ich bin gerade am überlegen, ob ich die errechnete "Endzeit" bereits während der Trocknung in den Datenpunkt "info.extended.airDryingDateTime.endDateTime" schreibe und ob ich "info.extended.airDryingDateTime.endTimestamp" wieder entferne (weil eher kein Nutzen gegeben).

Errechnete "Endzeit" sollte reichen.