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}]