2017-01-25 1 views
3

Ich verwende node-detection, um benachrichtigt zu werden, wenn ein USB Gerät eingesteckt wurde. Jedoch kann ich nicht herausfinden, wie man weiß, an welchen Port es angeschlossen wurde, z. SDB1, SDC1 usw. Gibt es eine einfache Möglichkeit, es zu tun?USB-Port des eingesteckten Geräts im Knoten

+0

sind Sie usig Knoten-USB-Erkennung? auf npmjs? Es basiert auf USB (npmjs). Es ist schwer, den Hafen zu bekommen. Ich suche auch danach. Ich werde posten, wenn ich eine Lösung finde –

Antwort

1

Ich denke, es ist nicht mit Knoten-Erkennung arbeiten

Vielleicht nicht der beste Weg, aber das war für mich:

var shell = require('shelljs'); 
var watch = require('node-watch'); 
var tmpUsb; 

Array.prototype.contains = function(needle){ 
    for (var i=0; i<this.length; i++) 
    if (this[i] == needle) return true; 

    return false; 
} 

Array.prototype.diff = function(compare) { 
    return this.filter(function(elem) {return !compare.contains(elem);}) 
} 

getUsb = function() { 
     this.usbJson = JSON.parse(shell.exec('lsblk --json', {silent:true}).stdout); 
     var dev = this.usbJson.blockdevices; 
     var devices = []; 
     dev.forEach(function(entry) { 
      entry.children.forEach(function(e) { 
       devices.push(e.mountpoint); 
      }); 
     }); 
     return devices; 
} 

tmpUsb = getUsb(); 

watch('/dev/disk/by-id', { recursive: true }, function(evt, name) { 
    var curr = getUsb(); 
    var add = curr.diff(tmpUsb); 
    var rem = tmpUsb.diff(curr); 
    if(add.length > 0) { 
     console.log("ADD > " + add); 
    } 
    if(rem.length > 0) { 
     console.log("REM > " + rem); 
    } 
    tmpUsb = curr; 
}); 

Bitte in Ihrer Frage hinzufügen, was Ihr Ausgang ist. Welchen Code haben Sie versucht?

2

Sie können das Modul drivelist zusätzlich zum Knotenerkennungsmodul verwenden, das von den ausgezeichneten Mitarbeitern von resin.io erstellt wurde.

Das Laufwerklistenmodul listet alle angeschlossenen Geräte auf, einschließlich der Mountpoint- (Pfad-) Informationen. Diese Ausgabe unterscheidet sich je nach Betriebssystem geringfügig. Weitere Informationen finden Sie in der Dokumentation zur Laufwerksliste.

Hier finden Sie ein schnelles Beispiel, um herauszufinden, wann ein entfernbares USB-Laufwerk eingelegt und gemountet wurde, und um den Mount-Pfad zu erhalten.

Bei einigen Tests wird das USB-Erkennungsmodul fast sofort ausgelöst, wenn ein Gerät eingesteckt ist, aber es dauert eine Weile, bis das Gerät geladen wird. Also verwende ich einen setInterval, um zu überprüfen, ob ein Mountpoint existiert. Sobald ich einen Mountpoint gefunden habe, lösche ich das Intervall.

// load modules 
var usbDetect = require('usb-detection'); 
const drivelist = require('drivelist'); 
var checkUSBintervalID; 

// This is the listener function for the 'add' event 
function addUSBhandler() { 
    console.log('added event listener for usb ADD'); 

    // Start interval to check if the USB is mounted 
    checkUSBintervalID = setInterval(function() { 
     drivelist.list(function(error, drives) { 
      console.log('listening for USB mount...'); 
      if (error) { throw error; } 

      // iterate through all drives 
      for(var d = 0; d < drives.length; d++) { 

       // if the drive is a removable usb 
       if(drives[d].system == false) { 

        // if this drive is mounted 
        if(drives[d].mountpoints.length > 0) { 
         console.log('found removable USB'); 
         // the drive is mounted 
         // do stuff here 
         // the path is at drives[d].mountpoints[0].path 
         clearInterval(checkUSBintervalID); 
        } 
       } 
      } 
     }); 
    }, 1000); 
} 

// Add listener for when a USB is plugged in 
usbDetect.on('add', addUSBhandler); 

Diese Antwort wird nicht berücksichtigt, wenn der USB-Datenträger vor dem Einsetzen eingesetzt und entfernt wird. Sie müssen wahrscheinlich ein Timeout oder etwas Ähnliches hinzufügen. Hoffe das half, und viel Glück.

