NEWS
Yet another HomeKit adapter
-
@loverz brauchst du ja nicht. Eine passende Lösung wäre auch super
-
@el_malto
@EnoceanEltakoAlso habe es mir jetzt doch aufmerksam durchgelesen.
Das erste Problem das du hast ist, dass in deinen LVL Objekt theoretisch ein Wert stehen könnte nehmen wir mal 50 % an und in dem anderen CMD Objekt eine Zahl ungleich drei.
Was passiert dann mit deiner Lampe? Ist die Auf 50 % an, oder ist die aus?Diese Situation solltest du auch abfangen. Heißt wenn dieses Objekt sich geändert hat und 0 ist, dann soll das andere Objekt CMD auch wieder zurück gestellt (OFF) werden.
Letztlich hast du mit deinem Script schon mal einiges richtig gemacht.
Du solltest den Schreibe-Block aber noch durch einen Steuere-Block austauschen.
Außerdem würde ich statt „aktualisiere“ als Trigger „geändert“ auswählen. Hat auch einer schon geschrieben in deinem Post.Jetzt würde ich als erstes mal versuchen diesen einen Lichtkanal zum laufen zu bringen und das Skript dann anschließend für die anderen Kanäle kopieren, das ist keine große Sache.
Der Vorteil wenn du alles in Blockly-Scripts machst ist, dass du auch von anderen Anwendungen anschließend einen Prozentwert an deine Lampen senden kannst. Wenn du das ganze über YahkaDirekt machst, dann würde das nicht gehen.Man kann die Skripts auch in einem Ordner zusammenfassen, dann ist es auch schön übersichtlich.
-
@el_malto sagte in Yet another HomeKit adapter:
Er sucht also eine Lösung die das evtl automatisiert. Mit dem Skript aus seinem Thread klappt das. Sein Problem ist nur, dass er jetzt 20 Skripte haben müsste.
Das ist zu automatisieren.
Angenommen seine Dimmaktoren kommen aus dem Adapter "dimmaktortest.0", und heissen Lampe.1 bis Lampe.20, darin jeweils die DP's level und cmd.
- Schritt:
Ein Skript mit (JS oder Blockly) mit einem Selektor als Trigger anlegen (Doku zum Selektor siehe hier)
Als Selektor channel[state.id=dimmaktortest.0*.level]
Im Trigger sich mit diesem Baustein einmal die ID holen
die ID zerlegen, und daraus die Ziel-ID fuer den CMD Datenpunkt heraus holen. Dann in diesen ein "3" herein schreiben.Damit reicht es mit Yahka den level Datenpunkt zu verbinden. Jede Anpassung sorgt dafuer das der Wert auch gesetzt wird.
Zu testen wäre wie genau der Selektor aussehen muss. Das hängt von den Datenpunktnamen ab.
A.
Edit: ich hatte das Bild des korrekten Baustein vergessen
-
@Asgothian Das scheint mir die fortgeschrittene Variante zu sein.
Für den Anfang würde ich damit nicht anfangen -
@loverz So fortgeschritten ist es nicht. Einmal den Selektor verstehen und glücklich sein. String Manipulationen sollten nicht das grosse Problem sein.
Alles andere sind Erweiterungen am Adapter oder viel Skript-click Arbeit, also eher nicht besser.
A.
Zur not kann ich auch auf Discord helfen das zu bauen, so ist es nicht. (nur nicht heute)
Nachtrag: Man kann das auch ohne Selektor bauen. Dann muss man halt alle 20 quell Datenpunkte von Hand in den Trigger eintragen. Entscheidend ist das man sich die ID des zu setzenden DP's aus der ID des DP welchen den Trigger ausgelöst hat zusammen baut. Dann reicht ein Skript für alle Lampen.
-
@Asgothian Naja, solange ich googeln muss was Discord, String Manipulationen und DP IDs sind finde ich es für mich zu kompliziert. Ich kann natürlich nicht für andere sprechen.
-
...
Discord kann ich noch verstehen - das Programm muss man nicht kennen.
Wenn ich aber vorher von Datenpunkten schreibe und das dann als DP abkürze sollte klar sein was gemeint ist.
Und Object ID kommt in jedem Skript vor, sollte also auch klar sein.A.
-
@Asgothian Ja ich hätte mir Das vielleicht schon Zusammenreimen können, stimmt schon.
Meine Botschaft war einfach nur, dass es Anfänger oft deutlich schwerer haben als hier angenommen wird. Zumindest war es bei mir so, Das weiß ich noch, weil es noch nicht allzu lange her istIch bin natürlich trotzdem dankbar über jede Hilfe. Vor allem Spezialisten wie du sind für uns die beste Quelle zum lernen.
-
@Asgothian @loverz besten Dank euch für die Antworten und den Input. Der Level Wert ist in %.
Wenn der cmd Wert bspw. auf 1 (on) 0 (off) gestellt wird wird das Dimmlevel nicht verändert.Im yahka die on off Funktion funktioniert mit dem Aktor.
Im Skript habe ich bereits steuere und aktualisiert eingebunden.
Komme voraussichtlich erst nach Mittwoch dazu das nochmal zu testen. Könnt ihr mir nur nochmal den Hintergrund zum Datenpunkt erstellen und Selektor nutzten erläutern?
Ich verstehe:
-smarter da globale Funktion- dadurch keine Anpassungen bei neu hinzukommenden Lampen etc.
Frage noch dazu: wie ist das in dem Fall mit dem cmd Endpunkt? Habe noch Jalousie Aktoren im gleichen Adapter die ebenfalls einen cmd Punkt haben. Diese werden allerdings mit 0=stop 1=auf 2=ab gesteuert und in 100ms Einheiten.
An das traue ich mich erst ran wenn die Lichter alle funktionieren.
Könnt ihr mir noch bei dem Thema dass sich Home den aktuellen Stand nicht merkt helfen?
Habe noch keine Steuerzentrale angelegt, hätte kurzfristig ein IPad zur Hand und mittelfristig weil ich einen neuen Apple TV holen. - dadurch keine Anpassungen bei neu hinzukommenden Lampen etc.
-
@EnoceanEltako Da ist nicht viel zu erklären. Ich habe in diesem Post beschrieben was zu tun ist, sowie den Link auf die Dokumentation zum Selektor verlinkt.
Viel mehr kann man da nicht erklären. Vielleicht noch wie das mit der DP ID geht:
Der verlinkte Baustein "object ID" liefert die ID des Datenpunktes welcher den trigger ausgelöst hat, also z.Bsp.
adaptername.0.Light.1.brightness
Daraus extrahierst du über "finde das letzte auftreten von '.'" und nimm den Teilstrich vom Anfang bis zum letzten Punkt erst einmal das "gerät" :
adaptername.0.Light.1.
Dem hängst Du dann ein ".CMD" an und nutzt diesen String als Datenpunkt ID in einem Steuere Befehl.
A.
-
@Asgothian ok ich schaue mir grad die Tage mal an.
Kannst du mir bei dem Thema dass sich Home den aktuellen Stand nicht merkt helfen?
Habe noch keine Steuerzentrale angelegt, hätte kurzfristig ein IPad zur Hand und mittelfristig weil ich einen neuen Apple TV holen. Liegt es daran? -
@EnoceanEltako ob iPad oder AppleTV sollte egal sein. Sind beide offiziell dafür gedacht.
Mir ist aber aufgefallen, dass meine Home App langsamer aktualisiert hat, als ich iPad UND AppleTV als Homezentrale konfiguriert habe.
-
@EnoceanEltako hat aber das Problem, dass seine Homekit App gar nicht updated. Das müsste ja auch ohne Homezentrale normal funktionieren.
-
@EnoceanEltako
Das ist leider normal. Beim Start der Home app holt sich diese von den Geräten den Status. Sofern das Netz gut ist und du zu haus bist geht das relativ zügig.A.
-
Hi, kann mir jemand sagen welche Services ich für eine Lampe benötige um den gleichen Stand zu haben wie hier eine Xiaomi Yeelight per HomeKit Sticker eingebunden?
Also ist hier kein simpler Switch Services, sondern kann man damit auch die Helligkeit regeln und unten drunter die Temperatur (Color Picker?).
-
Brauchst die Hue-Zahl dann kommt der Colorpicker. Wie du siehst.. auch Yeelight.
-
@oberfragger danke für die Rückmeldung.
Leider hat die Meteorit Lampe für das Hauptlicht kein Hue Wert, sondern nur den ct Wert...
ich habe dazu Brightness, ColorTemperature und On im Service "Lightbulb" zugewiesen und wie bei dir unter "Properties" bei ColorTemperature die Min und Max Values angepasst (da muss man erst einmal drauf kommen, das dort was dahinter versteckt ist).
Leider stimmt da irgendwas noch nicht, da jetzt alles einen schwarzen Hintergrund hat und die 6 Farbbuttons ohne Funktion sind.
-
Du brauchst ein Skript zum Umrechnen von RGB in HSV, dann kannst du ggf. bei der Farbeinstellung was tun.
Das Anpassen der Grenzwerte bei der Farbtemperatur funktioniert nicht. Yahka erwartet die Farbtemperatur in Mired, nicht in Kelvin.
Die Funktion fuer die Umrechnung (warum, wieso, etc.) sollte mit einer einfachen Websuche zu finden sein. In Yahka kannst du dann einfach als "Transferfunktion" Skript eintragen und die Umrechnung machen. Du bekommst dann 2 Skripte zum Eintragen:
toHomeKit - Darin willst du haben:
return (math.max(math.min(1000000/value, 500),150)
fromHomekit:
return (math.max(math.min(100000/value, 6500),2000)
A.
-
Oh, vielen Dank.
Das schau ich mir mal an. Vielleicht kann ich damit ja parallel in Homebridge das Hyperion Plugin entsorgen.
-
@Asgothian mit deinen Formeln erhalte ich beim starten vom Adapter folgende error Logmeldung...
yahka.0 2020-12-14 15:50:29.796 error at _loop_1 (/opt/iobroker/node_modules/iobroker.yahka/main.js:2874:40) yahka.0 2020-12-14 15:50:29.796 error at THomeKitBridge../yahka.homekit-bridge.ts.THomeKitBridge.createDevice (/opt/iobroker/node_modules/iobroker.yahka/main.js:2960:33) yahka.0 2020-12-14 15:50:29.796 error at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initServices (/opt/iobroker/node_modules/iobroker.yahka/main.js:3366:22) yahka.0 2020-12-14 15:50:29.796 error at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initService (/opt/iobroker/node_modules/iobroker.yahka/main.js:3414:22) yahka.0 2020-12-14 15:50:29.796 error at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initCharacteristic (/opt/iobroker/node_modules/iobroker.yahka/main.js:3460:57) yahka.0 2020-12-14 15:50:29.796 error at TIOBrokerAdapter../yahka.ioBroker-adapter.ts.TIOBrokerAdapter.CreateBinding (/opt/iobroker/node_modules/iobroker.yahka/main.js:3722:64) yahka.0 2020-12-14 15:50:29.796 error at Object.createConversionFunction (/opt/iobroker/node_modules/iobroker.yahka/main.js:2055:61) yahka.0 2020-12-14 15:50:29.796 error at Object../yahka.functions/functions.import.ts.functions_factory_1.conversionFactory.script (/opt/iobroker/node_modules/iobroker.yahka/main.js:2110:86) yahka.0 2020-12-14 15:50:29.796 error at new TIoBrokerConversion_Script (/opt/iobroker/node_modules/iobroker.yahka/main.js:1919:30) yahka.0 2020-12-14 15:50:29.796 error at new Function (<anonymous>) yahka.0 2020-12-14 15:50:29.796 error (27929) SyntaxError: Unexpected token '}' yahka.0 2020-12-14 15:50:29.795 error (27929) unhandled promise rejection: Unexpected token '}' Unhandled 2020-12-14 15:50:29.794 error promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). yahka.0
edit:
muss das Ergebnis nicht vielleicht noch am Ende gerundet werden mit math.round() um die Nachkommastellen zu eliminieren?
Denn mit dem Kelvin Wert 6500 und der ersten Min formel erhalte ich...
Math.min(1000000/6500,500) = 153.84615384615384