From 52749becd8c29a29183f27fd6dc115eebca5cb85 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 12:03:36 +0200 Subject: [PATCH 01/29] Update main.js --- main.js | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 207 insertions(+), 4 deletions(-) diff --git a/main.js b/main.js index 57ca1a7..bb726a3 100644 --- a/main.js +++ b/main.js @@ -32,7 +32,7 @@ request( var data=CSVToArray(content); //CSV in ein Array einlesen // User Variablen anlegen Achtung keine Punkte im Namen verwenden. - var i=0; + /* var i=0; for (i=0; i<=41;i++){ adapter.setObjectNotExists(data[1][i], { type: 'state', @@ -46,6 +46,156 @@ request( }, }); } + //########################### hier neu + */ + var i=16; + + for (i=16; i<=23;i++){ + adapter.setObjectNotExists('visButtons.Relais'+[i-16],'', { + name: data[1][i], + type: 'number', + write: true, + read: true + }); + } + i=28; + for (i=28; i<=35;i++){ + adapter.setObjectNotExists('visButtons.Relais'+[i-20],'', { + name: data[1][i], + type: 'number', + write: true, + read: true + }); + } + i=0; + for (i=0; i<=41;i++){ + if (i===0){ + adapter.setObjectNotExists(data[1][i],'', { + name: data[1][i], + type: 'string', + write: false, + read: true + }); + } + if (i>=1 && i<=5){ + adapter.setObjectNotExists('ADC'+[i-1],'', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===6){ + adapter.setObjectNotExists('Redox', { + name: data[1][i], + type: 'number', + unit: jdata[2][i], + write: false, + read: true + }); + } + if (i===7){ + adapter.setObjectNotExists('pH', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i>=8 && i<=15){ + adapter.setObjectNotExists('Temperatur'+[i-7],'', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i>=16 && i<=23){ + adapter.setObjectNotExists('Relais'+[i-16],'', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i>=24 && i<=27){ + adapter.setObjectNotExists('Digital_Input'+[i-23],'', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i>=28 && i<=35){ + adapter.setObjectNotExists('Relais'+[i-20],'', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===36){ + adapter.setObjectNotExists('CL_Rest', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===37){ + adapter.setObjectNotExists('pH-_Rest', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===38){ + adapter.setObjectNotExists('pH+_Rest', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===39){ + adapter.setObjectNotExists('Cl_consumption', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===40){ + adapter.setObjectNotExists('pH-_consumption', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + if (i===41){ + adapter.setObjectNotExists('pH+_consumption', { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }); + } + } + //SYSINFO Variablen mit aktuellen Werten beschreiben adapter.setState('sysinfo.VERSION', data[0][1]); @@ -68,9 +218,62 @@ request( var gain = parseFloat(data[4][i]); var value = parseFloat(data[5][i]); var wert = offset + ( gain * value); - adapter.setState(data[1][i], parseFloat(Number(wert).toFixed(2))); - } - + // adapter.setState(data[1][i], parseFloat(Number(wert).toFixed(2))); + //} + + if (i===0) { + wert = ((wert>>8)<10?0:'')+''+(wert>>8)+':'+((wert&0xFF)<10?0:'')+''+(wert&0xFF); + /** var hour = (wert/256).toFixed(0); + var minute = (wert%256).toFixed(0); + if (minute <10){ + wert = (hour+':0'+minute); + } + else{ + wert = (hour+':'+minute); + }*/ + adapter.setState('Time',wert); + } + if (i>=1 && i<=5){ + adapter.setState('ADC'+[i-1], parseFloat(Number(wert).toFixed(2))); + } + if (i===6){ + adapter.setState('Redox', parseFloat(Number(wert).toFixed(2))); + } + if (i===7){ + adapter.setState('pH', parseFloat(Number(wert).toFixed(2))); + } + if (i>=8 && i<=15){ + adapter.setState('Temperatur'+[i-7], parseFloat(Number(wert).toFixed(2))); + } + if (i>=16 && i<=23){ + adapter.setState('Relais'+[i-16], parseFloat(Number(wert).toFixed(2))); + } + if (i>=24 && i<=27){ + adapter.setState('Digital_Input'+[i-23], parseFloat(Number(wert).toFixed(2))); + } + if (i>=28 && i<=35){ + adapter.setState('Relais'+[i-20], parseFloat(Number(wert).toFixed(2))); + } + if (i===36){ + adapter.setState('CL_Rest', parseFloat(Number(wert).toFixed(2))); + } + if (i===37){ + adapter.setState('pH-_Rest', parseFloat(Number(wert).toFixed(2))); + } + if (i===38){ + adapter.setState('pH+_Rest', parseFloat(Number(wert).toFixed(2))); + } + if (i===39){ + adapter.setState('Cl_consumption', parseFloat(Number(wert).toFixed(2))); + } + if (i===40){ + adapter.setState('pH-_consumption', parseFloat(Number(wert).toFixed(2))); + } + if (i===41){ + adapter.setState('pH+_consumption', parseFloat(Number(wert).toFixed(2))); + } + } + } adapter.log.info("Variablen updated"); From 78f1efae89511f9f5d3bcccb49f2ead19b818251 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 12:17:40 +0200 Subject: [PATCH 02/29] Update main.js --- main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index bb726a3..a07278d 100644 --- a/main.js +++ b/main.js @@ -194,8 +194,8 @@ request( read: true }); } - } - + + //SYSINFO Variablen mit aktuellen Werten beschreiben adapter.setState('sysinfo.VERSION', data[0][1]); From f00023030f8bbb0369d45a72bbc2497513c64ae7 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 18:56:34 +0200 Subject: [PATCH 03/29] Update main.js --- main.js | 355 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 201 insertions(+), 154 deletions(-) diff --git a/main.js b/main.js index a07278d..cbdc8ed 100644 --- a/main.js +++ b/main.js @@ -49,154 +49,201 @@ request( //########################### hier neu */ var i=16; - - for (i=16; i<=23;i++){ - adapter.setObjectNotExists('visButtons.Relais'+[i-16],'', { - name: data[1][i], - type: 'number', - write: true, - read: true - }); - } - i=28; - for (i=28; i<=35;i++){ - adapter.setObjectNotExists('visButtons.Relais'+[i-20],'', { - name: data[1][i], - type: 'number', - write: true, - read: true - }); - } - i=0; - for (i=0; i<=41;i++){ - if (i===0){ - adapter.setObjectNotExists(data[1][i],'', { - name: data[1][i], - type: 'string', - write: false, - read: true - }); - } - if (i>=1 && i<=5){ - adapter.setObjectNotExists('ADC'+[i-1],'', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===6){ - adapter.setObjectNotExists('Redox', { - name: data[1][i], - type: 'number', - unit: jdata[2][i], - write: false, - read: true - }); - } - if (i===7){ - adapter.setObjectNotExists('pH', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i>=8 && i<=15){ - adapter.setObjectNotExists('Temperatur'+[i-7],'', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i>=16 && i<=23){ - adapter.setObjectNotExists('Relais'+[i-16],'', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i>=24 && i<=27){ - adapter.setObjectNotExists('Digital_Input'+[i-23],'', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i>=28 && i<=35){ - adapter.setObjectNotExists('Relais'+[i-20],'', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===36){ - adapter.setObjectNotExists('CL_Rest', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===37){ - adapter.setObjectNotExists('pH-_Rest', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===38){ - adapter.setObjectNotExists('pH+_Rest', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===39){ - adapter.setObjectNotExists('Cl_consumption', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===40){ - adapter.setObjectNotExists('pH-_consumption', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - if (i===41){ - adapter.setObjectNotExists('pH+_consumption', { - name: data[1][i], - type: 'number', - unit: data[2][i], - write: false, - read: true - }); - } - - - + for (i=16; i<=23;i++){ + adapter.setObjectNotExists('visButtons.Relais'+[i-16], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + write: true, + read: true + }, + }); + } + i=28; + for (i=28; i<=35;i++){ + adapter.setObjectNotExists('visButtons.Relais'+[i-20], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + write: true, + read: true + }, + }); + } + i=0; + for (i=0; i<=41;i++){ + if (i===0){ + adapter.setObjectNotExists(data[1][i], { + type: 'state', + common: { + name: data[1][i], + type: 'string', + write: false, + read: true + }, + }); + } + if (i>=1 && i<=5){ + adapter.setObjectNotExists('ADC'+[i-1], { + type: 'state', + common: { + + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===6){ + adapter.setObjectNotExists('Redox', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===7){ + adapter.setObjectNotExists('pH', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i>=8 && i<=15){ + adapter.setObjectNotExists('Temperatur'+[i-7], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i>=16 && i<=23){ + adapter.setObjectNotExists('Relais'+[i-16], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i>=24 && i<=27){ + adapter.setObjectNotExists('Digital_Input'+[i-23], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i>=28 && i<=35){ + adapter.setObjectNotExists('Relais'+[i-20], { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===36){ + adapter.setObjectNotExists('CL_Rest', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===37){ + adapter.setObjectNotExists('pH-_Rest', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===38){ + adapter.setObjectNotExists('pH+_Rest', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===39){ + adapter.setObjectNotExists('Cl_consumption', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===40){ + adapter.setObjectNotExists('pH-_consumption', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + if (i===41){ + adapter.setObjectNotExists('pH+_consumption', { + type: 'state', + common: { + name: data[1][i], + type: 'number', + unit: data[2][i], + write: false, + read: true + }, + }); + } + } + //SYSINFO Variablen mit aktuellen Werten beschreiben adapter.setState('sysinfo.VERSION', data[0][1]); adapter.setState('sysinfo.CPU_TIME', parseFloat(Number(data[0][2]).toFixed(2))); @@ -223,7 +270,7 @@ request( if (i===0) { wert = ((wert>>8)<10?0:'')+''+(wert>>8)+':'+((wert&0xFF)<10?0:'')+''+(wert&0xFF); - /** var hour = (wert/256).toFixed(0); + /* var hour = (wert/256).toFixed(0); var minute = (wert%256).toFixed(0); if (minute <10){ wert = (hour+':0'+minute); @@ -233,7 +280,8 @@ request( }*/ adapter.setState('Time',wert); } - if (i>=1 && i<=5){ + + if (i>=1 && i<=5){ adapter.setState('ADC'+[i-1], parseFloat(Number(wert).toFixed(2))); } if (i===6){ @@ -244,7 +292,7 @@ request( } if (i>=8 && i<=15){ adapter.setState('Temperatur'+[i-7], parseFloat(Number(wert).toFixed(2))); - } + } if (i>=16 && i<=23){ adapter.setState('Relais'+[i-16], parseFloat(Number(wert).toFixed(2))); } @@ -272,7 +320,8 @@ request( if (i===41){ adapter.setState('pH+_consumption', parseFloat(Number(wert).toFixed(2))); } - } + + } adapter.log.info("Variablen updated"); @@ -373,6 +422,4 @@ function CSVToArray( strData, strDelimiter ){ return( arrData ); } - - } From 169e3ef06020356331c0484ddf3c4735418fc254 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 18:57:38 +0200 Subject: [PATCH 04/29] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 698e92c..690e4b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iobroker.poolcontroller", - "version": "0.2.3", + "version": "0.2.4", "description": "ioBroker poolcontroller Adapter", "author": { "name": "Michael Voelker", From fba467849920af7d87a8b0d5c74bb85f6bed8533 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 19:00:00 +0200 Subject: [PATCH 05/29] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 00f32d6..df960ff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ This adapter is for reading values ​​from the pool controller. This pool controller is from www.pooldigital.de. A demo of the controller can be found at http://demo.poolcontroller.de/gui/phase2/ - +### 0.2.4 +* (SvenPeitz) rework main, correct time, get user data objects ### 0.2.3 * (MichaelVoelker) adaption main ### 0.2.2 From 5736d96281ec11a98b6c88c15bde9a48f7d63497 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 19:01:38 +0200 Subject: [PATCH 06/29] Update io-package.json --- io-package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/io-package.json b/io-package.json index 9bdfd00..f1f1d2c 100644 --- a/io-package.json +++ b/io-package.json @@ -1,8 +1,12 @@ { "common": { "name": "poolcontroller", - "version": "0.2.3", + "version": "0.2.4", "news": { + "0.2.4": { + "en": "extend main", + "de": "Erweiterung main" + }, "0.2.3": { "en": "adaption main", "de": "Anpassungen main" From 384b5e375226bc13747c04ea7cdc721652fa8ed2 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 19:04:23 +0200 Subject: [PATCH 07/29] Update io-package.json --- io-package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/io-package.json b/io-package.json index f1f1d2c..aa0206a 100644 --- a/io-package.json +++ b/io-package.json @@ -48,9 +48,9 @@ "icon": "poolcontroller.png", "materialize": true, "enabled": true, - "extIcon": "https://raw.githubusercontent.com/sucht3371/ioBroker.poolcontroller/master/admin/poolcontroller.png", + "extIcon": "https://raw.githubusercontent.com/svenp/ioBroker.poolcontroller/master/admin/poolcontroller.png", "keywords": ["poolcontroller", "smarthome", "pool", "pooldaten"], - "readme": "https://github.com/sucht3371/ioBroker.poolcontroller/blob/master/README.md", + "readme": "https://github.com/svenp/ioBroker.poolcontroller/blob/master/README.md", "loglevel": "info", "type": "general" }, From ed0073cabf58fda48c026150751a4ec28a8843eb Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 19:48:56 +0200 Subject: [PATCH 08/29] Update main.js --- main.js | 52 +++++++++------------------------------------------- 1 file changed, 9 insertions(+), 43 deletions(-) diff --git a/main.js b/main.js index cbdc8ed..2a50f44 100644 --- a/main.js +++ b/main.js @@ -32,22 +32,6 @@ request( var data=CSVToArray(content); //CSV in ein Array einlesen // User Variablen anlegen Achtung keine Punkte im Namen verwenden. - /* var i=0; - for (i=0; i<=41;i++){ - adapter.setObjectNotExists(data[1][i], { - type: 'state', - common: { - name: data[1][i], - type: 'number', - unit: data[2][i], - role: 'value', - write: false, - read: true - }, - }); - } - //########################### hier neu - */ var i=16; for (i=16; i<=23;i++){ adapter.setObjectNotExists('visButtons.Relais'+[i-16], { @@ -60,7 +44,7 @@ request( }, }); } - i=28; + i=28; for (i=28; i<=35;i++){ adapter.setObjectNotExists('visButtons.Relais'+[i-20], { type: 'state', @@ -255,33 +239,20 @@ request( adapter.setState('sysinfo.pH-_DOSAGE_RELAIS_ID', parseFloat(Number(data[0][8]).toFixed(2))); adapter.setState('sysinfo.Chlor_DOSAGE_RELAIS_ID', parseFloat(Number(data[0][9]).toFixed(2))); - - // User Variablen mit aktuellen Werten beschreiben - i=0; + i=0; for (i=0; i<=41;i++){ var wert = offset + ( gain * value); var offset = parseFloat(data[3][i]); var gain = parseFloat(data[4][i]); var value = parseFloat(data[5][i]); var wert = offset + ( gain * value); - // adapter.setState(data[1][i], parseFloat(Number(wert).toFixed(2))); - //} - - if (i===0) { - wert = ((wert>>8)<10?0:'')+''+(wert>>8)+':'+((wert&0xFF)<10?0:'')+''+(wert&0xFF); - /* var hour = (wert/256).toFixed(0); - var minute = (wert%256).toFixed(0); - if (minute <10){ - wert = (hour+':0'+minute); - } - else{ - wert = (hour+':'+minute); - }*/ - adapter.setState('Time',wert); - } - - if (i>=1 && i<=5){ + + if (i===0) { + wert = ((wert>>8)<10?0:'')+''+(wert>>8)+':'+((wert&0xFF)<10?0:'')+''+(wert&0xFF); + adapter.setState('Time',wert); + } + if (i>=1 && i<=5){ adapter.setState('ADC'+[i-1], parseFloat(Number(wert).toFixed(2))); } if (i===6){ @@ -320,13 +291,8 @@ request( if (i===41){ adapter.setState('pH+_consumption', parseFloat(Number(wert).toFixed(2))); } - - - } + } adapter.log.info("Variablen updated"); - - - } else { adapter.log.error(error); From e4b9e1439289a19d0a19b3b1460957e72d8de94a Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 19:57:36 +0200 Subject: [PATCH 09/29] Update main.js --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 2a50f44..0f9698e 100644 --- a/main.js +++ b/main.js @@ -301,7 +301,7 @@ request( ); setTimeout(function () { adapter.stop(); - }, 10000); + }, 20000); //########################################################################################### From e2fcd8a3d0a2e9412bc9399dcca4ea5253b6fc17 Mon Sep 17 00:00:00 2001 From: svenp Date: Thu, 25 Oct 2018 20:05:33 +0200 Subject: [PATCH 10/29] Update io-package.json --- io-package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io-package.json b/io-package.json index aa0206a..cdfa3a5 100644 --- a/io-package.json +++ b/io-package.json @@ -55,7 +55,7 @@ "type": "general" }, "native": { - "host": "", + "host": "192.168.0.100", "port": 80 }, From fe26a7a5bd312a5ee19655effb22aab7d4c1644e Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:44:43 +0100 Subject: [PATCH 11/29] add adapter-core --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 57ca1a7..bd300b1 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ 'use strict'; -var utils = require(__dirname + '/lib/utils'); // Get common adapter utils +var utils = require('@iobroker/adapter-core'); // Get common adapter utils var request = require('request'); var adapter = new utils.Adapter('poolcontroller'); From 6f8f6443705418a965ab8cf77708ea343ce8ab6f Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:44:43 +0100 Subject: [PATCH 12/29] remove utils.js --- lib/utils.js | 83 ---------------------------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 lib/utils.js diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index c8a0eb7..0000000 --- a/lib/utils.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); - -let controllerDir; -let appName; - -/** - * returns application name - * - * The name of the application can be different and this function finds it out. - * - * @returns {string} - */ - function getAppName() { - const parts = __dirname.replace(/\\/g, '/').split('/'); - return parts[parts.length - 2].split('.')[0]; -} - -/** - * looks for js-controller home folder - * - * @param {boolean} isInstall - * @returns {string} - */ -function getControllerDir(isInstall) { - // Find the js-controller location - const possibilities = [ - 'iobroker.js-controller', - 'ioBroker.js-controller', - ]; - /** @type {string} */ - let controllerPath; - for (const pkg of possibilities) { - try { - const possiblePath = require.resolve(pkg); - if (fs.existsSync(possiblePath)) { - controllerPath = possiblePath; - break; - } - } catch (e) { /* not found */ } - } - if (controllerPath == null) { - if (!isInstall) { - console.log('Cannot find js-controller'); - process.exit(10); - } else { - process.exit(); - } - } - // we found the controller - return path.dirname(controllerPath); -} - -/** - * reads controller base settings - * - * @alias getConfig - * @returns {object} - */ - function getConfig() { - let configPath; - if (fs.existsSync( - configPath = path.join(controllerDir, 'conf', appName + '.json') - )) { - return JSON.parse(fs.readFileSync(configPath, 'utf8')); - } else if (fs.existsSync( - configPath = path.join(controllerDir, 'conf', + appName.toLowerCase() + '.json') - )) { - return JSON.parse(fs.readFileSync(configPath, 'utf8')); - } else { - throw new Error('Cannot find ' + controllerDir + '/conf/' + appName + '.json'); - } -} -appName = getAppName(); -controllerDir = getControllerDir(typeof process !== 'undefined' && process.argv && process.argv.indexOf('--install') !== -1); -const adapter = require(path.join(controllerDir, 'lib/adapter.js')); - -exports.controllerDir = controllerDir; -exports.getConfig = getConfig; -exports.Adapter = adapter; -exports.appName = appName; From 51c2c3b592c74c8e4414e0b893924a2dc977d6d2 Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:47:31 +0100 Subject: [PATCH 13/29] update package.json --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 698e92c..4073a92 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,13 @@ "url": "https://github.com/sucht3371/ioBroker.poolcontroller" }, "dependencies": { - "request": "^2.72.0" - }, + "request": "^2.72.0" + }, "devDependencies": { "gulp": "^3.9.1", "mocha": "^4.1.0", - "chai": "^4.1.2" + "chai": "^4.1.2", + "@iobroker/adapter-core": "^1.0.3" }, "main": "main.js", "scripts": { @@ -40,4 +41,4 @@ "url": "https://github.com/sucht3371/ioBroker.poolcontroller/issues" }, "readmeFilename": "README.md" -} +} \ No newline at end of file From 5fa0d268d905d91f06aa087210cebdf2ed0d464d Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:55:54 +0100 Subject: [PATCH 14/29] update travis.yml --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2456688..0008cbf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ os: - linux - osx + - windows language: node_js node_js: - - '4' - '6' - '8' - '10' @@ -11,13 +11,13 @@ before_script: - export NPMVERSION=$(echo "$($(which npm) -v)"|cut -c1) - 'if [[ $NPMVERSION == 5 ]]; then npm install -g npm@5; fi' - npm -v - - npm install winston@2.3.1 + - npm install winston@3.2.1 - 'npm install https://github.com/ioBroker/ioBroker.js-controller/tarball/master --production' env: - - CXX=g++-4.8 + - CXX=g++-4.9 addons: apt: sources: - ubuntu-toolchain-r-test packages: - - g++-4.8 + - g++-4.9 From 1ce4cf660f32c02d98db9ee1cb70d32b623c944a Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:55:54 +0100 Subject: [PATCH 15/29] update appveyor.yml --- appveyor.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 84ca0a9..98ae8e8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,6 @@ version: 'test-{build}' environment: matrix: - - nodejs_version: '4' - nodejs_version: '6' - nodejs_version: '8' - nodejs_version: '10' @@ -15,7 +14,7 @@ install: - ps: 'if($NpmVersion -eq 5) { npm install -g npm@5 }' - ps: npm --version - npm install - - npm install winston@2.3.1 + - npm install winston@3.2.1 - 'npm install https://github.com/ioBroker/ioBroker.js-controller/tarball/master --production' test_script: - echo %cd% From f57390e646fd9f43583c6142e79f8a146548c00c Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 22:59:11 +0100 Subject: [PATCH 16/29] update testing setup.js --- test/lib/setup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/lib/setup.js b/test/lib/setup.js index 16857ed..28e5e8b 100644 --- a/test/lib/setup.js +++ b/test/lib/setup.js @@ -311,6 +311,7 @@ function installJsController(cb) { } else { // check if port 9000 is free, else admin adapter will be added to running instance var client = new require('net').Socket(); + client.on('error', () => {}); client.connect(9000, '127.0.0.1', function() { console.error('Cannot initiate fisrt run of test, because one instance of application is running on this PC. Stop it and repeat.'); process.exit(0); From 1b1613741273dc65f0a8d2f1c6cd17136e6c6477 Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 3 Mar 2019 23:24:01 +0100 Subject: [PATCH 17/29] update basic package-file testing --- test/testPackageFiles.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/test/testPackageFiles.js b/test/testPackageFiles.js index c600a60..a63e6bc 100644 --- a/test/testPackageFiles.js +++ b/test/testPackageFiles.js @@ -2,18 +2,20 @@ /* jshint strict:false */ /* jslint node: true */ /* jshint expr: true */ -var expect = require('chai').expect; -var fs = require('fs'); +'use strict'; -describe('Test package.json and io-package.json', function() { - it('Test package files', function (done) { +const expect = require('chai').expect; +const fs = require('fs'); + +describe('Test package.json and io-package.json', () => { + it('Test package files', done => { console.log(); - var fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8'); - var ioPackage = JSON.parse(fileContentIOPackage); + const fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8'); + const ioPackage = JSON.parse(fileContentIOPackage); - var fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8'); - var npmPackage = JSON.parse(fileContentNPMPackage); + const fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8'); + const npmPackage = JSON.parse(fileContentNPMPackage); expect(ioPackage).to.be.an('object'); expect(npmPackage).to.be.an('object'); @@ -31,6 +33,8 @@ describe('Test package.json and io-package.json', function() { expect(npmPackage.author, 'ERROR: Author in package.json needs to exist').to.exist; expect(ioPackage.common.authors, 'ERROR: Authors in io-package.json needs to exist').to.exist; + expect(ioPackage.common.license, 'ERROR: License missing in io-package in common.license').to.exist; + if (ioPackage.common.name.indexOf('template') !== 0) { if (Array.isArray(ioPackage.common.authors)) { expect(ioPackage.common.authors.length, 'ERROR: Author in io-package.json needs to be set').to.not.be.equal(0); @@ -61,7 +65,7 @@ describe('Test package.json and io-package.json', function() { console.log(); } - if (ioPackage.common.name.indexOf('vis-') !== 0) { + if (!ioPackage.common.controller && !ioPackage.common.onlyWWW && !ioPackage.common.noConfig) { if (!ioPackage.common.materialize || !fs.existsSync(__dirname + '/../admin/index_m.html') || !fs.existsSync(__dirname + '/../gulpfile.js')) { console.log('WARNING: Admin3 support is missing! Please add it'); console.log(); @@ -71,8 +75,8 @@ describe('Test package.json and io-package.json', function() { } } - var licenseFileExists = fs.existsSync(__dirname + '/../LICENSE'); - var fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8'); + const licenseFileExists = fs.existsSync(__dirname + '/../LICENSE'); + const fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8'); if (fileContentReadme.indexOf('## Changelog') === -1) { console.log('Warning: The README.md should have a section ## Changelog'); console.log(); From dade96f2532a1ae5ae4af21f7d018d7f7a4bacd3 Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Mon, 4 Mar 2019 22:40:46 +0100 Subject: [PATCH 18/29] update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4073a92..808aa20 100644 --- a/package.json +++ b/package.json @@ -25,13 +25,13 @@ "url": "https://github.com/sucht3371/ioBroker.poolcontroller" }, "dependencies": { - "request": "^2.72.0" + "request": "^2.72.0", + "@iobroker/adapter-core": "^1.0.3" }, "devDependencies": { "gulp": "^3.9.1", "mocha": "^4.1.0", - "chai": "^4.1.2", - "@iobroker/adapter-core": "^1.0.3" + "chai": "^4.1.2" }, "main": "main.js", "scripts": { From b564f902278e0ba5e6b5563319feeb669212984a Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Wed, 6 Mar 2019 21:58:28 +0100 Subject: [PATCH 19/29] add license --- io-package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/io-package.json b/io-package.json index 9bdfd00..90dfc7f 100644 --- a/io-package.json +++ b/io-package.json @@ -37,6 +37,7 @@ "en": "docs/en/template.md", "de": "docs/de/template.md" }, + "license": "MIT", "localLink": "http://%host%/gui/phase2/index.htm", "platform": "Javascript/Node.js", "mode": "schedule", From d9c297351308a22cf5ca2faa51012a071c69de85 Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 10 Mar 2019 23:42:59 +0100 Subject: [PATCH 20/29] add ioBroker badges to README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 00f32d6..7c666d3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![Logo](admin/poolcontroller.png) # ioBroker.poolcontroller -================= +![Number of Installations](http://iobroker.live/badges/poolcontroller-installed.svg) ![Number of Installations](http://iobroker.live/badges/poolcontroller-stable.svg) ================= This adapter is for reading values ​​from the pool controller. This pool controller is from www.pooldigital.de. A demo of the controller can be found at http://demo.poolcontroller.de/gui/phase2/ From b2ffe49d9659a866d580809bb12736f034fd5931 Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Sun, 10 Mar 2019 23:48:39 +0100 Subject: [PATCH 21/29] migrate testing to new iobroker/testing library --- .travis.yml | 6 +- appveyor.yml | 6 +- package.json | 8 +- test/integration.js | 5 + test/lib/setup.js | 729 --------------------------------------- test/mocha.custom.opts | 2 + test/mocha.setup.js | 14 + test/package.js | 5 + test/testAdapter.js | 140 -------- test/testPackageFiles.js | 95 ----- test/unit.js | 5 + 11 files changed, 44 insertions(+), 971 deletions(-) create mode 100644 test/integration.js delete mode 100644 test/lib/setup.js create mode 100644 test/mocha.custom.opts create mode 100644 test/mocha.setup.js create mode 100644 test/package.js delete mode 100644 test/testAdapter.js delete mode 100644 test/testPackageFiles.js create mode 100644 test/unit.js diff --git a/.travis.yml b/.travis.yml index 0008cbf..fea148f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,6 @@ before_script: - export NPMVERSION=$(echo "$($(which npm) -v)"|cut -c1) - 'if [[ $NPMVERSION == 5 ]]; then npm install -g npm@5; fi' - npm -v - - npm install winston@3.2.1 - - 'npm install https://github.com/ioBroker/ioBroker.js-controller/tarball/master --production' env: - CXX=g++-4.9 addons: @@ -21,3 +19,7 @@ addons: - ubuntu-toolchain-r-test packages: - g++-4.9 +script: + - 'npm run test:package' + - 'npm run test:unit' + - 'npm run test:integration' diff --git a/appveyor.yml b/appveyor.yml index 98ae8e8..180cf47 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,11 +14,11 @@ install: - ps: 'if($NpmVersion -eq 5) { npm install -g npm@5 }' - ps: npm --version - npm install - - npm install winston@3.2.1 - - 'npm install https://github.com/ioBroker/ioBroker.js-controller/tarball/master --production' test_script: - echo %cd% - node --version - npm --version - - npm test + - 'npm run test:package' + - 'npm run test:unit' + - 'npm run test:integration' build: 'off' diff --git a/package.json b/package.json index 808aa20..679999d 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,15 @@ "devDependencies": { "gulp": "^3.9.1", "mocha": "^4.1.0", - "chai": "^4.1.2" + "chai": "^4.1.2", + "@iobroker/testing": "^1.1.10" }, "main": "main.js", "scripts": { - "test": "node node_modules/mocha/bin/mocha --exit" + "test": "npm run test:package && npm run test:unit", + "test:package": "mocha test/package --exit", + "test:unit": "mocha test/unit --exit", + "test:integration": "mocha test/integration --exit" }, "bugs": { "url": "https://github.com/sucht3371/ioBroker.poolcontroller/issues" diff --git a/test/integration.js b/test/integration.js new file mode 100644 index 0000000..1b3453e --- /dev/null +++ b/test/integration.js @@ -0,0 +1,5 @@ +const path = require('path'); +const { tests } = require('@iobroker/testing'); + +// Run integration tests - See https://github.com/ioBroker/testing for a detailed explanation and further options +tests.integration(path.join(__dirname, '..')); diff --git a/test/lib/setup.js b/test/lib/setup.js deleted file mode 100644 index 28e5e8b..0000000 --- a/test/lib/setup.js +++ /dev/null @@ -1,729 +0,0 @@ -/* jshint -W097 */// jshint strict:false -/*jslint node: true */ -// check if tmp directory exists -var fs = require('fs'); -var path = require('path'); -var child_process = require('child_process'); -var rootDir = path.normalize(__dirname + '/../../'); -var pkg = require(rootDir + 'package.json'); -var debug = typeof v8debug === 'object'; -pkg.main = pkg.main || 'main.js'; - -var adapterName = path.normalize(rootDir).replace(/\\/g, '/').split('/'); -adapterName = adapterName[adapterName.length - 2]; -var adapterStarted = false; - -function getAppName() { - var parts = __dirname.replace(/\\/g, '/').split('/'); - return parts[parts.length - 3].split('.')[0]; -} - -var appName = getAppName().toLowerCase(); - -var objects; -var states; - -var pid = null; - -function copyFileSync(source, target) { - - var targetFile = target; - - //if target is a directory a new file with the same name will be created - if (fs.existsSync(target)) { - if ( fs.lstatSync( target ).isDirectory() ) { - targetFile = path.join(target, path.basename(source)); - } - } - - try { - fs.writeFileSync(targetFile, fs.readFileSync(source)); - } - catch (err) { - console.log("file copy error: " +source +" -> " + targetFile + " (error ignored)"); - } -} - -function copyFolderRecursiveSync(source, target, ignore) { - var files = []; - - var base = path.basename(source); - if (base === adapterName) { - base = pkg.name; - } - //check if folder needs to be created or integrated - var targetFolder = path.join(target, base); - if (!fs.existsSync(targetFolder)) { - fs.mkdirSync(targetFolder); - } - - //copy - if (fs.lstatSync(source).isDirectory()) { - files = fs.readdirSync(source); - files.forEach(function (file) { - if (ignore && ignore.indexOf(file) !== -1) { - return; - } - - var curSource = path.join(source, file); - var curTarget = path.join(targetFolder, file); - if (fs.lstatSync(curSource).isDirectory()) { - // ignore grunt files - if (file.indexOf('grunt') !== -1) return; - if (file === 'chai') return; - if (file === 'mocha') return; - copyFolderRecursiveSync(curSource, targetFolder, ignore); - } else { - copyFileSync(curSource, curTarget); - } - }); - } -} - -if (!fs.existsSync(rootDir + 'tmp')) { - fs.mkdirSync(rootDir + 'tmp'); -} - -function storeOriginalFiles() { - console.log('Store original files...'); - var dataDir = rootDir + 'tmp/' + appName + '-data/'; - - var f = fs.readFileSync(dataDir + 'objects.json'); - var objects = JSON.parse(f.toString()); - if (objects['system.adapter.admin.0'] && objects['system.adapter.admin.0'].common) { - objects['system.adapter.admin.0'].common.enabled = false; - } - if (objects['system.adapter.admin.1'] && objects['system.adapter.admin.1'].common) { - objects['system.adapter.admin.1'].common.enabled = false; - } - - fs.writeFileSync(dataDir + 'objects.json.original', JSON.stringify(objects)); - try { - f = fs.readFileSync(dataDir + 'states.json'); - fs.writeFileSync(dataDir + 'states.json.original', f); - } - catch (err) { - console.log('no states.json found - ignore'); - } -} - -function restoreOriginalFiles() { - console.log('restoreOriginalFiles...'); - var dataDir = rootDir + 'tmp/' + appName + '-data/'; - - var f = fs.readFileSync(dataDir + 'objects.json.original'); - fs.writeFileSync(dataDir + 'objects.json', f); - try { - f = fs.readFileSync(dataDir + 'states.json.original'); - fs.writeFileSync(dataDir + 'states.json', f); - } - catch (err) { - console.log('no states.json.original found - ignore'); - } - -} - -function checkIsAdapterInstalled(cb, counter, customName) { - customName = customName || pkg.name.split('.').pop(); - counter = counter || 0; - var dataDir = rootDir + 'tmp/' + appName + '-data/'; - console.log('checkIsAdapterInstalled...'); - - try { - var f = fs.readFileSync(dataDir + 'objects.json'); - var objects = JSON.parse(f.toString()); - if (objects['system.adapter.' + customName + '.0']) { - console.log('checkIsAdapterInstalled: ready!'); - setTimeout(function () { - if (cb) cb(); - }, 100); - return; - } else { - console.warn('checkIsAdapterInstalled: still not ready'); - } - } catch (err) { - - } - - if (counter > 20) { - console.error('checkIsAdapterInstalled: Cannot install!'); - if (cb) cb('Cannot install'); - } else { - console.log('checkIsAdapterInstalled: wait...'); - setTimeout(function() { - checkIsAdapterInstalled(cb, counter + 1); - }, 1000); - } -} - -function checkIsControllerInstalled(cb, counter) { - counter = counter || 0; - var dataDir = rootDir + 'tmp/' + appName + '-data/'; - - console.log('checkIsControllerInstalled...'); - try { - var f = fs.readFileSync(dataDir + 'objects.json'); - var objects = JSON.parse(f.toString()); - if (objects['system.adapter.admin.0']) { - console.log('checkIsControllerInstalled: installed!'); - setTimeout(function () { - if (cb) cb(); - }, 100); - return; - } - } catch (err) { - - } - - if (counter > 20) { - console.log('checkIsControllerInstalled: Cannot install!'); - if (cb) cb('Cannot install'); - } else { - console.log('checkIsControllerInstalled: wait...'); - setTimeout(function() { - checkIsControllerInstalled(cb, counter + 1); - }, 1000); - } -} - -function installAdapter(customName, cb) { - if (typeof customName === 'function') { - cb = customName; - customName = null; - } - customName = customName || pkg.name.split('.').pop(); - console.log('Install adapter...'); - var startFile = 'node_modules/' + appName + '.js-controller/' + appName + '.js'; - // make first install - if (debug) { - child_process.execSync('node ' + startFile + ' add ' + customName + ' --enabled false', { - cwd: rootDir + 'tmp', - stdio: [0, 1, 2] - }); - checkIsAdapterInstalled(function (error) { - if (error) console.error(error); - console.log('Adapter installed.'); - if (cb) cb(); - }); - } else { - // add controller - var _pid = child_process.fork(startFile, ['add', customName, '--enabled', 'false'], { - cwd: rootDir + 'tmp', - stdio: [0, 1, 2, 'ipc'] - }); - - waitForEnd(_pid, function () { - checkIsAdapterInstalled(function (error) { - if (error) console.error(error); - console.log('Adapter installed.'); - if (cb) cb(); - }); - }); - } -} - -function waitForEnd(_pid, cb) { - if (!_pid) { - cb(-1, -1); - return; - } - _pid.on('exit', function (code, signal) { - if (_pid) { - _pid = null; - cb(code, signal); - } - }); - _pid.on('close', function (code, signal) { - if (_pid) { - _pid = null; - cb(code, signal); - } - }); -} - -function installJsController(cb) { - console.log('installJsController...'); - if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller') || - !fs.existsSync(rootDir + 'tmp/' + appName + '-data')) { - // try to detect appName.js-controller in node_modules/appName.js-controller - // travis CI installs js-controller into node_modules - if (fs.existsSync(rootDir + 'node_modules/' + appName + '.js-controller')) { - console.log('installJsController: no js-controller => copy it from "' + rootDir + 'node_modules/' + appName + '.js-controller"'); - // copy all - // stop controller - console.log('Stop controller if running...'); - var _pid; - if (debug) { - // start controller - _pid = child_process.exec('node ' + appName + '.js stop', { - cwd: rootDir + 'node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2] - }); - } else { - _pid = child_process.fork(appName + '.js', ['stop'], { - cwd: rootDir + 'node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2, 'ipc'] - }); - } - - waitForEnd(_pid, function () { - // copy all files into - if (!fs.existsSync(rootDir + 'tmp')) fs.mkdirSync(rootDir + 'tmp'); - if (!fs.existsSync(rootDir + 'tmp/node_modules')) fs.mkdirSync(rootDir + 'tmp/node_modules'); - - if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller')){ - console.log('Copy js-controller...'); - copyFolderRecursiveSync(rootDir + 'node_modules/' + appName + '.js-controller', rootDir + 'tmp/node_modules/'); - } - - console.log('Setup js-controller...'); - var __pid; - if (debug) { - // start controller - _pid = child_process.exec('node ' + appName + '.js setup first --console', { - cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2] - }); - } else { - __pid = child_process.fork(appName + '.js', ['setup', 'first', '--console'], { - cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2, 'ipc'] - }); - } - waitForEnd(__pid, function () { - checkIsControllerInstalled(function () { - // change ports for object and state DBs - var config = require(rootDir + 'tmp/' + appName + '-data/' + appName + '.json'); - config.objects.port = 19001; - config.states.port = 19000; - fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/' + appName + '.json', JSON.stringify(config, null, 2)); - console.log('Setup finished.'); - - copyAdapterToController(); - - installAdapter(function () { - storeOriginalFiles(); - if (cb) cb(true); - }); - }); - }); - }); - } else { - // check if port 9000 is free, else admin adapter will be added to running instance - var client = new require('net').Socket(); - client.on('error', () => {}); - client.connect(9000, '127.0.0.1', function() { - console.error('Cannot initiate fisrt run of test, because one instance of application is running on this PC. Stop it and repeat.'); - process.exit(0); - }); - - setTimeout(function () { - client.destroy(); - if (!fs.existsSync(rootDir + 'tmp/node_modules/' + appName + '.js-controller')) { - console.log('installJsController: no js-controller => install from git'); - - child_process.execSync('npm install https://github.com/' + appName + '/' + appName + '.js-controller/tarball/master --prefix ./ --production', { - cwd: rootDir + 'tmp/', - stdio: [0, 1, 2] - }); - } else { - console.log('Setup js-controller...'); - var __pid; - if (debug) { - // start controller - child_process.exec('node ' + appName + '.js setup first', { - cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2] - }); - } else { - child_process.fork(appName + '.js', ['setup', 'first'], { - cwd: rootDir + 'tmp/node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2, 'ipc'] - }); - } - } - - // let npm install admin and run setup - checkIsControllerInstalled(function () { - var _pid; - - if (fs.existsSync(rootDir + 'node_modules/' + appName + '.js-controller/' + appName + '.js')) { - _pid = child_process.fork(appName + '.js', ['stop'], { - cwd: rootDir + 'node_modules/' + appName + '.js-controller', - stdio: [0, 1, 2, 'ipc'] - }); - } - - waitForEnd(_pid, function () { - // change ports for object and state DBs - var config = require(rootDir + 'tmp/' + appName + '-data/' + appName + '.json'); - config.objects.port = 19001; - config.states.port = 19000; - fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/' + appName + '.json', JSON.stringify(config, null, 2)); - - copyAdapterToController(); - - installAdapter(function () { - storeOriginalFiles(); - if (cb) cb(true); - }); - }); - }); - }, 1000); - } - } else { - setTimeout(function () { - console.log('installJsController: js-controller installed'); - if (cb) cb(false); - }, 0); - } -} - -function copyAdapterToController() { - console.log('Copy adapter...'); - // Copy adapter to tmp/node_modules/appName.adapter - copyFolderRecursiveSync(rootDir, rootDir + 'tmp/node_modules/', ['.idea', 'test', 'tmp', '.git', appName + '.js-controller']); - console.log('Adapter copied.'); -} - -function clearControllerLog() { - var dirPath = rootDir + 'tmp/log'; - var files; - try { - if (fs.existsSync(dirPath)) { - console.log('Clear controller log...'); - files = fs.readdirSync(dirPath); - } else { - console.log('Create controller log directory...'); - files = []; - fs.mkdirSync(dirPath); - } - } catch(e) { - console.error('Cannot read "' + dirPath + '"'); - return; - } - if (files.length > 0) { - try { - for (var i = 0; i < files.length; i++) { - var filePath = dirPath + '/' + files[i]; - fs.unlinkSync(filePath); - } - console.log('Controller log cleared'); - } catch (err) { - console.error('cannot clear log: ' + err); - } - } -} - -function clearDB() { - var dirPath = rootDir + 'tmp/iobroker-data/sqlite'; - var files; - try { - if (fs.existsSync(dirPath)) { - console.log('Clear sqlite DB...'); - files = fs.readdirSync(dirPath); - } else { - console.log('Create controller log directory...'); - files = []; - fs.mkdirSync(dirPath); - } - } catch(e) { - console.error('Cannot read "' + dirPath + '"'); - return; - } - if (files.length > 0) { - try { - for (var i = 0; i < files.length; i++) { - var filePath = dirPath + '/' + files[i]; - fs.unlinkSync(filePath); - } - console.log('Clear sqlite DB'); - } catch (err) { - console.error('cannot clear DB: ' + err); - } - } -} - -function setupController(cb) { - installJsController(function (isInited) { - clearControllerLog(); - clearDB(); - - if (!isInited) { - restoreOriginalFiles(); - copyAdapterToController(); - } - // read system.config object - var dataDir = rootDir + 'tmp/' + appName + '-data/'; - - var objs; - try { - objs = fs.readFileSync(dataDir + 'objects.json'); - objs = JSON.parse(objs); - } - catch (e) { - console.log('ERROR reading/parsing system configuration. Ignore'); - objs = {'system.config': {}}; - } - if (!objs || !objs['system.config']) { - objs = {'system.config': {}}; - } - - if (cb) cb(objs['system.config']); - }); -} - -function startAdapter(objects, states, callback) { - if (adapterStarted) { - console.log('Adapter already started ...'); - if (callback) callback(objects, states); - return; - } - adapterStarted = true; - console.log('startAdapter...'); - if (fs.existsSync(rootDir + 'tmp/node_modules/' + pkg.name + '/' + pkg.main)) { - try { - if (debug) { - // start controller - pid = child_process.exec('node node_modules/' + pkg.name + '/' + pkg.main + ' --console silly', { - cwd: rootDir + 'tmp', - stdio: [0, 1, 2] - }); - } else { - // start controller - pid = child_process.fork('node_modules/' + pkg.name + '/' + pkg.main, ['--console', 'silly'], { - cwd: rootDir + 'tmp', - stdio: [0, 1, 2, 'ipc'] - }); - } - } catch (error) { - console.error(JSON.stringify(error)); - } - } else { - console.error('Cannot find: ' + rootDir + 'tmp/node_modules/' + pkg.name + '/' + pkg.main); - } - if (callback) callback(objects, states); -} - -function startController(isStartAdapter, onObjectChange, onStateChange, callback) { - if (typeof isStartAdapter === 'function') { - callback = onStateChange; - onStateChange = onObjectChange; - onObjectChange = isStartAdapter; - isStartAdapter = true; - } - - if (onStateChange === undefined) { - callback = onObjectChange; - onObjectChange = undefined; - } - - if (pid) { - console.error('Controller is already started!'); - } else { - console.log('startController...'); - adapterStarted = false; - var isObjectConnected; - var isStatesConnected; - - var Objects = require(rootDir + 'tmp/node_modules/' + appName + '.js-controller/lib/objects/objectsInMemServer'); - objects = new Objects({ - connection: { - "type" : "file", - "host" : "127.0.0.1", - "port" : 19001, - "user" : "", - "pass" : "", - "noFileCache": false, - "connectTimeout": 2000 - }, - logger: { - silly: function (msg) { - console.log(msg); - }, - debug: function (msg) { - console.log(msg); - }, - info: function (msg) { - console.log(msg); - }, - warn: function (msg) { - console.warn(msg); - }, - error: function (msg) { - console.error(msg); - } - }, - connected: function () { - isObjectConnected = true; - if (isStatesConnected) { - console.log('startController: started!'); - if (isStartAdapter) { - startAdapter(objects, states, callback); - } else { - if (callback) { - callback(objects, states); - callback = null; - } - } - } - }, - change: onObjectChange - }); - - // Just open in memory DB itself - var States = require(rootDir + 'tmp/node_modules/' + appName + '.js-controller/lib/states/statesInMemServer'); - states = new States({ - connection: { - type: 'file', - host: '127.0.0.1', - port: 19000, - options: { - auth_pass: null, - retry_max_delay: 15000 - } - }, - logger: { - silly: function (msg) { - console.log(msg); - }, - debug: function (msg) { - console.log(msg); - }, - info: function (msg) { - console.log(msg); - }, - warn: function (msg) { - console.log(msg); - }, - error: function (msg) { - console.log(msg); - } - }, - connected: function () { - isStatesConnected = true; - if (isObjectConnected) { - console.log('startController: started!!'); - if (isStartAdapter) { - startAdapter(objects, states, callback); - } else { - if (callback) { - callback(objects, states); - callback = null; - } - } - } - }, - change: onStateChange - }); - } -} - -function stopAdapter(cb) { - if (!pid) { - console.error('Controller is not running!'); - if (cb) { - setTimeout(function () { - cb(false); - }, 0); - } - } else { - adapterStarted = false; - pid.on('exit', function (code, signal) { - if (pid) { - console.log('child process terminated due to receipt of signal ' + signal); - if (cb) cb(); - pid = null; - } - }); - - pid.on('close', function (code, signal) { - if (pid) { - if (cb) cb(); - pid = null; - } - }); - - pid.kill('SIGTERM'); - } -} - -function _stopController() { - if (objects) { - objects.destroy(); - objects = null; - } - if (states) { - states.destroy(); - states = null; - } -} - -function stopController(cb) { - var timeout; - if (objects) { - console.log('Set system.adapter.' + pkg.name + '.0'); - objects.setObject('system.adapter.' + pkg.name + '.0', { - common:{ - enabled: false - } - }); - } - - stopAdapter(function () { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - - _stopController(); - - if (cb) { - cb(true); - cb = null; - } - }); - - timeout = setTimeout(function () { - timeout = null; - console.log('child process NOT terminated'); - - _stopController(); - - if (cb) { - cb(false); - cb = null; - } - pid = null; - }, 5000); -} - -// Setup the adapter -function setAdapterConfig(common, native, instance) { - var objects = JSON.parse(fs.readFileSync(rootDir + 'tmp/' + appName + '-data/objects.json').toString()); - var id = 'system.adapter.' + adapterName.split('.').pop() + '.' + (instance || 0); - if (common) objects[id].common = common; - if (native) objects[id].native = native; - fs.writeFileSync(rootDir + 'tmp/' + appName + '-data/objects.json', JSON.stringify(objects)); -} - -// Read config of the adapter -function getAdapterConfig(instance) { - var objects = JSON.parse(fs.readFileSync(rootDir + 'tmp/' + appName + '-data/objects.json').toString()); - var id = 'system.adapter.' + adapterName.split('.').pop() + '.' + (instance || 0); - return objects[id]; -} - -if (typeof module !== undefined && module.parent) { - module.exports.getAdapterConfig = getAdapterConfig; - module.exports.setAdapterConfig = setAdapterConfig; - module.exports.startController = startController; - module.exports.stopController = stopController; - module.exports.setupController = setupController; - module.exports.stopAdapter = stopAdapter; - module.exports.startAdapter = startAdapter; - module.exports.installAdapter = installAdapter; - module.exports.appName = appName; - module.exports.adapterName = adapterName; - module.exports.adapterStarted = adapterStarted; -} diff --git a/test/mocha.custom.opts b/test/mocha.custom.opts new file mode 100644 index 0000000..703f749 --- /dev/null +++ b/test/mocha.custom.opts @@ -0,0 +1,2 @@ +--require test/mocha.setup.js +{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js} \ No newline at end of file diff --git a/test/mocha.setup.js b/test/mocha.setup.js new file mode 100644 index 0000000..15b9051 --- /dev/null +++ b/test/mocha.setup.js @@ -0,0 +1,14 @@ +// Don't silently swallow unhandled rejections +process.on('unhandledRejection', (e) => { + throw e; +}); + +// enable the should interface with sinon +// and load chai-as-promised and sinon-chai by default +const sinonChai = require('sinon-chai'); +const chaiAsPromised = require('chai-as-promised'); +const { should, use } = require('chai'); + +should(); +use(sinonChai); +use(chaiAsPromised); \ No newline at end of file diff --git a/test/package.js b/test/package.js new file mode 100644 index 0000000..38eacc8 --- /dev/null +++ b/test/package.js @@ -0,0 +1,5 @@ +const path = require('path'); +const { tests } = require('@iobroker/testing'); + +// Validate the package files +tests.packageFiles(path.join(__dirname, '..')); diff --git a/test/testAdapter.js b/test/testAdapter.js deleted file mode 100644 index ae9c289..0000000 --- a/test/testAdapter.js +++ /dev/null @@ -1,140 +0,0 @@ -/* jshint -W097 */// jshint strict:false -/*jslint node: true */ -var expect = require('chai').expect; -var setup = require(__dirname + '/lib/setup'); - -var objects = null; -var states = null; -var onStateChanged = null; -var onObjectChanged = null; -var sendToID = 1; - -var adapterShortName = setup.adapterName.substring(setup.adapterName.indexOf('.')+1); - -function checkConnectionOfAdapter(cb, counter) { - counter = counter || 0; - console.log('Try check #' + counter); - if (counter > 30) { - if (cb) cb('Cannot check connection'); - return; - } - - states.getState('system.adapter.' + adapterShortName + '.0.alive', function (err, state) { - if (err) console.error(err); - if (state && state.val) { - if (cb) cb(); - } else { - setTimeout(function () { - checkConnectionOfAdapter(cb, counter + 1); - }, 1000); - } - }); -} - -function checkValueOfState(id, value, cb, counter) { - counter = counter || 0; - if (counter > 20) { - if (cb) cb('Cannot check value Of State ' + id); - return; - } - - states.getState(id, function (err, state) { - if (err) console.error(err); - if (value === null && !state) { - if (cb) cb(); - } else - if (state && (value === undefined || state.val === value)) { - if (cb) cb(); - } else { - setTimeout(function () { - checkValueOfState(id, value, cb, counter + 1); - }, 500); - } - }); -} - -function sendTo(target, command, message, callback) { - onStateChanged = function (id, state) { - if (id === 'messagebox.system.adapter.test.0') { - callback(state.message); - } - }; - - states.pushMessage('system.adapter.' + target, { - command: command, - message: message, - from: 'system.adapter.test.0', - callback: { - message: message, - id: sendToID++, - ack: false, - time: (new Date()).getTime() - } - }); -} - -describe('Test ' + adapterShortName + ' adapter', function() { - before('Test ' + adapterShortName + ' adapter: Start js-controller', function (_done) { - this.timeout(600000); // because of first install from npm - - setup.setupController(function () { - var config = setup.getAdapterConfig(); - // enable adapter - config.common.enabled = true; - config.common.loglevel = 'debug'; - - //config.native.dbtype = 'sqlite'; - - setup.setAdapterConfig(config.common, config.native); - - setup.startController(true, function(id, obj) {}, function (id, state) { - if (onStateChanged) onStateChanged(id, state); - }, - function (_objects, _states) { - objects = _objects; - states = _states; - _done(); - }); - }); - }); - -/* - ENABLE THIS WHEN ADAPTER RUNS IN DEAMON MODE TO CHECK THAT IT HAS STARTED SUCCESSFULLY -*/ - it('Test ' + adapterShortName + ' adapter: Check if adapter started', function (done) { - this.timeout(60000); - checkConnectionOfAdapter(function (res) { - if (res) console.log(res); - expect(res).not.to.be.equal('Cannot check connection'); - objects.setObject('system.adapter.test.0', { - common: { - - }, - type: 'instance' - }, - function () { - states.subscribeMessage('system.adapter.test.0'); - done(); - }); - }); - }); -/**/ - -/* - PUT YOUR OWN TESTS HERE USING - it('Testname', function ( done) { - ... - }); - - You can also use "sendTo" method to send messages to the started adapter -*/ - - after('Test ' + adapterShortName + ' adapter: Stop js-controller', function (done) { - this.timeout(10000); - - setup.stopController(function (normalTerminated) { - console.log('Adapter normal terminated: ' + normalTerminated); - done(); - }); - }); -}); diff --git a/test/testPackageFiles.js b/test/testPackageFiles.js deleted file mode 100644 index a63e6bc..0000000 --- a/test/testPackageFiles.js +++ /dev/null @@ -1,95 +0,0 @@ -/* jshint -W097 */ -/* jshint strict:false */ -/* jslint node: true */ -/* jshint expr: true */ -'use strict'; - -const expect = require('chai').expect; -const fs = require('fs'); - -describe('Test package.json and io-package.json', () => { - it('Test package files', done => { - console.log(); - - const fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8'); - const ioPackage = JSON.parse(fileContentIOPackage); - - const fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8'); - const npmPackage = JSON.parse(fileContentNPMPackage); - - expect(ioPackage).to.be.an('object'); - expect(npmPackage).to.be.an('object'); - - expect(ioPackage.common.version, 'ERROR: Version number in io-package.json needs to exist').to.exist; - expect(npmPackage.version, 'ERROR: Version number in package.json needs to exist').to.exist; - - expect(ioPackage.common.version, 'ERROR: Version numbers in package.json and io-package.json needs to match').to.be.equal(npmPackage.version); - - if (!ioPackage.common.news || !ioPackage.common.news[ioPackage.common.version]) { - console.log('WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!'); - console.log(); - } - - expect(npmPackage.author, 'ERROR: Author in package.json needs to exist').to.exist; - expect(ioPackage.common.authors, 'ERROR: Authors in io-package.json needs to exist').to.exist; - - expect(ioPackage.common.license, 'ERROR: License missing in io-package in common.license').to.exist; - - if (ioPackage.common.name.indexOf('template') !== 0) { - if (Array.isArray(ioPackage.common.authors)) { - expect(ioPackage.common.authors.length, 'ERROR: Author in io-package.json needs to be set').to.not.be.equal(0); - if (ioPackage.common.authors.length === 1) { - expect(ioPackage.common.authors[0], 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); - } - } - else { - expect(ioPackage.common.authors, 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name '); - } - } - else { - console.log('WARNING: Testing for set authors field in io-package skipped because template adapter'); - console.log(); - } - expect(fs.existsSync(__dirname + '/../README.md'), 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.').to.be.true; - if (!ioPackage.common.titleLang || typeof ioPackage.common.titleLang !== 'object') { - console.log('WARNING: titleLang is not existing in io-package.json. Please add'); - console.log(); - } - if ( - ioPackage.common.title.indexOf('iobroker') !== -1 || - ioPackage.common.title.indexOf('ioBroker') !== -1 || - ioPackage.common.title.indexOf('adapter') !== -1 || - ioPackage.common.title.indexOf('Adapter') !== -1 - ) { - console.log('WARNING: title contains Adapter or ioBroker. It is clear anyway, that it is adapter for ioBroker.'); - console.log(); - } - - if (!ioPackage.common.controller && !ioPackage.common.onlyWWW && !ioPackage.common.noConfig) { - if (!ioPackage.common.materialize || !fs.existsSync(__dirname + '/../admin/index_m.html') || !fs.existsSync(__dirname + '/../gulpfile.js')) { - console.log('WARNING: Admin3 support is missing! Please add it'); - console.log(); - } - if (ioPackage.common.materialize) { - expect(fs.existsSync(__dirname + '/../admin/index_m.html'), 'Admin3 support is enabled in io-package.json, but index_m.html is missing!').to.be.true; - } - } - - const licenseFileExists = fs.existsSync(__dirname + '/../LICENSE'); - const fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8'); - if (fileContentReadme.indexOf('## Changelog') === -1) { - console.log('Warning: The README.md should have a section ## Changelog'); - console.log(); - } - expect((licenseFileExists || fileContentReadme.indexOf('## License') !== -1), 'A LICENSE must exist as LICENSE file or as part of the README.md').to.be.true; - if (!licenseFileExists) { - console.log('Warning: The License should also exist as LICENSE file'); - console.log(); - } - if (fileContentReadme.indexOf('## License') === -1) { - console.log('Warning: The README.md should also have a section ## License to be shown in Admin3'); - console.log(); - } - done(); - }); -}); diff --git a/test/unit.js b/test/unit.js new file mode 100644 index 0000000..8e27b3a --- /dev/null +++ b/test/unit.js @@ -0,0 +1,5 @@ +const path = require('path'); +const { tests } = require('@iobroker/testing'); + +// Run unit tests - See https://github.com/ioBroker/testing for a detailed explanation and further options +tests.unit(path.join(__dirname, '..')); From 040c4afd58035516a521fb09e8f1ef91de22e85e Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Mon, 11 Mar 2019 17:11:10 +0100 Subject: [PATCH 22/29] fix io-package to fullfill current adapter requirements --- io-package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/io-package.json b/io-package.json index 90dfc7f..fcf7873 100644 --- a/io-package.json +++ b/io-package.json @@ -21,10 +21,10 @@ "de": "Initiale Version" } }, - "title": "Poolcontroller Adapter", + "title": "Poolcontroller", "titleLang": { - "en": "poolcontroller adapter", - "de": "Poolcontroller Adapter" + "en": "poolcontroller", + "de": "Poolcontroller" }, "desc": { "en": "ioBroker poolcontroller Adapter", From 7aa82e2de3001c0008e560438b49ca921615982e Mon Sep 17 00:00:00 2001 From: Ingo Fischer Date: Tue, 12 Mar 2019 15:05:03 +0100 Subject: [PATCH 23/29] update testing lib --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 679999d..a9203d0 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "gulp": "^3.9.1", "mocha": "^4.1.0", "chai": "^4.1.2", - "@iobroker/testing": "^1.1.10" + "@iobroker/testing": "^1.1.14" }, "main": "main.js", "scripts": { @@ -45,4 +45,4 @@ "url": "https://github.com/sucht3371/ioBroker.poolcontroller/issues" }, "readmeFilename": "README.md" -} \ No newline at end of file +} From 2f1af2292186ae7e36b9972fccf672122ffeef59 Mon Sep 17 00:00:00 2001 From: svenp Date: Fri, 15 Mar 2019 21:38:09 +0100 Subject: [PATCH 24/29] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6748866..24d9569 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ This adapter is for reading values ​​from the pool controller. This pool controller is from www.pooldigital.de. A demo of the controller can be found at http://demo.poolcontroller.de/gui/phase2/ +## Changelog ### 0.2.4 * (SvenPeitz) rework main, correct time, get user data objects ### 0.2.3 @@ -18,7 +19,7 @@ A demo of the controller can be found at http://demo.poolcontroller.de/gui/phase ## License The MIT License (MIT) -Copyright (c) 2018 Michael Voelker +Copyright (c) 2019 Michael Voelker Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 321d8d8df3f9bde78e9e64cac695c66d81ffa4b2 Mon Sep 17 00:00:00 2001 From: svenp Date: Fri, 15 Mar 2019 21:38:41 +0100 Subject: [PATCH 25/29] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 635e347..5542365 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 Michael Voelker +Copyright (c) 2019 Michael Voelker Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 2910695328582f917ae5da58ae478cb012d2c030 Mon Sep 17 00:00:00 2001 From: svenp Date: Fri, 15 Mar 2019 21:45:14 +0100 Subject: [PATCH 26/29] Update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4a52fd7..746bd74 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "email": "mv@netcompsys.de" } ], - "homepage": "https://github.com/sucht3371/ioBroker.poolcontroller", + "homepage": "https://github.com/svenp/ioBroker.poolcontroller", "license": "MIT", "keywords": [ "ioBroker", @@ -22,7 +22,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/sucht3371/ioBroker.poolcontroller" + "url": "https://github.com/svenp/ioBroker.poolcontroller" }, "dependencies": { "request": "^2.72.0", @@ -42,7 +42,7 @@ "test:integration": "mocha test/integration --exit" }, "bugs": { - "url": "https://github.com/sucht3371/ioBroker.poolcontroller/issues" + "url": "https://github.com/svenp/ioBroker.poolcontroller/issues" }, "readmeFilename": "README.md" } From 5288b56e8a893bde39f105d547ba48a34b4c32a5 Mon Sep 17 00:00:00 2001 From: svenp Date: Sat, 11 May 2019 01:17:55 +0200 Subject: [PATCH 27/29] Update .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fea148f..d744591 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,13 +12,13 @@ before_script: - 'if [[ $NPMVERSION == 5 ]]; then npm install -g npm@5; fi' - npm -v env: - - CXX=g++-4.9 + - CXX=g++-6 addons: apt: sources: - ubuntu-toolchain-r-test packages: - - g++-4.9 + - g++-6 script: - 'npm run test:package' - 'npm run test:unit' From b55af19452602ebcbf1ab3e6e3a44f98f453c2e3 Mon Sep 17 00:00:00 2001 From: svenp Date: Sat, 11 May 2019 01:18:59 +0200 Subject: [PATCH 28/29] Update appveyor.yml --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 180cf47..e4c7fbc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,7 +9,7 @@ platform: - x64 clone_folder: 'c:\projects\%APPVEYOR_PROJECT_NAME%' install: - - ps: 'Install-Product node $env:nodejs_version $env:platform' + - ps: 'Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:platform' - ps: '$NpmVersion = (npm -v).Substring(0,1)' - ps: 'if($NpmVersion -eq 5) { npm install -g npm@5 }' - ps: npm --version From 26e3cae403aeb083dc3eb04a3c6ab7e73ac08215 Mon Sep 17 00:00:00 2001 From: svenp Date: Wed, 2 Oct 2019 17:24:37 +0200 Subject: [PATCH 29/29] add port to Website link --- io-package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/io-package.json b/io-package.json index 7cac9da..595122a 100644 --- a/io-package.json +++ b/io-package.json @@ -42,7 +42,7 @@ "de": "docs/de/template.md" }, "license": "MIT", - "localLink": "http://%host%/gui/phase2/index.htm", + "localLink": "http://%host%:%port%/gui/phase2/index.htm", "platform": "Javascript/Node.js", "mode": "schedule", "schedule": "* * * * *",