Bei Versuch Blu-Daten effizienter zu verarbeiten, sind einige praktische Funktionen entstanden, die sich ideal für die Darstellung/Debug von Base64-Daten in Binär-, Hex- und Dezimalform eignen.
Viel Spaß damit.
Update(16.02.2024) v0.1
- Pause zwischen den Prints eingebaut.
Status: getestet unter Shelly FW 1.2.0
Shely Script:
BLE_Byte_Analyse v0.1
JavaScript
function Reverse(arr){ //Reverse Array order
let rArr= [];
for(i in arr){rArr[(arr.length-1)-i]= arr[i];}
return rArr;
}
function NumToBinary(num){ //Convert Number to Binary
if(typeof num === 'string') num= Number(num);
num= Reverse(num.toString(2).split(''));
let l= 8*Math.ceil(num.length/8);
let byte= new Array(8*Math.ceil(num.length/8));
for(bit= 0; bit<byte.length; bit++){
byte[bit]= num[(byte.length-1)-bit] | 0;
}
return byte; //byte.join('');
}
var index= 0;
function Print_Data(){
if(!saved_data || Object.keys(saved_data).length < 1 || index >= Object.keys(saved_data).length){
Timer.clear(tH1); tH1= 0; return null;
}
print(index+'.byte',saved_data[index+'.byte']);
index++;
}
var tH1= 0, saved_data= 0;
function Unpack_Data(d){ //Print Bytes of base64 String as Dezimal, Binary and hex values
if(tH1) return null;
saved_data= {};
for(byte in d){
saved_data[byte+'.byte']= {};
saved_data[byte+'.byte'][""+d.at(byte)]= NumToBinary(d.at(byte)).join('')
saved_data[byte+'.byte'].asHex= btoh(d[byte]);
}
if(!tH1) tH1= Timer.set(100,true,Print_Data);
}
// btoh() = Convert String to (Hex) Base16
// btoa() = Convert String to Base64
// atob() = Convert Base64 to string
let base64Data= atob("RADFAWQFoNcALQE/AQA="); //Blu Test Data
Unpack_Data(base64Data);
Alles anzeigen
So sieht der Consolen Output dazu aus:
Zum Schluss noch ein Geheimtipp: Mit der URL "chrome://bluetooth-internals/#devices" lassen sich in jedem Chrome-Browser (bei verbauter BT Hardware) alle Bluetooth-Geräte in der Nähe anzeigen.