Last active
June 8, 2020 04:36
-
-
Save power-guard/eb9ec300ce33b7ef18ec317ced081c59 to your computer and use it in GitHub Desktop.
Sample implementation of NetEco OpenAPI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * This example demonstrates how to retrieve a list of plants | |
| * from an iManager NetEco server. The username and password | |
| * should be generated by the server administrator in the | |
| * User Management menu. | |
| * | |
| * @author Dan Liberatori <dan.liberatori@power-guard.jp> | |
| */ | |
| const https = require('https'); | |
| const axios = require('axios'); | |
| // as per NetEco OpenAPI documentation | |
| const httpsAgent = new https.Agent({rejectUnauthorized: false}); | |
| const HOST = '127.0.0.1'; | |
| const PORT = 27200; | |
| const user = 'username'; | |
| const pw = 'password'; | |
| const BASEURL = `https://${HOST}:${PORT}/openApi`; | |
| let openApiroarand = null; // authentication token | |
| let sessionCookie = null; | |
| console.log('Starting test...'); | |
| login() | |
| .then(handleLogin) | |
| .then(getPlantList) | |
| .then(handlePlantList) | |
| .then(logout) | |
| .then(handleLogout) | |
| .catch((err) => console.error(err)); | |
| function login() { | |
| return axios.request({ | |
| url: `${BASEURL}/login?userName=${user}&password=${pw}`, | |
| method: 'post', | |
| httpsAgent, | |
| }); | |
| } | |
| function handleLogin(res) { | |
| return new Promise((resolve, reject) => { | |
| console.log('Got response from server.'); | |
| // get the auth token | |
| const {data} = res; | |
| if (Number(data.errorMsg) !== 0) { | |
| console.error(`The server returned an error code. errorMsg=${data.errorMsg}`); | |
| console.log(res); | |
| reject('Login error.'); | |
| return; | |
| } | |
| openApiroarand = data.openApiroarand; | |
| // we also need the JSESSIONID cookie value | |
| const cookies = res.headers['set-cookie']; | |
| for (let cookieString of cookies) { | |
| const cookieArr = cookieString.split(';'); | |
| const filtered = cookieArr.filter(x => /^JSESSIONID=/.test(x)); | |
| if (filtered.length > 0) { | |
| sessionCookie = filtered[0]; | |
| } | |
| } | |
| if (sessionCookie === null) { | |
| console.error('Could not find JSESSIONID cookie.'); | |
| console.log(res); | |
| reject('Login error'); | |
| return; | |
| } | |
| console.log(`Logged in with auth token '${openApiroarand}' and session cookie '${sessionCookie}'`); | |
| resolve('Logged in.'); | |
| }); | |
| } | |
| function getPlantList() { | |
| return axios.request({ | |
| url: `${BASEURL}/queryPlantList?openApiroarand=${openApiroarand}`, | |
| method: 'post', | |
| httpsAgent, | |
| headers: { Cookie: sessionCookie }, | |
| }); | |
| } | |
| function handlePlantList(res) { | |
| return new Promise((resolve, reject) => { | |
| console.log('Received plant list response.'); | |
| const {data} = res; | |
| const {errorMsg, resultData} = data; | |
| if (errorMsg !== undefined && Number(errorMsg) !== 0) { | |
| console.error('Plant list response contains error.'); | |
| console.log(res); | |
| reject('Plant list response contains error.'); | |
| return; | |
| } | |
| if (resultData.length > 0) { | |
| const plantList = JSON.parse(resultData); | |
| console.log('Got plant list.'); | |
| for (let plant of plantList) { | |
| // totalStringPower | |
| // income | |
| // totalRate | |
| // currentPower | |
| // specificEnergy | |
| // totalEnergy | |
| // plantid | |
| // inverterNum | |
| // co2reduce | |
| // plantName | |
| // dayEnergy | |
| console.log(`${plant.plantid}, ${plant.currentPower}, ${plant.income}`); | |
| } | |
| } else { | |
| console.log('Received empty plant list.'); | |
| } | |
| resolve('handlePlantList OK'); | |
| }); | |
| } | |
| function logout() { | |
| return axios.request({ | |
| url: `${BASEURL}/logout?openApiroarand=${openApiroarand}`, | |
| method: 'post', | |
| httpsAgent, | |
| headers: { Cookie: sessionCookie }, | |
| }); | |
| } | |
| function handleLogout(res) { | |
| return new Promise((resolve, reject) => { | |
| const {data} = res; | |
| const {errorMsg} = data; | |
| if (Number(errorMsg) !== 0) { | |
| console.error('Unable to log out.'); | |
| console.log(res); | |
| reject('Unable to log out.'); | |
| return; | |
| } | |
| console.log('Logged out successfuly.'); | |
| resolve('Logged out OK.'); | |
| }); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment