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

Xiaomi Philips Eyecare Smart Lamp 2 #66

Closed lubepi closed 1 year ago

lubepi commented 1 year ago

Brightness funktioniert, Power lesen funktioniert, Power schreiben nicht.

model: philips.light.sread1 Spec Code

"power": async function (obj, val) { await device[obj].setPower(val) }, statt "power": async function (obj, val) { await device[obj].setPower(val ? 'on' : 'off') }, habe ich schon probiert, hat leider nichts geändert. Funktioniert es mit der Lampe entgegen der Spezifikation einfach nicht, oder gibt es da noch einen anderen Trick?

lubepi commented 1 year ago

Das Model wird im state javascript.0.MiHomeAll.53230096.info.model als philips.light.sread1 angegeben, ist aber eigentlich das Model philips.light.sread2. Spec Das sollte aber ja eigentlich nichts daran ändern dass der Power State nicht funktioniert.

Die dazugehörige Fehlermeldung beim ändern des power states ist diese: Error: Call to device timed out at Timeout.retry [as _onTimeout] (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/protocol-miio.js:358:23) at listOnTimeout (node:internal/timers:564:17) at processTimers (node:internal/timers:507:7)

Pittini commented 1 year ago

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

Versuchs mal mit true/false statt on/off

lubepi commented 1 year ago

Funktioniert leider auch nicht.

Pittini commented 1 year ago

Funktioniert leider auch nicht.

Hab mir jetzt mal die Specs angeschaut, is klar das das nicht geht, das Ding hat kein "power". Es gibt aber "on" und "toggle", ich würds damit versuchen. 2022-12-22 18_36_44-Online JSON Viewer

lubepi commented 1 year ago

Die Definition property:on ist bei allen Lampen gleich und hat nichts mit dem aufzurufenden Befehl set_power zu tun.

setPower(v) {
    return this.miioCall('set_power', withLightEffect(v));
}

Das Problem lag darin dass die Funktion withLightEffect(v) ein Array mit den Default Werten DEFAULT_EFFECT und DEFAULT_DURATION zurückgibt. Somit erhält man ein Array ['on', 'smooth', 500]. Damit kann die Lampe aber nicht umgehen. Sie braucht zum Ein- und Ausschalten ein Array ['on'] oder ['off'].

setPower(v) {
    return this.miioCall('set_power', [v]);
 }

So funktioniert es.

Du kannst dir mal das hier anschauen falls du es noch nicht kennst: python-miio Dort war unter anderem die Lampe implementiert, und mit --debug bekommt man alle Informationen die man benötigt. Z.b. die methods der unterstützten Funktionen und die dazugehörigen übermittelten params. Sieht bei der Lampe dann so aus {'id': 2, 'method': 'set_user_scene', 'params': [2]}