Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Skript auf AXIOS/httpGet umbauen

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [gelöst] Skript auf AXIOS/httpGet umbauen

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Guten Morgen,

      bin auch gerade an dem Thema dran:

      mit request lasse ich mir Bilder der cam an telegram senden, wie folgt:

      var ip = 159; var vUser = "Dieter"; var cam = "Test";
      
      var request = require('request');
      var fs      = require('fs');
          request.get({url: 'http://192.168.243.' + ip + ':88//cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xx&pwd=xx', encoding: 'binary'}, function (err, response, body) {
              fs.writeFile('/opt/iobroker/iobroker-data/tmp/snap' + ip + '.jpg', body, 'binary', function(err) {
              if (err) {
                  console.error(err);
              } else {
                  log('Snapshot sent '+ ip);
                  sendTo('telegram.0', {user: vUser, text: '/opt/iobroker/iobroker-data/tmp/snap' + ip + '.jpg', caption: cam});
              }
            }); 
          });
      

      Wenn ich dies nun mit axios versuche, klappt dies nicht:

      var ip = 159; var vUser = "Dieter"; var cam = "Test";
      
      const axios = require('axios');
      var fs      = require('fs');
          axios.get({url: 'http://192.168.243.' + ip + ':88//cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xx&pwd=xx', encoding: 'binary'}, function (err, response, body) {
              fs.writeFile('/opt/iobroker/iobroker-data/tmp/snap' + ip + '.jpg', body, 'binary', function(err) {
              if (err) {
                  console.error(err);
              } else {
                  log('Snapshot sent '+ ip);
                  sendTo('telegram.0', {user: vUser, text: '/opt/iobroker/iobroker-data/tmp/snap' + ip + '.jpg', caption: cam});
              }
            }); 
          });
      

      Kann der axios diesen "binary" nicht ?
      Oder liegt es an etwas anderes ?

      Vielleicht auch ne Info wie der Befehl mit httpget aussehen müsste.
      Danke.

      haus-automatisierung 1 Reply Last reply Reply Quote 0
      • haus-automatisierung
        haus-automatisierung Developer Most Active @bahnuhr last edited by

        @bahnuhr sagte in [gelöst] Skript auf AXIOS umbauen:

        Kann der axios diesen "binary" nicht ?

        Du kannst nicht einfach nur 1:1 die Funktion austauschen. Dokumentation gibts hier: https://github.com/axios/axios

        Das Ganze heißt responseEncoding: 'binary', im Config-Objekt. Aber warum nutzt Du nicht httpGet ?

        https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httpget

        haus-automatisierung bahnuhr 2 Replies Last reply Reply Quote 1
        • haus-automatisierung
          haus-automatisierung Developer Most Active @haus-automatisierung last edited by haus-automatisierung

          nicht getestet, nur im Forum programmiert

          const fs = require('node:fs');
          
          const ip = 159;
          const vUser = 'Dieter';
          const cam = 'Test';
          
          httpGet(`http://192.168.243.${ip}:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xx&pwd=xx`, { responseType: 'arraybuffer' }, (err, response) => {
              if (err) {
                  console.error(err);
              } else {
                  const filePath = `/opt/iobroker/iobroker-data/tmp/snap${ip}.jpg`;
          
                  fs.writeFile(filePath, response.data, (err) => {
                      if (err) {
                          console.error(err);
                      } else {
                          log(`Snapshot sent: ${ip}`);
          
                          sendTo('telegram.0', {
                              user: vUser,
                              text: filePath,
                              caption: cam
                          });
                      }
                  });
              }
          });
          
          1 Reply Last reply Reply Quote 1
          • bahnuhr
            bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

            @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

            Aber warum nutzt Du nicht httpGet ?

            weil es mit der 7.8.0 noch nicht funktioniert.
            und die 7.9.0 ist noch nicht stable.

            Muss ich wohl mal die beta installieren.

            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @bahnuhr last edited by haus-automatisierung

              @bahnuhr sagte in [gelöst] Skript auf AXIOS umbauen:

              Muss ich wohl mal die beta installieren.

              In 8.3.0 habe ich heute noch eine weitere Funktion eingefügt. Damit wird das noch kürzer:

              const ip = 159;
              const user = 'Dieter';
              const caption = 'Test';
               
              httpGet(`http://192.168.243.${ip}:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xx&pwd=xx`, { responseType: 'arraybuffer' }, (err, response) => {
                  if (err) {
                      console.error(err);
                  } else {
                      sendTo('telegram.0', {
                          user,
                          caption,
                          text: createTempFile(`snap${ip}.jpg`, response.data),
                      });
                  }
              });
              
              
              bahnuhr 1 Reply Last reply Reply Quote 1
              • bahnuhr
                bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

                @haus-automatisierung
                so, habs ausprobiert (bin jetzt auf 8.3.0).

                Wenn ich folgenden kleinen code ausführe:

                httpGet(`http://192.168.243.203/YamahaExtendedControl/v1/main/setPower?power=standby`, { responseType: 'text' }, (err, response) => {
                    if (err) { console.error(err); } else { log (""); }
                });
                

                kommt trotzdem im log:

                	script.js.Scripte.test6: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
                

                Warum kommt dies im log ?
                (httpGet ist in JS auch rot unterstrichen)

                Benutze doch httpGet.

                haus-automatisierung liv-in-sky 2 Replies Last reply Reply Quote 0
                • haus-automatisierung
                  haus-automatisierung Developer Most Active @bahnuhr last edited by

                  @bahnuhr sagte in [gelöst] Skript auf AXIOS umbauen:

                  Warum kommt dies im log ?
                  (httpGet ist in JS auch rot unterstrichen)

                  Kann ich nicht reproduzieren, die Meldung kommt auch nur, wenn require aufgerufen wird. Und das passiert bei Dir im Script ja nicht.

                  Du hast aber schon über npm installiert (und nicht über GitHub), oder?

                  bahnuhr 2 Replies Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

                    @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

                    Und das passiert bei Dir im Script ja nicht.

                    korrekt, aber die Meldung kommt trotzdem.

                    @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

                    Du hast aber schon über npm installiert (und nicht über GitHub), oder?

                    ja, über npm

                    1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

                      @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

                      die Meldung kommt auch nur, wenn require aufgerufen wird.

                      Das ist bei mir nicht so.
                      Habe mal iob komplett neu gestartet.

                      Meldung kommt, obwohl im aufgerufenen Script kein request drin steht.
                      (wohl aber noch bei anderen).

                      Kann es sein, dass die Meldung trotzdem kommt, weil irgendwo noch ein request drin steht (von den gefühlt 500 Scripten).

                      joergeli 1 Reply Last reply Reply Quote 0
                      • joergeli
                        joergeli @bahnuhr last edited by

                        @bahnuhr sagte in [gelöst] Skript auf AXIOS umbauen:

                        Kann es sein, dass die Meldung trotzdem kommt, weil irgendwo noch ein request drin steht (von den gefühlt 500 Scripten).

                        Meines Erachtens nicht, da ich ebenfalls gerade am Umbauen von request auf httpGet bin.
                        Bei bereits auf httpGet umgestellten Scripten kommt keine request-deprecated-Meldung mehr, bei den Scripten die noch request verwenden, kommt sie noch.

                        bahnuhr 1 Reply Last reply Reply Quote 2
                        • bahnuhr
                          bahnuhr Forum Testing Most Active @joergeli last edited by

                          @joergeli
                          Danke für die Info.
                          Bei mir ist das nicht ! so.

                          Folgendes Script zum Starten von Licht:

                          
                          // Bewegung: Bad_EG -> Dimmer einschalten
                          
                          on('alias.0.HM.Bewegung.Bad_EG.MOTION', function (obj) {  // Bewegung erkannt
                              var Status_auto = getState('javascript.0.System.Automatik.Licht.Bad_EG').val;   //  Automatik Licht true
                              var Licht_level = getState('alias.0.HM.Dimmer.Bad_EG.LEVEL').val;   //  Licht level aktuell
                              var Hell = getState('alias.0.HM.Bewegung.Bad_EG.BRIGHTNESS').val;   //  Helligkeit
                              var Modus_Dusche = getState('javascript.0.System.Modus.Modus_Dusche').val;   //  Modus Dusche aktiv?
                          
                              if(Status_auto === true && Licht_level === 0 && Modus_Dusche == false) {   //  Automatik Licht auf true und Licht ist aus und Modus überprüfen
                                  if (Hell < 35) {
                                      setState('alias.0.HM.Dimmer.Bad_EG.LEVEL',5);
                                      log("Helligkeit = " + Hell + "; Dimmer Bad_EG auf 5% eingeschaltet.");
                                      setTimeout(function() {
                                          pruef_aus();
                                      }, 120000);   // nach 2 min. Prüfung
                                  }
                              }
                          });
                          
                          function pruef_aus() {
                              var level = getState('alias.0.HM.Dimmer.Bad_EG.LEVEL').val;   //  Licht level aktuell
                              var Modus_Dusche = getState('javascript.0.System.Modus.Modus_Dusche').val;   //  Modus Dusche aktiv?
                              if (level > 0) {
                                  if (getState('alias.0.HM.Bewegung.Bad_EG.MOTION').val == false){
                                      if (Modus_Dusche == false) {
                                          setState('alias.0.HM.Dimmer.Bad_EG.LEVEL', 0);
                                          log("Licht Bad EG ausgeschaltet.");
                                      }
                                  } else {
                                      log("Licht Bad EG nicht ausgeschaltet. Erneute Prüfung nach 2 min.");
                                      setTimeout(function() {
                                          pruef_aus ();
                                      }, 120000);   // nach 2 min. erneute Prüfung
                                  }
                              }
                          }
                          
                          // -----------------------------------------------------------------------------------------------------------
                          // Bewegung: Bad_EG -> Spiegelschrank einschalten
                          
                          on('mqtt.2.Wemos_BadEG.PIR1', function (obj) {  // Bewegung erkannt mit Wemos
                              var Status_auto2 = getState('javascript.0.System.Automatik.Licht.Bad_EG').val;   //  Automatik Licht true
                              var Licht_state = getState('mqtt.2.Wemos_BadEG.POWER').val;   //  Licht Spiegelschrank aktuell
                              var Hell2 = getState('alias.0.HM.Bewegung.Bad_EG.BRIGHTNESS').val;   //  Helligkeit
                              var Modus_Dusche2 = getState('javascript.0.System.Modus.Modus_Dusche').val;   //  Modus Dusche aktiv?
                              if(obj.state.val == "ON" && Status_auto2 == true && Licht_state == "OFF" && Modus_Dusche2 == false) {   //  Automatik Licht auf true und Licht ist aus und Modus überprüfen
                                  if (Hell2 < 100) {
                                      httpGet("http://192.168.243.175/cm?cmnd=Power1%20On", { responseType: 'text' }, (err, response) => { if (err) { console.error(err); } else { log (""); } });
                                      log("Helligkeit = " + Hell2 + "; Licht Bad EG - Spiegelschrank eingeschaltet.");
                                      setTimeout(function() {
                                          pruef_aus2();
                                      }, 120000);   // nach 2 min. Prüfung
                                  }
                              }
                          });
                          
                          function pruef_aus2() {
                              var state2 = getState('mqtt.2.Wemos_BadEG.POWER').val;   //  Licht Spiegelschrank aktuell
                              var Modus_Dusche2 = getState('javascript.0.System.Modus.Modus_Dusche').val;   //  Modus Dusche aktiv?
                              if (state2 == "ON") {
                                  if (getState('alias.0.HM.Bewegung.Bad_EG.MOTION').val === false){
                                      if (Modus_Dusche2 === false) {
                                          httpGet("http://192.168.243.175/cm?cmnd=Power1%20Off", { responseType: 'text' }, (err, response) => { if (err) { console.error(err); } else { log (""); } });
                                          log("Licht Bad EG - Spiegelschrank ausgeschaltet.");
                                      }
                                  } else {
                                      log("Licht Bad EG - Spiegelschrank nicht ausgeschaltet. Erneute Prüfung nach 2 min.");
                                      setTimeout(function() {
                                          pruef_aus2();
                                      }, 120000);   // nach 2 min. erneute Prüfung
                                  }
                              }
                          }
                          
                          
                          // Bewegung: Bad_EG -> Spiegelschrank - Status ändert sich
                              on('mqtt.2.Wemos_BadEG.POWER', function (obj) {  // Status Power ändert sich
                                  if (obj.state.val == "ON") { if (getState("javascript.0.Geräte.Bad-EG.Spiegelschrank").val != true) { setState("javascript.0.Geräte.Bad-EG.Spiegelschrank", true); }
                                  } else { if (getState("javascript.0.Geräte.Bad-EG.Spiegelschrank").val != false) { setState("javascript.0.Geräte.Bad-EG.Spiegelschrank", false); }}
                              });
                          
                              on('javascript.0.Geräte.Bad-EG.Spiegelschrank', function (obj) {  // Status Variable ändert sich
                                  if (obj.state.val == true) { if (getState("mqtt.2.Wemos_BadEG.POWER").val != "ON") { 
                                      httpGet("http://192.168.243.175/cm?cmnd=Power1%20On", { responseType: 'text' }, (err, response) => { if (err) { console.error(err); } else { log (""); } });
                                  }
                                  } else { if (getState("mqtt.2.Wemos_BadEG.POWER").val != "OFF") { 
                                      httpGet("http://192.168.243.175/cm?cmnd=Power1%20Off", { responseType: 'text' }, (err, response) => { if (err) { console.error(err); } else { log (""); } });
                                  }}
                              });
                          

                          Wenn ich dieses Script neu starte mit:
                          dfc6a9bd-519c-4e78-b839-52dad719b8aa-image.png

                          dann kommt sofort im log:

                          javascript.0	08:31:27.975	info	Start JavaScript script.js.Scripte.Licht.Bad_EG (JavaScript/js)
                          javascript.0	08:31:27.987	warn	script.js.Scripte.Licht.Bad_EG: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
                          javascript.0	08:31:27.987	info	script.js.Scripte.Licht.Bad_EG: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                          

                          und dieses ist umgestellt auf httpGet.

                          Äußerst merkwürdig das ganze.

                          1 Reply Last reply Reply Quote 0
                          • liv-in-sky
                            liv-in-sky @bahnuhr last edited by liv-in-sky

                            @bahnuhr sagte in [gelöst] Skript auf AXIOS umbauen:

                            arum kommt dies im log ?
                            (httpGet ist in JS auch rot unterstrichen)
                            Benutze doch httpGet.

                            hatte das auch - das passierte als ich ein script kopierte und dieses dann auf httpget änderte- obwohl das orginal abgeschalten war, kam diese meldung

                            habe dann das alte nochmal gestartet und wieder beendet, dann war die meldung weg

                            bahnuhr 1 Reply Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active @liv-in-sky last edited by

                              @liv-in-sky sagte in [gelöst] Skript auf AXIOS umbauen:

                              habe dann das alte nochmal gestartet und wieder beendet, dann war die meldung weg

                              Dieser Versuch hab ich schon hinter mir.
                              iob hatte ich gestern komplett neu gestartet.

                              Meldung kommt trotzdem !

                              haus-automatisierung 1 Reply Last reply Reply Quote 0
                              • haus-automatisierung
                                haus-automatisierung Developer Most Active @bahnuhr last edited by

                                @bahnuhr Hast Du Scripts in global liegen?

                                bahnuhr 1 Reply Last reply Reply Quote 0
                                • bahnuhr
                                  bahnuhr Forum Testing Most Active @haus-automatisierung last edited by bahnuhr

                                  @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

                                  @bahnuhr Hast Du Scripts in global liegen?

                                  ja !
                                  Das ist ne Idee, schau ich gleich mal nach.

                                  Nachtrag:
                                  alle durchgeschaut; da ist nix mit request.
                                  Nachtrag2:
                                  doch eines gefunden, ändere das gleich mal ab.

                                  haus-automatisierung joergeli 2 Replies Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @bahnuhr last edited by

                                    @bahnuhr sagte in [gelöst] Skript auf AXIOS/httpGet umbauen:

                                    @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:
                                    Nachtrag2:
                                    doch eines gefunden, ändere das gleich mal ab.

                                    Alles andere hätte mich jetzt auch echt gewundert 🙃

                                    bahnuhr 2 Replies Last reply Reply Quote 0
                                    • bahnuhr
                                      bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

                                      @haus-automatisierung sagte in [gelöst] Skript auf AXIOS umbauen:

                                      Alles andere hätte mich jetzt auch echt gewundert 🙃

                                      ja, mich ja auch.
                                      Deshalb war es ja merkwürdig.

                                      😉 wär ich aber bestimmt noch drauf gekommen. 😉

                                      1 Reply Last reply Reply Quote 0
                                      • bahnuhr
                                        bahnuhr Forum Testing Most Active @haus-automatisierung last edited by

                                        @haus-automatisierung

                                        erledigt, warn ist weg.
                                        Es lag an dem globalen Script.
                                        Danke

                                        1 Reply Last reply Reply Quote 0
                                        • joergeli
                                          joergeli @bahnuhr last edited by

                                          @bahnuhr sagte in [gelöst] Skript auf AXIOS/httpGet umbauen:

                                          Nachtrag:
                                          alle durchgeschaut; da ist nix mit request.
                                          Nachtrag2:
                                          doch eines gefunden, ändere das gleich mal ab.

                                          Du weißt, wie man automatisch nach Begriffen in allen Scripten suchen kann?
                                          Dazu im Scripte-Tag das Lupensymbol rechts oben anklicken und dann den entspr. Suchbegriff eingeben (hier: request).
                                          Dann werden alle Scripte aufgelistet, die diesen Suchbegriff enthalten, s. Screenshot:
                                          request.jpg

                                          Danach nicht vergessen, die Suche wieder auszuschalten: das "durchgestrichene T" nochmals anklicken.

                                          1 Reply Last reply Reply Quote 0
                                          • Negalein
                                            Negalein Global Moderator last edited by

                                            Hallo

                                            Ich habe auch 8 Scripte und 5 Blocklys, wo noch request läuft.
                                            Reicht mWn nicht, einfach request durch httpGet oder axios zu ersetzen.

                                            Könnte da wer über meine Scripte drüberschaun?

                                            Das ist zB eins von den 8.

                                            var url = "http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365";
                                            var pfad = "Volkszaehler.";
                                            var idAKTUELLER_VERBRAUCH = pfad + "AKTUELLER_VERBRAUCH";
                                            var idAKTUELLE_ERZEUGUNG = pfad + "AKTUELLE_LIEFERUNG";
                                            // var idAKTUELLE_HEIZUNG = pfad + "AKTUELLE_HEIZUNG";
                                             
                                             
                                            // Vorgegebene Funktion, die nur dazu dient, das JSON einzulesen
                                            // Angelehnt an: http://www.iobroker.net/docu/?page_id=3691
                                            var request = require("request");
                                            function readJson(url, callback) {
                                                request(url, function(err, state, body) {
                                                    if (body) {
                                                        var json = {};
                                                        if (body !== "") {
                                                            try {
                                                                json = JSON.parse(body);
                                                            } catch (ex) {
                                                                json = {};
                                                            }
                                                            if (!json) {
                                                                json = {};
                                                            }
                                                        }
                                                        callback(null, json);
                                                    } else {
                                                        var error = "(" + err + ") ERROR bei Abfrage von: " + url;
                                                        log(error, "warn");
                                                        callback(error, null);
                                                    }
                                                });
                                            }
                                             
                                            // Erzeugen der Objekte in ioBroker
                                            createState(idAKTUELLER_VERBRAUCH, 0, {
                                                name: 'Aktueller Verbrauch',
                                                desc: 'Aktueller Verbrauch',
                                                type: 'number',
                                                role: 'value',
                                                unit: 'W'
                                            });
                                            createState(idAKTUELLE_ERZEUGUNG, 0, {
                                                name: 'Aktuelle Erzeugung',
                                                desc: 'Aktuelle Erzeugung',
                                                type: 'number',
                                                role: 'value',
                                                unit: 'W'
                                            });
                                            // createState(idAKTUELLE_HEIZUNG, 0, {
                                            //     name: 'Aktuelle Heizung',
                                            //     desc: 'Aktuelle Heizung',
                                            //     type: 'number',
                                            //     role: 'value',
                                            //     unit: 'W'
                                            // });
                                             
                                            // Startet das Skript alle 2 Sekunden neu
                                            schedule("*/2 * * * * *", function() {
                                                readJson(url, function(err, json) {
                                                    if (!err) {
                                                        var wert1 = json.data[0].tuples[0][1];
                                                        var wert2 = json.data[1].tuples[0][1];
                                                        // var wert3 = json.data[2].tuples[0][1];
                                                        // Setzen der Werte in ioBroker
                                                        // Man füllt die oben erzeugten Objekte jetzt mit den Werten
                                                        setState(idAKTUELLER_VERBRAUCH, wert1);
                                                        setState(idAKTUELLE_ERZEUGUNG, wert2);
                                                        // setState(idAKTUELLE_HEIZUNG, wert3);
                                                    } else {
                                                        log("Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten.", "warn");
                                                    }
                                                });
                                            });
                                            
                                            
                                            paul53 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            668
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            17
                                            56
                                            6011
                                            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