OMV 7 Control from Node-RED
This flow is based on : https://flows.nodered.org/flow/59251bdbaae540640c5e0b6f2959a1c6 Created by: oksbwn
Reworked to work with the new omv 7.
[{"id":"fc5b67ddec4d44b3","type":"tab","label":"Open Media Vault","disabled":false,"info":"","env":[{"name":"username","value":"admin","type":"str"},{"name":"password","type":"cred"},{"name":"url","value":"192.168.0.0","type":"str"},{"name":"isSSL","value":"false","type":"bool"}]},{"id":"07c14fcefbbc8ef0","type":"group","z":"fc5b67ddec4d44b3","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["42aabe312f85166b","b462b141711dc8b9","069cbf9aa9737bb9","5e830760495ac684","a76e607bfaad6df7","d5dc94f59e265b67","d9eb63db549f8a26","bd7e0b1c88cb6fa8","ffb3cb0ac92452c4","2d4ceb80b1f48c3c","c00cdc048159ae15","54705525a089e546","014ffe33ce8ac82f"],"x":54,"y":39,"w":1092,"h":202},{"id":"9d02bb13a6093667","type":"group","z":"fc5b67ddec4d44b3","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["f746a74b39398e4f","8e46bb3e1b991dee","78f9b0459503c8e9","f35ce4bd29e567f9","7af9cec876b44f1c","1664605d1e5bad08","752122a354f0fbd2","1dce9cc0f0a269a1","3869318d53932dbf","ab3a7a315d5bddb3","3ed1cdd4319d39bb","9d65d8079235e61f","14128b1e36fbe9d8","1bde2d212c566d85","4a3a04dba9aa6737"],"x":54,"y":259,"w":1512,"h":222},{"id":"f3e38f8d1093721c","type":"group","z":"fc5b67ddec4d44b3","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["24c120fbc0b30ac2","14723cb8a29f66f7","2839a54ab4e6f1e5"],"x":54,"y":499,"w":392,"h":122},{"id":"42aabe312f85166b","type":"http request","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":550,"y":140,"wires":[["d9eb63db549f8a26"]]},{"id":"b462b141711dc8b9","type":"inject","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"10 Mins","props":[],"repeat":"600","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":160,"y":80,"wires":[["a76e607bfaad6df7"]]},{"id":"069cbf9aa9737bb9","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Set Params","func":"let url = (env.get(\"isSSL\") ? \"https://\" : \"http://\") + env.get(\"url\") + \"/rpc.php\";\n\nlet sessionKey = flow.get(\"SESSION_KEY\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nif(!sessionKey)\n throw(\"Session key is empty.\");\n\nmsg.headers = {\n \"X-OPENMEDIAVAULT-SESSIONID\" : sessionKey\n}\nmsg.payload = { \"service\": \"FileSystemMgmt\", \"method\":\"enumerateFilesystems\" , \"params\": \"\"}\nmsg.url = url;\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":350,"y":140,"wires":[["42aabe312f85166b"]]},{"id":"5e830760495ac684","type":"http request","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":550,"y":80,"wires":[["d5dc94f59e265b67"]]},{"id":"a76e607bfaad6df7","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Set Creds","func":"let username = env.get(\"username\");\nlet password = env.get(\"password\");\nlet url = (env.get(\"isSSL\") ? \"https://\" : \"http://\")+env.get(\"url\") +\"/rpc.php\";\nif (!username || !password)\n throw (\"Username or Password is empty!!.\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nmsg.url = url;\nmsg.payload = {\n \"service\": \"Session\",\n \"method\": \"login\",\n \"params\": {\n \"username\": username,\n \"password\": password\n }\n}\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":80,"wires":[["5e830760495ac684"]]},{"id":"d5dc94f59e265b67","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Save Session Key","func":"if (msg.responseCookies){\n var sessionKey = msg.payload.response.sessionid;\n if(!sessionKey || msg.statusCode !== 200){\n throw(\"Server did not respond with Session Key.\");\n }\n else{\n flow.set(\"SESSION_KEY\", sessionKey);\n }\n}\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":80,"wires":[["069cbf9aa9737bb9","ffb3cb0ac92452c4"]]},{"id":"d9eb63db549f8a26","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Parse","func":"var data = msg.payload;\n\nif (!!data.response) {\n msg.payload = data.response.map((e) => {\n if (e.size == -1)\n return null;\n return [{\n \"available\": Number(e.available),\n \"size\": Number(e.size),\n \"percentage\": Number(e.percentage)\n },{\n \"mountpoint\": e.mountpoint,\n \"name\": e.devicename,\n \"type\": e.type,\n }\n ]\n });\n\n return msg\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":140,"wires":[["bd7e0b1c88cb6fa8"]]},{"id":"bd7e0b1c88cb6fa8","type":"split","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":890,"y":180,"wires":[["014ffe33ce8ac82f"]]},{"id":"ffb3cb0ac92452c4","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Set Params","func":"let url = (env.get(\"isSSL\") ? \"https://\" : \"http://\") + env.get(\"url\") + \"/rpc.php\";\n\nlet sessionKey = flow.get(\"SESSION_KEY\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nif(!sessionKey)\n throw(\"Session key is empty.\");\n\nmsg.headers = {\n \"X-OPENMEDIAVAULT-SESSIONID\": sessionKey\n}\nmsg.payload = { \"service\": \"system\", \"method\":\"getInformation\" , \"params\": \"\"}\nmsg.url = url;\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":350,"y":200,"wires":[["2d4ceb80b1f48c3c"]]},{"id":"2d4ceb80b1f48c3c","type":"http request","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":550,"y":200,"wires":[["c00cdc048159ae15"]]},{"id":"c00cdc048159ae15","type":"function","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Parse","func":"var data = msg.payload.response;\nif(data){\n msg.payload = [[\n {\n \"available\": Number(data.memFree),\n \"size\": Number(data.memTotal),\n \"percentage\": Number(data.memUtilization) * 100\n },\n {\n \"name\": \"RAM\",\n }\n ], [\n {\n \"percentage\": Number(data.cpuUsage) * 100,\n },\n {\n \"name\": \"CPU\",\n }\n ]\n ]\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":200,"wires":[["bd7e0b1c88cb6fa8"]]},{"id":"f746a74b39398e4f","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Set Params","func":"let url = (env.get(\"isSSL\") ? \"https://\" : \"http://\") + env.get(\"url\") + \"/rpc.php\";\n\nlet sessionKey = flow.get(\"SESSION_KEY\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nif(!sessionKey)\n throw(\"Session key is empty.\");\n\nmsg.headers = {\n \"X-OPENMEDIAVAULT-SESSIONID\": sessionKey\n}\nmsg.payload = { \"service\": \"system\", \"method\": \"reboot\", \"params\": {\"delay\": 1}}\nmsg.url = url;\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":320,"wires":[["8e46bb3e1b991dee"]]},{"id":"8e46bb3e1b991dee","type":"http request","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":1110,"y":380,"wires":[["7af9cec876b44f1c"]]},{"id":"78f9b0459503c8e9","type":"http response","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"","statusCode":"","headers":{},"x":1450,"y":320,"wires":[]},{"id":"f35ce4bd29e567f9","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Set Params","func":"let url = (env.get(\"isSSL\") ? \"https://\" : \"http://\") + env.get(\"url\") + \"/rpc.php\";\n\nlet sessionKey = flow.get(\"SESSION_KEY\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nif(!sessionKey)\n throw(\"Session key is empty.\");\n\nmsg.headers = {\n \"X-OPENMEDIAVAULT-SESSIONID\": sessionKey\n}\nmsg.payload = { \"service\": \"system\", \"method\": \"shutdown\", \"params\": {\"delay\": 1}}\nmsg.url = url;\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":400,"wires":[["8e46bb3e1b991dee"]]},{"id":"24c120fbc0b30ac2","type":"catch","z":"fc5b67ddec4d44b3","g":"f3e38f8d1093721c","name":"HTTP Errors","scope":["42aabe312f85166b","5e830760495ac684","2d4ceb80b1f48c3c","8e46bb3e1b991dee"],"uncaught":false,"x":150,"y":540,"wires":[["14723cb8a29f66f7"]]},{"id":"14723cb8a29f66f7","type":"debug","z":"fc5b67ddec4d44b3","g":"f3e38f8d1093721c","name":"debug 7","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":340,"y":540,"wires":[]},{"id":"7af9cec876b44f1c","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Status Code","func":"if(msg.statusCode == \"EHOSTUNREACH\"){\n msg.statusCode = 509;\n msg.payload= {\n error: \"OMV Server not reachable.\",\n timestamp: new Date()\n }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1290,"y":380,"wires":[["78f9b0459503c8e9","14128b1e36fbe9d8"]]},{"id":"1664605d1e5bad08","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Set Creds","func":"let username = env.get(\"username\");\nlet password = env.get(\"password\");\nlet url = (env.get(\"isSSL\") ? \"https://\" : \"http://\")+env.get(\"url\") +\"/rpc.php\";\nif (!username || !password)\n throw (\"Username or Password is empty!!.\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nmsg.url = url;\nmsg.payload = {\n \"service\": \"Session\",\n \"method\": \"login\",\n \"params\": {\n \"username\": username,\n \"password\": password\n }\n}\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":320,"wires":[["752122a354f0fbd2"]]},{"id":"752122a354f0fbd2","type":"http request","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":530,"y":320,"wires":[["1dce9cc0f0a269a1"]]},{"id":"1dce9cc0f0a269a1","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Save Session Key","func":"if (msg.responseCookies){\n var sessionKey = msg.responseCookies['X-OPENMEDIAVAULT-SESSIONID'].value;\n if(!sessionKey || msg.statusCode !== 200){\n throw(\"Server did not respond with Session Key.\");\n }\n else{\n flow.set(\"SESSION_KEY\", sessionKey);\n }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":320,"wires":[["f746a74b39398e4f"]]},{"id":"3869318d53932dbf","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Set Creds","func":"let username = env.get(\"username\");\nlet password = env.get(\"password\");\nlet url = (env.get(\"isSSL\") ? \"https://\" : \"http://\")+env.get(\"url\") +\"/rpc.php\";\nif (!username || !password)\n throw (\"Username or Password is empty!!.\");\n\nif (!url)\n throw (\"Please provide the URL.\");\n\nmsg.url = url;\nmsg.payload = {\n \"service\": \"Session\",\n \"method\": \"login\",\n \"params\": {\n \"username\": username,\n \"password\": password\n }\n}\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":400,"wires":[["ab3a7a315d5bddb3"]]},{"id":"ab3a7a315d5bddb3","type":"http request","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"http","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":530,"y":400,"wires":[["3ed1cdd4319d39bb"]]},{"id":"3ed1cdd4319d39bb","type":"function","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Save Session Key","func":"if (msg.responseCookies){\n var sessionKey = msg.payload.response.sessionid;\n if(!sessionKey || msg.statusCode !== 200){\n throw(\"Server did not respond with Session Key.\");\n }\n else{\n flow.set(\"SESSION_KEY\", msg.payload.response.sessionid);\n }\n}\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":400,"wires":[["f35ce4bd29e567f9"]]},{"id":"54705525a089e546","type":"comment","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"Fetch metrices every 10 mins","info":"","x":1000,"y":80,"wires":[]},{"id":"9d65d8079235e61f","type":"comment","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"REST API to shutdown or reboot","info":"","x":1210,"y":300,"wires":[]},{"id":"2839a54ab4e6f1e5","type":"comment","z":"fc5b67ddec4d44b3","g":"f3e38f8d1093721c","name":"Catch All Errors","info":"","x":160,"y":580,"wires":[]},{"id":"14128b1e36fbe9d8","type":"debug","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"debug 8","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1460,"y":440,"wires":[]},{"id":"1bde2d212c566d85","type":"inject","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Shutdown","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":160,"y":400,"wires":[["3869318d53932dbf"]]},{"id":"014ffe33ce8ac82f","type":"debug","z":"fc5b67ddec4d44b3","g":"07c14fcefbbc8ef0","name":"debug 9","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1040,"y":180,"wires":[]},{"id":"4a3a04dba9aa6737","type":"inject","z":"fc5b67ddec4d44b3","g":"9d02bb13a6093667","name":"Reboot","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":150,"y":320,"wires":[["1664605d1e5bad08"]]}]