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
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 😉
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 😉
Der erste Test war erfolgreich. Die DP wurden, wie von dir beschrieben, erstellt und gefüllt.
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.
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.