MAM59 Posted March 30, 2022 Share Posted March 30, 2022 Ich bräuchte mal einen kleinen Denkanstoß. Ich will mir ein simples Skript machen, was alle paar Sekunden die Temperatur, Prozessorauslastung und... (der dritte Wert steht noch nicht wirklich fest, vielleicht der LAN Durchsatz?) von IRGENDWOHER ausliest und als Farbe und Balkendiagramme an OpenRGB LEDs übergibt. Das Ganze muss wohl in Python entstehen, nur dafür habe ich entsprechende (OpenRGB) Klassendefinitionen gefunden. Die anzuzeigenden Werte sehe ich ja durch installierte Plugins wie Dynamix System Statistics auf der GUI, nur, wie krieg ich die Werte in ein Skript eingelesen??? Ist ja nur Bling-Bling, aber in der Tiefe der dunklen Garage sieht man dann schon gleich, ob der Admin mal einen Blick werfen sollte oder nicht. Ein Band aus 6 gleichgeschalteten LEDS zeigt dann farblich die Prozessortemperatur (von dunkelblau bis hellrot), zwei eineln ansteuerbare LEDbalken mit jeweils 8 LEDs sollen je nach Auslastung angehen, die Farbe wird wohl konstant bleiben (will Infos, keine Disco). Wie gesagt, wie krieg ich die Werte rein? (geht mal davon aus, dass ich der Shellprogrammierung und noch einem Dutzend anderer Programmiersprachen mächtig bin) Quote Link to comment
Archonw Posted March 30, 2022 Share Posted March 30, 2022 Kann bei der Umsetzung zwar nicht helfen, finde die Idee aber cool. Bin auf das Ergebnis gespannt. Quote Link to comment
mgutt Posted March 31, 2022 Share Posted March 31, 2022 14 hours ago, Michael Meiszl said: Das Ganze muss wohl in Python entstehen, nur dafür habe ich entsprechende (OpenRGB) Klassendefinitionen gefunden. Gibt es Beispiele? Das beste wäre mir einem Beispiel zu arbeiten, wo du erstmal nur eine Farbe statisch steuerst. Danach könnte man überlegen wie man Werte aus dem System ausliest und verarbeiten lässt. Quote Link to comment
MAM59 Posted March 31, 2022 Author Share Posted March 31, 2022 (edited) 34 minutes ago, mgutt said: iGbt es Beispiele? Das beste wäre mir einem Beispiel zu arbeiten, wo du erstmal nur eine Farbe statisch steuerst. Danach könnte man überlegen wie man Werte aus dem System ausliest und verarbeiten lässt. Das wäre ein trivialer 2 Zeiler, wie gesagt, der "bunte Teil" ist nicht das Problem (na ja, vielleicht doch noch, ich muss noch rauskriegen, wie ich bei UNRAID die nötige Bibliothek nachladen kann, bislang mach ich das von einem anderen Server aus. OpenRGB funktioniert über LAN Verbindungen, im Trivialfalle eben über "localhost"). Ich vermeide direkt auf UNRAID zu "basteln", die Kiste macht dann manchmal so komische Abflüge, wie z.B. gestern als ich "nur das Array stoppen" wollte um einen Pool zu löschen und nach über einer Stunde dann die Reset Taste drücken musste, weil die Leute mir schon im Nacken hingen und wieder an ihre Daten wollten... Also eine Ansteuerung sähe etwa so aus: Quote from openrgb import OpenRGBClient cli = OpenRGBClient('192.168.1.111', 8000, 'My client!') from openrgb.utils import DeviceType mobo = cli.get_devices_by_type(DeviceType.MOTHERBOARD)[0] from openrgb.utils import RGBColor red = RGBColor(255, 0, 0) blue = RGBColor.fromHSV(240, 100, 100) green = RGBColor.fromHEX('#00ff00') mobo.set_color(blue) cli.devices[0].set_color(red) cli.devices[1].zones[0].set_color(green) wobei die Devices und Zonen dynamisch sind. Deshalb muss man sie von der Verbindung abfragen ("mobo =...") Allerdings gibt es einen Haken: die einzeln ansteuerbaren LEDs sind ja alle in einer Kette angeschlossen. Die Befehle werden zwar immer weiter durchgereicht (und die Adresse dabei um 1 subtrahiert, wenn sie 0 ist fühlt sich die LED angesprochen und gibt nix mehr weiter), aber es gibt keine Möglichkeit zu ermitteln, WIEVIELE angeschlossen sind. Diese "Size" muss man also hartkodieren und sie muß dann eben immer wieder angepasst werden. (es gibt ein paar fiese Tricks, z.B. wenn man eine LED AUS machen will, muß man ihr die Farbe "Schwarz / (0,0,0)" zuordnen. Da die Einstellungen in den LEDs gespeichert werden, braucht man nur die jeweiligen Änderungen zu senden usw. ist aber alles total harmlos) Edited March 31, 2022 by Michael Meiszl Quote Link to comment
MAM59 Posted March 31, 2022 Author Share Posted March 31, 2022 Wenn Du es genauer wissen willst, hier mal ein Screenshot von dem UNRAID Plugin: Jedes Mainboard bietet da andere Anschlüsse. Hier sind 3 LEDs auf (bzw UNTER) dem Motherboard (und natürlich im geschlossenen Gehäuse nicht sichtbar), 2 verschiedene RGB Header (da kann man die LED Streifen anschließen, die man so im Baumarkt kriegt und wo dann alle eine gemeinsame Farbe haben) und noch 16 LEDs die einzeln ansteuerbar sind (letztere mußte ich von Hand konfigurieren, wie erwähnt, es gibt keine Möglichkeit sie automatisch durchzählen zu lassen). Du kannst also kein Skript machen, was überall sofort ganz toll läuft, weil jede Kiste einen anderen Aufbau hat. Quote Link to comment
mgutt Posted March 31, 2022 Share Posted March 31, 2022 48 minutes ago, Michael Meiszl said: Also eine Ansteuerung sähe etwa so aus: Und läuft es? Wie sieht das fertige Script aus? Wie gesagt muss das erstmal praktisch funktionieren. Danach können wir darauf aufbauen und es erweitern. Quote Link to comment
MAM59 Posted March 31, 2022 Author Share Posted March 31, 2022 (edited) 24 minutes ago, mgutt said: Und läuft es? Wie sieht das fertige Script aus? jaja, das geht schon (wie gesagt, von einer ANDEREN Kiste aus, um UNRAID kümmere ich mich später) Die paar Zeilen da oben schalten verschiedene LEDs auf verschiedenen Anschlüssen auf die jeweilige Farbe. Um Helligkeiten zu regeln muss man die Farben abdimmen (also 255,0,0 für ganz helles rot, 10,0,0 für ganz schwaches rot). Manche Farben (z.B. gelb) kommen mit den LEDs nicht so gut raus, weil die recht groß sind, und der Abstand der internen Farb LEDs doch auch recht weit. Die Farbmischung ist dann erst nach einigen Metern Abstand korrekt). Aber wenn man bei den Grundfarben bleibt, sieht alles recht gut aus. Mit der GUI des besagten Plugins kannst du auch alles von Hand durchprobieren, aber das ist ja recht langweilig und doof. (Anmerkung: "von einer ANDEREN Kiste aus" bedeutet, dass im Moment das Skript auf einem anderen Linux Server läuft, aber bei UNRAID die LEDs ansteuert. Könnte von mir aus auch so bleiben, aber dann müsste ich die Werte für CPU & Co remote auslesen können...) Edited March 31, 2022 by Michael Meiszl Quote Link to comment
MAM59 Posted March 31, 2022 Author Share Posted March 31, 2022 13 hours ago, mgutt said: Und läuft es? also ich habs heute abend mal ausprobiert, läuft wie ne 1 🙂 Das Testscript: #!/usr/bin/env python3 from openrgb import OpenRGBClient from openrgb.utils import RGBColor import time client = OpenRGBClient('192.168.0.4',6742,'MAMTest') print(client) print(client.devices) #client.off() while True: for x in range(360): client.set_color(RGBColor.fromHSV(x, 100, 100), fast=True) time.sleep(.05) output auf der shell: [root@l3router ~/openrgb-python-master/examples]# ./spectrum-cycle.py OpenRGBClient(address=192.168.0.4, port=6742, name=MAMTest) [Device(name=ASUS TUF GAMING X570-PLUS (WI-FI), id=0)] ^CTraceback (most recent call last): File "./spectrum-cycle.py", line 17, in <module> time.sleep(.05) KeyboardInterrupt steppt alle Farben durch, bis man es mit CTRL-C abbricht Nur dieser "client.off()" Befehl funktioniert nicht, muss mal suchen warum (ist aber nicht so wichtig, die Dinger sollen ja leuchten, nicht aussein :-))) ) Hab auch schon Funktionen gefunden, die Temperaturen in Farben umrechnen und Balkengrafiken anzeigen können. Nur, es fehlen immer noch die Daten von Prozessor, Ram und Platten (oder LAN) Quote Link to comment
MAM59 Posted April 2, 2022 Author Share Posted April 2, 2022 so, ich bin auf der Zielgerade 🙂 Die CPU Temperatur kann man auslesen mit X=`sensors |grep "CPU Temp:" | sed "s/.*+//" |sed "s/°.*//"` (da steht normalerweise "CPU Temp: +45.2°C" aber wir schneiden vorne und hinten ab und lassen nur "45.2" über) die cpu Belastung findet man in /var/local/emhttp/cpuload.ini. Kann man einfach lesen mit dem json plugin. Fehlt noch die LAN Auslastung... da hatte bislang noch niemand einen Tipp... Quote Link to comment
mgutt Posted April 10, 2022 Share Posted April 10, 2022 On 4/2/2022 at 3:35 PM, Michael Meiszl said: Fehlt noch die LAN Auslastung... da hatte bislang noch niemand einen Tipp... Mit "ifstat" bekommst du die aktuelle Übertragungsrate. Mit "ifstat -j" bekommst du die Daten als "json" zurück. Das dürfte das Verarbeiten mit python erleichtern. Mit "ifstat -jt 60" bekommst du die durchschnittliche Transferrate der letzten 60 Sekunden zurück. Mehr Infos: https://man7.org/linux/man-pages/man8/ifstat.8.html Quote Link to comment
MAM59 Posted April 11, 2022 Author Share Posted April 11, 2022 ja, dange 🙂 ifstat hatte ich auch schon mal gefunden, bin aber etwas zu blöd, die Werte zu interpretieren und als sinnvolle Einheiten umzurechnen (z.B. so, wie auf dem Dashboard). eth0 5416 0 6174 0 1006K 0 960279 0 0 0 0 0 0 0 0 0 br0 5356 0 6160 0 918958 0 958670 0 die dritte(+vierte) Spalte ist wohl interessant, aber, was sind 1006K ? Aber, ist erstmal egal. Der Docker hat sich mal wieder verabschieded und ich habe keinen Bock darauf, zu suchen warum. auf einmal war das webinterface des dockers nicht mehr erreichbar ("cannot connect to server"), der server selber läuft aber und kann über LAN angesprochen werden. Das Konzept "Docker" hat sich mir nie erschlossen, ich hasse die Dinger wie die Pest und verwende keinen Einzigen bislang. Und dabei wirds wohl bleiben. Ich kann das LED Device ja mal an eine VM durchreichen, vielleicht kann Windows damit mehr anfangen... Sonst bleiben die Lämpchen aber dunkel, ich baue keine Kartenhäuser mit dem Motto "von hinten durch die Brust ins Auge, Hauptsache: GEHT IRGENDWIE". Die fallen einem immer wieder auf die Füße irgendwann... Quote Link to comment
MAM59 Posted April 11, 2022 Author Share Posted April 11, 2022 (edited) Update: hab das Docker Geraffel (echt krank das Zeug 😞 ) erfolgreich entsorgt und das USB Device in eine VM durchgereicht. Dort funktioniert die GUI und der Server nun erstmal. Mal schauen, wie lange (der Docker hatte ja sonne Woche überlebt bevor er die Lust verlor). Also kann ich bald mit dem Skript weitermachen, brauch ja nur die IP Adresse beim Öffnen ändern. (Nein, normalerweise braucht niemand die GUI, aber sie erlaubt eine Gesamtanzeige aller gefundenen Geräte und man muss diese unter ihrem Namen ansprechen. Schlecht also, wenn man die Liste nicht sehen darf...) Ach ja, prinzipbedingt (eben WEGEN dieser Namen) wird es nie möglich sein, ein "Skript für alle" anzubieten. Jeder muss da zumindest in einer Tabelle die Namen seiner eigenen Geräte (bzw LEDs) eintragen. Das wird also kein Point&Click Dingens... Also keine übertriebene Euphorie bitte... Edited April 11, 2022 by Michael Meiszl Quote Link to comment
martinriedel Posted April 11, 2022 Share Posted April 11, 2022 Falls du noch etwas Farbe ins Terminal bringen möchtest -> https://github.com/Textualize/rich Quote Link to comment
MAM59 Posted April 11, 2022 Author Share Posted April 11, 2022 4 minutes ago, martinriedel said: Falls du noch etwas Farbe ins Terminal bringen möchtest YUCK! sicherlich NICHT!!! Quote Link to comment
MAM59 Posted April 11, 2022 Author Share Posted April 11, 2022 Info für @mgut: Ich hab heute morgen schon mal einen erfreulichen Fortschritt erzielt, ich bin nun in der Lage eine Liste der Geräte abrufen und somit jede LED/Stripe einzeln anzusteuern. Bleibt natürlich weiterhin "spezifisch", nähert sich aber schon mal einer wartbareren Form OpenRGBClient(address=192.168.0.183, port=6742, name=MAMTest) [Device(name=ASUS , id=0)] [LED(name=Aura Mainboard, LED 1, id=0), LED(name=Aura Mainboard, LED 2, id=1), LED(name=Aura Mainboard, LED 3, id=2), LED(name=Aura Mainboard, RGB Header 1, id=3), LED(name=Aura Mainboard, RGB Header 2, id=4), LED(name=Aura Addressable 1, LED 1, id=5), LED(name=Aura Addressable 1, LED 2, id=6), LED(name=Aura Addressable 1, LED 3, id=7), LED(name=Aura Addressable 1, LED 4, id=8), LED(name=Aura Addressable 1, LED 5, id=9), LED(name=Aura Addressable 1, LED 6, id=10), LED(name=Aura Addressable 1, LED 7, id=11), LED(name=Aura Addressable 1, LED 8, id=12), LED(name=Aura Addressable 1, LED 9, id=13), LED(name=Aura Addressable 1, LED 10, id=14), LED(name=Aura Addressable 1, LED 11, id=15), LED(name=Aura Addressable 1, LED 12, id=16), LED(name=Aura Addressable 1, LED 13, id=17), LED(name=Aura Addressable 1, LED 14, id=18), LED(name=Aura Addressable 1, LED 15, id=19), LED(name=Aura Addressable 1, LED 16, id=20)] Also, wenn ich nun id 20 auf (20,20,20) setze, geht nur die eine LED an und zeigt ein wenig weiß... damit lässt sich arbeiten. Offensichtlich ist id0 "alles" (damit werden alle angeschlossenen Devices auf einmal umprogrammiert), die IDs 1,2 und 3 sitzen als einzelne LED unter (! sehr sinnvoll!!! ) dem Motherboard, id 3 ist der linke Stripe Anschluss, id 4 der rechte Stripe und 5.... (bei mir eben 20, weil 16 LEDs angeschlossen sind) der Anchluß für die Einzel LEDs extern. So ähnlich wird wohl jedes Board ausgestattet sein, Prozessorkühler, Tastaturen, RAMs und Mäuse sind ein anderes Forschungsgebiet. Da muss jeder selber fuckeln bis seine Maus die Temperatur anzeigt. Quote Link to comment
MAM59 Posted April 12, 2022 Author Share Posted April 12, 2022 So, ich bin fertig 😁 Hab den LAN Kram letztendlich weggelassen, das wäre noch kompliziert geworden (damit diese ifstat zahlen irgendwas aussagen können, muß man erstmal die Schnittstellengeschwindigkeit ermitteln, ausserdem hat der User keine Chance zu sagen WELCHES LAN er angezeigt haben will usw...) Ist nun auf dem Stick unter /boot/config/optional und hat ein Startskript, dass per "go" aufgerufen wird. Das Startskript kopiert den ganzen Ordner mit Unterordnern nach /usr/local/bin, wartet, bis das NerdPack python installiert hat, und startet dann das eigentliche Temp2RGB (oder wie immer man es nennen will) Skript im Hintergrund. Selbiges versucht dann eine LAN Verbindung zum RGB Server aufzubauen, der steckt bei mir in einer VM, man könnte nun aber auch wieder den Docker nehmen da man die Gui nur braucht, um die Geräte einmalig zu ermitteln. (kann ich nun aber auch per Skript, also GUI unnötig) Das läuft dann bis zum NImmerleinstag vor sich hin und frißt kein Brot. Links die Temperatur, in der Mitte ein Bargraph aus 8 LEDs für die Auslastung und ganz rechts blinkt eine grüne LED im 2s Rhytmus und signalisiert "Hurra, ich lebe noch!" Die Farben wechseln bei Temperatur und Auslastung. Die LEDs werden alle so mit max. 20% Helligkeit betrieben, voll aufgedreht wird man blind. Nur bei Übertemperatur wird es seeeehr rot, seeeehr hell und blinkt seeeehr heftig... Ich kann die ganzen Scripts hier reinpacken, aber, wie gesagt, da muss auf jeden Fall Hand angelegt werden, das ist kein Plug&Pray... Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.