Pittini / iobroker-nodemihome

Steuerung von bisher nicht unterstützten Xiaomi Geräten in Iobroker via node-mihome
MIT License
27 stars 15 forks source link

zhimi.fan.za4 Mi Fan 2s Bugs #31

Closed janhp closed 3 years ago

janhp commented 3 years ago

Hi Dev,

ich bin heute nochmals dazu gekommen den Mi Fan 2s zu testen, hierbei muss das Skript folgendermaßen angepasst ändern:

Danke. Lass mich gerne wissen, wenn ich etwas testen soll.

Best

Pittini commented 3 years ago

Ok, erster Test: Bitte Zeile 314 im Skript von:

"angle_enable": async function (obj, val) { await device[obj].setSwing(val ? 'on' : 'off') },

zu

"angle_enable": async function (obj, val) { await device[obj].setSwing(val) },

ändern, das sollte der angle lock sein.

Dann Zeile 313 ändern von:

"angle": async function (obj, val) { await device[obj].setFanLevel(val) },

zu

    "angle": async function (obj, val) { await device[obj].setSwingAngle(val) },

das sollte der der Winkel sein, vermutlich nur bestimmte Werte zugelassen, Dein Versuch mit 30,60,90 sollte passen.

Standard und natural hängt iwie mit dem Speedmode zusammen, darum kümmern wir uns wenn obiges erledigt ist.

janhp commented 3 years ago

top danke! funktioniert beides. wie machen wir das nun mit "natural"?

Pittini commented 3 years ago

Also natural und speed hägen etwas undurchsichtig zusammen, lass uns mal folgendes probieren: Erstmal löschte den Fan aus der Objektliste, wird dann neu angeleget. Im Skript tauscht Du den ganzen Block gegen diesen:

DefineDevice[9] = { // untested
    info: {},
    model: "zhimi.fan.za4",// https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:fan:0000A005:zhimi-za4:1  
    description: "Mi Fan 2S",
    setter: {
        "power": async function (obj, val) { await device[obj].setPower(val) },
        "angle": async function (obj, val) { await device[obj].setSwingAngle(val) },
        "angle_enable": async function (obj, val) { await device[obj].setSwing(val) },
        "natural_level": async function (obj, val) { await device[obj].setSpeedLevel(val) },
        "buzzer": async function (obj, val) { await device[obj].setBuzzer(val ? 'on' : 'off') },
        "child_lock": async function (obj, val) { await device[obj].setChildLock(val ? 'on' : 'off') },
        "led_b": async function (obj, val) { await device[obj].setLcdBrightness(val) },
        "speed_level": async function (obj, val) { await device[obj].setFanLevel(val) },
        "poweroff_time": async function (obj, val) { await device[obj].setTimer(val) }
    },
    common:
        [{ name: "power", type: "boolean", role: "switch", read: true, write: true },
        { name: "angle", type: "number", read: true, write: true, min: 1, max: 120 },
        { name: "angle_enable", type: "boolean", role: "switch", read: true, write: true },
        { name: "natural_level", type: "number", read: true, write: true, min: 0, max: 1 },
        { name: "buzzer", type: "boolean", role: "switch", read: true, write: true },
        { name: "child_lock", type: "boolean", role: "switch", read: true, write: true },
        { name: "led_b", type: "boolean", role: "switch", read: true, write: true },
        { name: "speed_level", type: "number", read: true, write: true, min: 1, max: 4 },
        { name: "poweroff_time", type: "number", read: true, write: true, min: 0, max: 540, unit: "m" }]
};

Wenns so ist wie ich denke sollte speed_level die Geschwindigkeit sein, und natural_level mit 0 und 1 die Modi umschalten. Es könnte aber auch sein, dass für normal der Speedlevel genommen wird und auf 0 muß um den natural anzumachen, da mußt einfach rumprobieren, auf jeden Fall sind das die beiden relevanten Datenpunkte.

janhp commented 3 years ago

danke funktioniert. Können wir also closen

Pittini commented 3 years ago

Und welche Variante klappt jetzt? Mit 0 und 1? Oder die andere?

janhp commented 3 years ago

mit "0" und "1"

Pittini commented 3 years ago

Hi, könntest Du Dir bitte mal https://github.com/Pittini/iobroker-nodemihome/issues/35 ansehen und evtl. was dazu sagen? Wäre nett, weil ich grad nich weis was jetzt stimmt.