NEWS
Node-Red mit Alexa - Dimmer
-
Den Hue Adapter würde ich nicht nutzen wenn du eh Node-Red nutzt denn da gibt's ja das HueMagic
und dieses ist Flexibel, es nimmt RGB oder HEX entgegen.. aber leider gibt Alexa nur HSB/HSL Werte als HUE (Hue: 0, Saturation: 1, Brightness:1) für Rot zum Beispiel. Man müsste also einen Converter von HSB/HSL zu HEX oder RGB haben.
derzeit Steuer ich Rot / Blau / Weiss so.. was echt nicht toll ist.
if ((msg['command']) == 'SetColorRequest') { if ((msg['payload']['hue']) == '0' && (msg['payload']['saturation']) == '1') { msg['payload']['hex'] = '#ff0000'; } else if ((msg['payload']['hue']) == '240') { msg['payload']['hex'] = '#3366ff'; } else if ((msg['payload']['hue']) == '0' && (msg['payload']['saturation']) == '0') { msg['payload']['hex'] = '#ffffff'; } msg['payload']['brightness'] = '100'; msg['payload']['saturation'] = '100'; return msg; } else { }
-
Ich kenne mich da leider nicht gut aus.
Aber sollte sowas nicht hilfreich sein?
https://www.npmjs.com/package/node-red- … or-convert
` > This node converts between different color representations, it can convert between the following systems.
RGB - Red, Green, Blue
HSL - Hue, Saturation, Level
HSV - Hue, Saturation, Value (brightnes)
CSS - CSS color names `
-
Ja den habe ich ausprobiert aber irgendwie klappt es damit nicht so richtig. vielleicht mache ich es auch falsch.. Am Ende wäre es aber der richtige Converter dafür. HSV Array-> RGB als Array
Man müsste dann aber schauen das man vorher Saturation und Brightness noch *100 nimmt..
-
…Ja den habe ich ausprobiert aber irgendwie klappt es damit nicht so richtig.... `
Gut ist immer, wenn man ein Beispiel zeigen kann, wie es sein soll.
So nach dem Motto:
Für gelb müssen folgende states folgende Werte bekommen…
Man müsste dann aber schauen das man vorher Saturation und Brightness noch *100 nimmt.. `
Versuch doch mal die Werte per Hand bei den States zu setzen und schau, ob die Hue reagiert wie sie soll. Wenn das geht, sollte man das auch per flow hinbekommen;-)
-
Also irgendwas passt nicht
if ((msg['command']) == 'SetColorRequest') { msg['payload']['hsv'] = [(msg['payload']['hue']), (msg['payload']['saturation']) * 100, (msg['payload']['brightness']) * 100]; return msg; } else { }
Ausgabe Alexa und Blocky:
{"hue":0,"saturation":1,"brightness":1,"hsv":[0,100,100]}
Ausgabe Converter (HSV to RGB)
[3,3,3]
-
Also wenn ich dich recht verstehe, soll zb. die Alexa Ausgabe so konvertiert werden. oder wie?
sollte rot sein.
{"hue":0,"saturation":1,"brightness":1,"hsv":[0,100,100]}
so aussehen:
ist immer noch rot, nur rgb
{"hue":0,"saturation":1,"brightness":1,"rgb":[255,0,0]}
oder verstehe ich das falsch?
-
Alexa wirft bei "Alexa Schalte Test auf ROT" dies aus:
"hue":0,"saturation":1,"brightness":1
dies schiebe ich in den Blocky und mache ein Array daraus damit dies kommt:
"hsv":[0,100,100]
Der Converter macht aber nun ein RGB Array und zwar so:
[3,3,3]
Es müsste aber für den HUE Adapter so kommen:
RGB [255,0,0]
-
Ich hoffe, ich habe richtig kapiert.
Das sollte auch ohne Blockly problemlos gehen:
hier der flow:
! ````
[
{
"id": "26dc88fe.708c5",
"type": "inject",
"z": "ca47e1d4.9f532",
"name": "Alexa Schalte Test auf ROT",
"topic": "",
"payload": "{"hue":0,"saturation":1,"brightness":1}",
"payloadType": "json",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 230,
"y": 140,
"wires": [
[
"ad83b521.77c65",
"7eb1492e.f3b3d8"
]
]
},
{
"id": "86870acf.2656c",
"type": "color-convert",
"z": "ca47e1d4.9f532",
"input": "hsv",
"output": "rgb",
"outputType": "array",
"x": 190,
"y": 300,
"wires": [
[
"a57a950f.248af8"
]
]
},
{
"id": "ad83b521.77c65",
"type": "change",
"z": "ca47e1d4.9f532",
"name": "{"hue":0,"saturation":1,"brightness":1} to [h,s,v]",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "[\t payload.hue,\t payload.saturation * 100,\t payload.brightness * 100\t]",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 300,
"y": 220,
"wires": [
[
"86870acf.2656c",
"a4ad7796.ecdb8"
]
]
},
{
"id": "ccb4443d.a17ce8",
"type": "comment",
"z": "ca47e1d4.9f532",
"name": "msg.payload ={"hue":0,"saturation":1,"brightness":1}",
"info": "",
"x": 940,
"y": 140,
"wires": []
},
{
"id": "3e66cbf2.9da13c",
"type": "comment",
"z": "ca47e1d4.9f532",
"name": "direct convert to rgb[r,g,b]",
"info": "",
"x": 830,
"y": 300,
"wires": []
},
{
"id": "bd23336d.d791e8",
"type": "comment",
"z": "ca47e1d4.9f532",
"name": "object hsv[h,s,v]",
"info": "",
"x": 800,
"y": 220,
"wires": []
},
{
"id": "a57a950f.248af8",
"type": "debug",
"z": "ca47e1d4.9f532",
"name": "rgb[r,g,b]",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 600,
"y": 300,
"wires": []
},
{
"id": "7eb1492e.f3b3d8",
"type": "debug",
"z": "ca47e1d4.9f532",
"name": "{"hue":0,"saturation":1,"brightness":1}",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 550,
"y": 140,
"wires": []
},
{
"id": "a4ad7796.ecdb8",
"type": "debug",
"z": "ca47e1d4.9f532",
"name": "hsv[h,s,v]",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 600,
"y": 220,
"wires": []
}
] Am Eingang bekommt das Teil ein Oblect```` {"hue":0,"saturation":1,"brightness":1}
Am Ausgang hast du ein Array````
[r,g,b]Wenn das lieber ein Object sein soll, der Form:```` {"rgb": [r,g,b]} ````ist eine minimale Änderung nötig.
-
Perfekt
dann hab ich nur den Converter falsch benutzt
danach noch nen Change to msg.payload.rgb und Alexa schaltet das ganze
Danke dir
-
-
Für alle die dann noch Bedarf daran haben
Ich mache es am Ende doch per Blockly denn es kommen ja noch Abfragen wie TurnOnRequest, TunOffRequest und was Alexa noch alles so bietet.
! ````
[
{
"id": "6a18e5be.c9abdc",
"type": "Blockly",
"z": "9433ac39.c5756",
"language": "en",
"func": "if ((msg['command']) == 'SetColorRequest') {\n msg['payload'] = [(msg['payload']['hue']), (msg['payload']['saturation']) * 100, (msg['payload']['brightness']) * 100];\n return [msg, null];\n} else if ((msg['command']) == 'TurnOffRequest') {\n msg['payload'] = false;\n return [null, msg];\n} else if ((msg['command']) == 'TurnOnRequest') {\n msg['payload'] = true;\n return [null, msg];\n}\n",
"workspaceXml": "<xml xmlns=""http://www.w3.org/1999/xhtml""><block id=""OegDmw1SSX]D=Pa(8G75"" type=""controls_if"" x=""-2037"" y=""-387""><mutation elseif=""2""></mutation><value name=""IF0""><block id=""GconiS<value name=""IF0""ihVrBvHEiKZu"" type=""logic_compare""><field name=""OP"">EQ</field><value name=""A""><block id=""qfEv5p}Q.6(4bAAhVY)t"" type=""node_object_get""><mutation action=""GET""></mutation><field name=""action"">GET</field><value name=""object""><shadow id=""8Rf40:s+-(Iix/~rpXuB"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""3K$0p{%[oP^XO:,{IhsI"" type=""text""><field name=""TEXT"">command</field></shadow></value></block></value><value name=""B""><block id=""Gu~Z4BXhmh4D%LOE{4s-"" type=""text""><field name=""TEXT"">SetColorRequest</field></block></value></block></value><statement name=""DO0""><block id=""Wz6Dr1k2)tZbJ[+?V+j{"" type=""node_object_set""><value name=""object_field""><shadow id=""N7nV^CQPdk8cxV}?9mWX"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""cZ6WgGkQ{3ya8z~VBE3\"" type="\"text\""><field name="\"TEXT\"">payload</field></shadow></value><value name="\"value_field\""><shadow id="\"sk?O05P5ma_5
vqc{!#)"" type=""text""></shadow><block id=""Md|@A(]N!kq$=b3)[SH!"" type=""lists_create_with""><mutation items=""3""></mutation><value name=""ADD0""><block id=""tu7-Qe3u+zsXsItw[,yY"" type=""node_object_get""><mutation action=""GET""></mutation><field name=""action"">GET</field><value name=""object""><shadow id=""4WDpncvt3q4gpN@S@MfM"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""@d+[0zA[c(D{jmlYd^%O"" type=""text""><field name=""TEXT"">payload.hue</field></shadow></value></block></value><value name=""ADD1""><block id=""!Q#d8F/fCDqPNsm,6Z+"" type=""math_arithmetic""><field name=""OP"">MULTIPLY</field><value name=""A""><shadow id=""bNOGt$4!S%VQ?:vfS1V."" type=""math_number""><field name=""NUM"">1</field></shadow><block id=""cl:38kKKmak%V3E!m2}T"" type=""node_object_get""><mutation action=""GET""></mutation><field name=""action"">GET</field><value name=""object""><shadow id=""8+vu8BKKc)fZo;rSk0[D"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""FzE=$C.cumV)e3g*!;0\"" type="\"text\""><field name="\"TEXT\"">payload.saturation</field></shadow></value></block></value><value name="\"B\""><shadow id="\"p$RJ=}@6=xX[Ekbiqfn^\"" type="\"math_number\""><field name="\"NUM\"">100</field></shadow></value></block></value><value name="\"ADD2\""><block id="\"K[@!p?t]Y]0YY,I]]Y=3\"" type="\"math_arithmetic\""><field name="\"OP\"">MULTIPLY</field><value name="\"A\""><shadow id="\"12luhGJPp}BppnOnCd]t\"" type="\"math_number\""><field name="\"NUM\"">1</field></shadow><block id="\"hu/B]c6@]lE@cn^qMa!I\"" type="\"node_object_get\""><mutation action="\"GET\""></mutation><field name="\"action\"">GET</field><value name="\"object\""><shadow id="\"$2{@U|#45m9O#sYMG_HL\"" type="\"node_msg\""></shadow></value><value name="\"field_name\""><shadow id="\"9q^k
;%a@6pz!wwSL[S\"" type="\"text\""><field name="\"TEXT\"">payload.brightness</field></shadow></value></block></value><value name="\"B\""><shadow id="\"H7P5:v+4jC%4eNSZg1b3\"" type="\"math_number\""><field name="\"NUM\"">100</field></shadow></value></block></value></block></value><next><block id="\"dj6-iR8:4O-+v*!D~,M-\"" type="\"node_return_message\""><field name="\"OUTPUT_NR\"">1</field><value name="\"MESSAGE_INPUT\""><shadow id="\"!e8R2#N8Jdu
(EAVQ{|"" type=""node_msg""></shadow></value></block></next></block></statement><value name=""IF1""><block id=""Gt#y.gqIL,qm)]{hhHC"" type=""logic_compare""><field name=""OP"">EQ</field><value name=""A""><block id=""N6$q19G#S0_xYH%PxSEI"" type=""node_object_get""><mutation action=""GET""></mutation><field name=""action"">GET</field><value name=""object""><shadow id=""x(P(iAF[acHUJa%K1WW0"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""401Ct:?6f$=h/.@%JFf="" type=""text""><field name=""TEXT"">command</field></shadow></value></block></value><value name=""B""><block id=""E:%o.01_qWbolte})n[}"" type=""text""><field name=""TEXT"">TurnOffRequest</field></block></value></block></value><statement name=""DO1""><block id=""6=mvJ%:D4qf|CDFfAg[z"" type=""node_object_set""><value name=""object_field""><shadow id=""ABbAcS^Mj_]u:G0bmbxl"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""to=(u!-hoz(ZB|X@F7;"" type=""text""><field name=""TEXT"">payload</field></shadow></value><value name=""value_field""><shadow id=""6?#earD4R8~?M5_1Y1va"" type=""text""></shadow><block id=""gSN[vp0Vp@iiKOCKXZxO"" type=""logic_boolean""><field name=""BOOL"">FALSE</field></block></value><next><block id=""8Lt@[lrf:,v#bz#My!,~"" type=""node_return_message""><field name=""OUTPUT_NR"">2</field><value name=""MESSAGE_INPUT""><shadow id=""ac^):!N/SuXK+m#l6G{e"" type=""node_msg""></shadow></value></block></next></block></statement><value name=""IF2""><block id="":%iB^77hKA%5#Y]m3(KI"" type=""logic_compare""><field name=""OP"">EQ</field><value name=""A""><block id=""bZZ%2UXkY4qB_Fmae68"" type=""node_object_get""><mutation action=""GET""></mutation><field name=""action"">GET</field><value name=""object""><shadow id=""O;dMHWtpMY{zN1](^WQa"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""C0O}w0bo=c,,_#.[I9Gf"" type=""text""><field name=""TEXT"">command</field></shadow></value></block></value><value name=""B""><block id=""e5e|,AqRBMdDQ|~s?uv9"" type=""text""><field name=""TEXT"">TurnOnRequest</field></block></value></block></value><statement name=""DO2""><block id=""|DY5/yaj[#aVyjA:qNS"" type=""node_object_set""><value name=""object_field""><shadow id=""ee@E0k_unaE#!Ss=xdAB"" type=""node_msg""></shadow></value><value name=""field_name""><shadow id=""h]@6ikfpmr#ni-9FWDmN"" type=""text""><field name=""TEXT"">payload</field></shadow></value><value name=""value_field""><shadow id=""6?#earD4R8~?M5_1Y1va"" type=""text""></shadow><block id=""c3@@`D0S$O}J_N]-B5lf"" type=""logic_boolean""><field name=""BOOL"">TRUE</field></block></value><next><block id=""%R}_.z4(NfAy?#=Gv44"" type=""node_return_message""><field name=""OUTPUT_NR"">2</field><value name=""MESSAGE_INPUT""><shadow id=""}z$f11Tsy#/HuS(JG_Z"" type=""node_msg""></shadow></value></block></next></block></statement></block></xml>",
"outputs": 2,
"name": "",
"x": 390,
"y": 1320,
"wires": [
[
"aeec5dac.065a9"
],
[
"7bd5f7d8.5e0f58"
]
]
},
{
"id": "7bd5f7d8.5e0f58",
"type": "hue-light",
"z": "9433ac39.c5756",
"name": "Lampe_Buero_LedStrip",
"bridge": "d5d520c8.c3118",
"lightid": "9",
"colornamer": true,
"x": 960,
"y": 1330,
"wires": [
[]
]
},
{
"id": "8259bb25.207dc8",
"type": "alexa-home",
"z": "9433ac39.c5756",
"conf": "b91f3657.228818",
"device": "43026",
"acknoledge": true,
"name": "Test",
"topic": "",
"x": 240,
"y": 1320,
"wires": [
[
"6a18e5be.c9abdc"
]
]
},
{
"id": "aeec5dac.065a9",
"type": "color-convert",
"z": "9433ac39.c5756",
"input": "hsv",
"output": "rgb",
"outputType": "array",
"x": 570,
"y": 1290,
"wires": [
[
"84d8358e.688908"
]
]
},
{
"id": "84d8358e.688908",
"type": "change",
"z": "9433ac39.c5756",
"name": "-> Converter ->",
"rules": [
{
"t": "move",
"p": "payload",
"pt": "msg",
"to": "payload.rgb",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 740,
"y": 1290,
"wires": [
[
"7bd5f7d8.5e0f58"
]
]
},
{
"id": "d5d520c8.c3118",
"type": "hue-bridge",
"z": "",
"name": "Philips hue",
"bridge": "1.2.3.103",
"key": "*****",
"interval": "1000"
},
{
"id": "b91f3657.228818",
"type": "alexa-home-conf",
"z": "",
"username": ""
}
]if ((msg['command']) == 'SetColorRequest') {
msg['payload'] = [(msg['payload']['hue']), (msg['payload']['saturation']) * 100, (msg['payload']['brightness']) * 100];
return [msg, null];
} else if ((msg['command']) == 'TurnOffRequest') {
msg['payload'] = false;
return [null, msg];
} else if ((msg['command']) == 'TurnOnRequest') {
msg['payload'] = true;
return [null, msg];
} -
Nur zu, im Prinzip weist du ja jetzt wie es geht
-
Hi,
ich habe ein Problem mit der Range des Dimmers. Der Dimmer möchte 0-100 und Alexa 0-1.
Hier ist mein "Flow" der HomeKit Dimmer kommt da anschl. auch noch dran….
[{"id":"40e9814d.216b7","type":"change","z":"e742a326.057cb","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"off","fromt":"str","to":"0","tot":"num"},{"t":"change","p":"payload","pt":"msg","from":"on","fromt":"str","to":"100","tot":"num"},{"t":"set","p":"payload","pt":"msg","to":"bri","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":507.4999694824219,"y":218.33334922790527,"wires":[["286a0677.93840a"]]}]
-
ich habe ein Problem mit der Range des Dimmers. Der Dimmer möchte 0-100 und Alexa 0-1. `
Was heisst Alexa 0-1 ? Alexa liefert dir einen Wert von 0-1 und der soll nach 0-100 umgesetzt werden?
-
Hi,
genau so…..
-
Hi,
genau so….. `
Na wie wäre es, wenn du den von Alexa kommenden Wert 0-1 einfach mit 100 multiplizierst ?
-
Hi,
ja auf die Idee bin ich auch gekommen, finde nur nirgendwo wie ich das mache.
Gruß
Lars
-
Sollte so gehen:
-
Range-node (Standard)
-
Range-node (Standard) `
Klar geht das. Der Sinn will sich mir aber nicht erschließen, wo er den change doch schon drin hat;-)