Grizzelbee / ioBroker.dysonairpurifier

ioBroker Adapter to control to your dyson fan and air purifier devices such as Pure Cool, Hot & Cool and others.
MIT License
13 stars 8 forks source link

[Help] Winkel steuerung ohne Oscillation nicht möglich #306

Open softwarecrash opened 3 months ago

softwarecrash commented 3 months ago

Hallo, ich hab glaube ein kleine verstädnis problem. ich hab den tp07 den man ja über die app auf eine bestimmte winkelpossition bringen kann ohne oscillation, wie bekommt man das über die datenpunkte hin?

hintergrund ist das der lüfter eine bestimmte possition hat (manuell) er soll dann per trigger in den auto modus mit maximaler drehung usw. später soll er dann wieder seine ursprügliche possition etc einnehmen, das funktioniert mit zwischenspeichern der states soweit, nur die possition bekomme ich nicht wieder hin.

wenn ich oscillationangle auf 0 setze, und dann einen winkel eingebe springt er automatisch auf 90grad oscillation mit irgendeinem winkel wo er halt grad ist

Grizzelbee commented 3 months ago

Hi @softwarecrash !

Mein dyson spielt gerade nicht mit mir, deshalb kann ich es gerade nicht ausprobieren, aber es müsste so gehen:

OscillationLeft und OscillationRight beide auf den selben Winkel und OscillationAngle auf CUST einstellen. Dadurch sollte keine Bewegung mehr stattfinden. Durch die CUST Einstellung kann man dann auch beliebige Oscillationswinkel einstellen - abweichend von den Vorgabewerten (45°, 90°, 180°, 350°). 0° sollte prinzipirll auch möglich sein, vielleicht habe ich da noch einen Bug in der Funktion.

softwarecrash commented 3 months ago

@Grizzelbee ich hab das grad nochmal manuel probiert, mit custom, wenn man bei left dann einen winkel angibt springt oscillation auf IDLE, der right wert lässt sich nicht eingeben bzw wird irgnoriert.

hintergrund der ganzen sache ist eigentlich das der lüfter irgendeine posstition und stufe hat und an aus ist (aktueller status eben) dann soll durch ein trigger das ganze teil auf automatik gehen mit voller drehung. und danach wieder in den vorhergehenden zustand, dafür hab ich einfach alle (meine ich) wichtigen datenpunkte genommen in blockly und zwischengespeichert, diese werte werden danach wieder zurück geschrieben, also eigentlich identisch mit dem was er geliefert hatte vorher, nur genau das geht irgendwie nicht. anbei mal als beispiel mein blockly wie ich dachte das es gehen könnte image Ventilator.zip

Grizzelbee commented 3 months ago

So! Ich habe endlich Zeit gefunden das zu verifizieren. Mit diesem Code funktioniert das bei mir einwandfrei (ich setze eine Funktion zu dem Zweck ein):

image

Deine steuere-Elemente funktionieren ebenfalls. Du musst nur die werte analog übergeben. Ach ja: Die Pause ist nicht nötig und deshalb deaktiviert.

softwarecrash commented 3 months ago

danke, der OscillationAngle steht bei mir immer auf Custom wenn ich in der app oder mit der fb den lüfter in eine bestimmte stellung bringe, wenn ich dann die werte zurückschreibe nimmt er warum auch immer 90° drehung an, manuell geht es, da muss ich den wert auf 0° setzen. der OscillationAngle datenpunkt steht als lesbarer wert immer auf custom und ändert sich nicht wenn man von lüfterseite aus was manipuliert

Grizzelbee commented 3 months ago

Hmmm. 🤔 Ich verstehe deine Ausführungen nicht so richtig. Funktioniert mein Code bei Dir und die Frage ist damit erledigt, oder gibt es nach wie vor ein Problem?

softwarecrash commented 3 months ago

dein Code funktioniert soweit. mein problemchen ist das ich die werte die der adapter liefert zwischenspeichern kann, aber beim zurückschreiben der custom wert sich seltsam verhält, hab es auch probiert die werte nochmal analog zu schreiben als zahl und string. aber er nimmt nicht wieder die einstellungen ein die er vorher hatte. sprich oscillationAngle und oscillation angle lower, in eine variable schubsen, lüfter verstellen und dann wieder zurückschreiben, da macht er immer eine bewegung dann statt das zu machen was er vorher gemacht hat

Grizzelbee commented 3 months ago

Okay - dann sehen wir mal ob ich die Fragestellung richtig verstanden habe:

  1. Dein Lüfter soll auf einer beliebigen festen Position stehen
  2. Dann kommt ein Trigger, der den Lüfter in vollem Umfang (350°) oszillieren lässt
  3. Dann kommt ein neuer Trigger, der wieder die Position von 1. einstellen soll.

dazu müsstest Du doch nur OscillationLeft (OscillationAngleLowerBoundary) in einer Variablen speichern. Dann die Oszillation starten und zum Schluss mit setAngle(storedValue, 0) wieder die alte Positionn herstellen.

Oder habe ich etwas falsch verstanden oder übersehen?

softwarecrash commented 3 months ago

fast richtig,

Grizzelbee commented 3 months ago

Okay - JETZT verstehe ich. Das ist unter anderem deswegen ein Problem, weil der Adapter, wenn er den OscillationAbgle CUST bekommt, annimmt das damit 90° gemeint sind.

Ich muss mir mal ansehen ob ich das vielleicht besser machen kann.

Aber es wird auf jeden Fall tricky - weil CUST ja nun leider alles zwischen 0° und 350° sein kann. Da der Adapter aber immer nur die Änderung EINES Datenpunktes (Angle, Left, Right) zur selben Zeit verarbeiten und betrachten kann und nicht weiß ob noch eine weitere Änderung nachkommt kann er nicht 100% sicher beurteilen was mit CUST gemeint sein könnte. Aber vielleicht ist eine bessere Näherung als 90° möglich.

softwarecrash commented 3 months ago

nur eine dumme idee, aber wäre eine ableitung der beiden winkel und eine custom winkel berechnung anhand der werte möglich oder sinvoll? in der app kann man ja die vorgegebenen breiten zur oscillation wählen, die spiegeln sich aber im angle nicht wieder, das war eigentlich mein script/bastel gedanke der so nicht geht.