Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

T20 zusätzliche DP für Airdrying #649

Open
chris76e opened this issue Mar 2, 2024 · 5 comments
Open

T20 zusätzliche DP für Airdrying #649

chris76e opened this issue Mar 2, 2024 · 5 comments
Labels
Enhancement New feature or request Verification Verification

Comments

@chris76e
Copy link

chris76e commented Mar 2, 2024

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 chris76e added Enhancement New feature or request Verification Verification labels Mar 2, 2024
@mrbungle64 mrbungle64 changed the title T20 zusätliche DP´s für Airdrying T20 zusätzliche DP für Airdrying Mar 3, 2024
@mrbungle64
Copy link
Owner

@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
Copy link
Owner

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

@chris76e
Copy link
Author

@mrbungle64

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

@mrbungle64
Copy link
Owner

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

@chris76e
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement New feature or request Verification Verification
Projects
None yet
Development

No branches or pull requests

2 participants