Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Adapter Entwicklung - cheerio - $ is not defined

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Adapter Entwicklung - cheerio - $ is not defined

Geplant Angeheftet Gesperrt Verschoben Entwicklung
5 Beiträge 2 Kommentatoren 601 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    darkiop
    Most Active
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich möchte in einem Adapter cheerio einsetzen mittels $ den DOM auslesen, das Skript funktioniert außerhalb des Adapters ohne Fehler.

    Wieso gibt es hier Probleme?

    /* jshint -W097 */ // jshint strict:false
    /*jslint node: true */
    'use strict';
    
    // https://nodejs.org/api/child_process.html
    const {
        exec
    } = require('child_process');
    
    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));
    });
    
    // is called if a subscribed state changes
    adapter.on('stateChange', function (id, state) {
    
        // Warning, state can be null if it was deleted
        adapter.log.info('stateChange ' + id + ' ' + JSON.stringify(state));
    
        /**
         * SENDE PARAMETER AN ISG
         */
    
        // 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;
                }
                console.log(stdout);
            });
        }
    
        // BETRIEBSART
        if (id == adapter.name + '.' + adapter.instance + '.Start.Betriebsart') {
            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') {
            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') {
            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') {
            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() {
    
        // Ausgabe der eingestellten IP im Log
        adapter.log.info('isgIP: ' + adapter.config.isgIP);
    
        /**
         * LESE PARAMETER AUS ISG
         */
    
        // Lade aktuelle Betriebsart bei Start in Objekt
        function load_isg_parameters() {
    
            // https://github.com/IonicaBizau/cheerio-req    
            const cheerioReq = require("cheerio-req");
    
            // BETRIEBSART
            cheerioReq('http://' + adapter.config.isgIP, (err, $) => {
                var betriebsart = $('input#aval39').val();
                adapter.setState('Start.Betriebsart', betriebsart, true);
                adapter.log.info('Aktuelle Betriebsart:' + betriebsart);
            });
    
        } // end of load_isg_parameters()
    
        // TEST
        function ISG() {
    
            var cheerio = require('cheerio');
            var request = require('request');
    
            request('http://' + adapter.config.isgIP + '/?s=1,0', function (error, response, body) {
    
                $ = cheerio.load(body);
    
                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 AUSSENTEMPERATUR = d.eq(6).text().trim();
                AUSSENTEMPERATUR = removeDegreeUnit(AUSSENTEMPERATUR);
                adapter.setState('TEST.AUSSENTEMPERATUR', AUSSENTEMPERATUR, true);
                adapter.log('AUSSENTEMPERATUR: ' + AUSSENTEMPERATUR);
    
                function checkFalseBool(input, checkvalue) {
                    var result = (input != checkvalue);
                    return Boolean(result);
                }
    
                function checkTrueBool(input, checkvalue) {
                    var result = input == checkvalue;
                    return Boolean(result);
                }
    
                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 removeHourUnit(input, unit) {
                    return removeUnit(input, 2, unit);
                }
    
                function removePowerUnit(input, unit) {
                    return removeUnit(input, 4);
                }
    
                function removePressureUnit(input, unit) {
                    return removeUnit(input, 4);
                }
    
                function removeDegreeUnit(input, unit) {
                    return removeUnit(input, 2, unit);
                }
    
            }); // end of request()
    
        } // end of ISG()
    
        if (adapter.config.loadISGwebParameters === true) {
            load_isg_parameters();
            ISG();
        }
    
        // in this stiebel-lwz all states changes inside the adapters namespace are subscribed
        adapter.subscribeStates('*');
    
    } // end of main()
    
    

    Log:

    2018-07-13 20:40:59.857 - error: Caught by controller[0]: ReferenceError: $ is not defined
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at Request._callback (/opt/iobroker/node_modules/iobroker.stiebel-lwz/stiebel-lwz.js:112:15)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at Request.self.callback (/opt/iobroker/node_modules/iobroker.stiebel-lwz/node_modules/request/request.js:185:22)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at emitTwo (events.js:106:13)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at Request.emit (events.js:191:7)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at Request. (/opt/iobroker/node_modules/iobroker.stiebel-lwz/node_modules/request/request.js:1157:10)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at emitOne (events.js:96:13)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at Request.emit (events.js:188:7)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at IncomingMessage. (/opt/iobroker/node_modules/iobroker.stiebel-lwz/node_modules/request/request.js:1079:12)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at IncomingMessage.g (events.js:292:16)
    2018-07-13 20:40:59.858 - error: Caught by controller[0]: at emitNone (events.js:91:20)
    2018-07-13 20:40:59.858 - error: host.zeus-vm-iobroker instance system.adapter.stiebel-lwz.0 terminated with code 0 (OK)
    
    

    Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

    1 Antwort Letzte Antwort
    0
    • apollon77A Online
      apollon77A Online
      apollon77
      schrieb am zuletzt editiert von
      #2

      Ich denke du nutzt es nicht korrekt. Ich finde weder ein

      var $

      Noch ein

      const $

      Kann seien das nur ein var fehlt bei der einen Zuweisung?

      Gesendet vom Handy …

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        darkiop
        Most Active
        schrieb am zuletzt editiert von
        #3

        Das wars, die Deklaration des $. Desweiteren fehlt bei beim adapter.log noch ein .info …

        Ist ioBroker da etwas spezieller? Der Code lief im JS-Adapter auch ohne var/const

        Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

        1 Antwort Letzte Antwort
        0
        • apollon77A Online
          apollon77A Online
          apollon77
          schrieb am zuletzt editiert von
          #4

          Naja, eher der JavaScript Adapter ist da spezieller.

          Dort läuft alles in einer sandbox und denke eher nicht als „strict“ deklariert was für Adapter eher im Standard do ist. Und all sowas ;-))

          Gesendet vom Handy …

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          • D Offline
            D Offline
            darkiop
            Most Active
            schrieb am zuletzt editiert von
            #5

            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

            Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            582

            Online

            32.7k

            Benutzer

            82.3k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe