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

Support Smartmi Fan 3 #33

Closed ApolloSK closed 3 years ago

ApolloSK commented 3 years ago

Hi, can you Support the Smartmi Fan 3?

I can controll it via mihome App.

Maybe this helps:

"model": "zhimi.fan.za5", "permitLevel": 16, "spec_type": "urn:miot-spec-v2:device:fan:0000A005:zhimi-za5:2", "extra": { "isSetPincode": 0, "pincodeType": 0, "fw_version": "2.0.8", "mcu_version": "0018",

Thank You

Maveric2005 commented 3 years ago

Hey :) are there any news on adding this smartmi fan 3?

Pittini commented 3 years ago

The TO didnt answer at his other Issue, so I didnt integrate this one, because without a tester I cant finish. If you also wont this device, you also must test it and give an answer, then I'll do it.

Maveric2005 commented 3 years ago

i have this Fan at home :) if you want i can test it and give a answer :)

Pittini commented 3 years ago

Added to the develop branch, pls try out. Dont forget to copy the definitionfile zhimi.fan.za5.js to your node.mihome Devices directory as described in the manual.

Maveric2005 commented 3 years ago

ok super :) i will try it this week :)

Maveric2005 commented 3 years ago

Habe es integriert. Sieht für mich auch so aus als würden alle daten rein kommen.

Unbenannt

ich würde aber die states gerne via simple restfull api steuern. Ich sehe das z.B bei Power ein &nbsp steht. Wie setze ich nun den punkt richtig um eben "power" zu starten?

Pittini commented 3 years ago

Nene, da stimmt was überhaupt nicht, die nbsp haben da nix zu suchen. Bei Power z.B. steht da normaler weise entweder true oder false. Ich schau mal ob ich nen Bock geschossen hab oder obn anderes Prob. gibt. Was sagt den das Log, steht da was?

Maveric2005 commented 3 years ago

ok cool :). ein Teil scheint aufjedenfall zu funktionieren, da er die IP usw richtig abrufen kann. Nur eben nicht die sachen für die bedienung. Ich hab grad gelesen das nbsp immer reingeschrieben wird im expertenmodus wenn eben ein leerzeichen im feld stehen würde.

Maveric2005 commented 3 years ago

im log steht jetzt nichts was "komisch" wäre. Keine warnung und keine Fehlermeldung.

Maveric2005 commented 3 years ago

evtl. wäre es noch wichtig für dich das der Ventilator Smartmi fan 3 einen ionisator hat. Die option ist im iobroker nicht hinterlegt :)

Pittini commented 3 years ago

Erstmal musses grundsätzlich passen, dann den Ionisator dazubauen is easy. Hab vorhin noch ma nach Typos etc. geguggt, da passt alles. Es gibt jetzt 2 Möglichkeiten warum da nix kommt, entweder isses das andere Protokoll oder bei Dir stimmt was ned. Schalt mal bitte das logging im Skript an und gib mir ein komplettes startlog, evtl. seh ich da was, wenn nicht müssen wir mit try and error weitermachen. Is lästig, ich weis, aber dem Umstand geschultet dasses eben 2 Protokolle bei Xiaomi gibt und man nie weis, welches Gerät, welches Protokoll nutzt. Grundsätzlich isses so beim anlegen neuer Geräte dass man ein vorhandenes nimmt (in Deinem Fall zhimi.fan.za4) und es dann umbaut.

Maveric2005 commented 3 years ago

Alles klar :) teste ich aus und geb dir rückmeldung.

Maveric2005 commented 3 years ago

anbei das logging nach dem start

