NEWS
Yahka hue color nach hex convertieren
-
So ich hab jetzt ca. zwei Tage gesucht und experimentiert, aber jetzt komm ich leider nicht weiter.
Ich verwende den Zigbee Adapter mit dem CC2531 Stick, da wird aber leider der Farbcode nur in HEX, Helligkeit in Brightness und Farbtemperatur in colortemp angenommen um Lampen (Osram Lightify LED Band) zu steuern.
Ich möchte das ganze aber gern mit HomeKit steuern, im Yahka Adapeter kann man Brightness, ColorTemperature, Hue und Saturation angeben.
Dazu hab ich zwei Skripte die auch soweit erst mal funktionieren:
HSVtoRGB
// Initialisierung bei Skriptstart var h = getState("javascript.0.scriptEnabled.logic.Licht.hue").val / 360; var s = getState("zigbee.0.7cb03eaa000024ef.colortemp").val / 100; var v = getState("zigbee.0.7cb03eaa000024ef.brightness").val / 100; function HSVtoRGB() { var r, g, b, i, f, p, q, t; i = Math.floor(h * 6); f = h * 6 - i; p = v * (1 - s); q = v * (1 - f * s); t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } setState ("javascript.0.scriptEnabled.logic.Licht.r1"/*r1*/, Math.round(255 * r)); setState ("javascript.0.scriptEnabled.logic.Licht.g1"/*g1*/, Math.round(255 * g)); setState ("javascript.0.scriptEnabled.logic.Licht.b1"/*b1*/, Math.round(255 * b)); } // Ende der Funktion HSVtoRGB(); // Aufruf bei Skriptstart on("javascript.0.scriptEnabled.logic.Licht.hue", function(dp) { h = dp.state.val / 360; HSVtoRGB(); // Aufruf bei Änderung von hue }); on("zigbee.0.7cb03eaa000024ef.colortemp", function(dp) { s = dp.state.val / 100; HSVtoRGB(); // Aufruf bei Änderung von saturation }); on("zigbee.0.7cb03eaa000024ef.brightness", function(dp) { v = dp.state.val / 100; HSVtoRGB(); // Aufruf bei Änderung von dimmer });
RGBtoHEX:
var R = getState('javascript.0.scriptEnabled.logic.Licht.r1').val; var G = getState('javascript.0.scriptEnabled.logic.Licht.g1').val; var B = getState('javascript.0.scriptEnabled.logic.Licht.b1').val; function toHex(number) { if (number < 0) number = 0xFFFFFFFF + number + 1; var n = number.toString(16).toUpperCase(); if (n.length == 1) { n = '0' + n; } return n; } function calculateColor() { log('#' + toHex(R) + toHex(G) + toHex(B)); setState('zigbee.0.7cb03eaa000024ef.color', '#' + toHex(R) + toHex(G) + toHex(B)); } calculateColor(); // Skriptstart on('javascript.0.scriptEnabled.logic.Licht.r1', function(dp) { R = dp.state.val; calculateColor(); }); on('javascript.0.scriptEnabled.logic.Licht.g1', function(dp) { G = dp.state.val; calculateColor(); }); on('javascript.0.scriptEnabled.logic.Licht.b1', function(dp) { B = dp.state.val; calculateColor(); });
Damit kann ich die Farben steuern, leider funktioniert die Farbtemperatur nicht.
Yahka setzt ColorTemp zwischen 140 und 500
Zusätzlich ändert sich beim Dimmen auch noch der Farbwert (von RGB nur R).
Kann mir jemand sagen was ich falsch mach?
So sieht mein Yahka adapter aus:
-
Ich habe bei mir bei dem Punkt Hue in der zweiten Zeile noch HUE ausgewählt. Bei saturation habe ich in der zweiten Zeile Level 255 drin. Vielleicht funktioniert es ja mit den Einstellungen besser. Wäre aber nur ein try & error [emoji6]
Meine Hue Lampen laufen so sauber.
Gesendet von iPhone mit Tapatalk
-
Kann mir jemand verraten wie und wo diese beiden javascript's eingebunden/eingefügt werden müssen?
Bin da leider noch zu neu in der Materie
-
ja, würde mich auch sehr interessieren.
-
Bin gespannt ob uns vielleicht doch noch jemand auf die Sprünge helfen kann/wird.
-
wie und wo diese beiden javascript's eingebunden/eingefügt werden müssen? `
2 neue Skripte im http://www.iobroker.net/docu/?page_id=6818&lang=de#Bedienung. -
Ok … Das ist schonmal ein Schritt vorwärts Danke dir.
In den beiden Skripten muss ich natürlich die Pfade anpassen und dann die Einrichtung im yahka Adapter nachmachen, so wie im Screenshot.
Da stellt sich dann aber die nächste Frage: Auf welches Script wird im yahka Adapter verlinkt?
-
Da stellt sich dann aber die nächste Frage: Auf welches Script wird im yahka Adapter verlinkt? `
So wie ich es verstanden habe, wird im yahka-Adapter auf die angelegte Variable "hue" verlinkt.
Aber es funktioniert bei mir leider nicht… Bei mir kommen regelmäßig negative Werte für R G B raus. Ich habe die Einstellungen aus dem Screenshot übernommen + level255 bei Saturation und +hue bei hue (jeweils in der zweiten Zeile im yahka-Adapter).
Muss Saturation eigentlich aktiviert sein? Bei mir bietet der Zigbee-Adapter gar kein Saturation für die HUE-Lampen an.
Kann jemand mit funktionstüchtiger Lösung bitte noch mal detailliert ausführen, welche Grenzen gesetzt werden müssen und ob die Normierungen im Skript (z.B. /360 /100 /100) korrekt sind? Ich denke, dass eine Übersicht vielen Usern bei der Einrichtung helfen würde :idea: !
Zudem habe ich das Problem, dass die Lampe mehrmals die Farbe wechselt ehe sie bei einer (nicht der korrekten, da ja RGB-Werte falsch sind) Farbe stehen bleibt. Das kann aber auch an den fehlerhaften RGB-Werten liegen? Oder benötigt man noch eine Art Verzögerung im Skript?
-
Yahka, also Apple, setzt ColorTemperature als Mired. Das Objekt (z.B. hue.0.zimmer.lampe.ct) erwartet Kelvin.
Ähnliches Problem bei hue.0.zimmer.lampe.hue. Selbst mit der ConversionFunction kommen bei mir nur sehr seltsame Werte raus (>60000).
Die Objekte (hue.0.zimmer.lampe.ct & hue.0.zimmer.lampe.hue) haben andere min/max definiert, als übergeben werden.
Werde aktuell auch noch nicht schlau daraus.
-
Okay, gefunden. Liegt an der Adapter Version 1.0.1.
Version 0.6.9 installiert, funktioniert. Bluefox hat da wohl was geändert, was "hue" und "ct" für Werte erwarten.
-
Ich müsste also zurück auf yahka 0.6.9?
Und wenn ja, könntest du mal einen Screen von deinen Yahka Einstellungen posten damit man mal sieht wie es dann funktioniert?
Ist das so wie @danw es geschrieben hat? Ist es dann vielleicht nur ein bug, oder soll es doch ein feature sein und wir nutzen es nur falsch?
-
Mache dazu bitte ein issue auf github auf ist übersichtlicher
Sent from my iPhone using Tapatalk
-
Mache dazu bitte ein issue auf github auf ist übersichtlicher `
Bei GitHub iobroker.yahka?
Da gibt es schon einen Eintrag:
-
Bei Yahka ist alles okay, mir ging es um Version 0.6.9 vom iobroker hue package.
Folgende Änderung wird das "Problem" verursachen.
Lösung wäre hier eine andere/angepasste Conversion Function im Yahka.
Mit der aktuellen neuen Version (ganz frisch von heute) kann man manuell Scripts hinzufügen, das muss ich mir noch anschauen.
https://github.com/ioBroker/ioBroker.hue
Changelog von Version 1.0.1
(bluefox) temperature changed from 153-cold, 500-warm to 2200-warm, 6500-cold
(bluefox) hue changed from 0-65535 to 0-360°
Apple übergibt den Wert als Einheit Mired (also das, was auch hue vorher erwartet hat und seit 1.0.1 aber Kelvin erwartet).
//edit: Wenn der OT tatsächlich RGB braucht, löst es sein Problem nicht.
-
Also ich habe den hue Adapter gar nicht installiert und betreibe auch keine Hue-Bridge … Bei mir gehen die Lichter über den ZigBee Stick.
Denn das gesetzte Ziel ist es ja die ganzen separaten Bridge's aus der Hausautomation verschwinden zu lassen, so das alles direkt über den ioBroker
gehändelt wird.
Was muss ich jetzt also tun ... Bin mittlerweile ein bisschen verwirrt.
-
Setz dich ein wenig näher mit dem Skript auseinander.
Am Anfang wird die colortemp abgefragt, aber wenn ich mich nicht verschaue, auch nicht weiter im Script verwendet.
-
Ich befürchte um so einen Code zu "lesen" fehlen mir die Kenntnisse.
Ein HowTo für diese ganze Sache, die ja scheinbar nicht nur mich betrifft wäre eine coole Aktion.
Ich persönlich verstehe vielleicht was du meinst oder mir sagen willst, aber dann ist auch schon Ende Gelände.
Sorry … Dafür kann ich gut kochen ... Aber das hilft hier nicht.
-
Ist halt auch schwierig dir zu helfen, wenn du ein Custom-Setup hast, was nur wenige haben und dann fertige Lösungen verlangst.
Ich habe dein Setup nicht und kann es aus der Ferne kaum nachvollziehen.
-
Oh nein … Bloß nicht.
Ich verlange gar nichts ... Ehrlich nicht. Was ich mir wünsche ist natürlich eine andere Sache.
Die EierlegendeWollMilchSau will ja jeder irgendwie.
Dabei denke ich das mein Setup gar nicht so exotisch ist.
Ich suche ja auch grundprinzipiell nur nach einer praktikablen Verbindung von ZigBeeDevice zu Yahka ... Thats all
Nur mal für's Protokoll, damit ich richtig ansetze:
Ich erstelle mir 2 Scripte, mit dem oben gepostetem Inhalt und passe die Pfade an?
Wird die von die abgesprochene Variable: hue vom Script erzeugt, oder muss ich die selber anlegen?
-
Vielleicht etwas zur Verdeutlichung, was da passiert:
Yahka macht da nicht viel, sofern du keine Conversion Function eingerichtet hast, mit den Werten die du per HomeKit eingibst.
Soll es ja auch nicht.
Das Apple nunmal den Wert in einer anderen Einheit/Berechnung übergibt, kann weder dein Lichtmodul (wie auch immer angeschlossen) oder Yahka (ohne Conversion Function) beeinflussen.
Das "hue" und das "Colortemp" ist also nicht das, was Yahka vorgibt, sondern das, was du im HomeKit für eine Farbe und/oder Farbtemperatur einstellst. Der Rohwert.
Soviel erstmal zur grundlegenden Erklärung.
Die Verknüpfung zwischen beiden Werten muss nun, wo auch immer - ob nun im Yahka mit einer Conversion Function oder per Javascript -, passieren.
Aus dem HSV Wert (also hue, saturation, brightness) wird der RGB (also Red,Green,Blue) errechnet, zwischendurch in temporäre Objekte geschrieben, und am Ende gesetzt.
In deiner Yahka Config setzt du Colortemp und Brightness direkt auf das zigbee Objekt was korrekt ist, wenn Colortemp zwischen 140 und 500 sein muss und Brightness 0-100.
Da Apple den hue Wert, also Color, in Mired übergibt (wie auch Colortemp zwischen 140 und 500 also) muss dieser dann genommen werden und in RGB umgerechnet werden.
Anpassung von Colortemp und Brightness sollte also schon funktionieren.
Jetzt muss halt einzeln geschaut werden, wo das Problem liegt.
Das Script sieht nicht falsch aus. Deswegen füge doch mal bitte vor die Zeile
setState ("javascript.0.scriptEnabled.logic.Licht.r1"/*r1*/, Math.round(255 * r));
Die Zeilen````
log(r + " " + Math.round(255 * r));
log(g + " " + Math.round(255 * g));
log(b + " " + Math.round(255 * b));hinzu. So können wir schauen, was die Variablen enthalten, bevor es dem temporären Objekt hinzugefügt wird. Das zweite Script reagiert auf eine Änderung von einer der drei temporären Objekte, rechnet es in RGB um und setzt es in das color Objekt vom zigbee. Da gibt es schon eine Logzeile ("log('#' + toHex(R) + toHex(G) + toHex(B));"). Was gibt denn das alles aus, wenn du die Farbe anpasst?