Closed lubepi closed 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)
""power": async function (obj, val) { await device[obj].setPower(val ? 'on' : 'off') },"
Versuchs mal mit true/false statt on/off
Funktioniert leider auch nicht.
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.
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]}
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?