Ok, das wars. Wird nun alle N Sekunden aktualisiert.
/* jshint -W097 */ // jshint strict:false /*jslint node: true */ 'use strict'; var utils = require(__dirname + '/lib/utils'); // Get common adapter utils var adapter = new utils.Adapter('stiebel-lwz'); // is called when adapter shuts down - callback has to be called under any circumstances! adapter.on('unload', function (callback) { try { adapter.log.info('cleaned everything up...'); callback(); } catch (e) { callback(); } }); // is called if a subscribed object changes adapter.on('objectChange', function (id, obj) { // Warning, obj can be null if it was deleted adapter.log.info('objectChange ' + id + ' ' + JSON.stringify(obj)); }); // SENDE DATEN AN ISG adapter.on('stateChange', function (id, state) { // Debug Ausgabe im Log const debugging = adapter.config.debugging; // Warning, state can be null if it was deleted //adapter.log.info('stateChange ' + id + ' ' + JSON.stringify(state)); /** * SENDE PARAMETER AN ISG */ // https://nodejs.org/api/child_process.html const {exec} = require('child_process'); // Sende Parameter an ISGweb var parameter, wert; function set_isg_para(isgweburl, parameter, wert) { exec('bash /opt/iobroker/node_modules/iobroker.stiebel-lwz/isg_set.sh ' + isgweburl + ' ' + parameter + ' ' + wert, (err, stdout, stderr) => { if (err) { console.error(err); return; } if (debugging === true) console.log(stdout); }); } // BETRIEBSART if (id == adapter.name + '.' + adapter.instance + '.Start.Betriebsart') { if (debugging === true) adapter.log.info('Setze Betriebsart auf: ' + state.val); set_isg_para(adapter.config.isgIP, 'BETRIEBSART', state.val); } // LUEFTUNGSSTUFEN else if (id == adapter.name + '.' + adapter.instance + '.Einstellungen.Lueften.Lueftungsstufen.STUFE_TAG') { if (debugging === true) adapter.log.info('Setze Lueftungsstufe STUFE-TAG auf: ' + state.val); set_isg_para(adapter.config.isgIP, 'LUEFTERSTUFETAG', state.val); } // RAUM TEMP TAG else if (id == adapter.name + '.' + adapter.instance + '.Einstellungen.Heizen.Raumtemperaturen_HK1.RAUMTEMP_TAG') { if (debugging === true) adapter.log.info('Setze Raumtemperaturen_HK1 RAUMTEMP. TAG auf: ' + state.val); set_isg_para(adapter.config.isgIP, 'RAUMTEMPTAG', state.val); } // WARMWASSER TEMP TAG else if (id == adapter.name + '.' + adapter.instance + '.Einstellungen.Warmwasser.WW-Temperaturen.WW_SOLL_TAG') { if (debugging === true) adapter.log.info('Setze WW-Temperaturen WW SOLL TAG auf: ' + state.val); set_isg_para(adapter.config.isgIP, 'WARMWASSERTEMPTAG', state.val); } }); // is called when databases are connected and adapter received configuration. adapter.on('ready', function () { main(); }); function main() { // Debug Ausgabe im Log const debugging = adapter.config.debugging; // TODO: cron? automatischer adapter restart? // Ausgabe der eingestellten IP im Log if (debugging === true) adapter.log.info('isgIP: ' + adapter.config.isgIP); // TODO: Abbruch bei keiner eingetragenen IP /* if (adapter.config.isgIP === "0.0.0.0") { adapter.log.error('Keine IP Adresse eingetragen! Adapterstart wird abgebrochen!'); fail; } */ // LADE cheerioReq // https://github.com/IonicaBizau/cheerio-req const cheerioReq = require('cheerio-req'); function getISGwebParameters() { /* cheerio & request const cheerio = require('cheerio'); const request = require('request'); request('http://' + adapter.config.isgIP + '/?s=1,0', function (error, response, body) { var $ = cheerio.load(body); ..... } */ // Funktion um die letzten Stellen des Strings zu entfernen: °C || m³/h || Hz || % function removeUnit(input, unitLength, unit) { if (unit) unit.valueOf = unit.toSource = unit.toString = input.substring(input.length - unitLength, input.length); var value = input.substring(0, input.length - unitLength); value = value.replace(/,/, "."); return parseFloat(value); } function removeSign(input, length, unit) { return removeUnit(input, length, unit); } /** * DATENQUELLE: START */ cheerioReq('http://' + adapter.config.isgIP, (err, $) => { // BETRIEBSART var value = $('input#aval39').val(); adapter.setState('Start.Betriebsart', value, true); if (debugging === true) adapter.log.info('BETRIEBSART: ' + value); // SYSTEMSTATUS var value = $('#box_start_status_system div > p.info').text().trim(); adapter.setState('Start.Systemstatus', value, true); if (debugging === true) adapter.log.info('SYSTEMSTATUS: ' + value); // PORTALSTATUS Letzter Kontakt var value = $('#box_start_status_portal div p').eq(0).text().trim(); adapter.setState('Start.Portalstatus_letzter_Kontakt', value, true); if (debugging === true) adapter.log.info('PORTALSTATUS: ' + value); // PORTALSTATUS Schlüssel var value = $('#box_start_status_portal div > p.info').text().trim(); adapter.setState('Start.Portalstatus_Schluessel', value, true); if (debugging === true) adapter.log.info('PORTALSTATUS: ' + value); // ISGweb VERSION var value = $('#versionsNummer').text().trim(); adapter.setState('Start.ISGwebVersion', value, true); if (debugging === true) adapter.log.info('ISGwebVersion: ' + value); // LUEFTERSTUFE fuer DP zum setzen der Luefterstufe --> Später 4,2 // ==> AUS JS auslesen var value = $('script').text().trim(); adapter.log.info('TEST' + value); /* */ }); /** * DATENQUELLE: INFO -> ANLAGE */ cheerioReq('http://' + adapter.config.isgIP + '/?s=1,0', (err, $) => { var d = $("td.value"); //console.log('tds: ' + d); // The parseFloat() function parses a string and returns a floating point number. // The text property sets or returns the text of an option element. // The trim() method removes whitespace from both sides of a string. // The .eq() selector selects an element with a specific index number. The index numbers start at 0, so the first element will have the index number 0 (not 1). var parameter, select, dp; function setStateRemoveUnits(parameter, select, dp) { var value = d.eq(select).text().trim(); //adapter.log.info(parameter + ': ' + value); value = removeSign(value, 2); if (isNaN(value)) value = 0; if (debugging === true) adapter.log.info(parameter + ': ' + value); adapter.setState(dp, value, true); } // RAUMTEMPERATUR setStateRemoveUnits('RAUMISTTEMP_HK1', 0, 'Info.Anlage.Raumtemperatur.RAUMISTTEMP_HK1') setStateRemoveUnits('RAUMSOLLTEMP_HK1', 1, 'Info.Anlage.Raumtemperatur.RAUMSOLLTEMP_HK1') setStateRemoveUnits('RAUMFEUCHTE_HK1', 2, 'Info.Anlage.Raumtemperatur.RAUMFEUCHTE_HK1') setStateRemoveUnits('RAUMISTTEMP_HK2', 3, 'Info.Anlage.Raumtemperatur.RAUMISTTEMP_HK2') setStateRemoveUnits('RAUMSOLLTEMP_HK2', 4, 'Info.Anlage.Raumtemperatur.RAUMSOLLTEMP_HK2') setStateRemoveUnits('RAUMFEUCHTE_HK2', 5, 'Info.Anlage.Raumtemperatur.RAUMFEUCHTE_HK2') // HEIZEN setStateRemoveUnits('AUSSENTEMPERATUR', 6, 'Info.Anlage.Heizen.AUSSENTEMPERATUR') setStateRemoveUnits('ISTWERT_HK1', 7, 'Info.Anlage.Heizen.ISTWERT_HK1') setStateRemoveUnits('SOLLWERT_HK1', 8, 'Info.Anlage.Heizen.SOLLWERT_HK1') setStateRemoveUnits('ISTWERT_HK2', 9, 'Info.Anlage.Heizen.ISTWERT_HK2') setStateRemoveUnits('SOLLWERT_HK2', 10, 'Info.Anlage.Heizen.SOLLWERT_HK2') setStateRemoveUnits('VORLAUFTEMPERATUR', 11, 'Info.Anlage.Heizen.VORLAUFTEMPERATUR') setStateRemoveUnits('RUECKLAUFTEMPERATUR', 12, 'Info.Anlage.Heizen.RUECKLAUFTEMPERATUR') // WARMWASSER setStateRemoveUnits('WW_ISTTEMP', 13, 'Info.Anlage.Warmwasser.WW_ISTTEMP') setStateRemoveUnits('WW_SOLLTEMP', 14, 'Info.Anlage.Warmwasser.WW_SOLLTEMP') // LÜFTEN setStateRemoveUnits('ZULUFT_IST_LUEFTERDREHZAHL', 15, 'Info.Anlage.Lueften.ZULUFT_IST_LUEFTERDREHZAHL') setStateRemoveUnits('ZULUFT_SOLL_VOLUMENSTROM', 16, 'Info.Anlage.Lueften.ZULUFT_SOLL_VOLUMENSTROM') setStateRemoveUnits('ABLUFT_IST_LUEFTERDREHZAHL', 17, 'Info.Anlage.Lueften.ABLUFT_IST_LUEFTERDREHZAHL') setStateRemoveUnits('ABLUFT_SOLL_VOLUMENSTROM', 18, 'Info.Anlage.Lueften.ABLUFT_SOLL_VOLUMENSTROM') // WÄRMEERZEUGER setStateRemoveUnits('HEIZSTUFE', 19, 'Info.Anlage.Waermeerzeuger.HEIZSTUFE') }); // end of cheerioReq() /** * DATENQUELLE: INFO -> WAERMEPUMPE */ cheerioReq('http://' + adapter.config.isgIP + '/?s=1,1', (err, $) => { var d = $("td.value"); var parameter, select, dp; function setStateRemoveUnits(parameter, select, dp) { var value = d.eq(select).text().trim(); //adapter.log.info(parameter + ': ' + value); value = removeSign(value, 2); if (debugging === true) adapter.log.info(parameter + ': ' + value); if (isNaN(value)) value = 0; adapter.setState(dp, value, true); } // PROZESSWERTE setStateRemoveUnits('HEISSGASTEMPERATUR', 0, 'Info.Waermepumpe.Prozesswerte.HEISSGASTEMPERATUR') setStateRemoveUnits('VERDAMPFERTEMP', 1, 'Info.Waermepumpe.Prozesswerte.VERDAMPFERTEMP') setStateRemoveUnits('VERFLUESSIGERTEMP', 2, 'Info.Waermepumpe.Prozesswerte.VERFLUESSIGERTEMP') setStateRemoveUnits('FORTLUFT_IST_LUEFTERDREHZAHL', 3, 'Info.Waermepumpe.Prozesswerte.FORTLUFT_IST_LUEFTERDREHZAHL') setStateRemoveUnits('FORTLUFT_SOLL_VOLUMENSTROM', 4, 'Info.Waermepumpe.Prozesswerte.FORTLUFT_SOLL_VOLUMENSTROM') // WAERMEMENGEN setStateRemoveUnits('WM_HEIZEN_TAG', 5, 'Info.Waermepumpe.Waermemengen.WM_HEIZEN_TAG') setStateRemoveUnits('WM_HEIZEN_SUMME', 6, 'Info.Waermepumpe.Waermemengen.WM_HEIZEN_SUMME') setStateRemoveUnits('WM_WW_TAG', 7, 'Info.Waermepumpe.Waermemengen.WM_WW_TAG') setStateRemoveUnits('WM_WW_SUMME', 8, 'Info.Waermepumpe.Waermemengen.WM_WW_SUMME') setStateRemoveUnits('WM_NE_HEIZEN_SUMME', 9, 'Info.Waermepumpe.Waermemengen.WM_NE_HEIZEN_SUMME') setStateRemoveUnits('WM_NE_WW_SUMME', 10, 'Info.Waermepumpe.Waermemengen.WM_NE_WW_SUMME') setStateRemoveUnits('WM_WRG_TAG', 11, 'Info.Waermepumpe.Waermemengen.WM_WRG_TAG') setStateRemoveUnits('WM_WRG_SUMME', 12, 'Info.Waermepumpe.Waermemengen.WM_WRG_SUMME') // LEISTUNGSAUFNAHME setStateRemoveUnits('P_HEIZUNG_TAG', 13, 'Info.Waermepumpe.Leistungsaufnahme.P_HEIZUNG_TAG') setStateRemoveUnits('P_HEIZUNG_SUMME', 14, 'Info.Waermepumpe.Leistungsaufnahme.P_HEIZUNG_SUMME') setStateRemoveUnits('P_WW_TAG', 15, 'Info.Waermepumpe.Leistungsaufnahme.P_WW_TAG') setStateRemoveUnits('P_WW_SUMME', 16, 'Info.Waermepumpe.Leistungsaufnahme.P_WW_SUMME') // LAUFZEITEN setStateRemoveUnits('VERDICHTER_HEIZEN', 17, 'Info.Waermepumpe.Laufzeiten.VERDICHTER_HEIZEN') setStateRemoveUnits('VERDICHTER_WW', 18, 'Info.Waermepumpe.Laufzeiten.VERDICHTER_WW') setStateRemoveUnits('ELEKTR_NE_HEIZEN', 19, 'Info.Waermepumpe.Laufzeiten.ELEKTR_NE_HEIZEN') setStateRemoveUnits('ELEKTR_NE_WW', 20, 'Info.Waermepumpe.Laufzeiten.ELEKTR_NE_WW') }); // end of cheerioReq() setTimeout(function () { getISGwebParameters(); }, 10000); } // end of getISGwebParameters() if (adapter.config.loadISGwebParameters === true) { getISGwebParameters(); } // in this stiebel-lwz all states changes inside the adapters namespace are subscribed adapter.subscribeStates('*'); /* setTimeout(function () { getISGwebParameters(); adapter.stop(); }, 10000); */ } // end of main()