Anbei der Flow ....
Über MQTT erhält der Wecker seine Informationen und erstellt daraus ein Template. 
Wenn man auf "Setzen" klickt, wird wiederrum eine MQTT Message erzeugt, die an den Wecker geht.
 
Code: Alles auswählen
[{"id":"87868aca.6ebd48","type":"tab","label":"Steuerung: Wecker","disabled":false,"info":""},{"id":"b944f94b.d595a8","type":"csv","z":"87868aca.6ebd48","name":"","sep":";","hdrin":true,"hdrout":"","multi":"mult","ret":"\\n","temp":"","skip":"0","x":410,"y":120,"wires":[["53f743a5.bafa54"]]},{"id":"4e7095b7.e8223c","type":"mqtt in","z":"87868aca.6ebd48","name":"","topic":"IO/Device/Controll/Clock/Alarm/0","qos":"2","broker":"62c86144.724bf8","x":190,"y":120,"wires":[["b944f94b.d595a8"]]},{"id":"53f743a5.bafa54","type":"function","z":"87868aca.6ebd48","name":"create HTML Form","func":"var data = context.get('data') || Math.floor(Math.random() * 10000);\nvar tage = [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\", \"Mo-Fr\", \"Sa, So\", \"ganze Woche\"];\nmsg.payload.sort(function(a, b){return a.Weekday - b.Weekday});\nvar a = \"<div>\";\nfor (idx = 0; idx <= msg.payload.length; idx++) {\n    var m;\n    if (idx < msg.payload.length) {\n        m = msg.payload[idx];\n    } else {\n        m = { Enable: false, Time: \"\", Weekday: 0};\n    }\n    a +=\"<div>\";\n    \n    a += `<input type=\"checkbox\" id=\"enable` + data + idx  +`\" ` + ((m.Enable == \"true\") ? \"checked\" : \"\")+  `>`;\n    \n    a += `<input type=\"time\" id=\"time` + data + idx  + `\" value=\"` + m.Time  + `\"  />`;\n    \n    \n    a += `<select id=\"day` + data + idx + `\">`;\n            \n    for (w = 0; w < tage.length; w++) {\n        a += `<option value=\"` + w + `\" ` + ((w == m.Weekday) ? \"selected\" : \"\")+  `>` + tage[w] + `</option>`;\n    }\n    \n\n    a += `</select>`;\n    \n    a += `</div>`;\n}\na += \"</div>\";\n\na += `\n<script>\n// or overwrite value in your callback function ...\nthis.scope.action = function() { \n    var value = \"Time;Weekday;Enable\" + String.fromCharCode(10);\n    for (i=0; i <  ` + (msg.payload.length + 1) + `  ; i++) {\n        var v = document.getElementById('time` + data + `' + i).value;\n        if (v == \"\") {\n            continue;\n        }\n        value += v;\n        value += \";\";\n        var e = document.getElementById('day` + data + `' + i);\n        value += e.options[e.selectedIndex].value;\n        value += \";\";\n        value += document.getElementById('enable` + data + `' + i).checked;\n        value += String.fromCharCode(10)\n        \n    }\n    return value;\n}\n</script>\n<md-button ng-click=\"send({payload:action()})\">\n    Alaramzeiten setzen\n</md-button>\n\n`\ncontext.set('data',data);\n\nreturn {template: a}","outputs":1,"noerr":0,"x":590,"y":120,"wires":[["bf66d5a0.667fc8"]]},{"id":"bf66d5a0.667fc8","type":"ui_template","z":"87868aca.6ebd48","group":"c554cc6d.6192a","name":"","order":3,"width":"6","height":"10","format":"","storeOutMessages":true,"fwdInMessages":false,"templateScope":"local","x":780,"y":120,"wires":[["7717654a.78838c"]]},{"id":"7717654a.78838c","type":"mqtt out","z":"87868aca.6ebd48","name":"IO/Device/Controll/Clock/Alarm","topic":"IO/Device/Controll/Clock/Alarm/0","qos":"1","retain":"true","broker":"62c86144.724bf8","x":1010,"y":120,"wires":[]},{"id":"86dbd2f6.bfd088","type":"csv","z":"87868aca.6ebd48","name":"","sep":";","hdrin":true,"hdrout":"","multi":"mult","ret":"\\n","temp":"","skip":"0","x":410,"y":200,"wires":[["91375f10.b1fad8"]]},{"id":"7c6779c5.db96d","type":"mqtt in","z":"87868aca.6ebd48","name":"","topic":"IO/Device/Controll/Clock/Alarm/1","qos":"2","broker":"62c86144.724bf8","x":190,"y":200,"wires":[["86dbd2f6.bfd088"]]},{"id":"91375f10.b1fad8","type":"function","z":"87868aca.6ebd48","name":"create HTML Form","func":"var data = context.get('data') || Math.floor(Math.random() * 10000);\nvar tage = [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\", \"Mo-Fr\", \"Sa, So\", \"ganze Woche\"];\nmsg.payload.sort(function(a, b){return a.Weekday - b.Weekday});\nvar a = \"<div>\";\nfor (idx = 0; idx <= msg.payload.length; idx++) {\n    var m;\n    if (idx < msg.payload.length) {\n        m = msg.payload[idx];\n    } else {\n        m = { Enable: false, Time: \"\", Weekday: 0};\n    }\n    a +=\"<div>\";\n    \n    a += `<input type=\"checkbox\" id=\"enable` + data + idx  +`\" ` + ((m.Enable == \"true\") ? \"checked\" : \"\")+  `>`;\n    \n    a += `<input type=\"time\" id=\"time` + data + idx  + `\" value=\"` + m.Time  + `\"  />`;\n    \n    \n    a += `<select id=\"day` + data + idx + `\">`;\n            \n    for (w = 0; w < tage.length; w++) {\n        a += `<option value=\"` + w + `\" ` + ((w == m.Weekday) ? \"selected\" : \"\")+  `>` + tage[w] + `</option>`;\n    }\n    \n\n    a += `</select>`;\n    \n    a += `</div>`;\n}\na += \"</div>\";\n\na += `\n<script>\n// or overwrite value in your callback function ...\nthis.scope.action = function() { \n    var value = \"Time;Weekday;Enable\" + String.fromCharCode(10);\n    for (i=0; i <  ` + (msg.payload.length + 1) + `  ; i++) {\n        var v = document.getElementById('time` + data + `' + i).value;\n        if (v == \"\") {\n            continue;\n        }\n        value += v;\n        value += \";\";\n        var e = document.getElementById('day` + data + `' + i);\n        value += e.options[e.selectedIndex].value;\n        value += \";\";\n        value += document.getElementById('enable` + data + `' + i).checked;\n        value += String.fromCharCode(10)\n        \n    }\n    return value;\n}\n</script>\n<md-button ng-click=\"send({payload:action()})\">\n    Alaramzeiten setzen\n</md-button>\n\n`\ncontext.set('data',data);\n\nreturn {template: a}\n","outputs":1,"noerr":0,"x":590,"y":200,"wires":[["3c3ef0ca.98a5f8"]]},{"id":"3c3ef0ca.98a5f8","type":"ui_template","z":"87868aca.6ebd48","group":"c554cc6d.6192a","name":"","order":4,"width":"6","height":"10","format":"","storeOutMessages":true,"fwdInMessages":false,"templateScope":"local","x":780,"y":200,"wires":[["30096f95.556558"]]},{"id":"30096f95.556558","type":"mqtt out","z":"87868aca.6ebd48","name":"IO/Device/Controll/Clock/Alarm","topic":"IO/Device/Controll/Clock/Alarm/1","qos":"1","retain":"true","broker":"62c86144.724bf8","x":1010,"y":200,"wires":[]},{"id":"cbc614ef.2be7","type":"link in","z":"87868aca.6ebd48","name":"","links":["28c323ce.355664"],"x":120,"y":300,"wires":[["e30b66b6.63866"]]},{"id":"e30b66b6.63866","type":"function","z":"87868aca.6ebd48","name":"Alexa to Wecker Command","func":"mqtt = {\n    topic: \"alexaio/ret/\"  + msg.payload.id\n}\n\nif (!msg.payload.uhrzeit) {\n    mqtt.payload = \"Ich habe leider die Zeit nicht verstanden!\";\n    return [null, mqtt]\n}\nmqtt.payload = \"Alarm auf \" + msg.payload.uhrzeit + \" gesetzt!\";\nmsg.payload = \"wecker|\" + msg.payload.uhrzeit.replace(\":\",\"\");\n\nnode.warn([msg, mqtt]);\nreturn [msg, mqtt];","outputs":2,"noerr":0,"x":280,"y":300,"wires":[["58024719.7a43c8"],["7f45fd1a.54c654"]]},{"id":"58024719.7a43c8","type":"mqtt out","z":"87868aca.6ebd48","name":"","topic":"IO/Device/Controll/Clock/Alarm/Action","qos":"1","retain":"","broker":"62c86144.724bf8","x":610,"y":300,"wires":[]},{"id":"7f45fd1a.54c654","type":"mqtt out","z":"87868aca.6ebd48","name":"Alexa Response","topic":"","qos":"1","retain":"","broker":"62c86144.724bf8","x":540,"y":360,"wires":[]},{"id":"c61bf198.2b65b8","type":"comment","z":"87868aca.6ebd48","name":"Wecker","info":"","x":90,"y":60,"wires":[]},{"id":"765e5c43.b157fc","type":"mqtt in","z":"87868aca.6ebd48","name":"","topic":"IO/Device/Controll/Clock/CurrentAlarm/0","qos":"2","broker":"62c86144.724bf8","x":260,"y":460,"wires":[["44be1360.b7b08c"]]},{"id":"44be1360.b7b08c","type":"ui_text","z":"87868aca.6ebd48","group":"c554cc6d.6192a","order":1,"width":"6","height":"1","name":"","label":"","format":"{{msg.payload}}","layout":"col-center","x":560,"y":460,"wires":[]},{"id":"fc609998.c39d08","type":"mqtt in","z":"87868aca.6ebd48","name":"","topic":"IO/Device/Controll/Clock/CurrentAlarm/1","qos":"2","broker":"62c86144.724bf8","x":270,"y":500,"wires":[["edbddcd5.c18318"]]},{"id":"edbddcd5.c18318","type":"ui_text","z":"87868aca.6ebd48","group":"c554cc6d.6192a","order":2,"width":"6","height":"1","name":"","label":"","format":"{{msg.payload}}","layout":"col-center","x":550,"y":500,"wires":[]},{"id":"62c86144.724bf8","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"c554cc6d.6192a","type":"ui_group","z":"","name":"Wecker","tab":"b1c3c67a.326e48","order":3,"disp":true,"width":"12","collapse":false},{"id":"b1c3c67a.326e48","type":"ui_tab","z":"","name":"Tools","icon":"build","order":5}]