NEWS
Javascript: USB Geräte mit NPM-Modulen erkennen
-
@Alle
Moin, moinIch möchte,
das ein Javascript nur läuft, wenn ein bestimmtes USB-Gerät (Vid und Pid) angeschlossen ist.In der Instanz "javascript.0" habe jeweils die "zusätzlichen NPM-Module"
- usb
- node-usb
- usb-detection
sowie bei "Syntaxhilfe für npm-Module" eingetragen.
Ich habe dann anhand der Beispiel-Scripte aus den jeweiligen Readme's zu den
NPM-Modulen ein Test-Script erstellt.Bei den Modulen "usb" und "node-usb" bekomme ich in den Test-Scipten nur Fehlermeldungen
bzgl. der Zeile mit dem Befehl: "import..."Beim Modul "usb-detection" erhalte ich keine Fehlermeldung in den Test-Scripten.
Allerdings fehlt bei der Rückmeldung "add", "remove", "change" die Infos zum Device.
Also nur die Rückmeldung mit den Infos "add", "remove", "change" ohne Device-Infos.
Somit kann ich erkennen das sich was ändert, aber ich sehe nicht bei welchem Device.
Außerdem wird im ReadMe des Moduls der Umstieg auf "usb" empfohlen.Was mache ich hier falsch?
EDIT:
Wegen der Fehlermeldungen in "usb" und "node-usb" habe ich über die Konsole
von NPM die Module "usb", "node-usb" und "libudev-dev" nach installiert, leider
ohne Erfolg. -
@atari sagte in Javascript: USB Geräte mit NPM-Modulen erkennen:
Bei den Modulen "usb" und "node-usb" bekomme ich in den Test-Scipten nur Fehlermeldungen
bzgl. der Zeile mit dem Befehl: "import..."import funktioniert in ioBroker nicht. Du musst stattdessen require verwenden.
-
@jey-cee
danke für Deine rasche Antwort.Mit "require" hab ich es auch versucht, hat auch nicht funktioniert.
Aber vllt. habe ich die entsprechende Befehlszeile nicht korrekt eingegeben.Hast Du evtl. eine kurzes Bespiel hierzu?
-
@atari schau im Github repository von usb bei den issues, da findest du einige Beispiele
-
@jey-cee
ok, schau ich mir mal an. -
@jey-cee sagte in Javascript: USB Geräte mit NPM-Modulen erkennen:
schau im Github repository von usb bei den issues, da findest du einige Beispiele
Nimm's mir nicht übel, aber unter den Repositorys und Issues zu USB wird man ja
erschlagen von der Masse der Einträge. Hab mir davon einige angesehen, aber kein
brauchbares Beispiel-Script endeckt. Im Grunde habe ich immer nur Teile aus den
Beispiel-Scripten zu den Modulen gefunden. Vllt. bin ich aber auch einfach nur zu 'blöd' für eine richtige Suche.Nach
var usb = require('usb')
bekomme ich in meinem Script keine Fehlermeldung.
Aber wie geht's dann weiter...,
Wie müssen Javascripte wie...import { getDeviceList } from 'usb'; const devices = getDeviceList(); for (const device of devices) { console.log(device); // Legacy device }
oder
import { findByIds } from 'usb'; const device = findByIds(0x59e3, 0x0a23); if (device) { console.log(device); // Legacy device }
für ioBroker Javascript umgewandelt werden?
Alle Beispiel-Scripte von NPM / GitHub "usb" oder "node-usb" beginnen immer mit
import.... const...
und funktionieren nicht im ioBroker Javascript.
EDIT:
Wie schon erwähntvar usbDetect = require('usb-detection'); usbDetect.startMonitoring(); usbDetect.on('change', function(device) { console.log('change', device); });
funktioniert, allerdings ohne Infos zum USB-Device.
-
const usb = require('usb'); const devices = usb.getDeviceList(); for (const device of devices) { console.log(device); // Legacy device }
-
@jey-cee
SUPER !!! funktioniert.Dann kann ich über
const device = usb.findByIds(xxxx, xxxx);
das entsprechende Device auf "vorhanden" abfragen?
-
@atari keine Ahnung ich kenn die Lib USB nicht.
-
kein Problem.
Wenn ich die Befehle (aus dem Beispiel-Script zum Modul "usb")- getDeviceList()
- findByIds(xxxx, xxxx)
- etc...
um ein vorangestelltes "usb." erweitere erhalte ich eine positive Rückmeldung über log.
(Das "usb." vor den Befehlen war der 'Key')Merci jey-cee
-
@Jey-Cee
Sorry, ich bin's nochmal (hoffentlich zum letzten Mal in diesem Fall)Das Starten und Stoppen von bestimmten Javascripten in Abhängigkeit vom Vorhandensein bestimmer USB-Geräte funktioniert nun, Dank Deiner Hilfe.
Nun habe ich vergessen, das ich ebenfalls eine "Adapter Instanz" per Javascript
stoppen bzw. starten müsste. (zB. zwave2.0)Notwendigerweise setze ich den entsprechenden Datenpunkt zum Script
"scriptEnabled" auf "false" oder "true".Geht das so o.ä. auch für eine Adapter Instanz?
EDIT:
Gefunden, Datenpunkt 'alive' der Adapter Instanz auf 'false' danach auf 'true'
setzen.