USB-Port mit Linux über Software an und ausschalten – Nachtlicht

4 Kommentare Autor: Jürgen (jdo)

Letztes Jahr im Urlaub habe ich mir ein USB-Licht gekauft, das mit sagenhaften 50 Cent zu Buche geschlagen hat. Das ist mir beim Kruschen im Schrank wieder in die Finger gekommen und ich dachte mir, dass es eigentlich ein gutes Nachtlicht ist. Mein Server läuft sowieso und stünde passend neben einem alten Taucherhelm, in dem das Licht die Nacht etwas erhellen könnte.

Das USB-Licht soll automatisch Strom haben oder nicht - Schalter nennt man das, glaube ich :)

Das USB-Licht soll automatisch Strom haben oder nicht – Schalter nennt man das, glaube ich 🙂

Ich möchte vermeiden, dass ich dauernd den Helm öffnen und das Licht ein- und ausstecken muss. Klar ließe sich irgendwo ein Schalter anbringen, aber automatisch wäre es mir am liebsten. Ich habe also nach einer Möglichkeit gesucht, die Spannung von einem USB-Port unter Linux via Software zu nehmen.

Die ganzen Freaks mit Funksteckdosen und kompletter Hausautomation belächeln mich sicher gerade, aber das ist mir egal. Ich betreibe Hausautomation mit dem Holzhammer, ausgedienter Hardware und einem Taucherhelm! 😉

Der beleuchtete Taucher-Helm

Der beleuchtete Taucher-Helm

Nehmen wir es gleich vorweg.

Es funktioniert nicht, zumindest nicht direkt

Ich kann über die Software dem USB-Port nicht einfach den Strom unter dem Hintern wegziehen. Das geht so nicht, zumindest nicht bei einem modernen Kernel. Ich kann es pro verbundenem Gerät machen. Das Problem ist aber, dass das Licht total dumm ist. Es meldet sich nicht als Gerät, sondern saugt einfach Strom vom USB-Port. Ich habe also keine Geräte-ID, die ich entfernen und somit die Stromzufuhr unterbinden kann.

Nun ist entweder guter Rat teuer oder Du hast wie ich eine IT-Kruschkiste, die nicht weit von einem Antiquitäten-Museum entfernt ist. Dort finden sich allerlei Dinge, wie zum Beispiel ein alter USB-Hub von Logitech. Das ist eigentlich ein aktiver Hub, aber ich finde das Netzteil nicht mehr oder es ging irgendwann kaputt … ich kann mich ehrlich gesagt nicht mehr daran erinnern. Auf jeden Fall funktioniert der Hub noch passiv, zieht also vom USB-Port direkt Strom. Der reicht auch für das zukünftige Nachtlicht.

Ein alter USB-Hub von Logitech

Ein alter USB-Hub von Logitech

Der Hub als Bindeglied

Mit dem Hub als Bindeglied zwischen USB-Port und USB-Licht habe ich ein Gerät, das eine ID bekommt. Das bedeutet auch, dass ich es via Software am USB-Port einbinden und aushängen kann. Das ist im Endeffekt mein Schalter, den ich via Software bediene. Finden wir zunächst heraus, welche ID der USB-Hub hat.

sudo lsusb -t

In meinem Fall ist der USB Hub unter 1-1.3 ansprechbar. Führst Du lsusb -t ohne den Hub aus und steckst ihn danach ein, siehst Du ja, welches Gerät der Neuzugang ist.

Mein USB-Hub ist via USB-Port 1-1.3 ansprechbar

Mein USB-Hub ist via USB-Port 1-1.3 ansprechbar

Auf jeden Fall kann ich den alten USB-Hub so auswerfen:

sudo echo '1-1.3'|sudo tee /sys/bus/usb/drivers/usb/unbind

Möchte ich den Hub wieder einbinden, lautet der Befehl wie folgt:

