Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Decode64 vor und zurück...

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    227

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

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

Decode64 vor und zurück...

Decode64 vor und zurück...

Scheduled Pinned Locked Moved JavaScript
10 Posts 3 Posters 604 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Andy200877
    wrote on last edited by 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 Replies Last reply
    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
      wrote on last edited by 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 Reply Last reply
      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
        wrote on last edited by 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 Replies Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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
            wrote on last edited by 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 Reply Last reply
            0
            • A Offline
              A Offline
              Andy200877
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by 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 Reply Last reply
                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
                  wrote on last edited by
                  #8

                  @oliverio sagte: evtl so?

                  Das erspart natürlich ein zusätzliches NPM-Modul 👍

                  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 Reply Last reply
                  0
                  • paul53P paul53

                    @oliverio sagte: evtl so?

                    Das erspart natürlich ein zusätzliches NPM-Modul 👍

                    A Offline
                    A Offline
                    Andy200877
                    wrote on last edited by 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 Reply Last reply
                    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
                      wrote on last edited by 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 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      53

                      Online

                      32.4k

                      Users

                      81.3k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe