For your application (control of your sunscreens) you can simply remove the following nodes:
1. MQTT-Owntracks
2. Set Lat/Lon ( the Lat/Lon co-ordinates can be set in the node "Prepare URL OpenUV", if you modify the contents a little.
3. Sun rise/set switch
4. Control Gate
5. 30 Minutes Request
6. Gate
In order to get a 30 Minutes tick to make a request during daylight, you can use a "day time switch" (node-red-contrib-time-switch),
Connect the upper output to the input of the "Function" node, called "Prepare URL OpenUV".
In line 30 of the "Function"Node, called "To Domoticz" you might want to change the skin type.
I have inserted skin type 3, but you can change it to another type ( See the comment node).
Code: Select all
[{"id":"9e770b5e.116dd8","type":"tab","label":"Open UV","disabled":false,"info":""},{"id":"5e4af9cf.9cae08","type":"function","z":"9e770b5e.116dd8","name":"Prepare URL OpenUV","func":"var url = \"https://api.openuv.io/api/v1/uv\";\nvar lat = msg.payload.lat || \"xx.xxxxxx\";\nvar lng = msg.payload.lon || \"y.yyyyy\";\nvar alt = msg.payload.alt || \"zz\";\nmsg.url = url + \"?lat=\" + lat + \"&lng=\" + lng + \"&alt=\" + alt;\nmsg.headers = {};\nmsg.headers[\"x-access-token\"] = \"8fd2e165a2af72db7c19acba67e82fd3\";\n\nreturn msg;","outputs":1,"noerr":0,"x":160,"y":100,"wires":[["5b77d748.78fcc"]]},{"id":"5b77d748.78fcc","type":"http request","z":"9e770b5e.116dd8","name":"OpenUV http request","method":"GET","ret":"obj","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":420,"y":100,"wires":[["71303228.bcbd0c","37c920a1.f16b28"]]},{"id":"71303228.bcbd0c","type":"debug","z":"9e770b5e.116dd8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":160,"wires":[]},{"id":"a90a0f1a.412448","type":"mqtt in","z":"9e770b5e.116dd8","name":"MQTT-Owntracks","topic":"owntracks/name/eq","qos":"2","datatype":"json","broker":"8591549f.77809","x":160,"y":240,"wires":[["f1b9f0ba.2ca598","dae8628.8d105a"]]},{"id":"316645d2.62236a","type":"sunriseinput","z":"9e770b5e.116dd8","name":"Sun rise/set switch","lat":"xx.xxxxxx","lon":"y.yyyyyy,"start":"sunriseEnd","end":"sunsetStart","x":410,"y":320,"wires":[["64b4ef54.aefef"],[]]},{"id":"5330841a.345f84","type":"gate","z":"9e770b5e.116dd8","name":"Gate","controlTopic":"control","defaultState":"closed","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","persist":false,"x":630,"y":240,"wires":[["5e4af9cf.9cae08"]]},{"id":"f1b9f0ba.2ca598","type":"function","z":"9e770b5e.116dd8","name":"Set Lat/Lon","func":"msg = {\n lat : msg.payload.lat || \"xx.xxxxxx\",\n lon : msg.payload.lon || \"y.yyyyyy\"\n};\n\nreturn msg;","outputs":1,"noerr":0,"x":190,"y":320,"wires":[["316645d2.62236a"]]},{"id":"64b4ef54.aefef","type":"function","z":"9e770b5e.116dd8","name":"Control Gate","func":"if (msg.topic == \"sun\") {\n if (msg.payload == 1) {\n msg.topic = \"control\";\n msg.payload = \"open\"\n }\n else {\n msg.topic = \"control\";\n msg.payload = \"close\";\n }\n}\nreturn msg;","outputs":1,"noerr":0,"x":630,"y":320,"wires":[["5330841a.345f84"]]},{"id":"dae8628.8d105a","type":"throttle","z":"9e770b5e.116dd8","name":"30 Minutes Request","throttleType":"time","timeLimit":"30","timeLimitType":"minutes","countLimit":0,"blockSize":0,"locked":false,"x":420,"y":240,"wires":[["5330841a.345f84"]]},{"id":"89347627.7f4218","type":"function","z":"9e770b5e.116dd8","name":"To Domoticz","func":"// Declarations\n\nvar msg1 ={}; // UV sensor value\nvar msg2 ={}; // UV alert\nvar msg3 ={}; // Max UV\nvar msg4 ={}; // Ozone\nvar msg5 ={}; // Max. Exposure Time\n\n// Function to covert UV index to level\n\nfunction uvi2level(x) {\n\nif (x < 3) {\n return 0;\n} else if (x < 6) {\n return 1;\n} else if (x < 8 ) {\n return 2;\n} else if (x < 11 ) {\n return 3; \n} else {\n return 4;\n}\n}\n\nmsg1.payload = {\"command\":\"udevice\",\"idx\":397,\"nvalue\":0,\"svalue\":msg.payload.result.uv.toFixed(1).toString() + \";0\"};\nmsg2.payload = {\"command\":\"udevice\",\"idx\":398,\"nvalue\":uvi2level(msg.payload.result.uv),\"svalue\":msg.payload.result.uv.toFixed(1).toString() + \" UVI\"};\nmsg3.payload = {\"command\":\"udevice\",\"idx\":399,\"nvalue\":uvi2level(msg.payload.result.uv_max),\"svalue\":msg.payload.result.uv_max.toFixed(1).toString() + \" UVI\" + \"\\n\" + msg.payload.result.uv_max_time};\nmsg4.payload = {\"command\":\"udevice\",\"idx\":400,\"nvalue\":0,\"svalue\":msg.payload.result.ozone.toString()};\nmsg5.payload = {\"command\":\"udevice\",\"idx\":401,\"nvalue\":0,\"svalue\":msg.payload.result.safe_exposure_time.st3.toString()};\nreturn [[msg1,msg2,msg3,msg4,msg5]];\n","outputs":1,"noerr":0,"x":910,"y":100,"wires":[["abf23830.25a0e"]]},{"id":"abf23830.25a0e","type":"mqtt out","z":"9e770b5e.116dd8","name":"Domoticz In","topic":"domoticz/in","qos":"2","retain":"false","broker":"f9f13036.e28b58","x":1110,"y":100,"wires":[]},{"id":"37c920a1.f16b28","type":"moment","z":"9e770b5e.116dd8","name":"","topic":"","input":"payload.result.uv_max_time","inputType":"msg","inTz":"Europe/Amsterdam","adjAmount":0,"adjType":"days","adjDir":"add","format":"DD-MM-YYYY HH:mm:ss","locale":"en_US","output":"payload.result.uv_max_time","outputType":"msg","outTz":"Europe/Amsterdam","x":680,"y":100,"wires":[["89347627.7f4218"]]},{"id":"b8e9b258.69a9","type":"comment","z":"9e770b5e.116dd8","name":"Fitzpatrick Skin Types","info":"See: https://www.openuv.io/kb/skin-types-safe-exposure-time-calculation\n\n1. Very fair skin, white; red or blond hair; light-colored eyes; freckles likely\n2. Fair skin, white; light eyes; light hair\n3. Fair skin, cream white; any eye or hair color (very common skin type)\n4. Olive skin, typical Mediterranean Caucasian skin; dark brown hair; medium to heavy pigmentation\n5. Brown skin, typical Middle Eastern skin; dark hair; rarely sun sensitive\n6. Black skin; rarely sun sensitive","x":920,"y":60,"wires":[]},{"id":"8a6230df.26add","type":"function","z":"9e770b5e.116dd8","name":"Prepare URL OpenUV","func":"var url = \"https://api.openuv.io/api/v1/uv\";\nvar lat = msg.payload.lat || \"52.179281\";\nvar lng = msg.payload.lon || \"5.606528\";\nvar alt = msg.payload.alt || \"15\";\nmsg.url = url + \"?lat=\" + lat + \"&lng=\" + lng + \"&alt=\" + alt;\nmsg.headers = {};\nmsg.headers[\"x-access-token\"] = \"token\";\n\nreturn msg;","outputs":1,"noerr":0,"x":220,"y":420,"wires":[[]]},{"id":"8591549f.77809","type":"mqtt-broker","z":"","name":"MQTT_Server","broker":"192.168.10.24","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"f9f13036.e28b58","type":"mqtt-broker","z":"","name":"RPI1_ MQTT_Broker","broker":"192.168.10.51","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]