Skip to content

Entwicklung

Diskussionen und Hilfe für die Entwicklung von ioBroker und Adaptern.

1.3k Themen 31.6k Beiträge

NEWS

  • Mehrere requests syncron laufen lassen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    347 Aufrufe
    MeistertrM
    da ich mit der zeit gehen will und mich promises interessiert, versuche ich das mal…
  • [Gelöst] Discovery Adapter

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    639 Aufrufe
    unltdnetworxU
    Ich habe das o.g. Problem jetzt anders gelöst. Die vorgerfertige Function "tools.httpGet" brachte mich leider zu keinem Ergebnis, daher habe ich "http.get" direkt eingebunden.
  • JavaScript - GREP?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    451 Aufrufe
    apollon77A
    Mit regex ist man ein bissl flexibler in Bezug auf Änderungen. Aber ist aufwändiger. Ich nutze immer regex101.com zum bauen/experimentieren. Gesendet vom Handy …
  • Samsung TV H series - Problem

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    11k Aufrufe
    H
    mach mal dazu einen neuen beitrag auf und lass uns dort darüber reden kurze info zu tv und türanlage gleich rein
  • [Gelöst] Discovery über Ping

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    912 Aufrufe
    foxriver76F
    @unltdnetworx: Jetzt hab ichs glaub ich: ! ``` `function enumAdapters(repository) { var dir = fs.readdirSync(__dirname + '/lib/adapters'); for (var f = 0; f < dir.length; f++) { var parts = dir[f].split('.'); if (parts[parts.length - 1] === 'js') { parts.pop(); var moduleName = __dirname + '/lib/adapters/' + dir[f]; var aName = parts.join('.'); if (adapters && adapters[aname] && adapters[aname].reloadModule) { var module = require.resolve(moduleName); delete require.cache[module]; delete adapters[aname]; } ! // check if this adapter available in repository if (!adapters[aname] && (!repository || repository.indexOf(aName) !== -1)) { adapters[aname] = require(moduleName); } } } }! In der letzte if-Zeile muss[code]&& (!repository || repository.indexOf(aName) !== -1)[/code]entfernt werden. Ich hab mir die Zeile kopiert und ausgeklammert im Entwicklungssystem. ! Wow, da ist ja sogar nen Comment im Code --> dann bin ich selbst schuld :D ! Ist auf jeden Fall der Ursprung des Problems, vielen Dank.[/aname][/aname][/aname][/aname][/aname] ```
  • [Frage] Debuggen von child Prozessen mit WebStorm

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    476 Aufrufe
    arteckA
    @Stabilostick: Brauchst du die setup.js vorher für was? Warum startest du den js-controler.js nicht direkt mit Webstorm? ` das währe auch meine Frage gewesen..
  • Automatischer Adapter Neustart

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    D
    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()
  • [Erledigt] Änderung vom index_m sofort sichtbar machen

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    344 Aufrufe
    M
    @apollon77: iobroker upload adaptername lädt die admin files und io-package.sjon Änderungen intern hoch sodass sie verwendet werden ` Das war es schon… Vielen Dank!
  • Widget style.css wird nicht beachtet bei Änderung

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    176 Aufrufe
    Niemand hat geantwortet
  • States-DB

    Verschoben
    19
    0 Stimmen
    19 Beiträge
    1k Aufrufe
    apollon77A
    socket.io in neueren Versionen gabmmehr Probleme als alles andere … leider. keine Ahnung was die da kaputt gemacht haben. Ich denke optimierter ist nur ein "TCP basierters eigenes protokoll". Ich könnte da auch ein paar verrückte Ideen kommen ... aber die Diskutier ich lieber erstmal direkt mit Bluefox :-)
  • Adapter Judo I-Soft plus

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    R
    Das wird natürlich bei einer Wasseraufbereitung nicht gehen. Da gibt es Optionen wie z.b Urlaubsmodus , Wasserstop usw..
  • Adapter Entwicklung - cheerio - $ is not defined

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    601 Aufrufe
    D
    Ok Super, vielen Dank!! Komme aktuell bei dem Adapter relativ schnell weiter - wäre super wenn du nochmal drüber schauen könntest und mir meine TODO entsprechend erweitern könntest damit der irgendwann mal offiziell Aufgenommen werden kann. Grüße, Thorsten
  • Information für Datenpunkt aus Javascript auslesen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    312 Aufrufe
    Niemand hat geantwortet
  • [Frage] Wie lautet der Syntax für adapter.getState

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    apollon77A
    Menno … stimmt ... du hast recht ... ohje ... :-)
  • [gelöst] Adapter Instanzen auslesen

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    960 Aufrufe
    apollon77A
    ;-)) Bitte auf gelöst setzen. Danke. Gesendet vom Handy …
  • Versuch Adapterentwicklung - Scheitere an Github

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    BuZZyB
    Ich verwende "Github Desktop" (Offizieller Windows Github Client) zum Pushen / Pullen etc und programmiere in VS Code.. Funktioniert alles wunderbar! Du kannst einfach die iobroker.template Repo runterladen (als Zip), in einen Ordner entpacken und dann alles da drin programmieren.. Im Github Desktop sagst du ihm dann dass dieser Ordner eine neue Repo ist und schon kannst du den Ordner als neue Repo auf Github veröffentlichen.. (Shit.. Ich wusste ich hätte lieber ein Tutorial dafür schreiben sollen.. :( :lol: ) Gruß
  • Analytics-Adapter / DB-Harmonisierung

    Verschoben
    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    StabilostickS
    Ich sag ja: "Ich lass das mal auf mich einige Zeit wirken…" :lol:
  • Erinnerung: Adapter auch im Stable Repo updaten!

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    281 Aufrufe
    Niemand hat geantwortet
  • Homee Adapter - ein homee Brain wartet auf einen Entwickler

    Verschoben
    30
    0 Stimmen
    30 Beiträge
    5k Aufrufe
    apollon77A
    So … ... ... ... ... here you go ... --> viewtopic.php?f=36&t=15247
  • Words.js erzeugen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    373 Aufrufe
    simatecS
    Ich habe das Problem gelöst … es gab ein Problem mit dem Paket gulp-cli

472

Online

32.6k

Benutzer

82.3k

Themen

1.3m

Beiträge