USB-Port mit Linux über Software an und ausschalten – Nachtlicht
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.
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! 😉
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.
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.
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.
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.
Moin
gefällt mir sehr 🙂
Danke
mit https://github.com/codazoda/hub-ctrl.c lässt sich der Strom aller USB-Ports des Raspis ein/ausschalten.
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.
USB Tricks kommen viel zu selten in unseren Beiträgen vor, der ist nett.