20.8.2021, 11:01:24.269 [info ]: javascript.0 (6147) Stop script script.js.common.MiHome 20.8.2021, 11:01:33.011 [info ]: javascript.0 (6147) Stop script script.js.common.MiHome 20.8.2021, 11:01:38.400 [info ]: javascript.0 (6147) Start javascript script.js.common.MiHome 20.8.2021, 11:01:38.436 [info ]: javascript.0 (6147) script.js.common.MiHome: Starting AllMyMi V.0.2.25 20.8.2021, 11:01:38.436 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching init 20.8.2021, 11:01:38.440 [info ]: javascript.0 (6147) script.js.common.MiHome: registered 0 subscriptions and 0 schedules 20.8.2021, 11:01:38.441 [info ]: javascript.0 (6147) script.js.common.MiHome: You are already logged in, login canceled 20.8.2021, 11:01:38.441 [info ]: javascript.0 (6147) script.js.common.MiHome: Retrieving your in de registered MiHome Devices 20.8.2021, 11:01:38.521 [info ]: javascript.0 (6147) script.js.common.MiHome: Found 2 MiHome Devices, those are: 20.8.2021, 11:01:38.522 [info ]: javascript.0 (6147) script.js.common.MiHome: Schlurfi 20.8.2021, 11:01:38.522 [info ]: javascript.0 (6147) script.js.common.MiHome: Ventilator 20.8.2021, 11:01:38.523 [info ]: javascript.0 (6147) script.js.common.MiHome: Now searching for supported Devices... 20.8.2021, 11:01:38.523 [info ]: javascript.0 (6147) script.js.common.MiHome: Device Ventilator is supported, creating DataPoints 20.8.2021, 11:01:38.523 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching PrepareDeviceDps, did=405118051 model=zhimi.fan.za5 20.8.2021, 11:01:38.524 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching CreateStates() 20.8.2021, 11:01:38.535 [info ]: javascript.0 (6147) script.js.common.MiHome: 23 States created, now setting up channels! 20.8.2021, 11:01:38.537 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching main 20.8.2021, 11:01:38.538 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching WriteGenericDpValues() 20.8.2021, 11:01:38.541 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching CreateDevices 20.8.2021, 11:01:38.541 [info ]: javascript.0 (6147) script.js.common.MiHome: Now creating device for zhimi.fan.za5 / 405118051 / 192.168.2.114 / 3742ddba8a2cdc3e591206a3c4b987e6 / 10000 20.8.2021, 11:01:38.542 [info ]: javascript.0 (6147) script.js.common.MiHome: Created device {"_events":{},"_eventsCount":0,"_maxListeners":100,"id":"405118051","address":"192.168.2.114","token":"3742ddba8a2cdc3e591206a3c4b987e6","protocol":"local","refresh":10000,"_properties":{},"_propertiesToMonitor":["power","angle","angle_enable","speed_level","natural_level","child_lock","poweroff_time","buzzer","led_b"],"_miotSpec":null,"_miotSpecType":null,"model":"zhimi.fan.za5","setter":{},"definition":{"info":[{"id":"localip","initial":"","forceCreation":false,"common":{"read":true,"write":true,"name":"Ip Adress","type":"string","role":"value","def":""}},{"id":"token","initial":"","forceCreation":false,"common":{"read":true,"write":true,"name":"Token","type":"string","role":"value","def":""}},{"id":"did","initial":"","forceCreation":false,"common":{"read":true,"write":true,"name":"Device Id","type":"string","role":"value","def":""}},{"id":"model","initial":"","forceCreation":false,"common":{"read":true,"write":true,"name":"Model","type":"string","role":"value","def":""}},{"id":"rssi","initial":0,"forceCreation":false,"common":{"read":true,"write":false,"name":"rssi","type":"number","role":"value.rssi","def":0}},{"id":"name","initial":"","forceCreation":false,"common":{"read":true,"write":true,"name":"Name","type":"string","role":"value","def":""}},{"id":"isOnline","initial":false,"forceCreation":false,"common":{"read":true,"write":true,"name":"Is online","type":"boolean","role":"value","def":false}}],"model":"zhimi.fan.za5","description":"Smartmi Fan 3","setter":{},"common":[{"name":"power","type":"boolean","role":"switch","read":true,"write":true},{"name":"angle","type":"number","read":true,"write":true,"min":1,"max":120,"role":"state"},{"name":"angle_enable","type":"boolean","role":"switch","read":true,"write":true},{"name":"natural_level","type":"number","read":true,"write":true,"min":0,"max":1,"states":{"0":"Straight Wind","1":"Natural Wind"},"role":"state"},{"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":100,"unit":"%","role":"state"},{"name":"poweroff_time","type":"number","read":true,"write":true,"min":0,"max":540,"unit":"m","role":"state"}]},"firstrun":true,"rssi":0,"isOnline":true} now fetching data 20.8.2021, 11:01:39.097 [info ]: javascript.0 (6147) script.js.common.MiHome: Init Device# 0 - device="zhimi.fan.za5" 20.8.2021, 11:01:39.098 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting trigger #0 for zhimi.fan.za5 20.8.2021, 11:01:39.100 [info ]: javascript.0 (6147) script.js.common.MiHome: Reaching CreateDpTrigger 20.8.2021, 11:01:39.100 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting DataPointTrigger #0 for zhimi.fan.za5 20.8.2021, 11:01:39.105 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.power / read=true write=true 20.8.2021, 11:01:39.106 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.angle / read=true write=true 20.8.2021, 11:01:39.106 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.angle_enable / read=true write=true 20.8.2021, 11:01:39.107 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.natural_level / read=true write=true 20.8.2021, 11:01:39.108 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.buzzer / read=true write=true 20.8.2021, 11:01:39.118 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.child_lock / read=true write=true 20.8.2021, 11:01:39.119 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.led_b / read=true write=true 20.8.2021, 11:01:39.120 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.speed_level / read=true write=true 20.8.2021, 11:01:39.121 [info ]: javascript.0 (6147) script.js.common.MiHome: Setting Datapoint Trigger for javascript.0.MiHomeAll.405118051.poweroff_time / read=true write=true

Pittini commented 3 years ago

Und wenn Du 10 Sekunden wartest, kommt da dann noch was? Sieht nämlich an sich gut aus soweit.

Maveric2005 commented 3 years ago

ne leider nicht. Ich starte das scipt ( auch den adapter mal neu gestartet ). Der log wird generiert. Und in den objekten wird dann das angezeigt wie im screenshot.

kurz als info für dich: ioBroker.admin 4.2.2 Script Engine 4.11.0 (V5 geht ja nur mit AdminV5)

kann es evtl an einem rechteproblem liegen? Ich habe die zhimi.fan.za5.js per ftp hochgeladen und musste sie dann per ssh mit root rechten in den jeweiligen ordner verschieben. Unbenannt

deshalb steht dann bei besitzer jetzt pi

Wobei das js ja ausgeführt wird.

Maveric2005 commented 3 years ago

ich habe ebenso einfach mal versucht den "power" state auf true zu setzen. da tut sich dann nicht wirklich was. Also der venti geht da dann nicht an.

Maveric2005 commented 3 years ago

so sieht der log aus wenn ich einen der states auf true oder false setze

Unbenannt

Pittini commented 3 years ago

Ok, danke, sieht tatsächlich fast nach anderem Protocol aus, ich mach mal ne neue Testversion fertig, bitte die angelegten Datenpunkte löschen, die heißen anders beim miot Protokoll.

Pittini commented 3 years ago

kann es evtl an einem rechteproblem liegen? Ich habe die zhimi.fan.za5.js per ftp hochgeladen und musste sie dann per ssh mit root rechten in den jeweiligen ordner verschieben.

Kann ich nich sagen, da ich das anders mach, ich kopier nicht die Datei, sondern nehm ne vorhandene, öffne die mit sudo nano und ersetz den Inhalt und speicher unter neuem Namen.

Maveric2005 commented 3 years ago

auch ne gute möglichkeit. kann ich bei der "neuen" version dann mal testen.

