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. Skripten / Logik
  4. JavaScript
  5. axios - bekomme code-Änderung nicht hin -> erledigt

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

axios - bekomme code-Änderung nicht hin -> erledigt

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 104 Aufrufe 2 Watching
  • Ä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.
  • A Offline
    A Offline
    alka
    schrieb am zuletzt editiert von alka
    #1

    Hallo, seit dem letzten Update des JS funktioniert meine Funktion für Zugriff auf Fritzbox-Api nicht mehr. Mit dem Codeblock aus einem anderen Script hatte ich mir eine Funktion gebastelt, die Telefone stummzuschalten. Es wäre nett, wenn mir jemand helfen würde (gern auch ohne axois zu verwenden).
    Node.js: v20.19.4
    NPM: 10.8.2(10.9.4)
    JS: 9.0.11

    original-Code-Block, hatte jahrelang funktioniert
    TypeError: axios is not a function

    // Get the SID from the Fritzbox
    async function getFbSid2() {
        if (FbDebugging){log("function getFbSid2");}
    
        axios({
            method: "post",
            url: 'http://' + FbIp,
            data: secLogin,
            headers: headers
        })
    
        .then(function(response) {
            //log(response.headers);
            log(response.status);
            if (response.status == 200 && response.data){
            try {
                secSid = response.data.match(/\"sid\":\"(.*)\"/)[1];
                //log ("w: "+secSid)
            }
            catch (e) {
                if (secSid == undefined) {
                    //log(response.data);
                    log("b: "+"Your login was not successful. End Script: "+e, "error")
                    return;
                }
            }
            
            if (FbDebugging){log(" > SID       : " + secSid);}
            toggle_tel();
        } else {
                    log ("error, status: "+response.status);
                    if (response.data) {
                        log(response.data);
                    }
                }
        });
    }
    

    einer meiner Bastelversuche, offenbar kommt kein response.data mehr
    TypeError: Cannot read properties of null (reading '1')

    // Get the SID from the Fritzbox
    async function getFbSid2() {
        if (FbDebugging){log("function getFbSid2");}
    
        axios.post('http://' + FbIp,{data: secLogin, headers: headers,})
    
        .then(response => {
            //log("head: "+response.headers);
            log("status: "+response.status);
            if (response.status == 200 && response.data){
    
                try {
                secSid = response.data.match(/\"sid\":\"(.*)\"/)[1];
                //log ("w: "+secSid)
                }
                catch (e){
                    if (secSid == undefined) {
                        //log(response.data);
                        log("b: "+"Your login was not successful. End Script: "+e, "error")
                        return;
                    }
                }
            
                if (FbDebugging){log(" > SID       : " + secSid);}
                toggle_tel();
            } else {
                log ("error, status: "+response.status);
                if (response.data) {
                    log(response.data);
                }
            }
        });
    } 
    
    1 Antwort Letzte Antwort
    0
    • CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #2

      Um axios verwenden zu können, muss es im Script zunächst mal bekannt gemacht werden.

      const axios = require('axios').default;
      

      Wenn Du das komplett ohne axios umbauen willst, hilft Dir vielleicht das folgende Beispiel:

      function sendZabbix(itemId, content) {
          const payload = {
              "jsonrpc": "2.0",     
              "method": "history.push",     
              "params": [{
                  "itemid": itemId,
                  "value": content
                  }],
              "id": 1
          };
          
          const options = { headers: { 
              'Content-Type': 'application/json-rpc', 
              'Authorization': `Bearer ${apiKey}`
          }};
      
          httpPost(zabbixUrl, payload, options, function(error, response) {
              if (error) {
                  console.error(error);
              } else if (response) {
                  console.log(response);
              }
          });
      };
      

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Antwort Letzte Antwort
      0
      • A Offline
        A Offline
        alka
        schrieb am zuletzt editiert von alka
        #3

        danke, wirft aber sofort:
        SyntaxError: Identifier 'axios' has already been declared

        mit dem abgewandelten Beispielcode erhalte ich
        statusCode: 200,
        data: 'getcgivars(): Unsupported Content-Type.\n',

        async function getFbSid2() {
            
        
            const options = { data: secLogin,
                headers: headers
        
            };
        
         
        
            httpPost('http://' + FbIp, options, function(error, response) {
        
                if (error) {
        
                    console.error(error);
        
                } else if (response) {
        
                    console.log(response);
        
                }
        
            });
        
        };
        

        Nachtrag, weil wohl wichtig in diesem Zusammenhang:

        var headers = { 
            'Content-Type': 'application/x-www-form-urlencoded', 
            'User-Agent': 'curl/7.64.0', 
            'Accept': '*/*'
        };
        
        CodierknechtC 1 Antwort Letzte Antwort
        0
        • A alka

          danke, wirft aber sofort:
          SyntaxError: Identifier 'axios' has already been declared

          mit dem abgewandelten Beispielcode erhalte ich
          statusCode: 200,
          data: 'getcgivars(): Unsupported Content-Type.\n',

          async function getFbSid2() {
              
          
              const options = { data: secLogin,
                  headers: headers
          
              };
          
           
          
              httpPost('http://' + FbIp, options, function(error, response) {
          
                  if (error) {
          
                      console.error(error);
          
                  } else if (response) {
          
                      console.log(response);
          
                  }
          
              });
          
          };
          

          Nachtrag, weil wohl wichtig in diesem Zusammenhang:

          var headers = { 
              'Content-Type': 'application/x-www-form-urlencoded', 
              'User-Agent': 'curl/7.64.0', 
              'Accept': '*/*'
          };
          
          CodierknechtC Online
          CodierknechtC Online
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von
          #4

          @alka sagte in axios - bekomme code-Änderung nicht hin:

          statusCode: 200

          Heißt ja zunächst mal: Alles paletti!

          Du zeigst aber auch immer nur die eine Funktion.
          Wie sind data und headers definiert?
          Was soll da zurückkommen?

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          A 1 Antwort Letzte Antwort
          0
          • CodierknechtC Codierknecht

            @alka sagte in axios - bekomme code-Änderung nicht hin:

            statusCode: 200

            Heißt ja zunächst mal: Alles paletti!

            Du zeigst aber auch immer nur die eine Funktion.
            Wie sind data und headers definiert?
            Was soll da zurückkommen?

            A Offline
            A Offline
            alka
            schrieb am zuletzt editiert von
            #5

            ich konnte etwas finden, habe mich schamlos bedient und mir die Funktion recht plump neu zusammengeschustert: https://forum.iobroker.net/post/1191263
            (das erspart mir langwieriges code zerlegen und Try&Error, um es auf die bisherige Art ans laufen zu bekommen)

            Der Teil, welcher in meinem script in der FB die Klingelsperre (de)aktiviert läuft damit wieder problemlos (und der Rest der 400 Zeilen Code macht sowieso keine Probleme)

            const crypto = require("node:crypto");
            
            // FritzBox URL
            const fritzURL = "http://192.168.1.1";
            
            // FritzBox Credentials
            const fritzBenutzer = "benutzer";
            const fritzPasswort = "passwort";
            
            let sessionID = '0000000000000000';
             
            // Abzufragende URLs der FritzBox
            const loginURL = fritzURL + "/login_sid.lua?username=" + fritzBenutzer;
            const dataURL = fritzURL + "/data.lua";
            
            let tel_soll=true;
            let pause=false;
            
            async function getSid() {
                const tstChallenge = new RegExp(/<Challenge>([a-f0-9]{8})<\/Challenge>/);
                const tstSid = new RegExp(/<SID>([a-f0-9]{16})<\/SID>/);
                let challenge = '';
                let sid = '';
                let response = await httpGetAsync(loginURL);
                if (response.statusCode === 200) {
                    if (tstChallenge.test(response.data)) {
                        challenge = response.data.match(tstChallenge)[1];
                    }
                } else throw new Error('Fehler beim Holen der Challenge!');
                const utf16le_encoded = Buffer.from(`${challenge}-${fritzPasswort}`, "utf-16le");
                const challengeResponse = crypto.createHash("md5").update(utf16le_encoded).digest("hex");
                const options = {
                    headers: {
                        "Content-Type": "application/x-www-form-urlencoded",
                    },
                };
                const data = { response: `${challenge}-${challengeResponse}`, username: `${fritzBenutzer}` };
             
                response = await httpPostAsync(loginURL, data, options);
                if (response.statusCode === 200) {
                    if (tstSid.test(response.data)) {
                        sid = response.data.match(tstSid)[1];
                    }
                } else throw new Error('Fehler beim Holen der sid!');
                if (sid) return sid;
            }
            
            function endPause(){
                pause=false;
            }
            
            async function toggle_tel(tel_soll) {
                if (!sessionID || sessionID === '0000000000000000') {
                    sessionID = await getSid();
                }
             
                const config = {
                    timeout: 30000,
                    headers: { "Content-Type": "application/x-www-form-urlencoded", },
                };
                let fons=[1]
                let req={};
                for (let num in fons){
                if (tel_soll){
                    log("set tel aus");
                    req={xhr: 1, sid: sessionID, lang: 'de', no_sidrenew: null, page: 'edit_dect_ring_block', idx: fons[num], lockmode: 0, nightsetting: 1, lockday: 'everyday', starthh: '00', startmm: '00', endhh: '24', endmm: '00', apply: "ok"};//&nightsetting=1&lockday=everyday&lockday=everyday&starthh=01&startmm=00&endhh=23&endmm=55
                } else {
                    log("set tel ein");
                    req={xhr: 1, sid: sessionID, lang: 'de', no_sidrenew: null, page: 'edit_dect_ring_block', idx: fons[num],lockmode: 1, apply: "ok"};
                }
                    let resp = await httpPostAsync(dataURL, req, config);
                    if (resp.statusCode === 200) {
                        log("tel ok");
                    } else {
                        log("tel error");
                    }
                }
            }
            
            on({id:'0_userdata.0.wohnung.ruhe', change: "ne"}, function (obj) {
                if (!pause){
                    tel_soll=obj.state.val;
                    toggle_tel(tel_soll);
                    pause=true;
                    setTimeout(function() {endPause()},1000);
                } else {
                    log ("ruhetaste zu schnell doppelt betätigt");
                }
            });
            
            1 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              chris299
              schrieb am zuletzt editiert von
              #6

              Hallo zusammen,

              ich habe ein ähnliches Problem....
              weiss evtl jemand, was da passiert ist, bzw. wie ich axios (und anscheinend ein paar andere) weiter nutzen kann?
              ich wollte eigentlich nicht alles umbauen....
              im changelog ist ja kein entsprechender breaking change vermerkt, insofern scheint das ein Kollateralschaden zu sein....
              Viele Grüße
              Christoph

              CodierknechtC 1 Antwort Letzte Antwort
              0
              • C chris299

                Hallo zusammen,

                ich habe ein ähnliches Problem....
                weiss evtl jemand, was da passiert ist, bzw. wie ich axios (und anscheinend ein paar andere) weiter nutzen kann?
                ich wollte eigentlich nicht alles umbauen....
                im changelog ist ja kein entsprechender breaking change vermerkt, insofern scheint das ein Kollateralschaden zu sein....
                Viele Grüße
                Christoph

                CodierknechtC Online
                CodierknechtC Online
                Codierknecht
                Developer Most Active
                schrieb am zuletzt editiert von
                #7

                @chris299 sagte in axios - bekomme code-Änderung nicht hin -> erledigt:

                im changelog ist ja kein entsprechender breaking change vermerkt

                Wenn Du den Javascript-Adapter aktualisiert hast, ist da sehr wohl ein "breaking change" vermerkt: request ist nicht mehr "deprecated" sondern wurde inzwischen komplett entfernt.

                Wenn Du auch zeigst wo Dein Problem liegt, kann man Dir möglicherweise sogar helfen ;-)

                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                HmIP|ZigBee|Tasmota|Unifi
                Zabbix Certified Specialist
                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                1 Antwort Letzte Antwort
                1
                • C Offline
                  C Offline
                  chris299
                  schrieb am zuletzt editiert von
                  #8

                  @codierknecht den breaking change zu request habe ich schon gesehen, aber axios hat damit ja eigentlich nichts zu tun, oder?
                  Ich hatte genau die gleiche Meldung wie @alka : "axios is not a function".
                  tatsächlich funktioniert es nun wieder und ich weiss nicht, warum....
                  ich habe zwei andere Module noch zusätzlich in die Adapter config geschrieben, weil ich dachte, dass die evtl. nun auch fehlen und danach lief es seltsamerweise wieder....

                  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

                  828

                  Online

                  32.4k

                  Benutzer

                  81.6k

                  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