sudo echo '1-1.3'|sudo tee /sys/bus/usb/drivers/usb/bind

Die beiden Befehle kann ich natürlich skripten und einen Cronjob anlegen. Im Moment ist das ziemlich banal, da sich das Licht um 0 Uhr einschaltet und um 6 Uhr wieder aus. Wenn ich Mal Zeit und Lust habe, versuche ich vielleicht, es um 0 Uhr zu aktivieren und mit Sonnenaufgang wieder zu deaktivieren. Das steht auf meiner Prioritätenliste allerdings nicht ganz oben, muss ich zugeben.

Die Methode funktioniert auch bei einem Raspberry Pi. Allerdings könntest Du beim Pi die GPIO-Schnittstelle nutzen, um Strom zu schalten. Das ist auf jeden Fall eleganter, aber meine Lösung funktioniert genauso und mein Server läuft sowieso. Außerdem muss ich nicht GPIO auf USB pfrimeln oder ein Relais mit dem Raspberry Pi schalten. Eleganter ja, aber für mein Problem auf keinen Fall einfacher. Ich musste darüber hinaus nichts kaufen und deswegen reicht mir die provisorische Lösung. Du kennst das sicher auch: Provisorien halten am längsten.

Wobei mir mit dem Raspberry Pi schon noch etwas einfällt. Du könntest einen Schalter an die GPIO-Schnittstelle basteln und wenn Du ihn drückst, schaltet sich das Licht ein oder entsprechend aus. Du würdest den USB-Port also per Knopfdruck ansteuern. Das wäre zwar nicht automatisiert, würde aber ebenfalls funktionieren.

Einzelne Ports der USB-Hubs ansteuern

Bei meinen Recherchen zu diesem technischen Wunderwerk habe ich gelesen, dass es wohl Hubs gibt, bei denen sich die einzelnen Ports direkt ansteuern lassen. Das funktioniert bei dem alten Hub von mir nicht. Der kann An (eingebunden) oder Aus (ausgehängt).

Suchst Du einen Hub, bei dem Du die Ports direkt und einzeln einbinden und aushängen kannst, musst Du selbst Recherche betreiben. Da kann ich leider nicht weiterhelfen.

Am Anfang hatte ich versucht, den Helm freihändig mit etwas längerer Belichtung zu fotografieren. Für das Stativ war ich zu faul, aber es ging dann doch nicht ohne. Eines der versemmelten Bilder ist aber ganz cool geworden. Es sieht so aus, als würde der Helm rauchen.

Der Taucher-Helm raucht

Der Taucher-Helm raucht

Passiert ist das so: Ich wollte ein HDR machen (Kamera, kein manuelles) und habe nicht mitbekommen, dass die Kamera noch nicht fertig ist. Also habe ich die kleine Sony nach unten gezogen, um das Ergebnis anzusehen. Die hellen Bereiche wurden noch übernommen. Der Effekt ist ähnlich wie beim Sternenspuren oder Megablitzen.

Nette Pi-Konstellation

Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.




 Alle Kommentare als Feed abonnieren

4 Kommentare zu “USB-Port mit Linux über Software an und ausschalten – Nachtlicht”

  1. Al CiD says:

    Moin

    gefällt mir sehr 🙂

    Danke

  2. Thomas says:

    mit https://github.com/codazoda/hub-ctrl.c lässt sich der Strom aller USB-Ports des Raspis ein/ausschalten.

    • jdo says:

      Funktioniert bei meinem 3+ nicht. Das Licht geht zwar kurz aus, dann aber sofort wieder an. Mit uhubctl oder hub-ctrl kann ich aber alle USB-Ports ausschalten und wieder anschalten. Aber dann kann ich eigentlich auch sudo echo '1-1'|sudo tee /sys/bus/usb/drivers/usb/unbind benutzen.

  3. Marius says:

    USB Tricks kommen viel zu selten in unseren Beiträgen vor, der ist nett.