Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Probleme mit Request Aufruf

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Probleme mit Request Aufruf

    This topic has been deleted. Only users with topic management privileges can see it.
    • Baumert
      Baumert last edited by

      Hallo zusammen,
      nach längerer Zeit habe nehme ich die Weiterentwicklung meine Adapters "Repetierserver2" wieder auf und muss einiges in Ordnung bringen.
      Seit dem Update auf js-controller 3.2 läuft mein Adapter nicht mehr - ich habe Probleme mit dem Requestaufruf. ich bin hier jetzt schon seit Tagen dran und komme nicht weiter, daher jetzt ein Hilfeaufruf.

      Beim Aufruf der folgenden Funktion bricht das Programm immer mit der Fehlermeldung (Log vom Start bis zum Abbruch):

      2021-07-02 14:35:19.845  - info: repetierserver.0 (19280) starting. Version 0.0.4 in C:/Program Files/iobroker/Testsystem2/node_modules/iobroker.repetierserver, node: v10.17.0, js-controller: 3.2.16
      2021-07-02 14:35:19.867  - info: repetierserver.0 (19280) Repetierserver verbunden
      2021-07-02 14:35:19.870  - info: repetierserver.0 (19280) Repetier IP: 192.168.178.40
      2021-07-02 14:35:19.874  - info: repetierserver.0 (19280) Repetier ApiKey: d6b9f507-c78d-44e2-bf8b-9ecbfb81f971
      2021-07-02 14:35:19.876  - info: repetierserver.0 (19280) Repetier-Port: 3344
      2021-07-02 14:35:19.879  - debug: repetierserver.0 (19280) RepetierServer states subscribed
      2021-07-02 14:35:29.314  - error: repetierserver.0 (19280) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
      2021-07-02 14:35:29.316  - error: repetierserver.0 (19280) unhandled promise rejection: The id is empty! Please provide a valid id.
      2021-07-02 14:35:29.318  - error: repetierserver.0 (19280) Error: The id is empty! Please provide a valid id.
          at validateId (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.js-controller\lib\adapter.js:496:19)
          at Template.setObjectNotExists (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.js-controller\lib\adapter.js:3298:17)
          at SetKanal (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:1809:14)
          at PrinterKanaele (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:1601:5)
          at Request._callback (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:610:29)
          at Request.self.callback (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:185:22)
          at Request.emit (events.js:198:13)
          at Request.<anonymous> (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:1154:10)
          at Request.emit (events.js:198:13)
          at IncomingMessage.<anonymous> (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:1076:12)
      2021-07-02 14:35:29.322  - error: repetierserver.0 (19280) The id is empty! Please provide a valid id.
      2021-07-02 14:35:29.324  - error: repetierserver.0 (19280) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
      2021-07-02 14:35:29.326  - error: repetierserver.0 (19280) unhandled promise rejection: The id is empty! Please provide a valid id.
      2021-07-02 14:35:29.327  - error: repetierserver.0 (19280) Error: The id is empty! Please provide a valid id.
          at validateId (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.js-controller\lib\adapter.js:496:19)
          at Template.extendObject (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.js-controller\lib\adapter.js:2062:17)
          at SetKanal (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:1818:14)
          at PrinterKanaele (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:1601:5)
          at Request._callback (C:\Program Files\iobroker\Testsystem2\node_modules\iobroker.repetierserver\main.js:610:29)
          at Request.self.callback (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:185:22)
          at Request.emit (events.js:198:13)
          at Request.<anonymous> (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:1154:10)
          at Request.emit (events.js:198:13)
          at IncomingMessage.<anonymous> (C:\Program Files\iobroker\Testsystem2\node_modules\request\request.js:1076:12)
      2021-07-02 14:35:29.329  - error: repetierserver.0 (19280) The id is empty! Please provide a valid id.
      2021-07-02 14:35:29.350  - info: repetierserver.0 (19280) Repetier-Server-Service bereinigt ...
      2021-07-02 14:35:29.352  - info: repetierserver.0 (19280) Repetier-Server-Verbindung beendet ...
      2021-07-02 14:35:29.353  - info: repetierserver.0 (19280) Repetier-Server-Dienst gestoppt ...
      2021-07-02 14:35:29.355  - info: repetierserver.0 (19280) terminating
      2021-07-02 14:35:29.356  - warn: repetierserver.0 (19280) Terminated (UNCAUGHT_EXCEPTION): Without reason
      
      

      Code hierzu:

      // neue oder gelöschte Printer
      function printerUpdate(tadapter, refreshtime){
       
          // Variable für Printeranzahl
          let fprintercnt = 0;
          let fprintername = '';
          let erl = false;
      
          // Abfrage und Auswertung
          Request(
              {
                  url:  'http://' + repetierIP + ':' + repetierPort + '/printer/info',
                  json: true
              },
      
              function(error, response, content){
                  
                  if (!error && response.statusCode == 200){
      
                      //Druckeranzahl
                      fprintercnt = content.printers.length;
      
                      // Alle Drucker einlesen
                      for (let pp = 0; pp < fprintercnt; pp++) {
      
                          // Druckername
                          // Array aprinter füllen
                          aprinter[pp] = content.printers[pp].slug;
      
                          // über alle Printer
                          for (let p = 0; p < fprintercnt; p++) {
      
                              // Printername 
                              fprintername = aprinter[p];
      
                              if (fprintername){
      
                                  // Kanal anlegen/pflegen
                                  PrinterKanaele(tadapter, fprintername)
                                  //printerdatenpfad = printerpath + 'Printer_' + fprintername;
                                  //SetKanal(tadapter, printerdatenpfad, 'Printer ' + fprintername);
      
                                  //  hier wurden die weiteren Funktionen entfernt, damit der Code nicht zu lange wird
      
                                  // Druckgeschwindigkeit ändern (10% - 300%)
                                  printerdatenpfad = printerpath + 'Printer_' + fprintername + '.Steuern.Werte.Druckgeschwindigkeit';
                                  DatenAusgabe(tadapter, printerdatenpfad, 'state', 'Druckgeschwindigkeit ändern', 'number', true, true, '%', 'value', 100); 
                      
                              }
                          }
      
                          // Message ausgeben
                          PrinterMessage(tadapter, 'Printerupdate durchgeführt');
      
                          // Auswertung merken
                          printerauswertung = true;
      
                          // Durchlauf erledigt
                          erl = true;
                      }
                  }
              }
          );
          
          //Funktion erneut nach x Sekunden aufrufen
          if (erl = false){
              clearTimeout(tou1);
              tou1 = setTimeout(() => {
                  printerUpdate(tadapter, refreshtime);
              }, refreshtime);
          }
          else{
              clearTimeout(tou1);
          }
      
      }
      
      

      Code innerhalb der Funktion wurde gekürzt, damit es nicht noch länger wird!

      Kurz zum Ablauf -

      • Funktion wird aufgerufen und Request wird ausgeführt (geprüft über Breakpoint in Zeile 5)
      • Programm läuft ausserhalb der Funktion weiter
      • nach kurzer Zeit springt der Code wieder in die Funktion und führt den Code ab "function(error, responce, content)" (Zeile 16) weiter und führt ihn ordnungsgemäß bis zur geschweiften Klammer (Zeile 74) durch
      • jetzt springt er in das Fehlerhandling mit den oben angegeben Fehlerausgaben

      Das ich aus einer anderen Programmierwelt komme, tue ich mich schwer, wenn es so tief ins "Eingemachte" geht.

      Übrigends: Bei der Internetsuche zu diesem Problem bin ich immer wieder auf die Anmerkung gekommen, dass der Code:

      const Request = require('request');
      

      nicht notwendig ist, da 'Request' mittlerweile Bestandteil von Javascript ist - ohne diese Zuweisung funktioniert es bei mir nicht!

      Vorab vielen Dank für Eure Unterstützung
      Grüße Baumert

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Baumert last edited by paul53

        @baumert sagte: da 'Request' mittlerweile Bestandteil von Javascript ist

        'request' ist Bestandteil des Javascript-Adapters in ioBroker.

        @baumert sagte: ohne diese Zuweisung funktioniert es bei mir nicht!

        Da Du Request() groß schreibst bzw. request() in einem Adapter verwendest.

        Baumert 1 Reply Last reply Reply Quote 0
        • Baumert
          Baumert @paul53 last edited by

          Ich habe es schon mit Groß- und Kleinschreibung bei bei request() versucht, spielt bei mir keine Rolle - ich benötige immer

          const request = require('request');
          

          Muss ich es anderes aufrufen, wenn es Bestandteil im Javascript-Adapter bei ioBroker ist?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Baumert last edited by

            @baumert sagte: ich benötige immer

            const request = require('request');
            

            Ja natürlich, da Du es in einem eigenen Adapter verwendest.

            Baumert 1 Reply Last reply Reply Quote 0
            • Baumert
              Baumert @paul53 last edited by

              ok, dann ist diese Frage beantwortet - vielen Dank

              Baumert 1 Reply Last reply Reply Quote 0
              • Baumert
                Baumert @Baumert last edited by

                mal kurz eine andere Frage hierzu:
                Kann man die Funktion auch "Synchron" aufrufen/ausführen?
                Der asynchrone Ablauf liegt mir nicht so, gerade bei debuggen finde ich es schwierig - ich muss hier immer mit definierten Breakpoints arbeiten.
                Wahrscheinlich liegt mein Problem auch bei der asynchronen Abarbeitung.

                Gargano 1 Reply Last reply Reply Quote 0
                • Gargano
                  Gargano @Baumert last edited by

                  @baumert nur als Hinweis. Request wird mittlerweile als deprecated im Netz gesehen
                  axios ist da wohl die.bessere Wahl. Bringt alles mit , auch promised based

                  Baumert 1 Reply Last reply Reply Quote 0
                  • Baumert
                    Baumert @Gargano last edited by

                    Danke für den Hinweis - schaue ich mir mal an...

                    Baumert 1 Reply Last reply Reply Quote 0
                    • Baumert
                      Baumert @Baumert last edited by

                      @gargano
                      Hallo, super Hinweis mit axios - ich habe eine Funktion jetzt mal von 'request' auf 'axios' umgestellt und dabei gleich mit async und await gearbeitet -> funktioniert einwandfrei.
                      Hier mal ein Auszug meines neuen Codes:

                      // neue oder gelöschte Printer
                      async function printerUpdate(tadapter, refreshtime){
                       
                          // Variable für Printeranzahl
                          let fprintercnt = 0;
                          let fprintername = '';
                          let erl = false;
                      
                          // Abfrage und Auswertung
                          let response = await axios.get('http://' + repetierIP + ':' + repetierPort + '/printer/info');
                          let content = response.data;
                      
                          if (response.status == 200){
                      
                              //Druckeranzahl
                              fprintercnt = content.printers.length;
                      

                      Er ist jetzt noch nicht optimal, aber es funktioniert erst einmal...
                      Danke und Grüße

                      Baumert 1 Reply Last reply Reply Quote -1
                      • Baumert
                        Baumert @Baumert last edited by

                        Hallo, ich habe jetzt komplett auf axios und async/await umgestellt - die oben genannten Probleme sind jetzt weg und der Adapter läuft wieder - vielen Dank für Eure Unterstützung.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        473
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        iobroker request adapter
                        3
                        10
                        338
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo