|
| 1 | +///////// <version>1.0.0</version> |
| 2 | +///////// CSI1 ///////////// |
| 3 | +///////// Plugin to extract Canadian Solar data for Toon /////////////// |
| 4 | +///////// By Oepi-Loepi /////////////// |
| 5 | + |
| 6 | + |
| 7 | +function getSolarData(passWord,userName,apiKey,siteid,urlString,totalValue){ |
| 8 | + if (debugOutput) console.log("*********SolarPanel Start getSolarData") |
| 9 | + var data = "value=" + passWord; |
| 10 | + |
| 11 | + var xhr = new XMLHttpRequest(); |
| 12 | + xhr.open("POST", "https://tools.keycdn.com/sha256-online-generator"); |
| 13 | + xhr.setRequestHeader("Host", "tools.keycdn.com"); |
| 14 | + xhr.setRequestHeader("Connection", "keep-alive"); |
| 15 | + xhr.setRequestHeader("Cache-Control", "max-age=0"); |
| 16 | + xhr.setRequestHeader("sec-ch-ua", "\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\""); |
| 17 | + xhr.setRequestHeader("sec-ch-ua-mobile", "?0"); |
| 18 | + xhr.setRequestHeader("sec-ch-ua-platform", "\"Windows\""); |
| 19 | + xhr.setRequestHeader("Upgrade-Insecure-Requests", "1"); |
| 20 | + xhr.setRequestHeader("Origin", "https://tools.keycdn.com"); |
| 21 | + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
| 22 | + xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"); |
| 23 | + xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); |
| 24 | + xhr.setRequestHeader("Sec-Fetch-Site", "same-origin"); |
| 25 | + xhr.setRequestHeader("Sec-Fetch-Mode", "navigate"); |
| 26 | + xhr.setRequestHeader("Sec-Fetch-User", "?1"); |
| 27 | + xhr.setRequestHeader("Sec-Fetch-Dest", "document"); |
| 28 | + xhr.setRequestHeader("Referer", "https://tools.keycdn.com/sha256-online-generator"); |
| 29 | + xhr.setRequestHeader("Accept-Encoding", "gzip, deflate, br"); |
| 30 | + xhr.setRequestHeader("Accept-Language", "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7"); |
| 31 | + |
| 32 | + xhr.onreadystatechange = function() { // Call a function when the state changes. |
| 33 | + if (xhr.readyState == XMLHttpRequest.DONE) { |
| 34 | + if (xhr.status === 200 || xhr.status === 300 || xhr.status === 302) { |
| 35 | + try { |
| 36 | + if (debugOutput) console.log(xhr.responseText) |
| 37 | + var begin = xhr.responseText.indexOf("<code class=\"language-none\">") + "<code class=\"language-none\">".length |
| 38 | + var end = xhr.responseText.indexOf("<",begin) |
| 39 | + var sha256 = xhr.responseText.substring(begin, end).trim() |
| 40 | + if (debugOutput) console.log("sha2 encrypted: " +sha256) |
| 41 | + getStep2(sha256, passWord, userName) |
| 42 | + } catch (e){ |
| 43 | + currentPower = 0 |
| 44 | + parseReturnData(0,totalValue,todayValue,0,0,0,0, xhr.status,"error") |
| 45 | + } |
| 46 | + } else { |
| 47 | + parseReturnData(currentPower,totalValue,0,0,0,0,0, xhr.status,"error") |
| 48 | + } |
| 49 | + } |
| 50 | + } |
| 51 | + xhr.send(data); |
| 52 | +} |
| 53 | + |
| 54 | +function getStep2(sha256, passWord2, userName2){ |
| 55 | + if (debugOutput) console.log("*********SolarPanel Start getStep2") |
| 56 | + //userName2 = userName2.replace('@', '83@') |
| 57 | + if (debugOutput) console.log("*********SolarPanel encodeURIComponent(userName2): " + encodeURIComponent(userName2)) |
| 58 | + var data = "grant_type=password&username=" + encodeURIComponent(userName2) + "&clear_text_pwd=" + encodeURIComponent(passWord2) + "&password=" + encodeURIComponent(sha256) + "&identity_type=2&client_id=test" |
| 59 | + |
| 60 | + if (debugOutput) console.log(data) |
| 61 | + var xhr = new XMLHttpRequest(); |
| 62 | + xhr.open("POST", "https://monitoring.csisolar.com/home/oauth-s/oauth/token"); |
| 63 | + xhr.setRequestHeader("Host", "monitoring.csisolar.com"); |
| 64 | + xhr.setRequestHeader("Connection", "keep-alive"); |
| 65 | + xhr.setRequestHeader("sec-ch-ua", "\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\""); |
| 66 | + xhr.setRequestHeader("Pragma", "no-cache"); |
| 67 | + xhr.setRequestHeader("sec-ch-ua-mobile", "?0"); |
| 68 | + xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"); |
| 69 | + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
| 70 | + xhr.setRequestHeader("Accept", "application/json, text/plain, */*"); |
| 71 | + xhr.setRequestHeader("Cache-Control", "no-cache"); |
| 72 | + xhr.setRequestHeader("sec-ch-ua-platform", "\"Windows\""); |
| 73 | + xhr.setRequestHeader("Origin", "https://monitoring.csisolar.com"); |
| 74 | + xhr.setRequestHeader("Sec-Fetch-Site", "same-origin"); |
| 75 | + xhr.setRequestHeader("Sec-Fetch-Mode", "cors"); |
| 76 | + xhr.setRequestHeader("Sec-Fetch-Dest", "empty"); |
| 77 | + xhr.setRequestHeader("Referer", "https://monitoring.csisolar.com/home/login"); |
| 78 | + xhr.setRequestHeader("Accept-Encoding", "gzip, deflate, br"); |
| 79 | + xhr.setRequestHeader("Accept-Language", "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7"); |
| 80 | + xhr.onreadystatechange = function() { // Call a function when the state changes. |
| 81 | + if (debugOutput) console.log(xhr.readyState) |
| 82 | + if (xhr.readyState == XMLHttpRequest.DONE) { |
| 83 | + if (debugOutput) console.log(xhr.status) |
| 84 | + if (xhr.status === 200 || xhr.status === 300 || xhr.status === 302) { |
| 85 | + try { |
| 86 | + if (debugOutput) console.log(xhr.responseText) |
| 87 | + var JsonString = xhr.responseText |
| 88 | + var JsonObject= JSON.parse(JsonString) |
| 89 | + var token = JsonObject.access_token |
| 90 | + if (debugOutput) console.log("token : " + token) |
| 91 | + getStep3(token) |
| 92 | + } |
| 93 | + catch (e){ |
| 94 | + currentPower = 0 |
| 95 | + parseReturnData(0,totalValue,todayValue,0,0,0,0, xhr.status,"error") |
| 96 | + } |
| 97 | + } else { |
| 98 | + parseReturnData(currentPower,totalValue,0,0,0,0,0, xhr.status,"error") |
| 99 | + } |
| 100 | + } |
| 101 | + } |
| 102 | + xhr.send(data); |
| 103 | +} |
| 104 | + |
| 105 | +function getStep3(token){ |
| 106 | + if (debugOutput) console.log("*********SolarPanel Start getStep3") |
| 107 | + var data = "{}"; |
| 108 | + var xhr = new XMLHttpRequest(); |
| 109 | + xhr.withCredentials = true; |
| 110 | + xhr.open("POST", "https://monitoring.csisolar.com/home/maintain-s/operating/station/search?order.direction=DESC&order.property=id&page=1&size=20"); |
| 111 | + xhr.setRequestHeader("Host", "monitoring.csisolar.com"); |
| 112 | + xhr.setRequestHeader("Connection", "keep-alive"); |
| 113 | + xhr.setRequestHeader("sec-ch-ua", "\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\""); |
| 114 | + xhr.setRequestHeader("Pragma", "no-cache"); |
| 115 | + xhr.setRequestHeader("sec-ch-ua-mobile", "?0"); |
| 116 | + xhr.setRequestHeader("Authorization", "Bearer " + token); |
| 117 | + xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); |
| 118 | + xhr.setRequestHeader("Accept", "application/json, text/plain, */*"); |
| 119 | + xhr.setRequestHeader("Cache-Control", "no-cache"); |
| 120 | + xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"); |
| 121 | + xhr.setRequestHeader("sec-ch-ua-platform", "\"Windows\""); |
| 122 | + xhr.setRequestHeader("Origin", "https://monitoring.csisolar.com"); |
| 123 | + xhr.setRequestHeader("Sec-Fetch-Site", "same-origin"); |
| 124 | + xhr.setRequestHeader("Sec-Fetch-Mode", "cors"); |
| 125 | + xhr.setRequestHeader("Sec-Fetch-Dest", "empty"); |
| 126 | + xhr.setRequestHeader("Referer", "https://monitoring.csisolar.com/home/plant/infos/data"); |
| 127 | + xhr.setRequestHeader("Accept-Encoding", "gzip, deflate, br"); |
| 128 | + xhr.setRequestHeader("Accept-Language", "nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7"); |
| 129 | + xhr.onreadystatechange = function() { // Call a function when the state changes. |
| 130 | + if (xhr.readyState == XMLHttpRequest.DONE) { |
| 131 | + if (xhr.status === 200 || xhr.status === 300 || xhr.status === 302) { |
| 132 | + try { |
| 133 | + console.log(xhr.responseText) |
| 134 | + var JsonString = xhr.responseText |
| 135 | + var JsonObject= JSON.parse(JsonString) |
| 136 | + var today2 |
| 137 | + currentPower = parseInt(JsonObject.data[0].generationPower) |
| 138 | + if(currentPower<20)currentPower = 0 |
| 139 | + today2 = parseInt(JsonObject.data[0].generationValue) |
| 140 | + totalValue = parseInt(JsonObject.data[0].generationTotal) |
| 141 | + parseReturnData(currentPower,totalValue,today2,0,0,0,0,xhr.status,"succes") |
| 142 | + } |
| 143 | + catch (e){ |
| 144 | + currentPower = 0 |
| 145 | + parseReturnData(0,totalValue,todayValue,0,0,0,0, xhr.status,"error") |
| 146 | + } |
| 147 | + } else { |
| 148 | + parseReturnData(currentPower,totalValue,0,0,0,0,0, xhr.status,"error") |
| 149 | + } |
| 150 | + } |
| 151 | + } |
| 152 | + xhr.send(data); |
| 153 | +} |
0 commit comments