1. Startseite
  2. Software
  3. Entschlüsseln mit Crypto-JS für HomeMatic

Entschlüsseln mit Crypto-JS für HomeMatic

Nachfolgender Flow zeigt das Entschlüsseln der Daten vom air-Q welche einfach in komplexere Szenarien zu integrieren sein soll.

Zunächst muss crypto-js installiert werden

npm install crypto-js

Die http request-Node muss auf GET gesetzt werden und die URL bzw. IP-Adresse das air-Q als http-Aufruf mit der Route /data angegeben werden. Das Resultat wird direkt als geparsetes JSON weiter gegeben.

In der Datei settings.js im node-red-Verzeichnis muss der Eintrag

functionExternalModules: false

auf

functionExternalModules: true

gesetzt und node-red neu gestartet werden. Nun gibt es für die function-Node die Möglichkeit externe Module einzubinden. Hier ist crypto-js einzufügen als CryptoJS. Bei letzterem ist auf die richtige Großschreibung der entsprechenden Buchstaben zu achten.

Nun kann als Funktion in der function-Node nahezu 1:1 das JS-Beispiel aus der air-Q-Doku eingesetzt werden.

Das Passwort muss natürlich durch das eingestellte des air-Qs ersetzt werden.
Hier noch mal für Copy&Paste:

let airqpass = 'airqsetup'

function decrypt(msgb64, airqpass) {
    if (airqpass.length < 32) {
      for (i=airqpass.length; i<32; i++) {
        airqpass += "0";
      }
    } else if (airqpass.length > 32) {
      airqpass = airqpass.substring(0,32)
    }
    var key = CryptoJS.enc.Utf8.parse(airqpass);
    var ciphertext = CryptoJS.enc.Base64.parse(msgb64);
    var iv = ciphertext.clone();
    iv.sigBytes = 16;
    iv.clamp();
    ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes
    ciphertext.sigBytes -= 16;
    var decrypted = CryptoJS.AES.decrypt({ciphertext: ciphertext}, key, {
        iv: iv
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
  }

decryptedMsg = decrypt(msg.payload.content, airqpass);
newMsg = { payload: decryptedMsg };
return newMsg;

Danach wird das Ergebnis noch durch den JSON parser geschickt und steht zur Weiterverarbeitung als JSON-Objekt zur Verfügung.

War dieser Artikel hilfreich?

Verwandte Artikel