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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Decode64 vor und zurück...

NEWS

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

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

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

Decode64 vor und zurück...

Geplant Angeheftet Gesperrt Verschoben JavaScript
10 Beiträge 3 Kommentatoren 604 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
    Andy200877
    schrieb am zuletzt editiert von Andy200877
    #1

    Ich bastel gerade an einem Script um meine Klimaanlage in IOB einzubinden.

    Leider scheitert es in meinem Script an ein paar Konvertierungen.

    Ich habe hier in diesem Beispielscript einen Inputstring

    var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
    

    Dieser wird nun base64 decodiert und dann in ein bytearray abgelegt.

    Danach soll das Script alles wieder erneut codieren, sodass am ende wieder das gleiche Ergebnis wie am Anfang herauskommt.

    Hintergrund bei der ganzen Geschichte ist, das im Inputstring die Einstellungen wie Temperatur usw. der Klimaanlage hinterlegt sind. Diese kann ich erfolgreich auslesen. Zum steuern der Anlage muss ich diese Daten aber ändern und danach wieder codieren.

    Also versuche ich im Moment erstmal nur den Inputstring zu de.- und anschließend wieder zu codieren. Wenn alles richtig ist, sollte ja wieder der gleiche "Inputstring" wie am Anfang dabei herauskommen.
    Leider passiert das aber nicht.. :-(

    Das ist die Logausgabe meines Scripts :

    INPUT : 'AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ=='
    AFTER DECODE64 : '⎢ÿÿÿÿÿۊ€@" ˆ€  ÿ€Êÿ”É©'
    AFTER STR2UTF : '0,0,0,0,226,0,142,0,162,0,255,0,0,0,0,0,8,0,0,0,0,0,16,0,11,0,0,0,0,0,0,0,0,0,0,0,1,0,255,0,255,0,255,0,255,0,219,0,138,0,128,0,4,0,64,0,6,0,34,0,160,0,0,0,16,0,136,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,128,0,32,0,160,0,255,0,128,0,16,0,202,0,255,0,148,0,16,0,0,0,0,0,201,0,169,0'
    
    WIEDER UTF2STR : ''
    WIEDER DECODE64 : 'JTAwJTAwJUUyJThFJUEyJUZGJTAwJTAwJTA4JTAwJTAwJTEwJTBCJTAwJTAwJTAwJTAwJTAwJTAxJUZGJUZGJUZGJUZGJURCJThBJTgwJTA0QCUwNiUyMiVBMCUwMCUxMCU4OCUwMCUwMCUwMCUwMSUwMCUwMCUwMCUwMCUwMCUwMyU4MCUyMCVBMCVGRiU4MCUxMCVDQSVGRiU5NCUxMCUwMCUwMCVDOSVBOQ=='
    

    Wie schon gesagt die Punkte "AFTER DECODE64 und AFTER STR2UTF" liefern die richtigen Ergebnisse...

    Und zum Schluss nun mein Script :

    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
    var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
    var afterdecode64 = decode64(inputString)
    var afterstr2utf = strToUtf16Bytes(afterdecode64)
    
    var xxx = ""
    var wiederdecode64 = encode64(afterdecode64)
    
    
    log ("INPUT : '" + inputString+ "'")
    log ("AFTER DECODE64 : '" + afterdecode64 + "'")
    log ("AFTER STR2UTF : '" + afterstr2utf + "'");
        
    log ("WIEDER UTF2STR : '" + xxx + "'")
    log ("WIEDER DECODE64 : '" + wiederdecode64 + "'")
    
    
    
    // ************************************************
    // ******************* UTILITYS *******************
    // ************************************************
    
    
    function strToUtf16Bytes(str) {
      const bytes = [];
      for (ii = 0; ii < str.length; ii++) {
        const code = str.charCodeAt(ii); // x00-xFFFF
        bytes.push(code & 255, code >> 8); // low, high
      }
      return bytes;
    }
    
    
    function encode64(input) {
         input = escape(input);
         var output = "";
         var chr1, chr2, chr3 = "";
         var enc1, enc2, enc3, enc4 = "";
         var i = 0;
    
         do {
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
    
            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
    
            if (isNaN(chr2)) {
               enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
               enc4 = 64;
            }
    
            output = output +
               keyStr.charAt(enc1) +
               keyStr.charAt(enc2) +
               keyStr.charAt(enc3) +
               keyStr.charAt(enc4);
            chr1 = chr2 = chr3 = "";
            enc1 = enc2 = enc3 = enc4 = "";
         } while (i < input.length);
    
         return output;
    }
    
    function decode64(input) {
         var output = "";
         var chr1, chr2, chr3 = "";
         var enc1, enc2, enc3, enc4 = "";
         var i = 0;
    
         // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
         var base64test = /[^A-Za-z0-9\+\/\=]/g;
         if (base64test.exec(input)) {
            alert("There were invalid base64 characters in the input text.\n" +
                  "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
                  "Expect errors in decoding.");
         }
         input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    
         do {
            enc1 = keyStr.indexOf(input.charAt(i++));
            enc2 = keyStr.indexOf(input.charAt(i++));
            enc3 = keyStr.indexOf(input.charAt(i++));
            enc4 = keyStr.indexOf(input.charAt(i++));
    
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
    
            output = output + String.fromCharCode(chr1);
    
            if (enc3 != 64) {
               output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
               output = output + String.fromCharCode(chr3);
            }
    
            chr1 = chr2 = chr3 = "";
            enc1 = enc2 = enc3 = enc4 = "";
    
         } while (i < input.length);
    
         return unescape(output);
    }
    

    Vielleicht ist ja ein Experte hier, der mir dabei helfen kann... Das wäre echt super...
    Vielen Dank

    https://github.com/Andy200877/intex_poollampe

    paul53P OliverIOO 2 Antworten Letzte Antwort
    0
    • A Andy200877

      Ich bastel gerade an einem Script um meine Klimaanlage in IOB einzubinden.

      Leider scheitert es in meinem Script an ein paar Konvertierungen.

      Ich habe hier in diesem Beispielscript einen Inputstring

      var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
      

      Dieser wird nun base64 decodiert und dann in ein bytearray abgelegt.

      Danach soll das Script alles wieder erneut codieren, sodass am ende wieder das gleiche Ergebnis wie am Anfang herauskommt.

      Hintergrund bei der ganzen Geschichte ist, das im Inputstring die Einstellungen wie Temperatur usw. der Klimaanlage hinterlegt sind. Diese kann ich erfolgreich auslesen. Zum steuern der Anlage muss ich diese Daten aber ändern und danach wieder codieren.

      Also versuche ich im Moment erstmal nur den Inputstring zu de.- und anschließend wieder zu codieren. Wenn alles richtig ist, sollte ja wieder der gleiche "Inputstring" wie am Anfang dabei herauskommen.
      Leider passiert das aber nicht.. :-(

      Das ist die Logausgabe meines Scripts :

      INPUT : 'AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ=='
      AFTER DECODE64 : '⎢ÿÿÿÿÿۊ€@" ˆ€  ÿ€Êÿ”É©'
      AFTER STR2UTF : '0,0,0,0,226,0,142,0,162,0,255,0,0,0,0,0,8,0,0,0,0,0,16,0,11,0,0,0,0,0,0,0,0,0,0,0,1,0,255,0,255,0,255,0,255,0,219,0,138,0,128,0,4,0,64,0,6,0,34,0,160,0,0,0,16,0,136,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,128,0,32,0,160,0,255,0,128,0,16,0,202,0,255,0,148,0,16,0,0,0,0,0,201,0,169,0'
      
      WIEDER UTF2STR : ''
      WIEDER DECODE64 : 'JTAwJTAwJUUyJThFJUEyJUZGJTAwJTAwJTA4JTAwJTAwJTEwJTBCJTAwJTAwJTAwJTAwJTAwJTAxJUZGJUZGJUZGJUZGJURCJThBJTgwJTA0QCUwNiUyMiVBMCUwMCUxMCU4OCUwMCUwMCUwMCUwMSUwMCUwMCUwMCUwMCUwMCUwMyU4MCUyMCVBMCVGRiU4MCUxMCVDQSVGRiU5NCUxMCUwMCUwMCVDOSVBOQ=='
      

      Wie schon gesagt die Punkte "AFTER DECODE64 und AFTER STR2UTF" liefern die richtigen Ergebnisse...

      Und zum Schluss nun mein Script :

      var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      
      var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
      var afterdecode64 = decode64(inputString)
      var afterstr2utf = strToUtf16Bytes(afterdecode64)
      
      var xxx = ""
      var wiederdecode64 = encode64(afterdecode64)
      
      
      log ("INPUT : '" + inputString+ "'")
      log ("AFTER DECODE64 : '" + afterdecode64 + "'")
      log ("AFTER STR2UTF : '" + afterstr2utf + "'");
          
      log ("WIEDER UTF2STR : '" + xxx + "'")
      log ("WIEDER DECODE64 : '" + wiederdecode64 + "'")
      
      
      
      // ************************************************
      // ******************* UTILITYS *******************
      // ************************************************
      
      
      function strToUtf16Bytes(str) {
        const bytes = [];
        for (ii = 0; ii < str.length; ii++) {
          const code = str.charCodeAt(ii); // x00-xFFFF
          bytes.push(code & 255, code >> 8); // low, high
        }
        return bytes;
      }
      
      
      function encode64(input) {
           input = escape(input);
           var output = "";
           var chr1, chr2, chr3 = "";
           var enc1, enc2, enc3, enc4 = "";
           var i = 0;
      
           do {
              chr1 = input.charCodeAt(i++);
              chr2 = input.charCodeAt(i++);
              chr3 = input.charCodeAt(i++);
      
              enc1 = chr1 >> 2;
              enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
              enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
              enc4 = chr3 & 63;
      
              if (isNaN(chr2)) {
                 enc3 = enc4 = 64;
              } else if (isNaN(chr3)) {
                 enc4 = 64;
              }
      
              output = output +
                 keyStr.charAt(enc1) +
                 keyStr.charAt(enc2) +
                 keyStr.charAt(enc3) +
                 keyStr.charAt(enc4);
              chr1 = chr2 = chr3 = "";
              enc1 = enc2 = enc3 = enc4 = "";
           } while (i < input.length);
      
           return output;
      }
      
      function decode64(input) {
           var output = "";
           var chr1, chr2, chr3 = "";
           var enc1, enc2, enc3, enc4 = "";
           var i = 0;
      
           // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
           var base64test = /[^A-Za-z0-9\+\/\=]/g;
           if (base64test.exec(input)) {
              alert("There were invalid base64 characters in the input text.\n" +
                    "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
                    "Expect errors in decoding.");
           }
           input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
      
           do {
              enc1 = keyStr.indexOf(input.charAt(i++));
              enc2 = keyStr.indexOf(input.charAt(i++));
              enc3 = keyStr.indexOf(input.charAt(i++));
              enc4 = keyStr.indexOf(input.charAt(i++));
      
              chr1 = (enc1 << 2) | (enc2 >> 4);
              chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
              chr3 = ((enc3 & 3) << 6) | enc4;
      
              output = output + String.fromCharCode(chr1);
      
              if (enc3 != 64) {
                 output = output + String.fromCharCode(chr2);
              }
              if (enc4 != 64) {
                 output = output + String.fromCharCode(chr3);
              }
      
              chr1 = chr2 = chr3 = "";
              enc1 = enc2 = enc3 = enc4 = "";
      
           } while (i < input.length);
      
           return unescape(output);
      }
      

      Vielleicht ist ja ein Experte hier, der mir dabei helfen kann... Das wäre echt super...
      Vielen Dank

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @andy200877 sagte: base64

      Es gibt ein NPM-Modul ... und weitere.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • A Andy200877

        Ich bastel gerade an einem Script um meine Klimaanlage in IOB einzubinden.

        Leider scheitert es in meinem Script an ein paar Konvertierungen.

        Ich habe hier in diesem Beispielscript einen Inputstring

        var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
        

        Dieser wird nun base64 decodiert und dann in ein bytearray abgelegt.

        Danach soll das Script alles wieder erneut codieren, sodass am ende wieder das gleiche Ergebnis wie am Anfang herauskommt.

        Hintergrund bei der ganzen Geschichte ist, das im Inputstring die Einstellungen wie Temperatur usw. der Klimaanlage hinterlegt sind. Diese kann ich erfolgreich auslesen. Zum steuern der Anlage muss ich diese Daten aber ändern und danach wieder codieren.

        Also versuche ich im Moment erstmal nur den Inputstring zu de.- und anschließend wieder zu codieren. Wenn alles richtig ist, sollte ja wieder der gleiche "Inputstring" wie am Anfang dabei herauskommen.
        Leider passiert das aber nicht.. :-(

        Das ist die Logausgabe meines Scripts :

        INPUT : 'AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ=='
        AFTER DECODE64 : '⎢ÿÿÿÿÿۊ€@" ˆ€  ÿ€Êÿ”É©'
        AFTER STR2UTF : '0,0,0,0,226,0,142,0,162,0,255,0,0,0,0,0,8,0,0,0,0,0,16,0,11,0,0,0,0,0,0,0,0,0,0,0,1,0,255,0,255,0,255,0,255,0,219,0,138,0,128,0,4,0,64,0,6,0,34,0,160,0,0,0,16,0,136,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,128,0,32,0,160,0,255,0,128,0,16,0,202,0,255,0,148,0,16,0,0,0,0,0,201,0,169,0'
        
        WIEDER UTF2STR : ''
        WIEDER DECODE64 : 'JTAwJTAwJUUyJThFJUEyJUZGJTAwJTAwJTA4JTAwJTAwJTEwJTBCJTAwJTAwJTAwJTAwJTAwJTAxJUZGJUZGJUZGJUZGJURCJThBJTgwJTA0QCUwNiUyMiVBMCUwMCUxMCU4OCUwMCUwMCUwMCUwMSUwMCUwMCUwMCUwMCUwMCUwMyU4MCUyMCVBMCVGRiU4MCUxMCVDQSVGRiU5NCUxMCUwMCUwMCVDOSVBOQ=='
        

        Wie schon gesagt die Punkte "AFTER DECODE64 und AFTER STR2UTF" liefern die richtigen Ergebnisse...

        Und zum Schluss nun mein Script :

        var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        
        var inputString = "AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
        var afterdecode64 = decode64(inputString)
        var afterstr2utf = strToUtf16Bytes(afterdecode64)
        
        var xxx = ""
        var wiederdecode64 = encode64(afterdecode64)
        
        
        log ("INPUT : '" + inputString+ "'")
        log ("AFTER DECODE64 : '" + afterdecode64 + "'")
        log ("AFTER STR2UTF : '" + afterstr2utf + "'");
            
        log ("WIEDER UTF2STR : '" + xxx + "'")
        log ("WIEDER DECODE64 : '" + wiederdecode64 + "'")
        
        
        
        // ************************************************
        // ******************* UTILITYS *******************
        // ************************************************
        
        
        function strToUtf16Bytes(str) {
          const bytes = [];
          for (ii = 0; ii < str.length; ii++) {
            const code = str.charCodeAt(ii); // x00-xFFFF
            bytes.push(code & 255, code >> 8); // low, high
          }
          return bytes;
        }
        
        
        function encode64(input) {
             input = escape(input);
             var output = "";
             var chr1, chr2, chr3 = "";
             var enc1, enc2, enc3, enc4 = "";
             var i = 0;
        
             do {
                chr1 = input.charCodeAt(i++);
                chr2 = input.charCodeAt(i++);
                chr3 = input.charCodeAt(i++);
        
                enc1 = chr1 >> 2;
                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                enc4 = chr3 & 63;
        
                if (isNaN(chr2)) {
                   enc3 = enc4 = 64;
                } else if (isNaN(chr3)) {
                   enc4 = 64;
                }
        
                output = output +
                   keyStr.charAt(enc1) +
                   keyStr.charAt(enc2) +
                   keyStr.charAt(enc3) +
                   keyStr.charAt(enc4);
                chr1 = chr2 = chr3 = "";
                enc1 = enc2 = enc3 = enc4 = "";
             } while (i < input.length);
        
             return output;
        }
        
        function decode64(input) {
             var output = "";
             var chr1, chr2, chr3 = "";
             var enc1, enc2, enc3, enc4 = "";
             var i = 0;
        
             // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
             var base64test = /[^A-Za-z0-9\+\/\=]/g;
             if (base64test.exec(input)) {
                alert("There were invalid base64 characters in the input text.\n" +
                      "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
                      "Expect errors in decoding.");
             }
             input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
        
             do {
                enc1 = keyStr.indexOf(input.charAt(i++));
                enc2 = keyStr.indexOf(input.charAt(i++));
                enc3 = keyStr.indexOf(input.charAt(i++));
                enc4 = keyStr.indexOf(input.charAt(i++));
        
                chr1 = (enc1 << 2) | (enc2 >> 4);
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                chr3 = ((enc3 & 3) << 6) | enc4;
        
                output = output + String.fromCharCode(chr1);
        
                if (enc3 != 64) {
                   output = output + String.fromCharCode(chr2);
                }
                if (enc4 != 64) {
                   output = output + String.fromCharCode(chr3);
                }
        
                chr1 = chr2 = chr3 = "";
                enc1 = enc2 = enc3 = enc4 = "";
        
             } while (i < input.length);
        
             return unescape(output);
        }
        

        Vielleicht ist ja ein Experte hier, der mir dabei helfen kann... Das wäre echt super...
        Vielen Dank

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von OliverIO
        #3

        @andy200877

        evtl so?
        buffer muss nicht deklariert werden, da es in node schon mit eingebaut ist.

        var s="AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
        var b = Buffer.from(s, "base64");
        console.log(b.toJSON());
        console.log(b.toString("base64"));
        

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        A paul53P 2 Antworten Letzte Antwort
        1
        • OliverIOO OliverIO

          @andy200877

          evtl so?
          buffer muss nicht deklariert werden, da es in node schon mit eingebaut ist.

          var s="AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
          var b = Buffer.from(s, "base64");
          console.log(b.toJSON());
          console.log(b.toString("base64"));
          
          A Offline
          A Offline
          Andy200877
          schrieb am zuletzt editiert von
          #4

          @oliverio sagte in Decode64 vor und zurück...:

          var b = Buffer.from(s, "base64");

          Und wie komme ich wieder zurück auf den "Ursprungsstring" s ?

          https://github.com/Andy200877/intex_poollampe

          OliverIOO 1 Antwort Letzte Antwort
          0
          • A Andy200877

            @oliverio sagte in Decode64 vor und zurück...:

            var b = Buffer.from(s, "base64");

            Und wie komme ich wieder zurück auf den "Ursprungsstring" s ?

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von OliverIO
            #5

            @andy200877
            das ist die letzte Zeile mit b.toString, das codiert

            meine logausgabe in iobroker

            9:09:24.399	info	javascript.0 (4577) script.js.Test.Skript_3: {'type':'Buffer','data':[0,0,226,142,162,255,0,0,8,0,0,16,11,0,0,0,0,0,1,255,255,255,255,219,138,128,4,64,6,34,160,0,16,136,0,0,0,1,0,0,0,0,0,3,128,32,160,255,128,16,202,255,148,16,0,0,201,169]}
            19:09:24.400	info	javascript.0 (4577) script.js.Test.Skript_3: AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==
            

            die zeile mit toJSON zeigt dir dein bytearray
            (also Buffer ist das Datenkonstrukt für Bytearrays in node und hat viele verschiedene codier und decodierfähigkeiten
            2da08b1f-7295-4bb2-ac1f-84ff8f7494bd-image.png

            und hier die Dokumentation zu buffer
            https://nodejs.org/api/buffer.html
            leider finde ich, das die node doku nicht ganz so einfach zu lesen ist.
            aber im zweifel findet man auf stackoverflow.com Beispiele

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            0
            • A Offline
              A Offline
              Andy200877
              schrieb am zuletzt editiert von
              #6

              Ich werde es mir morgen nochmal anschauen... Vielen Dank nochmal....

              Im Orginal Python Script, wurde es wie folgt gemacht :

               return str(b64encode(bytes(command + receive)))[2:-1]
              

              Wozu dient das [2:-1] ??

              https://github.com/Andy200877/intex_poollampe

              OliverIOO 1 Antwort Letzte Antwort
              0
              • A Andy200877

                Ich werde es mir morgen nochmal anschauen... Vielen Dank nochmal....

                Im Orginal Python Script, wurde es wie folgt gemacht :

                 return str(b64encode(bytes(command + receive)))[2:-1]
                

                Wozu dient das [2:-1] ??

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von OliverIO
                #7

                @andy200877

                Schon lang her, das ich mich mit python beschäftigt habe.
                Aber das sieht nach slicing aus.
                schneide aus dem vorhandenen array ab dem 3.element bis zum vorletzten heraus

                beispielarray
                0,1,2,3,4
                würde dann
                2,3
                zurückgegeben werden

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @andy200877

                  evtl so?
                  buffer muss nicht deklariert werden, da es in node schon mit eingebaut ist.

                  var s="AADijqL/AAAIAAAQCwAAAAAAAf/////bioAEQAYioAAQiAAAAAEAAAAAAAOAIKD/gBDK/5QQAADJqQ==";
                  var b = Buffer.from(s, "base64");
                  console.log(b.toJSON());
                  console.log(b.toString("base64"));
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @oliverio sagte: evtl so?

                  Das erspart natürlich ein zusätzliches NPM-Modul :+1:

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  A 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @oliverio sagte: evtl so?

                    Das erspart natürlich ein zusätzliches NPM-Modul :+1:

                    A Offline
                    A Offline
                    Andy200877
                    schrieb am zuletzt editiert von Andy200877
                    #9

                    Das mit dem "Zurückcodieren" funktioniert nun. Vielen Dank nochmal für Eure Unterstützung....

                    Hat jemand eine gute Übersetzung zu diesem python-Part ?

                    receive = RacParser.add_crc16(
                                self,
                                RacParser.add_variable(self, RacParser.recieve_to_bytes(self, aircon_stat)),
                    
                    
                    
                        def crc16ccitt(self, data):
                            # Convert to signed integers instead of bytes
                            data = [(256 - a) * (-1) if a > 127 else a for a in data]
                    
                            i = 65535
                            for b in data:
                                for i2 in range(8):
                                    z = True
                                    z2 = ((b >> (7 - i2)) & 1) == 1
                                    if ((i >> 15) & 1) != 1:
                                        z = False
                                    i = i << 1
                                    if z2 ^ z:
                                        i ^= 4129
                            return i & 65535
                    
                        def add_crc16(self, byte_buffer: bytearray):
                            crc = RacParser.crc16ccitt(self, byte_buffer)
                    
                            return byte_buffer + [crc & 255, (crc >> 8) & 255]
                            # return ByteBuffer + (crc.to_bytes(2, 'big'))
                    

                    https://github.com/Andy200877/intex_poollampe

                    OliverIOO 1 Antwort Letzte Antwort
                    0
                    • A Andy200877

                      Das mit dem "Zurückcodieren" funktioniert nun. Vielen Dank nochmal für Eure Unterstützung....

                      Hat jemand eine gute Übersetzung zu diesem python-Part ?

                      receive = RacParser.add_crc16(
                                  self,
                                  RacParser.add_variable(self, RacParser.recieve_to_bytes(self, aircon_stat)),
                      
                      
                      
                          def crc16ccitt(self, data):
                              # Convert to signed integers instead of bytes
                              data = [(256 - a) * (-1) if a > 127 else a for a in data]
                      
                              i = 65535
                              for b in data:
                                  for i2 in range(8):
                                      z = True
                                      z2 = ((b >> (7 - i2)) & 1) == 1
                                      if ((i >> 15) & 1) != 1:
                                          z = False
                                      i = i << 1
                                      if z2 ^ z:
                                          i ^= 4129
                              return i & 65535
                      
                          def add_crc16(self, byte_buffer: bytearray):
                              crc = RacParser.crc16ccitt(self, byte_buffer)
                      
                              return byte_buffer + [crc & 255, (crc >> 8) & 255]
                              # return ByteBuffer + (crc.to_bytes(2, 'big'))
                      
                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von OliverIO
                      #10

                      @andy200877 sagte in Decode64 vor und zurück...:

                      crc16ccitt

                      und mit welcher Zeile hast du Probleme.
                      Dürfte alle ziemlich direkt in den syntax von javascript übertragbar sein.
                      sehe da keine besonderen funktionen,
                      oder suchst du jemand der es für dich macht?

                      evtl hilft die ja das hier?
                      https://extendsclass.com/python-to-javascript.html

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      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

                      785

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      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