Also, serial port klingt schon mal gut.
Bisher hatte ich folgende Lösung, aber die ist umständlich.
Es gibt das Node-Hid npm, dieses wir auch mitinstalliert mit dem Community-HID-Adapter. Der alte von SOEF scheint nicht mehr zu funktionieren, ist aber noch in der Repo. Könnte man bei Gelegenheit mal ändern.
Also, der HID installiert Node-HID mit. Jetzt gibt es die npm Module Node-HID-Stream sowie usb-barcode-transform.
Die hochen auf der Vendor ID und wandeln den Buffer dann in Integer.
Aber die Lösung ist nicht so dolle, da der User iobroker erst noch Rechte braucht. Also alles sehr umständlich.
Serial Port klingt da einfacher und besser. Hast du zufällig ein Beispiel parat? Per Sendkey kommen HEX blöcke rein, die wandeln wir jetzt auch schon in Integer um mit einer Schleife, wollte das aber mal mit dem Readbuffer machen. Scheint wohl so ne Funktion zu sein von Node.
sonst, ich könnte dir auch 2 Geräte mal zukommen lassen, wenn du gerade Langeweile hast 🙂
Könnte mir vorstellen, dass es für einige User interessant sein könnte, da die über USB angeschlossen werden können und kosten nur 6€. Die anderen Varianten kenne ich nur mit Wemos und mqtt z.B. , Aber das auch wieder frickellei.
Gruß und Danke
Update:
So es gibt anscheinend noch einen einfacheren Weg, der auch unter Node 10 usw. läuft. Da der RFID als HID erkannt wird, geht Serialport soweit auch nicht, zumindest was ich gelesen habe.
Die Vollständige Anleitung mache ich morgen fertig. Auf die schnelle:
usb-barcode-scanner im Javascript mit eintragen, wird soweit auch alles mitinstalliert auch Node-HID.
udev Regel anlegen, da der User Iobroker keine Rechte hat, das HID Device zu lesen. Es ist ein Hidraw Devices.
sudo nano /etc/udev/rules.d/90-hidraw-permission.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"
User iobroker mit in die Gruppe plugdev.
sudo usermod -aG plugdev iobroker
Script für USB Device erkennen
var hid = require('node-hid');
console.log(JSON.stringify(hid.devices()));
Script für ID der RFIDReader auszulesen.
let UsbScanner = require('usb-barcode-scanner').UsbScanner;
let scanner = new UsbScanner({
vendorId: 65535,
productId: 53
});
scanner.on('data', (data) => {
console.log(decimalToHex(data));
});
scanner.startScanning();
function decimalToHex(d, padding) {
var hex = Number(d).toString(16);
padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
while (hex.length < padding) {
hex = "0" + hex;
}
var s = "";
var i = hex.length;
while (i>0) {
s += hex.substring(i-2,i);
i=i-2;
}
return s;
}
Gruß