mrbungle64 / ioBroker.ecovacs-deebot

Control your Ecovacs Deebot and yeedi vacuum cleaner with ioBroker
MIT License
59 stars 11 forks source link

T20 zusätzliche DP für Airdrying #649

Open chris76e opened 4 months ago

chris76e commented 4 months ago

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

mrbungle64 commented 4 months ago

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

mrbungle64 commented 4 months ago

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

Kurzbeschreibung:

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

chris76e commented 4 months ago

@mrbungle64

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

mrbungle64 commented 3 months ago

@chris76e

In der aktuellen Alpha gibt es nun 2 weitere Datenpunkte:

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.

chris76e commented 3 months ago

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