Pittini commented 3 years ago

So, neue Version is im Develop Branch, nicht vergessen den JS Controller neuzustarten nach dem einkopieren. Und ich hab nur mal den Power DP angelegt zum testen.

Maveric2005 commented 3 years ago

vielen dank teste ich später direkt :) gebe natürlich rückmeldung

Maveric2005 commented 3 years ago

Kurze Rückmeldung.

Power on scheint zu gehen :) ohne fehlermeldung im log. Ebenso sind jetzt mehr einstellungen möglich. Unbenannt

Pittini commented 3 years ago

Ok, prima, hab grad mal alle Werte jetzt übernommen, bitte wieder vorher die Datenpunkte löschen und testen in beide Richtungen. Also kannst Du via DP schalten und reagieren die DPs auf Veränderung am Gerät?

Maveric2005 commented 3 years ago

Scheinen alle zu funktionieren. Kann an aus schalten, modis wechslen, geschwindigkeit regeln, Ionisator aus an schalten (aber nur wenn der venti gerade läuft).

Vielen dank :)

Maveric2005 commented 3 years ago

kurz offtopic: hab gesehen du kommst aus langenzenn^^ wir kommen aus Veitsbronn :D also direkt ums eck

Pittini commented 3 years ago

Scheinen alle zu funktionieren. Kann an aus schalten, modis wechslen, geschwindigkeit regeln, Ionisator aus an schalten (aber nur wenn der venti gerade läuft).

Vielen dank :)

Ok, dann kann ich das vom develop in master schieben wenn alles passt. Danke fürs testen und viel Spaß damit.

PS: Thema umme Ecke, können uns ja mal aufn Kaffee treffen.

ToniMahagoni commented 3 years ago

Ich hänge mich hier direkt mal dran. Vielen Dank erstmal für das Projekt im Allgemeinen und dass du den Smartmi Fan 3 so schnell ergänzt hat.

Leider bekomme ich keine Werte angezeigt, sondern es steht bei allen Objekten "(null)": grafik

Lediglich bei den Einträgen unter "info" bekomme ich Werte angezeigt: grafik

Wenn ich die Werte über iobroker setze, reagiert der Ventilator korrekt und ich sehe die Änderung auch in der App.

Beim Testen sind mir noch ein paar Dinge aufgefallen:

Ich habe das mal wie folgt geändert und das scheint soweit zu passen (Temperatur und Luftfeuchtigkeit kann ich leider nicht verifizieren, da ich ja leider keinerlei Werte im iobroker sehe):

DefineDevice[24] = { // untested info: {}, model: "zhimi.fan.za5",// https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:fan:0000A005:zhimi-za5:1
description: "Smartmi Fan 3", setter: { "fan.on": async function (obj, val) { await device[obj].setPower(val) }, "fan.mode": async function (obj, val) { await device[obj].setMode(val) }, "fan.fan-level": async function (obj, val) { await device[obj].setFanLevel(val) }, "fan.horizontal-swing": async function (obj, val) { await device[obj].setHorizontalSwing(val) }, "fan.horizontal-angle": async function (obj, val) { await device[obj].setHorizontalAngle(val) }, "fan.anion": async function (obj, val) { await device[obj].setAnion(val) }, "indicator-light.brightness": async function (obj, val) { await device[obj].setLcdBrightness(val) }, "alarm.alarm": async function (obj, val) { await device[obj].setAlarm(val) }, "physical-controls-locked.physical-controls-locked": async function (obj, val) { await device[obj].setChildLock(val) }, "fan.off-delay": async function (obj, val) { await device[obj].setOffDelayTime(val) } }, common: [{ name: "fan.on", type: "boolean", role: "switch", read: true, write: true }, { name: "fan.mode", type: "number", role: "switch", read: true, write: true, min: 0, max: 1, states: { 0:"Natural Wind" , 1: "Straight Wind" } }, { name: "fan.fan-level", type: "number", role: "switch", read: true, write: true, min: 1, max: 4, states: { 1: "1", 2: "2", 3: "3", 4: "4"} }, { name: "fan.horizontal-swing", type: "boolean", role: "switch", read: true, write: true }, { name: "fan.horizontal-angle", type: "number", role: "switch", read: true, write: true, min: 30, max: 120, unit: "°", states: { 30: "30°", 60: "60°", 90: "90°", 120: "120°" } }, { name: "fan.anion", type: "boolean", role: "switch", read: true, write: true }, { name: "indicator-light.brightness", type: "number", read: true, write: true, min: 0, max: 100, unit:"%"}, { name: "alarm.alarm", type: "boolean", role: "switch", read: true, write: true }, { name: "physical-controls-locked.physical-controls-locked", type: "boolean", role: "switch", read: true, write: true, min: false, max: true }, { name: "fan.off-delay", type: "number", role: "switch", read: true, write: true, min: 0, max: 36000, unit: "s" }, { name: "environment.temperature", type: "number", role: "value.temperature", read: true, write: false, min: -30.0, max: 100.0, unit: "°C" }, { name: "environment.relative-humidity", type: "number", role: "value.humidity", read: true, write: false, min: 0, max: 100, unit: "%" }
] };

