Abo
  • Services:
Anzeige
Lüfter vor Analysetool
Lüfter vor Analysetool (Bild: Matthias Riegler)

Eine Alternative zum Kernelmodul entsteht

Unter Windows werden alle Geräte von NZXT mit dem hauseigenen CAM-Programm angesprochen. So hat NZXT ihre Steuerungssoftware genannt. Mit der eigentlichen Abkürzung im Industriebereich hat sie wenig gemeinsam. Warum gibt etwas Ähnliches nicht unter Linux? Ich entscheide mich, mein Projekt in Python zu realisieren. Ich arbeite sehr gerne mit der Sprache, habe aber noch nie ein größeres Projekt damit umgesetzt.

Anzeige

Ich erstelle eine neue Bibliothek namens nzxt und füge die Klasse Grid hinzu. Hier implementiere ich alle Funktionen und die Übertragung. Als Argument wird nur ein serieller Port übergeben. Hier trennen sich auch schon Linux und Windows und die Vorteile zeigen sich: Unter Windows wird immer nur ein einziges Gerät einer Reihe unterstützt, unter Linux sind es beliebig viele.

Um mehrere Geräte zu unterstützen muss ich eine Möglichkeit zur Konfiguration bieten. Ich entwickle also eine weitere Klasse camservice, die als Service fungiert. Zunächst kümmere ich mich um die Konfiguration. Ich möchte die Möglichkeit haben, beispielsweise mehrere Lüftersteuerungen zu betreiben. In Linux werden in der Regel Konfigurationsdateien im Unterordner /etc abgelegt. Viel Arbeit möchte ich nicht in einen Parser stecken. Meine Konfigurationsdatei basiert deshalb auf JSON und ich ergänze die Option, Kommentare einzufügen. Diese filtere ich dann mit folgender Prozedur heraus:

  1. def cleanupconfig(str):
  2. buffer = ""
  3. for i in str.splitlines():
  4. if '#' in i:
  5. buffer = buffer + i[0:i.find('#')]
  6. else:
  7. buffer = buffer + i
  8. return buffer

Eingelesen werden kann die Konfiguration danach mit json.loads(). Zurückgeliefert wird ein Wörterbuch (Dictionary), das die in der Konfiguration festgelegten Parameter beinhaltet.

Anhand dieser Parameter wird eine Liste von Geräten erstellt, die zu jedem Zeitpunkt angesteuert oder ausgelesen werden können.

  1. def parseconfig(self, cfg):
  2. for i in cfg.keys():
  3. self.add_device(i, cfg[i])

Um Daten zu übertragen, nutze ich erneut JSON, hier ein Beispiel, um alle Geräte auszulesen:

  1. def getall(self):
  2. returndict = {}
  3. for i in range(len(self.devices)):
  4. returndict[self.devices[i]["name"]] = self.getdevice(i)
  5.  
  6. return json.dumps(returndict)

Jetzt habe ich eine Basisstruktur, eine Klasse für die Lüftersteuerung und eine Klasse, die alle Geräte verwaltet. Was jetzt noch fehlt, ist eine Möglichkeit für die Kommunikation mit der Außenwelt. Diese realisiere ich vorerst mit einer einfachen Netzwerkschnittstelle:

  1. # Create camservice instance
  2. c = nzxt.Camservice("/etc/cam4linux/config.json")
  3.  
  4. # Create socket for server
  5. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6. try:
  7. …
  8. while True:
  9. conn, addr = s.accept()
  10. try:
  11. …

 Das Programm testenDie Verbindung zum Nutzer 

eye home zur Startseite
lespocky 04. Apr 2017

Der scheinbar komische Wert 192, der fest mitgegeben werden muss, ist vermutlich ein Byte...

captain_spaulding 27. Mär 2017

Da dieses Teil einen ganz normalen Serial Port benutzt, macht zumindest dieser Teil keine...

aha47 26. Mär 2017

Welche jetzt konkret? Stimmt, leider sind die "meisten Linux User" offenbar aus der...

scheuerseife 25. Mär 2017

Eine Alternative Java Software für das NZXT Grid+ Hat RoelGo schon 2016 unter der MIT...

1ras 24. Mär 2017

Ja, kenne ich. Von den USB nach RS-232 Wandlern gibt es leider ziemlich viele...



Anzeige

Stellenmarkt
  1. Robert Bosch GmbH, Leonberg
  2. Daimler AG, Böblingen
  3. CGM LAB Deutschland GmbH, Koblenz
  4. Schwarz IT Infrastructure & Operations Services GmbH & Co. KG, Neckarsulm


Anzeige
Blu-ray-Angebote
  1. (u. a. Mission Impossible 1-5 Box 16,97€ und Death Race 1-3 9,94€ + 5€ FSK-18-Versand)
  2. (u. a. Reign, Person of Interest, Gossip Girl, The Clone Wars)
  3. (u. a. Mad Max, Legend of Tarzan, Conjuring 2, San Andreas, Creed)

Folgen Sie uns
       


  1. Umweltbundesamt

    Software-Updates für Diesel reichen nicht

  2. Acer Nitro 5 Spin

    Auf dem Gaming-Convertible spielen und zeichnen

  3. Galaxy Note 8 im Hands on

    Auch das Galaxy Note sieht jetzt doppelt - für 1.000 Euro

  4. Microsoft

    Git-Umzug von Windows-Team abgeschlossen

  5. Play Store

    Google entfernt 500 Android-Apps mit 100 Millionen Downloads

  6. DreamHost

    US-Regierung will nun doch keine Daten von Trump-Gegnern

  7. Project Brainwave

    Microsoft beschleunigt KI-Technik mit Cloud-FPGAs

  8. Microsoft

    Im Windows Store gibt es viele illegale Streaming-Apps

  9. Alpha-One

    Lamborghini-Smartphone für über 2.000 Euro vorgestellt

  10. Wireless-AC 9560

    Intel packt WLAN in den Prozessor



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Orange Pi 2G IoT ausprobiert: Wir bauen uns ein 20-Euro-Smartphone
Orange Pi 2G IoT ausprobiert
Wir bauen uns ein 20-Euro-Smartphone
  1. Odroid HC-1 Bastelrechner besser stapeln im NAS
  2. Bastelrechner Nano Pi im Test Klein, aber nicht unbedingt oho

Mitmachprojekt: HTTPS vermiest uns den Wetterbericht
Mitmachprojekt
HTTPS vermiest uns den Wetterbericht

Google Home auf Deutsch im Test: "Tut mir leid, ich verstehe das nicht"
Google Home auf Deutsch im Test
"Tut mir leid, ich verstehe das nicht"
  1. Google Express Google und Walmart gehen Shopping-Kooperation ein
  2. Smarter Lautsprecher Google Home erhält Bluetooth-Zuspielung und Spotify Free
  3. Lautsprecher-Assistent Google Home ab 8. August 2017 in Deutschland erhältlich

  1. Backup?

    teenriot* | 17:45

  2. Re: Der hat !!Killer!! im Namen, den muss ich...

    Arsenal | 17:43

  3. Kann das nicht auch strategie sein?

    teleborian | 17:43

  4. Qi kompatibel?

    McWiesel | 17:42

  5. Re: Ich habe einen Ping von 8ms zu Google

    Mett | 17:41


  1. 17:51

  2. 17:08

  3. 17:00

  4. 16:55

  5. 16:38

  6. 16:08

  7. 15:54

  8. 14:51


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel