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.