In der Gerätedefinition habe ich dann entsprechend Temperatur+Luftfeuchtigkeit in den Properties ergänzt und die Funktion setIndicatorLight durch setLcdBrightness ersetzt:

const Device = require('../device-miio');

module.exports = class extends Device {

static model = 'zhimi.fan.za5'; static name = 'Smartmi Fan 3'; static image = 'https://static.home.mi.com/app/image/get/file/developer_1541408255kg3xtr1j.png';

constructor(opts) { super(opts);

this._miotSpecType = 'urn:miot-spec-v2:device:fan:0000A005:zhimi-za5:1';
this._propertiesToMonitor = [
  'fan:on',
  'fan:mode',
  'fan:fan-level',
  'fan:horizontal-swing',
  'fan:horizontal-angle',
  'fan:off-delay',
  'fan:anion',
  'indicator-light:on',
  'alarm:alarm',
  'physical-controls-locked:physical-controls-locked',
  'environment:relative-humidity',
  'environment:temperature'
  ];

}

getPower() { return this.properties['fan:on']; }

setPower(v) { return this.miotSetProperty('fan:on', v); }

setMode(v) { return this.miotSetProperty('fan:mode', v); }

setFanLevel(v) { return this.miotSetProperty('fan:fan-level', v); }

setHorizontalSwing(v) { return this.miotSetProperty('fan:horizontal-swing', v); }

setHorizontalAngle(v) { return this.miotSetProperty('fan:horizontal-angle', v); }

setAnion(v) { return this.miotSetProperty('fan:anion', v); }

setLcdBrightness(v) { return this.miotSetProperty('indicator-light:brightness', v); }

setAlarm(v) { return this.miotSetProperty('alarm:alarm', v); }

setChildLock(v) { return this.miotSetProperty('physical-controls-locked:physical-controls-locked', v); }

setOffDelay(v) { return this.miotSetProperty('fan:off-delay', v); }

};

PS: Ich habe den Code als Quote einfügt, weil das als Code - zumindest in der Vorschau - total seltsam interpretiert wurde.

Pittini commented 3 years ago

@ToniMahagoni Änderungen sehen plausibel aus, hab ich mal direkt übernommen. Warum allerdings keine Werte kommen, is seltsam, steht iwas im Log? Wenn nein, reduzier bitte mal die Definitionsdatei auf fan:on und fan:mode und schau ob die beiden dann Daten liefern, wenn ja, sukzessive eins nach dem anderen dazunehmen bis der Übeltäter identifiziert wurde. @Maveric2005 Kommen bei Dir Werte?

ToniMahagoni commented 3 years ago

Guter Hinweis @Pittini ! In der Definitionsdatei muss auf jeden Fall noch 'indicator-light:on' durch 'indicator-light:brightness' ersetzt werden.

Hat das "min: false, max: true" bei "physical-controls-locked.physical-controls-locked" einen tieferen Sinn? Habe ich bei mir jetzt mal entfernt.

Lustigerweise habe ich nun (und hatte vielleicht auch vorher schon) Werte, aber nur bei zwei meiner vier Ventilatoren. Ich habe natürlich die ganze Zeit genau mit einem getestet habe, der keine Werte bekam und auch weiterhin keine bekommt.

grafik

grafik

Werde ich am WE mal genauer analysieren und dann im Zweifelsfall mal die Geräte aus dem WLAN werfen und der Reihe nach rein holen.

ToniMahagoni commented 3 years ago

Ich habe jetzt mal alle Geräte aus dem Account entfernt und nur eins von denen hinzugefügt, das im iobroker keine Daten anzeigt. Es kommen weiterhin keine Daten an, tauchen aber im Log auf:

grafik

grafik

Pittini commented 3 years ago

Def Datei ist geändert. Sehr seltsam alles. Wenn da was ankommt und danach siehts im Log aus, dann wird das auch in den DP geschrieben. Hast Du mal nen Browserrefresh versucht, hätte sowas schon mal, dass sich nix bei den Objekten änderte, im Vis aber schon, da hats der Admin einfach nich angezeigt. Schau mal ob Du iwas rausfindest, dass 2 gehen und 2 nicht is iwie völlig crazy.

ToniMahagoni commented 3 years ago

100 Punkte für den Tipp mit dem Browser. STRG+F5 und jetzt bekomme ich auch für das Gerät Werte. Links- und Rechtsdrehung machen übrigens doch was - muss ich also wieder einbauen. Melde mich nochmal...

ToniMahagoni commented 3 years ago

Das Drehen um 7.5° nach links oder rechts versteckt sich unter "custom-service" und ist vom Typ String. Ich habe es einfach mal mit "left" und "right" versucht und das klappt tatsächlich. Könnte man im Setter prüfen, ob "fan.horizontal-swing" auf false steht? Wirft sonst nen Fehler im Log: grafik Allerdings meckert in so einem Fall auch die App, dass man erstmal in die Ausgangstellung zurück soll.

Anfangs hatte ich nur die States "left" und "right", aber dann kann ich nur abwechselnd nach links und rechts schwenken und nicht mehrfach in eine Richtung. Ich habe dafür noch den State "none" ergänzt. So kann ich mit "left", "none", "left", "none", etc. beliebig oft nach links schwenken. Da der Ventilator mit anderen Werten als "left" und "right" nicht klar kommt, fange ich das im Setter schon ab. Funktioniert soweit, aber wenn du ne schönere Lösung hast, nehme ich die auch gerne.

Unter "custom-service" gibt es noch weitere Punkte, die ich übernommen habe:

Es gibt da auch noch drei andere Punkte, die ich aber raus gelassen habe:

Dazu kommen noch zwei Events - keine Ahnung, ob oder wie man die einbinden könnte - ich persönlich habe da auch keinen Bedarf:

Anbei noch mein letzter Stand der Definitionsdatei und der Gerätedefinitionsblock aus dem Script. zhimi.fan.za5.js.txt DefineDevice24.txt

Pittini commented 3 years ago

@ToniMahagoni Wow, Du machst ja volles Programm :)

Könnte man im Setter prüfen, ob "fan.horizontal-swing" auf false steht?

ja klar, Du hast Zugriff auf jedes Property mit: ; device[obj].data.GewünschtesProperty, im aktuellen Fall also device[obj].data.horizontal-swing

