Audio-visual System User Interface
Overview
This flow creates a traditional touch screen user interface for controlling AV devices. The result is similar to what you might find in a classroom or conference room. The UI is optimized for use on the 7" Raspberry Pi touchscreen.
This flow provides a configuration interface to control which buttons are displayed, select colors, button names and other attributes. These attributes are stored in global context and are also written to the host as a JSON file.
Please note there is no included driver to control the AV devices, this is just the UI.
Other features include:
- Source selection
- Volume and mute controls
- Date and Time
- Shutdown and restart
Install dependencies
- node-red-dashboard https://flows.nodered.org/node/node-red-dashboard
- json-db-node-red https://flows.nodered.org/node/json-db-node-red
- node-red-contrib-moment https://flows.nodered.org/node/node-red-contrib-moment
- node-red-contrib-counter https://flows.nodered.org/node/node-red-contrib-counter
Setup chromium in Kiosk mode.
I followed the tutorial here: https://obrienlabs.net/setup-raspberry-pi-kiosk-chromium/
Remove cursor from browser if that's desired.
Followed the answer here: https://raspberrypi.stackexchange.com/questions/53127/how-to-permanently-hide-mouse-pointer-or-cursor-on-raspberry-pi
Configure Dashboard UI
Under the dashboard's Layout tab, there ought to be one tab labelled UI and 11 groups with the labels listed below. These need to be named correctly in camelCase or the ui_ui_control node won't function correctly.
- mainUI
- configBackButton
- configColor
- configFont
- configTime
- configGeneral
- configLaptopSources
- configSource2
- configSource3
- configSource4
- configLabels
To fit the Pi 7" touch screen, the mainUI group ought to have a width of 17. All of the config groups can use a width of 10. Disable Display Group name for all the groups.
Under the Dashboard's Site tab, Options, select:
- Hide the title bar
- No swipe between tabs
- Set theme in ui_template
Configure your UI
Once running Enter Config from the Utilities button in the upper right corner. Here you can set your colors, labels, and font type.
Controlling AV devices
The link out node can then be used to send commands to the node controlling your AV system. Current commands that the buttons send are:
- routeDevice1
- routeDevice2
- routeDevice3
- routeDevice4
- routeAuto
- routeDevice1A
- routeDevice1B
- routeDevice1C
- micVolumeUp
- micVolumeDown
- roomVolumeUp
- roomVolumeDown
- muteVideo
- muteMic
- muteProgram
[{"id":"14148847.774b58","type":"tab","label":"UI and Config","disabled":false,"info":""},{"id":"30f1032.b1b19fc","type":"ui_colour_picker","z":"14148847.774b58","name":"","label":"Button Background Color Active","group":"c0810cbe.7b307","format":"hex","outformat":"string","showSwatch":true,"showPicker":false,"showValue":true,"showHue":true,"showAlpha":false,"showLightness":true,"dynOutput":"false","order":4,"width":0,"height":0,"passthru":false,"topic":"","x":1150,"y":1160,"wires":[["f673ef1f.f5bf"]]},{"id":"8b106b09.bfab28","type":"change","z":"14148847.774b58","name":"ButtonBackgroundActive","rules":[{"t":"move","p":"payload","pt":"msg","to":"ButtonBackgroundActive","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1750,"y":1160,"wires":[["e3248914.bb41b8"]]},{"id":"f673ef1f.f5bf","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload\nmsg.payload = \"#\"+hex;\nreturn msg;","outputs":1,"noerr":0,"x":1500,"y":1160,"wires":[["8b106b09.bfab28"]]},{"id":"2988228c.3be8ce","type":"ui_colour_picker","z":"14148847.774b58","name":"","label":"Button Background Color","group":"c0810cbe.7b307","format":"hex","outformat":"string","showSwatch":true,"showPicker":false,"showValue":true,"showHue":true,"showAlpha":false,"showLightness":true,"dynOutput":"false","order":3,"width":0,"height":0,"passthru":false,"topic":"","x":1130,"y":1120,"wires":[["49a3fd02.3040a4"]]},{"id":"f8024b8a.6e34a8","type":"change","z":"14148847.774b58","name":"ButtonBackgroundNormal","rules":[{"t":"move","p":"payload","pt":"msg","to":"ButtonBackgroundNormal","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1750,"y":1120,"wires":[["e3248914.bb41b8"]]},{"id":"49a3fd02.3040a4","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload\nmsg.payload = \"#\"+hex;\nreturn msg;","outputs":1,"noerr":0,"x":1500,"y":1120,"wires":[["f8024b8a.6e34a8"]]},{"id":"8c653084.561c7","type":"ui_colour_picker","z":"14148847.774b58","name":"","label":"Header & Footer Color","group":"c0810cbe.7b307","format":"hex","outformat":"string","showSwatch":true,"showPicker":false,"showValue":true,"showHue":true,"showAlpha":false,"showLightness":true,"dynOutput":"false","order":2,"width":0,"height":0,"passthru":false,"topic":"","x":1120,"y":1200,"wires":[["e13179b7.cf5b68"]]},{"id":"cc39a734.3b1c38","type":"change","z":"14148847.774b58","name":"HeaderAndFooterColor","rules":[{"t":"move","p":"payload","pt":"msg","to":"HeaderAndFooterColor","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1750,"y":1200,"wires":[["e3248914.bb41b8"]]},{"id":"e13179b7.cf5b68","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload\nmsg.payload = \"#\"+hex;\nreturn msg;","outputs":1,"noerr":0,"x":1500,"y":1200,"wires":[["cc39a734.3b1c38"]]},{"id":"56715981.1e3358","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 1 Auto Button Label","group":"37969f77.b434e","order":2,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1170,"y":1260,"wires":[["b2459b82.f28c88"]]},{"id":"b2459b82.f28c88","type":"change","z":"14148847.774b58","name":"selectedDevice1AutoButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice1AutoButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1540,"y":1260,"wires":[["e3248914.bb41b8"]]},{"id":"1188d55f.fed57b","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 1-A Button Label","group":"37969f77.b434e","order":3,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1160,"y":1300,"wires":[["51a4e7e3.6ec7e8"]]},{"id":"51a4e7e3.6ec7e8","type":"change","z":"14148847.774b58","name":"selectedDevice1AButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice1AButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":1300,"wires":[["e3248914.bb41b8"]]},{"id":"7fbab283.0e073c","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 1-B Button Label","group":"37969f77.b434e","order":4,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1160,"y":1340,"wires":[["a0ff3d21.b9979"]]},{"id":"a0ff3d21.b9979","type":"change","z":"14148847.774b58","name":"selectedDevice1BButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice1BButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":1340,"wires":[["e3248914.bb41b8"]]},{"id":"98b61ef8.e7586","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 1-C Button Label","group":"37969f77.b434e","order":5,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1160,"y":1380,"wires":[["ff39a4df.a91d88"]]},{"id":"ff39a4df.a91d88","type":"change","z":"14148847.774b58","name":"selectedDevice1CButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice1CButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1530,"y":1380,"wires":[["e3248914.bb41b8"]]},{"id":"9e861b9c.f8ae98","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 1 Button Label","group":"37969f77.b434e","order":1,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1150,"y":1440,"wires":[["6157a17f.db18e"]]},{"id":"6157a17f.db18e","type":"change","z":"14148847.774b58","name":"selectedDevice1ButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice1ButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":1440,"wires":[["e3248914.bb41b8"]]},{"id":"424c5901.09d9d8","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 2 Button Label","group":"ea1d9bcf.0d3f88","order":2,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1150,"y":1480,"wires":[["d8a67c18.da4b4"]]},{"id":"d8a67c18.da4b4","type":"change","z":"14148847.774b58","name":"selectedDevice2ButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice2ButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":1480,"wires":[["e3248914.bb41b8"]]},{"id":"f1ef32f1.72c99","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 3 Button Label","group":"d687b3df.5d178","order":2,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1150,"y":1520,"wires":[["c8bddce0.d395"]]},{"id":"c8bddce0.d395","type":"change","z":"14148847.774b58","name":"selectedDevice3ButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice3ButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":1520,"wires":[["e3248914.bb41b8"]]},{"id":"90c62978.68c1c8","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Selected Device 4 Button Label","group":"40944de7.5e5c84","order":2,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1150,"y":1560,"wires":[["3c9db6e2.6ecfba"]]},{"id":"3c9db6e2.6ecfba","type":"change","z":"14148847.774b58","name":"selectedDevice4ButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"selectedDevice4ButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1520,"y":1560,"wires":[["e3248914.bb41b8"]]},{"id":"a87e6dfa.5632b","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Mute Video Button Label","group":"17b2b77f.597df9","order":13,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1130,"y":1640,"wires":[["b576da89.5066d8"]]},{"id":"b576da89.5066d8","type":"change","z":"14148847.774b58","name":"videoMuteButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"videoMuteButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1500,"y":1640,"wires":[["e3248914.bb41b8"]]},{"id":"5b15fa61.194814","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Screen Control Button Label","group":"17b2b77f.597df9","order":14,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1140,"y":1680,"wires":[["12cbab23.853a15"]]},{"id":"12cbab23.853a15","type":"change","z":"14148847.774b58","name":"screenControlButtonLabel","rules":[{"t":"move","p":"payload","pt":"msg","to":"screenControlButtonLabel","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1510,"y":1680,"wires":[["e3248914.bb41b8"]]},{"id":"94dc7ec1.3c9c8","type":"DataIn","z":"14148847.774b58","collection":"eff976e.09c2d88","name":"Write JSON Config File","update":false,"path":"/","x":2150,"y":1660,"wires":[]},{"id":"3f28d280.a6816e","type":"DataOut","z":"14148847.774b58","collection":"eff976e.09c2d88","name":"Read JSON Config File","path":"/","error":false,"x":150,"y":1600,"wires":[["912c950f.1f9f88","7b3ce2f6.d854fc","cdaa3443.157e08","35943a2.149a9c6","44ee17d6.370728","43efabff.206cf4","59a948b7.9cebc8","cc9e9f8.3f7fb6","23ad4ce3.260d24","bcf33e41.eb42e","9536451a.c81f28","8b2e022d.b63be","6afb4c3e.7d73c4","bb58813b.cfd82","11feb4f8.254ceb","b1933547.829368","43ba1369.02558c","57164375.6c1abc","f5246fb5.1aebe","7abfb8d2.7ef688","86f0366b.5a38c8","9fd7dca2.1123c","b1ecc8b7.db9368","eb61fb58.8aaaf8"]]},{"id":"d3d65c93.ea74f","type":"inject","z":"14148847.774b58","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":1560,"wires":[["3f28d280.a6816e","a821ce45.2531b"]]},{"id":"11feb4f8.254ceb","type":"debug","z":"14148847.774b58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":350,"y":1040,"wires":[]},{"id":"e3248914.bb41b8","type":"function","z":"14148847.774b58","name":"Store Global Variables","func":"msg.payload = {\n \"uuid\": \"vdnvvdfnfuou574nt954\",\n \"ButtonBackgroundNormal\": global.get(\"ButtonBackgroundNormal\"),\n \"ButtonBackgroundActive\": global.get(\"ButtonBackgroundActive\"),\n \"HeaderAndFooterColor\": global.get(\"HeaderAndFooterColor\"),\n \"selectedDevice1AutoButtonLabel\": global.get(\"selectedDevice1AutoButtonLabel\"),\n \"selectedDevice1AButtonLabel\": global.get(\"selectedDevice1AButtonLabel\"),\n \"selectedDevice1BButtonLabel\": global.get(\"selectedDevice1BButtonLabel\"),\n \"selectedDevice1CButtonLabel\": global.get(\"selectedDevice1CButtonLabel\"),\n \"selectedDevice1ButtonLabel\": global.get(\"selectedDevice1ButtonLabel\"),\n \"selectedDevice2ButtonLabel\": global.get(\"selectedDevice2ButtonLabel\"),\n \"selectedDevice3ButtonLabel\": global.get(\"selectedDevice3ButtonLabel\"),\n \"selectedDevice4ButtonLabel\": global.get(\"selectedDevice4ButtonLabel\"),\n \"videoMuteButtonLabel\": global.get(\"videoMuteButtonLabel\"),\n \"screenControlButtonLabel\": global.get(\"screenControlButtonLabel\"),\n \"logoLabel1\": global.get(\"logoLabel1\"),\n \"logoLabel2\": global.get(\"logoLabel2\"),\n \"fontFamily\": global.get(\"fontFamily\"),\n \"timeFormat\": global.get(\"timeFormat\"),\n \"source2Exists\": global.get(\"source2Exists\"),\n \"source3Exists\": global.get(\"source3Exists\"),\n \"source4Exists\": global.get(\"source4Exists\"),\n \"volumeMicExists\": global.get(\"volumeMicExists\"),\n \"screenControlExists\": global.get(\"screenControlExists\"),\n}\nreturn msg;","outputs":"1","noerr":0,"x":2100,"y":1600,"wires":[["94dc7ec1.3c9c8","e6464f2f.07488"]]},{"id":"6afb4c3e.7d73c4","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.ButtonBackgroundNormal","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1120,"wires":[["c8b075e6.03f2c8"]]},{"id":"8b2e022d.b63be","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.ButtonBackgroundActive","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1160,"wires":[["4b41027c.7c668c"]]},{"id":"9536451a.c81f28","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.HeaderAndFooterColor","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1200,"wires":[["679a383a.7c51e8"]]},{"id":"912c950f.1f9f88","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice1AutoButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":1260,"wires":[["56715981.1e3358"]]},{"id":"7b3ce2f6.d854fc","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice1AButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":1300,"wires":[["1188d55f.fed57b"]]},{"id":"cdaa3443.157e08","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice1BButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":1340,"wires":[["7fbab283.0e073c"]]},{"id":"35943a2.149a9c6","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice1CButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":1380,"wires":[["98b61ef8.e7586"]]},{"id":"44ee17d6.370728","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice1ButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1440,"wires":[["9e861b9c.f8ae98"]]},{"id":"43efabff.206cf4","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice2ButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1480,"wires":[["424c5901.09d9d8"]]},{"id":"59a948b7.9cebc8","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice3ButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1520,"wires":[["f1ef32f1.72c99"]]},{"id":"cc9e9f8.3f7fb6","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.selectedDevice4ButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1560,"wires":[["90c62978.68c1c8"]]},{"id":"23ad4ce3.260d24","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.videoMuteButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":1640,"wires":[["a87e6dfa.5632b"]]},{"id":"bcf33e41.eb42e","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.screenControlButtonLabel","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1680,"wires":[["5b15fa61.194814"]]},{"id":"c8b075e6.03f2c8","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload;\nmsg.payload = (hex.slice(-6));\nreturn msg;","outputs":1,"noerr":0,"x":900,"y":1120,"wires":[["2988228c.3be8ce"]]},{"id":"4b41027c.7c668c","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload;\nmsg.payload = (hex.slice(-6));\nreturn msg;","outputs":1,"noerr":0,"x":900,"y":1160,"wires":[["30f1032.b1b19fc"]]},{"id":"679a383a.7c51e8","type":"function","z":"14148847.774b58","name":"Format Hex Payload","func":"var hex = msg.payload;\nmsg.payload = (hex.slice(-6));\nreturn msg;","outputs":1,"noerr":0,"x":900,"y":1200,"wires":[["8c653084.561c7"]]},{"id":"bb58813b.cfd82","type":"change","z":"14148847.774b58","name":"Set Global Variables from Config File","rules":[{"t":"move","p":"payload.ButtonBackgroundNormal","pt":"msg","to":"ButtonBackgroundNormal","tot":"global"},{"t":"move","p":"payload.ButtonBackgroundActive","pt":"msg","to":"ButtonBackgroundActive","tot":"global"},{"t":"move","p":"payload.HeaderAndFooterColor","pt":"msg","to":"HeaderAndFooterColor","tot":"global"},{"t":"move","p":"payload.selectedDevice1AutoButtonLabel","pt":"msg","to":"selectedDevice1AutoButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice1AButtonLabel","pt":"msg","to":"selectedDevice1AButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice1BButtonLabel","pt":"msg","to":"selectedDevice1BButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice1CButtonLabel","pt":"msg","to":"selectedDevice1CButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice1ButtonLabel","pt":"msg","to":"selectedDevice1ButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice2ButtonLabel","pt":"msg","to":"selectedDevice2ButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice3ButtonLabel","pt":"msg","to":"selectedDevice3ButtonLabel","tot":"global"},{"t":"move","p":"payload.selectedDevice4ButtonLabel","pt":"msg","to":"selectedDevice4ButtonLabel","tot":"global"},{"t":"move","p":"payload.videoMuteButtonLabel","pt":"msg","to":"videoMuteButtonLabel","tot":"global"},{"t":"move","p":"payload.screenControlButtonLabel","pt":"msg","to":"screenControlButtonLabel","tot":"global"},{"t":"move","p":"payload.logoLabel1","pt":"msg","to":"logoLabel1","tot":"global"},{"t":"move","p":"payload.logoLabel2","pt":"msg","to":"logoLabel2","tot":"global"},{"t":"move","p":"payload.fontFamily","pt":"msg","to":"fontFamily","tot":"global"},{"t":"move","p":"payload.timeFormat","pt":"msg","to":"timeFormat","tot":"global"},{"t":"move","p":"payload.source2Exists","pt":"msg","to":"source2Exists","tot":"global"},{"t":"move","p":"payload.source3Exists","pt":"msg","to":"source3Exists","tot":"global"},{"t":"move","p":"payload.source4Exists","pt":"msg","to":"source4Exists","tot":"global"},{"t":"move","p":"payload.volumeMicExists","pt":"msg","to":"volumeMicExists","tot":"global"},{"t":"move","p":"payload.screenControlExists","pt":"msg","to":"screenControlExists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":1000,"wires":[[]]},{"id":"2fcb2541.12705a","type":"ui_template","z":"14148847.774b58","group":"695e35b6.5b81cc","name":"Back to Main Page","order":0,"width":0,"height":0,"format":"<button class=\"configButton\" aria-label=\"Exit Config\" ng-click=\"send({payload: 'enterUI'})\">\n <p class=\"textNormal center small\">Exit Config</p>\n</button>\n\n<md-input-container>\n\n\n<style>\n.textNormal {\n\tcolor: {{(msg.headerFontIconColor)}};\n\tfont-family: {{(msg.fontFamily)}};\n}\n\n.small {\n\tfont-size: 22px;\n}\n\n.center {\n\ttext-align: center;\n}\n\n.configButton {\n\tbackground: {{(msg.buttonBackgroundNormal)}};\n\tline-height: 1.5;\n\tborder: 0px;\n\tborder-radius: 10px;\n\twidth: 150px;\n\theight: 60px;\n}\n\n.configButton:focus {\n\toutline: 0;\n}\n\n.configButton:active {\n\tbackground: {{(msg.buttonBackgroundActive)}};\n\n</style>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":1110,"y":1080,"wires":[["2a15df23.5624a"]]},{"id":"4227e042.2fb1f","type":"function","z":"14148847.774b58","name":"Get CSS from Global","func":"//msg.ipV4Address = global.get(\"ipV4Address\");\n//msg.netMask = global.get(\"netMask\");\n//msg.macAddress = global.get(\"macAddress\");\nmsg.buttonBackgroundNormal = global.get(\"ButtonBackgroundNormal\");\nmsg.buttonBackgroundActive = global.get(\"ButtonBackgroundActive\");\nmsg.headerFontIconColor = \"white\";\nmsg.fontFamily = global.get(\"fontFamily\");\nreturn msg;","outputs":1,"noerr":0,"x":820,"y":1080,"wires":[["2fcb2541.12705a"]]},{"id":"2f7d0e54.002622","type":"change","z":"14148847.774b58","name":"logoLabel1","rules":[{"t":"move","p":"payload","pt":"msg","to":"logoLabel1","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1760,"wires":[["e3248914.bb41b8"]]},{"id":"361a451a.11900a","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Logo Label One","group":"17b2b77f.597df9","order":14,"width":0,"height":0,"passthru":false,"mode":"text","delay":"100","topic":"","x":1100,"y":1760,"wires":[["2f7d0e54.002622"]]},{"id":"b1933547.829368","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.logoLabel1","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":1760,"wires":[["361a451a.11900a"]]},{"id":"43ba1369.02558c","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.logoLabel2","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":1800,"wires":[["71fac044.dece2"]]},{"id":"71fac044.dece2","type":"ui_text_input","z":"14148847.774b58","name":"","label":"Logo Label Two","group":"17b2b77f.597df9","order":14,"width":0,"height":0,"passthru":false,"mode":"text","delay":"100","topic":"","x":1100,"y":1800,"wires":[["393dee31.69c252"]]},{"id":"393dee31.69c252","type":"change","z":"14148847.774b58","name":"logoLabel2","rules":[{"t":"move","p":"payload","pt":"msg","to":"logoLabel2","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1800,"wires":[["e3248914.bb41b8"]]},{"id":"4404cb2f.c48274","type":"ui_dropdown","z":"14148847.774b58","name":"Font Family","label":"Font Family","place":"Select a font","group":"aaa78c2d.8d6b4","order":0,"width":0,"height":0,"passthru":false,"options":[{"label":"Times","value":"times, serif","type":"str"},{"label":"Arial","value":"arial, sans-serif","type":"str"}],"payload":"","topic":"","x":1090,"y":1880,"wires":[["105201fa.505d5e"]]},{"id":"57164375.6c1abc","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.fontFamily","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":1880,"wires":[["4404cb2f.c48274"]]},{"id":"105201fa.505d5e","type":"change","z":"14148847.774b58","name":"fontFamily","rules":[{"t":"move","p":"payload","pt":"msg","to":"fontFamily","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1880,"wires":[["e3248914.bb41b8"]]},{"id":"1e390eb4.b7bd51","type":"ui_dropdown","z":"14148847.774b58","name":"Time Format","label":"Time Format","place":"Select time format","group":"4a4e7b4e.8e5934","order":0,"width":0,"height":0,"passthru":false,"options":[{"label":"12 Hour","value":"12 Hour","type":"str"},{"label":"24 Hour","value":"24 Hour","type":"str"}],"payload":"","topic":"","x":1090,"y":1940,"wires":[["f806672d.975c58"]]},{"id":"f5246fb5.1aebe","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.timeFormat","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":1940,"wires":[["1e390eb4.b7bd51"]]},{"id":"f806672d.975c58","type":"change","z":"14148847.774b58","name":"timeFormat","rules":[{"t":"move","p":"payload","pt":"msg","to":"timeFormat","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1940,"wires":[["e3248914.bb41b8"]]},{"id":"a821ce45.2531b","type":"delay","z":"14148847.774b58","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":210,"y":1200,"wires":[["4227e042.2fb1f"]]},{"id":"578262.bc718da","type":"ui_dropdown","z":"14148847.774b58","name":"Source 2","label":"Source 2","place":"Does Source 2 exist?","group":"ea1d9bcf.0d3f88","order":1,"width":0,"height":0,"passthru":false,"options":[{"label":"Yes","value":true,"type":"bool"},{"label":"No","value":false,"type":"bool"}],"payload":"","topic":"","x":1080,"y":2000,"wires":[["b853e98.f20df18"]]},{"id":"b853e98.f20df18","type":"change","z":"14148847.774b58","name":"source2Exists","rules":[{"t":"move","p":"payload","pt":"msg","to":"source2Exists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1480,"y":2000,"wires":[["e3248914.bb41b8"]]},{"id":"9fd7dca2.1123c","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.source2Exists","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":2000,"wires":[["578262.bc718da"]]},{"id":"ec86b0cd.b478e","type":"ui_dropdown","z":"14148847.774b58","name":"Source 3","label":"Source 3","place":"Does Source 3 exist?","group":"d687b3df.5d178","order":1,"width":0,"height":0,"passthru":false,"options":[{"label":"Yes","value":true,"type":"bool"},{"label":"No","value":false,"type":"bool"}],"payload":"","topic":"","x":1080,"y":2040,"wires":[["67820e31.8cf29"]]},{"id":"67820e31.8cf29","type":"change","z":"14148847.774b58","name":"source3Exists","rules":[{"t":"move","p":"payload","pt":"msg","to":"source3Exists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1480,"y":2040,"wires":[["e3248914.bb41b8"]]},{"id":"86f0366b.5a38c8","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.source3Exists","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":2040,"wires":[["ec86b0cd.b478e"]]},{"id":"1912ce0a.b31722","type":"ui_dropdown","z":"14148847.774b58","name":"Source 4","label":"Source 4","place":"Does Source 4 exist?","group":"40944de7.5e5c84","order":1,"width":0,"height":0,"passthru":false,"options":[{"label":"Yes","value":true,"type":"bool"},{"label":"No","value":false,"type":"bool"}],"payload":"","topic":"","x":1080,"y":2080,"wires":[["269988e2.d6bc08"]]},{"id":"269988e2.d6bc08","type":"change","z":"14148847.774b58","name":"source4Exists","rules":[{"t":"move","p":"payload","pt":"msg","to":"source4Exists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1480,"y":2080,"wires":[["e3248914.bb41b8"]]},{"id":"7abfb8d2.7ef688","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.source4Exists","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":2080,"wires":[["1912ce0a.b31722"]]},{"id":"b1ecc8b7.db9368","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.volumeMicExists","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":2160,"wires":[["3a93a1f4.ea079e"]]},{"id":"3a93a1f4.ea079e","type":"ui_dropdown","z":"14148847.774b58","name":"Mic Volume","label":"Mic Volume","place":"Does mic volume exist?","group":"47092b75.8b48b4","order":0,"width":0,"height":0,"passthru":false,"options":[{"label":"Yes","value":true,"type":"bool"},{"label":"No","value":false,"type":"bool"}],"payload":"","topic":"","x":1090,"y":2160,"wires":[["eb3c711.5fe7e9"]]},{"id":"eb3c711.5fe7e9","type":"change","z":"14148847.774b58","name":"volumeMicExists","rules":[{"t":"move","p":"payload","pt":"msg","to":"volumeMicExists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1490,"y":2160,"wires":[["e3248914.bb41b8"]]},{"id":"eb61fb58.8aaaf8","type":"change","z":"14148847.774b58","name":"","rules":[{"t":"move","p":"payload.screenControlExists","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":2240,"wires":[["5726db1b.235154"]]},{"id":"5726db1b.235154","type":"ui_dropdown","z":"14148847.774b58","name":"Screen Control","label":"Screen Control","place":"Does screen control exist?","group":"47092b75.8b48b4","order":0,"width":0,"height":0,"passthru":false,"options":[{"label":"Yes","value":true,"type":"bool"},{"label":"No","value":false,"type":"bool"}],"payload":"","topic":"","x":1100,"y":2240,"wires":[["b8f093e3.7724f"]]},{"id":"b8f093e3.7724f","type":"change","z":"14148847.774b58","name":"screenControlExists","rules":[{"t":"move","p":"payload","pt":"msg","to":"screenControlExists","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":1500,"y":2240,"wires":[["e3248914.bb41b8"]]},{"id":"c8b3b7a5.b60c98","type":"ui_template","z":"14148847.774b58","group":"d387aaf1.4e4128","name":"HTML","order":2,"width":"17","height":"10","format":"<div id=\"overlayFirstRun\">\n\t<div class=\"textBody medium left\">Your IP address is...\n\t\t<section class=\"overlayButtonRowLayout\" layout=\"row\">\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Continue\" onclick=\"overlayFirstRunOff()\">\n\t\t\t\t\t<p class=\"textNormal center small\">Continue</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t</section>\n\t</div>\n</div>\n<div id=\"overlayHelp\">\n <div class=\"textNormal medium left\">For Technical Support Press Here\n\t\t<section class=\"overlayButtonRowLayout\" layout=\"row\">\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Off\" ng-click=\"send({payload: 'helpCallInitiate'})\">\n\t\t\t\t\t<p class=\"textNormal center small\">Help</p>\n\t\t\t\t</button>\n\t\t</section>\n\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Back\" onclick=\"overlayHelpOff()\">\n\t\t\t\t\t<p class=\"textNormal center small\">Back</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t</section>\n </div>\n</div>\n<div id=\"overlayUtilities\">\n <div class=\"textNormal large left\">Utilities\n\t\t<p class=\"textNormal medium left\">\n\t\t\tTo configure from the web go to: {{(msg.preferredIpV4Address)}}:1880/ui/#/0<br>\n\t\t\tOr continue below to configure from the touch screen</p>\t\n\t\t<section class=\"overlayButtonRowLayout\" layout=\"row\">\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Enter\" ng-click=\"send({payload: 'enterConfig'})\"><p class=\"textNormal center small\">Enter Config</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Back to UI\" onclick=\"overlayUtilitiesOff()\"><p class=\"textNormal center small\">Back to UI</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t<section class=\"overlayButtonRowLayout\" layout=\"row\">\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Control Shutdown\" ng-click=\"send({payload: 'controlShutdown'})\">\n\t\t\t\t\t<p class=\"textNormal center small\">Control Shutdown</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Control Restart\" ng-click=\"send({payload: 'controlRestart'})\">\n\t\t\t\t\t<p class=\"textNormal center small\">Control Restart</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t</section>\n\t\t</section>\n\t\t\t<p class=\"textNormal medium left\">\n\t\t\t\tWired IP Address: {{(msg.eth0IpV4Address)}}\n\t\t\t\t<br>Wired Mask: {{(msg.eth0NetMask)}}\n\t\t\t\t<br>Wired MAC Address: {{(msg.eth0MacAddress)}}\n\t\t\t\t<br><br>Wireless IP Address: {{(msg.wlan0IpV4Address)}}\n\t\t\t\t<br>Wireless Mask: {{(msg.wlan0NetMask)}}\n\t\t\t\t<br>Wireless MAC Address: {{(msg.wlan0MacAddress)}}</p>\n\t</div>\n</div>\n<div id=\"overlayPower\">\n <div class=\"textNormal medium left\">Power Down?\n\t\t<section class=\"overlayButtonRowLayout\" layout=\"row\">\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Sleep\" ng-click=\"send({payload: 'avSleep'})\">\n\t\t\t\t\t<p class=\"textNormal center small\">Sleep</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Wake\" ng-click=\"send({payload: 'avWake'})\">\n\t\t\t\t\t<p class=\"textNormal center small\">Wake</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t\t<section class=\"overlayButtonLayout\" layout=\"column\">\n\t\t\t\t<button class=\"overlayButton\" aria-label=\"Back to UI\" onclick=\"overlayPowerOff()\">\n\t\t\t\t\t<p class=\"textNormal center small\">Back to UI</p>\n\t\t\t\t</button>\n\t\t\t</section>\n\t\t</section>\t\t\n </div>\n</div>\n<div id=\"headerLayout\" layout=\"row\">\n\t<section id=\"helpButtonLayout\" layout=\"column\">\n\t\t<button class=\"headerButton\" aria-label=\"Help\" onclick=\"overlayHelpOn()\">\n\t\t\t<md-icon md-font-icon=\"fa-question\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t</button>\n\t\t<p class=\"textNormal center small\">{{(msg.helpButtonLabel)}}</p>\n\t</section>\n\t<section id=\"clockLayout\" layout=\"column\">\n\t\t<p class=\"textNormal center small\">{{(msg.date)}}</p>\n\t\t<p class=\"textNormal center small\">{{(msg.time)}}</p>\n\t</section>\n\t<section id=\"logoLayout\">\n\t<h1 class=\"textNormal large\">{{(msg.logoLabel1)}}</h1>\n\t<h1 class=\"textNormal large\">{{(msg.logoLabel2)}}</h1>\n\t</section>\n\t<section id=\"utilitiesButtonLayout\" layout=\"column\">\n\t\t<button class=\"headerButton\" aria-label=\"Utilities\" onclick=\"overlayUtilitiesOn()\">\n\t\t\t<md-icon md-font-icon=\"fa-cog\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t</button>\n\t\t<p class=\"textNormal center small\">{{(msg.utilitiesButtonLabel)}}</p>\n\t</section>\n</div>\n<div id=\"bodyLayout\" layout=\"row\">\n<aside class=\"sourceSelectColumnLayout\" layout=\"column\" ng-init=\"device1Selected=true\">\n\t<section class=\"sourceSelectButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonLarge\" id=\"source1Button\" aria-label=\"Select {{(msg.source1ButtonLabel)}}\" ng-click = \"device1Selected = true; device2Selected = false; device3Selected = false; device4Selected = false; send({payload: 'routeDevice1'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.source1ButtonLabel)}}</p>\n\t\t</button>\n\t</section>\t\n<div ng-show = \"msg.source2Exists\">\n\t<section class=\"sourceSelectButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonLarge\" id=\"source2Button\" aria-label=\"Select {{(msg.source2ButtonLabel)}}\" ng-click = \"device1Selected = false; device2Selected = true; device3Selected = false; device4Selected = false; send({payload: 'routeDevice2'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.source2ButtonLabel)}}</p>\n\t\t</button>\n\t</section>\n</div>\n<div ng-show = \"msg.source3Exists\">\n\t<section class=\"sourceSelectButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonLarge\" id=\"source3Button\" aria-label=\"Select {{(msg.source3ButtonLabel)}}\" ng-click = \"device1Selected = false; device2Selected = false; device3Selected = true; device4Selected = false; send({payload: 'routeDevice3'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.source3ButtonLabel)}}</p>\n\t\t</button>\n\t</section>\n</div>\n<div ng-show = \"msg.source4Exists\">\n\t<section class=\"sourceSelectButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonLarge\" id=\"source4Button\" aria-label=\"Select {{(msg.source4ButtonLabel)}}\" ng-click = \"device1Selected = false; device2Selected = false; device3Selected = false; device4Selected = true; send({payload: 'routeDevice4'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.source4ButtonLabel)}}</p>\n\t\t</button>\n\t</section>\n</div>\t\n</aside>\n<aside class=\"selectedDeviceInfo\">\n<div ng-show=\"device1Selected\">\n<aside class=\"sourceSelectLaptopRowLayout\" layout=\"row\">\n\t<section id=\"sourceSelectLaptopAutoButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonSmall\" id=\"source1AutoButton\" aria-label=\"Select Auto\" ng-click=\"send({payload: 'routeAuto'})\">\n\t\t<p class=\"textNormal center small\">{{msg.selectedDevice1AutoButtonLabel}}</p>\n\t\t</button>\n\t</section>\n\t<section class=\"sourceSelectLaptopButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonSmall\" id=\"source1AButton\" aria-label=\"Select Mini Display Port\" ng-click=\"send({payload: 'routeDevice1A'})\">\n\t\t<p class=\"textNormal center small\">{{msg.selectedDevice1AButtonLabel}}</p>\n\t\t</button>\n\t</section>\n\t<section class=\"sourceSelectLaptopButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonSmall\" id=\"source1BButton\" aria-label=\"Select HDMI\" ng-click=\"send({payload: 'routeDevice1B'})\">\n\t\t<p class=\"textNormal center small\">{{msg.selectedDevice1BButtonLabel}}</p>\n\t\t</button>\n\t</section>\n\t<section class=\"sourceSelectLaptopButtonLayout\" layout=\"column\">\n\t\t<button class=\"sourceButtonSmall\" id=\"source1CButton\" aria-label=\"Select USB-C\" ng-click=\"send({payload: 'routeDevice1C'})\">\n\t\t<p class=\"textNormal center small\">{{msg.selectedDevice1CButtonLabel}}</p>\n\t\t</button>\n\t</section>\n</aside>\n</div>\n<div ng-show=\"device2Selected\">\n{{msg.source2ButtonLabel}} is Selected\n</div>\n<div ng-show=\"device3Selected\">\n{{msg.source3ButtonLabel}} is Selected\n</div>\n<div ng-show=\"device4Selected\">\n{{msg.source4ButtonLabel}} is Selected\n</div>\n</aside>\n\n<aside ng-show = \"msg.volumeMicExists\" class=\"volumeControlsMultiple\" layout=\"column\">\n\t<section layout=\"row\">\n\t\t<section id=\"volumeControlMic\" layout=\"column\">\n\t\t\t<p class=\"textBody center medium\">Mic</p>\n\t\t\t<div class=\"volumeButtonTopLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Up\" ng-click=\"send({payload: 'micVolumeUp'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-up\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"meterLayout\">\n\t\t\t<meter class=\"meter\" value={{(msg.volumeMic)}} min=\"0\" max=\"32\">\n\t\t\t</meter>\n\t\t\t</div>\n\t\t\t<div class=\"volumeButtonBottomLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Down\" ng-click=\"send({payload: 'micVolumeDown'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-down\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t</section>\n\t\t<section id=\"volumeControlRoom\" layout=\"column\">\n\t\t\t<p class=\"textBody center medium\">Room</p>\n\t\t\t<div class=\"volumeButtonTopLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Up\" ng-click=\"send({payload: 'roomVolumeUp'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-up\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"meterLayout\">\n\t\t\t<meter class=\"meter\" value={{(msg.volumeRoom)}} min=\"0\" max=\"32\">\n\t\t\t</meter>\n\t\t\t</div>\n\t\t\t<div class=\"volumeButtonBottomLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Down\" ng-click=\"send({payload: 'roomVolumeDown'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-down\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t</section>\t\n\t</section>\t\t\t\n</aside>\n\n<aside ng-hide = \"msg.volumeMicExists\" class=\"volumeControlsMultiple\" layout=\"column\">\n\t\t<section id=\"volumeControlRoomSolo\" layout=\"column\">\n\t\t\t<p class=\"textBody center medium\">Room</p>\n\t\t\t<div class=\"volumeButtonTopLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Up\" ng-click=\"send({payload: 'roomVolumeUp'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-up\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"meterLayout\">\n\t\t\t<meter class=\"meter\" value={{(msg.volumeRoom)}} min=\"0\" max=\"32\">\n\t\t\t</meter>\n\t\t\t</div>\n\t\t\t<div class=\"volumeButtonBottomLayout\">\n\t\t\t<button class=\"volumeButton\" aria-label=\"Mic Volume Down\" ng-click=\"send({payload: 'roomVolumeDown'})\">\n\t\t\t\t<md-icon md-font-icon=\"fa-chevron-down\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t\t</button>\n\t\t\t</div>\n\t\t</section>\t\n\t</section>\t\t\t\n</aside>\n\n\n\n\n\n</div>\n\n<div id=\"footerLayout\" layout=\"row\">\n\t<section id=\"powerButtonLayout\" layout=\"column\">\n\t\t<button class=\"powerButton\" aria-label=\"Power Down\" onclick=\"overlayPowerOn()\">\n\t\t\t<md-icon md-font-icon=\"fa-power-off\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t</button>\n\t\t<p class=\"textNormal center small\">{{(msg.powerButtonLabel)}}</p>\n\t</section>\n\n\t<section id=\"videoMuteButtonLayout\" layout=\"column\">\n\t\t<button class=\"videoMuteButton\" aria-label=\"Mute Video\" ng-click=\"send({payload: 'muteVideo'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.videoMuteButtonLabel)}}</p>\n\t\t</button>\n\t</section>\n\n\t<section id=\"screenControlButtonLayout\" layout=\"column\">\n\t\t<button ng-show = \"msg.screenControlExists\" class=\"screenControlButton\" aria-label=\"Screen Up / Down / Pause\" ng-click=\"send({payload: 'screenControl'})\">\n\t\t<p class=\"textNormal center small\">{{(msg.screenControlButtonLabel)}}</p>\n\t\t</button>\n\t</section>\t\n\n\t\n\t<section id=\"muteButtonMicLayout\" layout=\"column\">\n\t\t<button ng-show = \"msg.volumeMicExists\" class=\"muteButtonMic\" aria-label=\"Mute Mic\" ng-click=\"send({payload: 'muteMic'})\">\n <md-icon md-font-icon=\"fa-microphone-slash\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t</button>\n\t</section>\n\t<section id=\"muteButtonRoomLayout\" layout=\"column\">\n\t\t<button class=\"muteButtonRoom\" aria-label=\"Mute Room\" ng-click=\"send({payload: 'muteProgram'})\">\n <md-icon md-font-icon=\"fa-volume-off\" class=\"fa fa-2x buttonIconColorHeaderFooter\"></md-icon>\n\t\t</button>\n\t</section>\n\n\n\t\n</div>","storeOutMessages":false,"fwdInMessages":false,"templateScope":"local","x":710,"y":400,"wires":[["83ab6227.479ef","2a15df23.5624a","9bdd884b.3f6e18","4e639522.34257c"]]},{"id":"83ab6227.479ef","type":"link out","z":"14148847.774b58","name":"deviceControlBus","links":[],"x":295,"y":200,"wires":[]},{"id":"824eb64d.659f18","type":"ui_template","z":"14148847.774b58","group":"d387aaf1.4e4128","name":"Master CSS","order":1,"width":"0","height":"0","format":"<style>\n\n.masonry-container {\n margin: -1px -3px;\n}\n\n.ng-scope {\n padding: 0px 0px;\n overflow: hidden;\n}\n\n#headerLayout {\n background: {{(msg.headerBackground)}};\n\twidth: 100%;\n\theight: 19%;\n}\n\n#bodyLayout {\n\twidth: 100%;\n height: 62%;\n}\n\n#footerLayout {\n background: {{(msg.footerBackground)}};\n width: 100%;\n height: 19%;\n}\n\n#helpButtonLayout {\n\tmargin-left: -30px;\n\twidth: 15%;\n\tpadding: 5px;\n}\n\n#clockLayout {\n margin-top: auto;\n margin-bottom: auto;\n width: 25%;\n\tpadding: 5px;\n}\n\n#logoLayout {\n\ttext-align: center;\n margin-left: -65px;\n margin-top: -10px;\n margin-bottom: auto;\n\twidth: 46%;\n\tpadding: 5px;\n}\n\n#utilitiesButtonLayout {\n\twidth: 14%;\n padding: 5px;\n margin-left: 65px;\n}\n\n.sourceSelectButtonLayout {\n margin-top: 9px;\n margin-bottom: 5px;\n text-align: center;\n}\n\n.sourceSelectLaptopButtonLayout {\n margin-top: 9px;\n margin-bottom: 5px;\n margin-left: 5px;\n margin-right: 5px;\n text-align: center;\n}\n\n.overlayButtonLayout {\n margin-top: 9px;\n margin-bottom: 5px;\n margin-left: 5px;\n margin-right: 5px;\n text-align: center;\n}\n\n#sourceSelectLaptopAutoButtonLayout {\n margin-top: 9px;\n margin-bottom: 5px;\n margin-right: 40px;\n text-align: center;\n}\n\n.volumeButtonTopLayout {\n margin-bottom: 57px;\n}\n\n.meterLayout {\n\ttransform: rotate(-90deg);\n}\n\n.volumeButtonBottomLayout {\n margin-top: 57px;\n margin-bottom: 5px;\n}\n\n#powerButtonLayout {\n width: 10%;\n padding: 5px;\n}\n\n#videoMuteButtonLayout {\n width: 25%;\n\tmargin-left: 40px;\n margin-top: auto;\n margin-bottom: auto;\n padding: 5px;\n\talign-items: center;\n}\n\n#screenControlButtonLayout {\n width: 45%;\n\tmargin-left: -40px;\n margin-top: auto;\n margin-bottom: auto;\n padding: 5px;\n\talign-items: center;\n}\n\n#muteButtonMicLayout {\n width: 10%;\n margin-top: 7px;\n\tmargin-left: -8px;\n margin-top: auto;\n margin-bottom: auto;\n padding: 5px;\n text-align: center;\n}\n\n#muteButtonRoomLayout {\n width: 10%;\n\tmargin-top: 7px;\n\tmargin-left: -5px;\n margin-top: auto;\n margin-bottom: auto;\n padding: 5px;\n text-align: center;\n}\n\n.headerButton {\n line-height: 3;\n border: 0px;\n\tbackground: {{(msg.headerBackground)}};\n border-radius: 5px;\n}\n\n.buttonIconColorHeaderFooter {\n\tcolor: {{(msg.headerFontIconColor)}};\n}\n\n.textNormal {\n\tcolor: {{(msg.headerFontIconColor)}};\n font-family: {{(msg.fontFamily)}};\n// font-family: times, serif;\n}\n\n.textBody {\n\tcolor: {{(msg.bodyFontColor)}};\n\tfont-family: {{(msg.fontFamily)}};\n}\n\n.small {\n\tfont-size: 22px;\n}\n\n.medium {\n\tfont-size: 26px;\n}\n\n.large {\n\tfont-size: 30px;\n}\n\n.center {\n\ttext-align: center;\n}\n\n.left {\n\ttext-align: left;\n\tmargin-left: 100px;\n\tmargin-top: 50px;\n}\n\n.sourceSelectColumnLayout {\n background-color: {{(msg.mainBackgroundColor)}};\n\tfloat: left;\n width: 20%;\n align-items: center;\n}\n\n.sourceSelectLaptopRowLayout {\n background-color: {{(msg.mainBackgroundColor)}};\n\tfloat: left;\n}\n\n.overlayButtonRowLayout {\n\tfloat: left;\n\twidth: 100%;\n}\n\n.selectedDeviceInfo {\n background-color: {{(msg.mainBackgroundColor)}};\n\tfloat: none;\n width: 60%;\n}\n\n.volumeControlsMultiple {\n\tbackground-color: {{(msg.mainBackgroundColor)}};\n float: right;\n width: 25%;\n align-items: center;\n}\n\n#volumeControlMic {\n\talign-items: center;\n\tmargin-left: -10px;\n}\n\n#volumeControlRoom {\n\talign-items: center;\n\tmargin-left: -50px;\n}\n\n#volumeControlRoomSolo {\n\talign-items: center;\n\tmargin-left: 65px;\n}\n\n.sourceButtonSmall {\n\tline-height: 1.2;\n\tborder: 0px;\n\tborder-radius: 10px;\n\twidth: 90px;\n\theight: 60px;\n}\n\n.sourceButtonSmall:focus {\n\toutline: 0;\n}\n\n.sourceButtonLarge {\n\tline-height: 1.2;\n\tborder: 0px;\n\tborder-radius: 10px;\n\twidth: 120px;\n\theight: 60px;\n}\n\n.sourceButtonLarge:focus {\n\toutline: 0;\n}\n\n.overlayButton {\n\tbackground: {{(msg.buttonBackgroundNormal)}};\n\tline-height: 1.2;\n\tborder: 0px;\n\tborder-radius: 10px;\n\twidth: 120px;\n\theight: 60px;\n}\n\n.overlayButton:focus {\n\toutline: 0;\n}\n\n.overlayButton:active {\n\tbackground: {{(msg.buttonBackgroundActive)}};\n}\n\n#source1AutoButton {\n background: {{(msg.source1AutoSelectButtonBackground)}};\n}\n\n#source1AButton {\n background: {{(msg.source1ASelectButtonBackground)}};\n}\n\n#source1BButton {\n background: {{(msg.source1BSelectButtonBackground)}};\n}\n\n#source1CButton {\n background: {{(msg.source1CSelectButtonBackground)}};\n}\n\n#source1Button {\n background: {{(msg.source1SelectButtonBackground)}};\n}\n\n#source2Button {\n background: {{(msg.source2SelectButtonBackground)}};\n}\n\n#source3Button {\n background: {{(msg.source3SelectButtonBackground)}};\n}\n\n#source4Button {\n background: {{(msg.source4SelectButtonBackground)}};\n}\n\n.volumeButton {\n background: {{(msg.buttonBackgroundNormal)}};\n\tborder: 0px;\n border-radius: 50%;\n\twidth: 50px;\n\theight: 50px;\n}\n\n.volumeButton:active {\n background: {{(msg.buttonBackgroundActive)}};\n}\n\n.volumeButton:focus {\n\toutline: 0;\n}\n\n.meter {\n width: 125px;\n height: 20px;\n\n}\n\t\n.powerButton {\n line-height: 3;\n border: 0px;\n\tbackground: {{(msg.footerBackground)}};\n border-radius: 5px;\n}\n\n.videoMuteButton {\n line-height: 1.2;\n\tborder: 0px;\n\tbackground: {{(msg.muteButtonBackgroundVideo)}};\n border-radius: 10px;\n\twidth: 90px;\n\theight: 60px;\n}\n\n.videoMuteButton:focus {\n\toutline: 0;\n}\n\n.screenControlButton {\n line-height: 1.2;\n\tborder: 0px;\n background: {{(msg.buttonBackgroundNormal)}};\n border-radius: 10px;\n\twidth: 200px;\n\theight: 60px;\n}\n\n.screenControlButton:focus {\n\toutline: 0;\n}\n\n.screenControlButton:active {\n background: {{(msg.buttonBackgroundActive)}};\n}\n\n.muteButtonMic {\n background: {{(msg.muteButtonBackgroundMic)}};\n\tborder: 0px;\n border-radius: 50%;\n\twidth: 50px;\n\theight: 50px;\n}\n\n.muteButtonMic:focus {\n\toutline: 0;\n}\n\n.muteButtonRoom {\n background: {{(msg.muteButtonBackgroundRoom)}};\n\tborder: 0px;\n border-radius: 50%;\n\twidth: 50px;\n\theight: 50px;\n}\n\n.muteButtonRoom:focus {\n\toutline: 0;\n}\n\n#overlayFirstRun {\n\tposition: fixed;\n\tdisplay: none;\n top: 0;\n left: -23px;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.9);\n z-index: 2;\n}\n\n#overlayHelp {\n\tposition: fixed;\n\tdisplay: none;\n top: 0;\n left: -23px;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.9);\n z-index: 2;\n}\n\n#overlayUtilities {\n\tposition: fixed;\n\tdisplay: none;\n top: 0;\n left: -23px;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.9);\n z-index: 2;\n}\n\n#overlayPower {\n\tposition: fixed;\n\tdisplay: none;\n top: 0;\n left: -23px;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.9);\n z-index: 2;\n}\n\n</style>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":1010,"y":400,"wires":[[]]},{"id":"90f06aca.0a9a38","type":"function","z":"14148847.774b58","name":"Device Labels, Time, Volumes","func":"msg.logoLabel1 = global.get(\"logoLabel1\");\nmsg.logoLabel2 = global.get(\"logoLabel2\");\n\nmsg.helpButtonLabel = \"Help\";\nmsg.utilitiesButtonLabel = \"Utilities\";\nmsg.powerButtonLabel = \"On/Off\";\n\nmsg.source2Exists = global.get(\"source2Exists\");\nmsg.source3Exists = global.get(\"source3Exists\");\nmsg.source4Exists = global.get(\"source4Exists\");\nmsg.volumeMicExists = global.get(\"volumeMicExists\");\nmsg.screenControlExists = global.get(\"screenControlExists\");\n\nmsg.source1ButtonLabel = global.get(\"selectedDevice1ButtonLabel\");\nmsg.source2ButtonLabel = global.get(\"selectedDevice2ButtonLabel\");\nmsg.source3ButtonLabel = global.get(\"selectedDevice3ButtonLabel\");\nmsg.source4ButtonLabel = global.get(\"selectedDevice4ButtonLabel\");\nmsg.selectedDevice1AutoButtonLabel = global.get(\"selectedDevice1AutoButtonLabel\");\nmsg.selectedDevice1AButtonLabel = global.get(\"selectedDevice1AButtonLabel\");\nmsg.selectedDevice1BButtonLabel = global.get(\"selectedDevice1BButtonLabel\");\nmsg.selectedDevice1CButtonLabel = global.get(\"selectedDevice1CButtonLabel\");\n\nmsg.eth0IpV4Address = global.get(\"eth0IpV4Address\");\nmsg.eth0NetMask = global.get(\"eth0NetMask\");\nmsg.eth0MacAddress = global.get(\"eth0MacAddress\");\nmsg.wlan0IpV4Address = global.get(\"wlan0IpV4Address\");\nmsg.wlan0NetMask = global.get(\"wlan0NetMask\");\nmsg.wlan0MacAddress = global.get(\"wlan0MacAddress\");\nmsg.preferredIpV4Address = global.get(\"preferredIpV4Address\")\n\nmsg.videoMuteButtonLabel = global.get(\"videoMuteButtonLabel\");\nmsg.screenControlButtonLabel = global.get(\"screenControlButtonLabel\");\n\nmsg.date = global.get(\"globalDate\");\nmsg.time = global.get(\"globalTime\");\nmsg.volumeMic = global.get(\"globalVolumeMic\");\nmsg.volumeRoom = global.get(\"globalVolumeRoom\");\nmsg.firstRunStatus = global.get(\"firstRunStatus\");\n\n\n\nreturn msg;","outputs":1,"noerr":0,"x":1090,"y":620,"wires":[["c8b3b7a5.b60c98"]]},{"id":"ec093fbc.57436","type":"moment","z":"14148847.774b58","name":"","topic":"","input":"epochtime","inputType":"msg","inTz":"America/New_York","adjAmount":"0","adjType":"days","adjDir":"add","format":"object","locale":"en_GB","output":"epochtime","outputType":"msg","outTz":"America/New_York","x":1220,"y":340,"wires":[["76d538cc.c8be28"]]},{"id":"5860c75.617a738","type":"function","z":"14148847.774b58","name":"CSS Values and Global Variables","func":"msg.headerFontIconColor = \"white\";\nmsg.mainBackgroundColor = \"white\";\nmsg.mainFontIconColor = \"white\";\nmsg.bodyFontColor = \"black\";\nmsg.footerFontIconColor = \"white\";\nmsg.fontFamily = global.get(\"fontFamily\");\n\n\nmsg.headerBackground = global.get(\"HeaderAndFooterColor\");\nmsg.buttonBackgroundNormal = global.get(\"ButtonBackgroundNormal\");\nmsg.buttonBackgroundActive = global.get(\"ButtonBackgroundActive\");\nmsg.muteButtonBackgroundVideo = global.get(\"MuteButtonBackgroundVideo\");\nmsg.muteButtonBackgroundMic = global.get(\"MuteButtonBackgroundMic\");\nmsg.muteButtonBackgroundRoom = global.get(\"MuteButtonBackgroundRoom\");\nmsg.footerBackground = global.get(\"HeaderAndFooterColor\");\n\nmsg.source1SelectButtonBackground = global.get(\"source1SelectButtonBackground\");\nmsg.source1AutoSelectButtonBackground = global.get(\"source1AutoSelectButtonBackground\");\nmsg.source1ASelectButtonBackground = global.get(\"source1ASelectButtonBackground\");\nmsg.source1BSelectButtonBackground = global.get(\"source1BSelectButtonBackground\");\nmsg.source1CSelectButtonBackground = global.get(\"source1CSelectButtonBackground\");\nmsg.source2SelectButtonBackground = global.get(\"source2SelectButtonBackground\");\nmsg.source3SelectButtonBackground = global.get(\"source3SelectButtonBackground\");\nmsg.source4SelectButtonBackground = global.get(\"source4SelectButtonBackground\");\n\nreturn msg;","outputs":1,"noerr":0,"x":1100,"y":500,"wires":[["824eb64d.659f18"]]},{"id":"2a15df23.5624a","type":"function","z":"14148847.774b58","name":"Selected Device Logic and Button State Global Variables","func":"var buttonPress = msg.payload;\nvar source1AutoSelectButtonBackground = global.get(\"source1AutoSelectButtonBackground\");\nvar muteButtonBackgroundVideo = global.get(\"MuteButtonBackgroundVideo\");\nvar muteButtonBackgroundMic = global.get(\"MuteButtonBackgroundMic\");\nvar muteButtonBackgroundRoom = global.get(\"MuteButtonBackgroundRoom\");\nvar ButtonBackgroundActive = global.get(\"ButtonBackgroundActive\");\nvar ButtonBackgroundNormal = global.get(\"ButtonBackgroundNormal\");\nif (buttonPress == \"routeDevice1\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\n\nelse if ((buttonPress == \"routeAuto\") && (source1AutoSelectButtonBackground == ButtonBackgroundNormal)) {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if ((buttonPress == \"routeAuto\") && (source1AutoSelectButtonBackground == ButtonBackgroundActive)) {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice1A\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice1B\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice1C\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source1AutoSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1ASelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1BSelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source1CSelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice2\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice3\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if (buttonPress == \"routeDevice4\") {\n global.set(\"source1SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\n global.set(\"source4SelectButtonBackground\",global.get(\"ButtonBackgroundActive\"));\n return msg;\n}\nelse if ((buttonPress == \"muteVideo\") && (muteButtonBackgroundVideo == ButtonBackgroundNormal)) {\n global.set(\"MuteButtonBackgroundVideo\",global.get(\"ButtonBackgroundActive\"));\n return msg;\n}\nelse if ((buttonPress == \"muteVideo\") && (muteButtonBackgroundVideo == ButtonBackgroundActive)) {\n global.set(\"MuteButtonBackgroundVideo\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if ((buttonPress == \"muteMic\") && (muteButtonBackgroundMic == ButtonBackgroundNormal)) {\n global.set(\"MuteButtonBackgroundMic\",global.get(\"ButtonBackgroundActive\"));\n return msg;\n}\nelse if ((buttonPress == \"muteMic\") && (muteButtonBackgroundMic == ButtonBackgroundActive)) {\n global.set(\"MuteButtonBackgroundMic\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n}\nelse if ((buttonPress == \"muteProgram\") && (muteButtonBackgroundRoom == ButtonBackgroundNormal)) {\n global.set(\"MuteButtonBackgroundRoom\",global.get(\"ButtonBackgroundActive\"));\n return msg;\n}\nelse if ((buttonPress == \"muteProgram\") && (muteButtonBackgroundRoom == ButtonBackgroundActive)) {\n global.set(\"MuteButtonBackgroundRoom\",global.get(\"ButtonBackgroundNormal\"));\n return msg;\n} \nelse if (buttonPress == \"enterConfig\") {\n global.set(\"activeTab\",\"config\");\n return msg;\n}\nelse if (buttonPress == \"enterUI\") {\n global.set(\"activeTab\",\"UI\");\n return msg; \n}\nelse\n return msg;","outputs":1,"noerr":0,"x":1170,"y":560,"wires":[["5860c75.617a738","fe661f4e.1b7e"]]},{"id":"580da467.ab3d8c","type":"inject","z":"14148847.774b58","name":"UI Init","topic":"","payload":"routeDevice1","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"0.2","x":650,"y":820,"wires":[["4ce7006a.ba17c","2a15df23.5624a","99e04d30.95851","cabbe6f6.bd04a8","eb5bfca4.6fef6","7cffb956.91b918"]]},{"id":"c8fe0f26.b2ddc","type":"inject","z":"14148847.774b58","name":"Date & Time Repeater","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":true,"onceDelay":0.1,"x":670,"y":340,"wires":[["90f06aca.0a9a38","133ff79d.2e8258"]]},{"id":"9bdd884b.3f6e18","type":"function","z":"14148847.774b58","name":"Volume Logic","func":"var volumeChange = msg.payload;\nif (volumeChange == \"micVolumeUp\") {\n msg.increment = 1;\n return [ msg, null ];\n} else if (volumeChange == \"micVolumeDown\") {\n msg.decrement = 1;\n return [ msg, null ];\n} else if (volumeChange == \"roomVolumeUp\") {\n msg.increment = 1;\n return [ null, msg ];\n} else if (volumeChange == \"roomVolumeDown\") {\n msg.decrement = 1;\n return [ null, msg ];\n} else\n return [ null, null ];\nreturn msg;","outputs":2,"noerr":0,"x":1060,"y":780,"wires":[["ba9acb1d.f85568"],["ba19ff4c.04845"]]},{"id":"a30e0a55.524a08","type":"function","z":"14148847.774b58","name":"Default Volume","func":"global.set(\"Source1SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundVideo\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundMic\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundRoom\",global.get(\"ButtonBackgroundNormal\"));\nmsg.reset = true;\nreturn msg;","outputs":1,"noerr":0,"x":1060,"y":820,"wires":[["ba19ff4c.04845","ba9acb1d.f85568"]]},{"id":"ba9acb1d.f85568","type":"counter","z":"14148847.774b58","name":"volumeMicCounter","init":"20","step":1,"lower":"0","upper":"32","mode":"increment","outputs":"1","x":1330,"y":780,"wires":[["90f06aca.0a9a38","5c2a533d.c8383c"]]},{"id":"ba19ff4c.04845","type":"counter","z":"14148847.774b58","name":"volumeRoomCounter","init":"10","step":1,"lower":"0","upper":"32","mode":"increment","outputs":"1","x":1340,"y":820,"wires":[["90f06aca.0a9a38","78c28ff3.bd6c8"]]},{"id":"78c28ff3.bd6c8","type":"function","z":"14148847.774b58","name":"Set globalVolumeRoom","func":"var volumeRoom = msg.count;\nglobal.set(\"globalVolumeRoom\",volumeRoom);\nreturn msg;","outputs":1,"noerr":0,"x":1610,"y":820,"wires":[["90f06aca.0a9a38"]]},{"id":"5c2a533d.c8383c","type":"function","z":"14148847.774b58","name":"Set globalVolumeMic","func":"var volumeMic = msg.count;\nglobal.set(\"globalVolumeMic\",volumeMic);\nreturn msg;","outputs":1,"noerr":0,"x":1600,"y":780,"wires":[["90f06aca.0a9a38"]]},{"id":"738abee1.a3c5a","type":"ui_template","z":"14148847.774b58","group":"d387aaf1.4e4128","name":"JavaScript for Overlays","order":1,"width":"0","height":"0","format":"<script>\nfunction overlayFirstRunOn() {\n document.getElementById(\"overlayFirstRun\").style.display = \"block\";\n}\n\nfunction overlayFirstRunOff() {\n document.getElementById(\"overlayFirstRun\").style.display = \"none\";\n}\n\nfunction overlayHelpOn() {\n document.getElementById(\"overlayHelp\").style.display = \"block\";\n}\n\nfunction overlayHelpOff() {\n document.getElementById(\"overlayHelp\").style.display = \"none\";\n}\n\nfunction overlayUtilitiesOn() {\n document.getElementById(\"overlayUtilities\").style.display = \"block\";\n}\n\nfunction overlayUtilitiesOff() {\n document.getElementById(\"overlayUtilities\").style.display = \"none\";\n}\n\nfunction overlayPowerOn() {\n document.getElementById(\"overlayPower\").style.display = \"block\";\n}\n\nfunction overlayPowerOff() {\n document.getElementById(\"overlayPower\").style.display = \"none\";\n}\n</script>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":1250,"y":400,"wires":[[]]},{"id":"7cffb956.91b918","type":"function","z":"14148847.774b58","name":"Default Button States and Get Epoch Time","func":"global.set(\"Source1SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source2SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source3SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"Source4SelectButtonBackground\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundVideo\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundMic\",global.get(\"ButtonBackgroundNormal\"));\nglobal.set(\"MuteButtonBackgroundRoom\",global.get(\"ButtonBackgroundNormal\"));\nreturn msg;","outputs":1,"noerr":0,"x":1270,"y":900,"wires":[["90f06aca.0a9a38"]]},{"id":"99e04d30.95851","type":"exec","z":"14148847.774b58","command":"ifconfig","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"ifconfig eth0","x":1010,"y":160,"wires":[["c86fc37.53d8a4"],[],[]]},{"id":"c86fc37.53d8a4","type":"function","z":"14148847.774b58","name":"Parse ifconfig","func":"var input = msg.payload;\nvar findIp = input.split(\"inet\");\nvar resIp = findIp[1].split(\" \", 2);\nvar ip = resIp[1];\nvar findMask = input.split(\"netmask\");\nvar resMask = findMask[1].split(\" \", 2);\nvar mask = resMask[1];\nvar findMac = input.split(\"ether\");\nvar resMac = findMac[1].split(\" \", 2);\nvar mac = resMac[1];\nglobal.set(\"eth0IpV4Address\",ip);\nglobal.set(\"eth0NetMask\",mask);\nglobal.set(\"eth0MacAddress\",mac);\nmsg.eth0ip = ip;\nmsg.eth0mac = mac;\nmsg.eth0mask = mask;\nreturn msg;","outputs":1,"noerr":0,"x":1180,"y":140,"wires":[[]]},{"id":"4ce7006a.ba17c","type":"delay","z":"14148847.774b58","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":830,"y":820,"wires":[["a30e0a55.524a08"]]},{"id":"cabbe6f6.bd04a8","type":"exec","z":"14148847.774b58","command":"ifconfig wlan0","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"ifconfig wlan0","x":1000,"y":220,"wires":[["4fc25434.73e4dc"],[],[]]},{"id":"4fc25434.73e4dc","type":"function","z":"14148847.774b58","name":"Parse ifconfig","func":"var input = msg.payload;\nvar findIp = input.split(\"inet\");\nvar resIp = findIp[1].split(\" \", 2);\nvar ip = resIp[1];\nvar findMask = input.split(\"netmask\");\nvar resMask = findMask[1].split(\" \", 2);\nvar mask = resMask[1];\nvar findMac = input.split(\"ether\");\nvar resMac = findMac[1].split(\" \", 2);\nvar mac = resMac[1];\nglobal.set(\"wlan0IpV4Address\",ip);\nglobal.set(\"wlan0NetMask\",mask);\nglobal.set(\"wlan0MacAddress\",mac);\nmsg.wlan0ip = ip;\nmsg.wlan0mac = mac;\nmsg.wlan0mask = mask;\nreturn msg;","outputs":1,"noerr":0,"x":1180,"y":180,"wires":[[]]},{"id":"8f3211c9.8dd47","type":"exec","z":"14148847.774b58","command":"sudo shutdown -r now","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Restart","x":800,"y":160,"wires":[[],[],[]]},{"id":"5283df04.dc7b7","type":"inject","z":"14148847.774b58","name":"Restart","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":630,"y":160,"wires":[["8f3211c9.8dd47"]],"icon":"node-red/cog.png"},{"id":"a63ce5a9.d78e28","type":"function","z":"14148847.774b58","name":"Determine Preferred IP","func":"var prefIP;\nvar wlan0IP = global.get(\"wlan0IpV4Address\")\nvar eth0IP = global.get(\"eth0IpV4Address\")\nif (eth0IP == \"127.0.0.1\") {\n prefIP = wlan0IP;\n} else {\n prefIP = eth0IP;\n}\nglobal.set(\"preferredIpV4Address\",prefIP);\nmsg.payload = prefIP;\nreturn msg;","outputs":1,"noerr":0,"x":1210,"y":100,"wires":[[]]},{"id":"eb5bfca4.6fef6","type":"delay","z":"14148847.774b58","name":"","pauseType":"delay","timeout":"50","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1010,"y":100,"wires":[["a63ce5a9.d78e28"]]},{"id":"fe661f4e.1b7e","type":"function","z":"14148847.774b58","name":"Show / Hide Groups","func":"\nvar activeTab;\nactiveTab = global.get(\"activeTab\");\n\nif (activeTab == \"config\") {\n msg.payload = {\"group\":{\"hide\":[\"UI_mainUI\"],\"show\":[\"UI_configColor\",\"UI_configTime\",\"UI_configGeneral\", \"UI_configLaptopSources\", \"UI_configSource2\", \"UI_configSource3\", \"UI_configSource4\", \"UI_configFont\",\"UI_configLabels\",\"UI_configBackButton\"], \"focus\":true}}\n}\n\nelse if (activeTab == \"UI\") {\n msg.payload = {\"group\":{\"hide\":[\"UI_configColor\",\"UI_configTime\", \"UI_configGeneral\", \"UI_configLaptopSources\", \"UI_configSource2\", \"UI_configSource3\", \"UI_configSource4\", \"UI_configFont\",\"UI_configLabels\",\"UI_configBackButton\"],\"show\":[\"UI_mainUI\"], \"focus\":true}}\n}\nreturn msg;","outputs":1,"noerr":0,"x":1560,"y":560,"wires":[["3454d5ba.38525a"]]},{"id":"3454d5ba.38525a","type":"ui_ui_control","z":"14148847.774b58","name":"","x":1560,"y":400,"wires":[[]]},{"id":"d75b014c.e9504","type":"exec","z":"14148847.774b58","command":"sudo shutdown now","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Shutdown","x":800,"y":100,"wires":[[],[],[]]},{"id":"95200497.edaff8","type":"inject","z":"14148847.774b58","name":"Shutdown","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":620,"y":100,"wires":[["d75b014c.e9504"]],"icon":"node-red/cog.png"},{"id":"4e639522.34257c","type":"function","z":"14148847.774b58","name":"Shutdown/Restart/Sleep","func":"var pageLoad = msg.payload;\nif (pageLoad == \"controlShutdown\") {\n return [ msg, null, null];\n} else if (pageLoad == \"controlRestart\") {\n return [ null, msg, null];\n} else if (pageLoad == \"avSleep\") {\n return [ null, null, msg];\n} else\n\treturn [ null, null, null];","outputs":3,"noerr":0,"x":690,"y":280,"wires":[["d75b014c.e9504"],["8f3211c9.8dd47"],[]]},{"id":"76d538cc.c8be28","type":"function","z":"14148847.774b58","name":"Format and Global Set Date and Time","func":"var timeFormat = global.get(\"timeFormat\")\nvar date = msg.epochtime.date;\nvar year = msg.epochtime.years;\nvar monthNumber = msg.epochtime.months;\nvar minuteNoPad = msg.epochtime.minutes;\nvar hour24 = msg.epochtime.hours;\nvar monthName;\nvar minutePadded;\nvar hour12;\nvar ampm;\n\nif (monthNumber == \"0\") {\n monthName = \"January\"\n} else if (monthNumber == \"1\") {\n monthName = \"February\"\n} else if (monthNumber == \"2\") {\n monthName = \"March\"\n} else if (monthNumber == \"3\") {\n monthName = \"April\"\n} else if (monthNumber == \"4\") {\n monthName = \"May\"\n} else if (monthNumber == \"5\") {\n monthName = \"June\"\n} else if (monthNumber == \"6\") {\n monthName = \"July\"\n} else if (monthNumber == \"7\") {\n monthName = \"August\"\n} else if (monthNumber == \"8\") {\n monthName = \"September\"\n} else if (monthNumber == \"9\") {\n monthName = \"October\"\n} else if (monthNumber == \"10\") {\n monthName = \"November\"\n} else if (monthNumber == \"11\") {\n monthName = \"December\"\n} else\n monthName = null;\n\nif (minuteNoPad == \"0\") {\n minutedPadded = \"00\"\n} else if (minuteNoPad == \"1\") {\n minutedPadded = \"01\"\n} else if (minuteNoPad == \"2\") {\n minutedPadded = \"02\"\n} else if (minuteNoPad == \"3\") {\n minutedPadded = \"03\"\n} else if (minuteNoPad == \"4\") {\n minutedPadded = \"04\"\n} else if (minuteNoPad == \"5\") {\n minutedPadded = \"05\"\n} else if (minuteNoPad == \"6\") {\n minutedPadded = \"06\"\n} else if (minuteNoPad == \"7\") {\n minutedPadded = \"07\"\n} else if (minuteNoPad == \"8\") {\n minutedPadded = \"08\"\n} else if (minuteNoPad == \"9\") {\n minutedPadded = \"09\"\n} else\n minutedPadded = minuteNoPad;\n\nvar formatDate = monthName+\" \"+date+\", \"+year;\n\t\nif ((timeFormat == \"12 Hour\") && (hour24 == \"0\")) {\n\thour12 = 12\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"1\")) {\n\thour12 = 1\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"2\")) {\n\thour12 = 2\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"3\")) {\n\thour12 = 3\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"4\")) {\n\thour12 = 4\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"5\")) {\n\thour12 = 5\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"6\")) {\n\thour12 = 6\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"7\")) {\n\thour12 = 7\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"8\")) {\n\thour12 = 8\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"9\")) {\n\thour12 = 9\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"10\")) {\n\thour12 = 10\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"11\")) {\n\thour12 = 11\n\tampm = \"AM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"12\")) {\n\thour12 = 12\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"13\")) {\n\thour12 = 1\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"14\")) {\n\thour12 = 2\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"15\")) {\n\thour12 = 3\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"16\")) {\n\thour12 = 4\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"17\")) {\n\thour12 = 5\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"18\")) {\n\thour12 = 6\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"19\")) {\n\thour12 = 7\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"20\")) {\n\thour12 = 8\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"21\")) {\n\thour12 = 9\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"22\")) {\n\thour12 = 10\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if ((timeFormat == \"12 Hour\") && (hour24 == \"23\")) {\n\thour12 = 11\n\tampm = \"PM\"\n\tvar formatTime = hour12+\":\"+minutedPadded+\" \"+ampm\n} else if (timeFormat == \"24 Hour\") {\n\tvar formatTime = hour24+\":\"+minutedPadded\n} else\n\tvar formatTime = null;\n\nmsg.date = formatDate;\nmsg.time = formatTime;\n\n\nglobal.set(\"globalDate\",formatDate);\nglobal.set(\"globalTime\",formatTime);\nreturn msg;","outputs":1,"noerr":0,"x":1510,"y":340,"wires":[[]]},{"id":"133ff79d.2e8258","type":"function","z":"14148847.774b58","name":"global.set(\"globalDate\",formatDate);","func":"var epochTime = msg.payload;\nmsg.epochtime = msg.payload;\nglobal.set(\"epochTime\",epochTime);\nreturn msg;","outputs":1,"noerr":0,"x":940,"y":340,"wires":[["ec093fbc.57436"]]},{"id":"e6464f2f.07488","type":"delay","z":"14148847.774b58","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":950,"y":900,"wires":[["7cffb956.91b918"]]},{"id":"251e4414.b6c8ec","type":"comment","z":"14148847.774b58","name":"Interfacing with AV systems","info":"Commands sent form UI buttons\n\nrouteDevice1\nrouteDevice2\nrouteDevice3\nrouteDevice4\n\nrouteAuto\nrouteDevice1A\nrouteDevice1B\nrouteDevice1C\n\nmicVolumeUp\nmicVolumeDown\nroomVolumeUp\nroomVolumeDown\n\nmuteVideo\nmuteMic\nmuteProgram","x":280,"y":160,"wires":[]},{"id":"c0810cbe.7b307","type":"ui_group","z":"","name":"configColor","tab":"5d7e0188.a49b5","order":3,"disp":false,"width":"10","collapse":false},{"id":"37969f77.b434e","type":"ui_group","z":"","name":"configLaptopSources","tab":"5d7e0188.a49b5","order":7,"disp":false,"width":"10","collapse":false},{"id":"ea1d9bcf.0d3f88","type":"ui_group","z":"","name":"configSource2","tab":"5d7e0188.a49b5","order":8,"disp":false,"width":"10","collapse":false},{"id":"d687b3df.5d178","type":"ui_group","z":"","name":"configSource3","tab":"5d7e0188.a49b5","order":9,"disp":false,"width":"10","collapse":false},{"id":"40944de7.5e5c84","type":"ui_group","z":"","name":"configSource4","tab":"5d7e0188.a49b5","order":10,"disp":false,"width":"10","collapse":false},{"id":"17b2b77f.597df9","type":"ui_group","z":"","name":"configLabels","tab":"5d7e0188.a49b5","order":11,"disp":false,"width":"10","collapse":false},{"id":"eff976e.09c2d88","type":"json-db-collection","z":"","name":"System Configuration","collection":"config","save":true},{"id":"695e35b6.5b81cc","type":"ui_group","z":"","name":"configBackButton","tab":"5d7e0188.a49b5","order":2,"disp":false,"width":"10","collapse":false},{"id":"aaa78c2d.8d6b4","type":"ui_group","z":"","name":"configFont","tab":"5d7e0188.a49b5","order":4,"disp":false,"width":"10","collapse":false},{"id":"4a4e7b4e.8e5934","type":"ui_group","z":"","name":"configTime","tab":"5d7e0188.a49b5","order":5,"disp":false,"width":"10","collapse":false},{"id":"47092b75.8b48b4","type":"ui_group","z":"","name":"configGeneral","tab":"5d7e0188.a49b5","order":6,"disp":false,"width":"10","collapse":false},{"id":"d387aaf1.4e4128","type":"ui_group","z":"","name":"mainUI","tab":"5d7e0188.a49b5","order":1,"disp":false,"width":"17","collapse":false},{"id":"5d7e0188.a49b5","type":"ui_tab","z":"","name":"UI","icon":"dashboard","order":1}]