0

Ich weiß nicht, über node.js Bindungen, aber mit externen udevadm Werkzeug die Informationen ausgesetzt ist:

$ udevadm monitor 
monitor will print the received events for: 
UDEV - the event which udev sends out after rule processing 
KERNEL - the kernel uevent 

KERNEL[766928.886896] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1 (usb) 
KERNEL[766928.888766] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0 (usb) 
UDEV [766929.091194] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1 (usb) 
KERNEL[766930.777996] add  /module/usb_storage (module) 
UDEV [766930.780203] add  /module/usb_storage (module) 
KERNEL[766930.781054] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4 (scsi) 
KERNEL[766930.781241] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/scsi_host/host4 (scsi_host) 
KERNEL[766930.781370] add  /bus/usb/drivers/usb-storage (drivers) 
UDEV [766930.782320] add  /bus/usb/drivers/usb-storage (drivers) 
KERNEL[766931.092511] add  /module/uas (module) 
UDEV [766931.092584] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0 (usb) 
KERNEL[766931.092608] add  /bus/usb/drivers/uas (drivers) 
UDEV [766931.093550] add  /module/uas (module) 
UDEV [766931.094000] add  /bus/usb/drivers/uas (drivers) 
UDEV [766931.094305] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4 (scsi) 
UDEV [766931.095737] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/scsi_host/host4 (scsi_host) 
KERNEL[766931.807635] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0 (scsi) 
KERNEL[766931.807770] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0 (scsi) 
KERNEL[766931.807901] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk) 
KERNEL[766931.807995] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device) 
KERNEL[766931.809543] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic) 
KERNEL[766931.809605] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg) 
UDEV [766931.811736] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0 (scsi) 
KERNEL[766931.812771] add  /devices/virtual/bdi/8:16 (bdi) 
UDEV [766931.815246] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0 (scsi) 
UDEV [766931.815908] add  /devices/virtual/bdi/8:16 (bdi) 
UDEV [766931.818228] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk) 
UDEV [766931.819748] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg) 
UDEV [766931.821506] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device) 
UDEV [766931.821894] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic) 
KERNEL[766931.895701] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb (block) 
KERNEL[766931.895807] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1 (block) 
KERNEL[766931.895879] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb2 (block) 
UDEV [766933.474661] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb (block) 
UDEV [766933.566443] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb2 (block) 
UDEV [766933.658413] add  /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1 (block) 

KERNEL[766942.802911] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg) 
KERNEL[766942.804048] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic) 
KERNEL[766942.804163] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device) 
KERNEL[766942.804246] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk) 
KERNEL[766942.804338] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb2 (block) 
KERNEL[766942.804426] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1 (block) 
KERNEL[766942.804518] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb (block) 
KERNEL[766942.804590] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0 (scsi) 
UDEV [766942.806838] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg) 
UDEV [766942.807543] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic) 
UDEV [766942.809181] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk) 
UDEV [766942.809410] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device) 
UDEV [766942.812382] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1 (block) 
UDEV [766942.812545] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb2 (block) 
UDEV [766942.814711] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb (block) 
UDEV [766942.815300] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0/4:0:0:0 (scsi) 
KERNEL[766942.816341] remove /devices/virtual/bdi/8:16 (bdi) 
KERNEL[766942.816384] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0 (scsi) 
UDEV [766942.817716] remove /devices/virtual/bdi/8:16 (bdi) 
UDEV [766942.819175] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/target4:0:0 (scsi) 
KERNEL[766942.864803] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/scsi_host/host4 (scsi_host) 
KERNEL[766942.864891] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4 (scsi) 
KERNEL[766942.865168] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0 (usb) 
KERNEL[766942.866960] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1 (usb) 
UDEV [766942.867670] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4/scsi_host/host4 (scsi_host) 
UDEV [766942.868469] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0/host4 (scsi) 
UDEV [766942.869291] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1/5-1:1.0 (usb) 
UDEV [766942.870791] remove /devices/pci0000:00/0000:00:10.0/usb5/5-1 (usb) 

Einige Hinweise:

  • Es kann auf eine mehr als eine Partition sein USB-Stick, oder es kann ein Dateisystem direkt ohne Partitionen haben.
  • Sie brauchen wahrscheinlich nicht speziell für USB-Geräte zu überwachen, nur irgendein Block Gerät vielleicht?
  • Dies ist keine Filterung, Sie werden noch viele unabhängige Ereignisse bekommen.
Verwandte Themen