Ich wart mal dann noch auf ne Aktualisierung diesbezüglich bevor ichs auf Git schiebe. Grundsätzlich besteht auch die Option entsprechende Abfragen in die node-mihome Definitionsdatei zu legen. Die Sache mit left und right versteh ich ja, aber wozu das none als Leestring gut ist, wenns dann im setter wieder gefiltert wird is mir nich so ganz klar.

ToniMahagoni commented 3 years ago

Ich glaube, die properties im Setter abzufragen, würde dann doch zu weit führen. Wenn fan.on false ist, laufen ja auch alle anderen Operationen in nen Fehler. Insofern ist das wohl schon ok, wenn ein Fehler kommt, weil man bei automatisch schwenkendem Ventilator versucht, manuell einzugreifen. Sonst müsste man ja wirklich für jeden Setter erstmal prüfen, ob fan.on true ist oder welche Abhängigkeit da ggfs. sonst noch besteht. Ich hatte auch schon damit experimentiert, das in der Definitionsdatei abzufragen und ggfs. erst das automatische Schwenken abzuschalten und dann das rechts/links Kommando abzusetzen. Klappt aber auch nicht wirklich, weil beim Abschalten des automatischen Schwenkens der Ventilator erstmal zur Mitte zurück fährt. Wenn ich die Kommandos direkt nacheinander raus schicke, will er zur Mitte zurück, setzt aber dann doch erst die 7.5° nach links/rechts um und fährt dann zur Mitte. Die Original-App ist an der Stelle auch "dumm", also darf das der iobroker auch. Wer ne andere Logik braucht, kann die ja im rufenden Script einbauen.

Mein Problem bei left/none/right ist, dass ich - zumindest im Admin - nicht nochmal "links" schicken kann, wenn in der Anzeige der Wert schon auf "links" steht. Ideal wäre eigentlich, wenn der Wert nach dem Absetzen des Kommandos links oder rechts einfach wieder automatisch auf null/leer/sonstwas springt und man dann erneut beliebig links oder rechts abschicken könnte. So bleibt der Wert nach Änderung im Admin dann auch rot - ich denke mal, weil es kein passendes Property gibt, mit der er das abgleichen kann: grafik

Pittini commented 3 years ago

@ToniMahagoni

Wer ne andere Logik braucht, kann die ja im rufenden Script einbauen.

Ja, seh ich auch so, würde auch den Rahmen des Skripts sprengen.

Ideal wäre eigentlich, wenn der Wert nach dem Absetzen des Kommandos links oder rechts einfach wieder automatisch auf null/leer/sonstwas springt und man dann erneut beliebig links oder rechts abschicken könnte.

Könnte man im Trigger machen, aber würde auch den Rahmen sprengen. Das Skript soll die Verbindung herstellen und Datenpunkte anlegen, alles weitere is Job aufrufender Skripte. Würd es lassen wies is, von mir aus auch gern mit der If im setter. Sag Bescheid bitte wenn Du fertig mit testen und ändern bist, dann schieb ichs auf Git.

Maveric2005 commented 3 years ago

@ToniMahagoni Änderungen sehen plausibel aus, hab ich mal direkt übernommen. Warum allerdings keine Werte kommen, is seltsam, steht iwas im Log? Wenn nein, reduzier bitte mal die Definitionsdatei auf fan:on und fan:mode und schau ob die beiden dann Daten liefern, wenn ja, sukzessive eins nach dem anderen dazunehmen bis der Übeltäter identifiziert wurde. @Maveric2005 Kommen bei Dir Werte?

sorry ich war ein paar tage nicht da. Bei mir kamen ebenso nicht die werte an. Wenn ich diese aber manuel gesetzt habe wurden sie angezeigt und übernommen.

Pittini commented 3 years ago

Scheint zu laufen, ich mach hier mal zu.

ToniMahagoni commented 3 years ago

Ja, hab meinen letzten hier geposteten Stand jetzt ne Weile getestet - vor allem für HomeKit mittels yahka. Läuft einwandfrei. 👍 War nur noch nicht dazu gekommen, das mal zurück zu melden. 😅