NEWS
HEX in RGB Umwandeln?
-
@mickym okay ich versuchs mal
-
so soll ich das machen oder wie?
-
@denjo DU hast node-Red drauf -sehe ich gerade - da könnte ich Dir nun ganz easy helfen.
Im Prinzip macht die Funktion die Umrechnung. Wo kommt denn Dein String raus - in einem Datenpunkt oder wie greifst Du den von Alexa ab?
Dann musst Dir halt über legen was Du machen willst? Du bekommst von Alexa den String - dann rufst Du die Funktion auf und dann musst Du ja was weiter machen. Arbeitest Du sonst mit Blockly? Da kann man doch auch Funktionen definieren.
Sonst macht das in Node Red und ich mach Dir den Flow fertig.
Ansonsten habe ich gerade gesehen - dass es auch im Blockly so einen Block gibt
Wenn man auf die ... klickt kann man auch die Funktion definieren:
aber wie man diesem Block den String übergibt oder sich das Ergebnis abholt weiß ich nicht - ich bin einfach kein Blockly Fan.
-
@mickym also ich erstelle mir natürlich noch ein objekt was alexa dann füttert mit zb
#00868B und wenn das objekt aktualisiert wird soll der wert halt umgewandelt werden in 0,134,139 und in das richtige objekt geschrieben werden. ja ich habe mir gerade node.red rauf gemacht und arbeite sonst nur mit blockly -
@mickym aber bin auch kein blockly profi
-
@denjo sagte in HEX in RGB Umwandeln?:
@mickym also ich erstelle mir natürlich noch ein objekt was alexa dann füttert mit zb
#00868B und wenn das objekt aktualisiert wird soll der wert halt umgewandelt werden in 0,134,139 und in das richtige objekt geschrieben werden. ja ich habe mir gerade node.red rauf gemacht und arbeite sonst nur mit blocklyNa entweder hilft Dir als Blockly Kundiger mein Tipp, dass muss man dann halt in so einen Trigger Block irgendwie einbinden
Na ich geb auf was Blockly betrifft.
Ansonsten können wir wenn Deine Datenpunkte klar sind das halt in NodeRed zuammen machen.
Sag mir in welchem Datenpunkt Du den String von Alexa schreiben willst und wo das Objekt oder der JSON String mit den RGB Werten hin soll?
Dann mache ich den Flow fertig und Du kannst das dann schon testen - brauchst den Flow dann nur mit Copy & Paste importieren!
Ich kann ja mal 2 Datenpunkte erstellen und Du importierst einfach den Flow. -
@mickym ich mach eben ein datenpunkt
-
@denjo OK und noch einen 2. für die Ausgabe
-
@mickym eingabe ist: javascript.0.hyperionng
und ausgabe ist: hyperion_ng.0.general.control.setColorRGB -
@denjo sagte in HEX in RGB Umwandeln?:
hyperion_ng.0.general.control.setColorRGB
So das ist es dann:
[ { "id": "c9bd97db.0bd1c8", "type": "function", "z": "6e170384.60c96c", "name": "HEX zu RGB", "func": "msg.payload=hex_to_RGB(msg.payload)\n\n\nreturn msg;\n\nfunction hex_to_RGB(hex) {\n var m = hex.match(/^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i);\n return {\n r: parseInt(m[1], 16),\n g: parseInt(m[2], 16),\n b: parseInt(m[3], 16)\n };\n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 1410, "y": 3180, "wires": [ [ "62344cad.180284" ] ] }, { "id": "28743d11.362b72", "type": "ioBroker in", "z": "6e170384.60c96c", "name": "", "topic": "javascript.0.hyperionng", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 1140, "y": 3180, "wires": [ [ "c9bd97db.0bd1c8" ] ] }, { "id": "32bd27af.6eff68", "type": "ioBroker out", "z": "6e170384.60c96c", "name": "", "topic": "hyperion_ng.0.general.control.setColorRGB", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1870, "y": 3180, "wires": [] }, { "id": "62344cad.180284", "type": "json", "z": "6e170384.60c96c", "name": "", "property": "payload", "action": "", "pretty": false, "x": 1590, "y": 3180, "wires": [ [ "32bd27af.6eff68" ] ] } ]
Zum Importieren:
- Den Code hier in die Zwischenablage kopieren.
- In Node Red - das Menü mit den 3 Strichen rechts oben öffne und auf Import klicken.
- Inhalt der Zwischenablage in das rosa Fenster
- Auf Import klicken und den Flow plazieren.
- dann auf den roten Deploy Button klicken und das wars.
Test einfach - in dem Du dann in javascript.0.hyperionng den hex-String einträgst und schaust was dann in dem Ausgabepunkt ankommt.
Habs gerade mit eigenen Datenpunkten getestet. Das schaut in meinen Augen gut aus.
-
@mickym ja wird bestimmt laufen ich muss nur den eingabe datenpunkt anpassen eben
-
@mickym nee er schreibt das falsch
{"r":0,"g":0,"b":255} und soll eigentlich 0,0,255
-
so hier function Node geändert:
[ { "id": "c9bd97db.0bd1c8", "type": "function", "z": "6e170384.60c96c", "name": "HEX zu RGB", "func": "msg.payload=hex_to_RGB(msg.payload)\n\n\nreturn msg;\n\nfunction hex_to_RGB(hex) {\n var m = hex.match(/^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i);\n return (parseInt(m[1], 16)).toString() + ',' + (parseInt(m[2], 16)).toString() + ',' + (parseInt(m[3], 16)).toString(); \n}", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 1290, "y": 3180, "wires": [ [ "32bd27af.6eff68" ] ] }, { "id": "28743d11.362b72", "type": "ioBroker in", "z": "6e170384.60c96c", "name": "", "topic": " javascript.0.hyperionng", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 1080, "y": 3180, "wires": [ [ "c9bd97db.0bd1c8" ] ] }, { "id": "32bd27af.6eff68", "type": "ioBroker out", "z": "6e170384.60c96c", "name": "", "topic": "hyperion_ng.0.general.control.setColorRGB", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1570, "y": 3180, "wires": [] } ]
Jetzt schaut der Flow nur noch so aus
Die Funktion ist auch geschrumpft - falls Du die doch noch in Blockly verwenden willst:
function hex_to_RGB(hex) { var m = hex.match(/^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i); return (parseInt(m[1], 16)).toString() + ',' + (parseInt(m[2], 16)).toString() + ',' + (parseInt(m[3], 16)).toString(); }
und das nächste Mal wäre es natürlich hilfreich, wenn man exakt weiß was rauskommen soll.
-
@mickym sorry aber jetzt macht ändert er das ausgabe objekt nicht
-
@denjo Dann stimmt sehr wahrscheinlich an der Eingabe was nicht.
das muss genau 6 Zeichen sein - entweder mit oder ohne #.
Wenn nichts rauskommt - musst mal im Log schauen, ob so was drin steht:
node-red.0 2021-03-14 01:55:14.221 error (2144) 14 Mar 01:55:14 - [error] [function:HEX zu RGB] TypeError: Cannot read property '1' of null node-red.0 2021-03-14 01:53:23.582 error (2144) 14 Mar 01:53:23 - [error] [function:HEX zu RGB] TypeError: Cannot read property '1' of null
Falls man die Eingaben nicht genau so sind, dann wird das viel aufwändiger.
-
@mickym ob ich #FFFF00 oder FFFF00 eingebe ist egal das objekt wird nicht geändert
-
@denjo hast Du Fehlermeldungen im Log?
-
@mickym nein nix, sonst lass ruhig trotzdem danke für deine mühe ich werd ein riesen aufwändiges blockly sonst machen. wird zwar ewig dauern aber geht auch anders
-
@denjo Dann schau nochmal ob der Pfad im Topic der out Node stimmt
-
@mickym der stimmt