Schlagwort: Projekt

Ein Upgrade für den Homeserver Teil 1 – Die Hardware

Seit gut drei Jahren betreibe ich einen RaspberryPi als Homeserver. Zunächst reichte dieser noch gut aus. Mit der Zeit wurde aber nicht nur die Zahl der Anwendungen, die auf dem Raspberry laufen, mehr, sondern auch die Leistungsanforderungen der Anwendungen selbst. Besonders meine ich damit die Influx Datenbank, die seit über drei Jahren jede Minuten um einen Datensatz der PV-Anlage größer wird. Die Datenbank braucht mittlerweile über 10 Minuten zum Starten. Auch diese Webseite braucht zum Laden deutlich länger, als sie sollte. Wenn ich den Raspberry komplett neu starte, braucht es ca. eine Stunde, bis alle Anwendungen wieder laufen. Das ist definitiv zu viel. Es sollte also ein neuer Rechner her. In dieser Artikelserie möchte ich davon berichten.


Übersicht aller Artikel dieser Serie


Auswahl der Hardware

Es sollte ein Mini-PC sein, der möglichst wenig Strom braucht, aber trotzdem gut Leistung hat. Dabei fiel meine Wahl auf einen „ECS Elitegroup LIVA Z3 Plus„. Dieser hat einen i5 aus dem Jahr 2019 mit nur 15W TDP und ist für ~200 € zu haben.

Dazu brauchte ich noch eine SSD. SSD-Speicher ist ja in den letzten Jahren sehr billig geworden. Deshalb durften es 500 GB schon sein. Ich entschied mich für eine „Crucial P3

Arbeitsspeicher braucht der PC auch noch. Maximal sind 64 GB möglich. Ich brauche zwar viel, da ich vermutlich mehrere VMs laufen lassen möchte, 64 GB wären aber schon sehr viel. 32 GB RAM sollten reichen. (Vorher hatte ich 8 GB)

Als Letztes brauchte ich noch eine große Festplatte. Ich habe zwar bereits eine, die reicht mit ihrem einen Terabyte aber kaum mehr aus, da sie mittlerweile Speicher für Nextcloud, Überwachungskameraaufnahmen (inkl. Aufnahmen der Nistkastenkamera), Medien für meinen Jellyfin-Server und Backups meines PCs und des Servers ist. Außerdem möchte ich häufige Aufnahmen, die ständig überschrieben werden (Überwachungskamera) aus Datensicherheitsgründen getrennt haben von wichtigen Dateien wie die der Nextcloud. Dabei fiel meine Wahl auf eine externe 4 TB 3,5″ Festplatte.

Zusammenbau

Im Lieferumfang des Mini-PCs enthalten sind der Mini-PC selbst, das Netzteil, Schrauben, ein Wärmeleitpad dessen Sinn ich noch nicht verstanden habe, eine Halterung, um den PC per VESA-Halterung an einem Monitor zu befestigen und eine Anleitung.

Verpackung des Mini-PCs
Verpackung des Mini-PCs
Lieferumfang des Mini-PCs
Lieferumfang des Mini-PCs

Der Zusammenbau ist nicht kompliziert. Der Mini-PC lässt sich mit 4 Schrauben öffnen. Dann kann man den RAM und die SSD wie gewohnt einbauen.

Öffnen des Mini-PCs
Öffnen des Mini-PCs
Geöffneter Mini-PC
Geöffneter Mini-PC
Mini-PC mit eingebautem RAM und SSD
Mini-PC mit eingebautem RAM und SSD

Test mit Ubuntu

in Ubuntu angekommen wollte ich zunächst ausprobieren, ob alles an Hardware korrekt erkannt wurde. Das war zunächst nicht der Fall. Von der SSD war nichts zu sehen. Also habe ich den Rechner nochmal aufgeschraubt und gesehen, dass die SSD nicht komplett eingerastet war. Das ging hier etwas schwerer als gewohnt.

CPU und RAM wird erkannt
CPU und RAM wird erkannt
SSD wird erkannt
SSD wird erkannt
HDD wird erkannt
HDD wird erkannt

Anschließend wollte ich noch mit dem Programm „cpuburn“ testen, wie warm der PC unter Volllast wird. Mittels

und anschließendem

konnte ich dann mit

die Temperatur auslesen. Diese bewegte sich nach einigen Minuten bei knapp 80 °C. Das ist in Ordnung. Ein

ergab, dass alle Kerne auf stabilen 2,8GHz takten. Es finden also anscheinend keine Drosselung aufgrund der Temperatur statt.

Der Rechner ist, besonders unter Last, übrigens recht laut. Da er bei mir im Keller stehen wird, macht mir das nichts aus. Als Desktop-Rechner kann ich ihn aber nicht empfehlen.

Die Hardware ist jetzt fertig zusammengebaut und getestet. Im nächsten Schritt werde ich Proxmox auf dem Mini-PC installieren.

13″ Touchscreen Wandeinbau

Ich habe jetzt seit Längerem einen 7″ Touchscreen bei mir in der Wand hängen. Der lief bis jetzt auch gut, aber er wurde mir zu klein. Deshalb hab ich mich auf die Suche nach einem Neuen gemacht und schließlich diesen 13″ Touchscreen von Waveshare gefunden und bestellt.

Materialliste

Testaufbau

Nach deutlich verspäteter Lieferung Konnte ich den Touchscreen ausprobieren. Ein Netzteil hatte ich noch da, aber keinen passenden Stecker. Da musste dann eben der Lötkolben zum Einsatz kommen:

Im Wiki stand zwar, dass man die Auflösung einstellen muss, das war aber bei mir nicht der Fall. Das Display lief Plug and Play.

Software

Beim 7″ Touchscreen habe ich rpi-backlight genutzt, um den Bildschirm bzw. die Hintergrundbeleuchtung an- und auszuschalten. Hier verwende ich jetzt vcgencmd display_power 0 und vcgencmd display_power 1.

Als Oberfläche verwende ich, wie beim alten Display auch, eine selbst gebaute HTML Seite. Da ich jetzt deutlich mehr Platz habe, konnte ich hier auch mehr auf einmal darstellen. Die Seite gibts auf Github zum Download. Sie ist noch nicht fertig.

https://github.com/jjk4/displayoberflaeche

Das Gehäuse

Ein Problem, dass mich länger beschäftigt hat, was ein passendes Gehäuse. Bei dem alten 7″ Touchscreen passte ja dieses Gehäuse sehr gut, aber dieser Zufall war schon so zufällig, den gibts nicht zweimal. Also wollte ich das Gehäuse drucken.

Dieses Gehäuse ist dabei raus gekommen:

Gehäuse zum Download: https://www.thingiverse.com/thing:4934655

An den Ecken kann man eine Mutter einschmelzen und an der Rückseite gibt es eine Befestigungsmöglichkeit für den Raspberry (In meinem Fall ein Pi 3). Gedruckt sieht das Ganze dann so aus:

Da bei einem Teil das dünne Stück zerbrochen ist, hab ich noch schnell ein weiteres Teil gedruckt, dass nicht nur das abgebrochene wieder fixiert, sondern auch die beiden Teile zusammenhält:

Bilder vom Einbau

RaspberryPi als Überwachungskamera

Hier möchte ich dir gerne zeigen, wie ich mit einem Raspberry Pi eine Überwachungskamera gebaut habe und wie auch du das machen kannst.

Hardware

Materialliste

Raspberry: Ein Raspberry Pi Zero ist klein, günstig und verbraucht nur wenig Strom. Er ist aber auch in der Leistung stark beschränkt. Bei HD Auflösung (1280×720) hat er bei mir bei Bewegungserkennung und beim Speichern der Bilder ca. 1FPS erreicht. Das reicht mir aus. Wer mehr braucht, sollte lieber zu einem Raspberry Pi 4 greifen.

Netzteil: Ich verwende hier ein Hutschienennetzteil (Für den Pi4 hier). Wer lieber eines mit Stecker (Für den Pi4 hier) mag, kann das auch verwenden.

Kühlung: Da bei einer Videoübertragung und Bewegungserkennung der RPi ganz schön viel zu tun hat, ist eine Kühlung auf jeden Fall sinnvoll. Ich verwende diese Kühlkörper (Für den Pi4 hier). Da auch der USB Stick ziemlich heiß wurde und ich vom RPi Zero noch den kleinen Kühlkörper übrig hatte, habe ich diesen zum Kühlen des USB Sticks genutzt. In eine normale USB-Buchse passt er dann aber nicht mehr.

SD Karte: Ich verwende diese hier. 16 GB sind für das Projekt völlig ausreichend. Theoretisch würden auch weniger reichen, kleinere SD Karten kosten aber fast genau so wenig.

Kameramodul: Hier hat man eine große Auswahl. Ob mit Weitwinkel, Infrarot, gleich beidem, in extrem klein oder in High Quality (nicht für den Pi Zero zu empfehlen). Es gibt aber auch sehr günstige Kameras wie diese hier, die absolut ausreichend sind.

Flachbandkabel: Die meisten Kameras kommen bereits mit einem Kabel. Da Raspberry Pi Zero aber einen kleineren CSI Anschluss hat, braucht man dafür ein Adapterkabel.

USB Stick: Wenn Aufnahmen gespeichert werden sollen, macht man das wegen der begrenzten Haltbarkeit am besten nicht auf der SD Karte. Stattdessen kann man einen USB Stick verwenden oder die Aufnahmen auf einem NAS speichern. Ich verwende diesen Stick.

Adapter für USB-Stick: Da der Raspberry Pi Zero nur einen Micro USB Anschluss hat, braucht man für den USB Stick einen Adapter. Ich verwende diesen hier.

Gehäuse: Hier gibt es auch sehr viel Auswahl. Es gibt das offizielle Raspberry Pi Zero Gehäuse, welches schon eine Aussparung für eine Kamera hat, aber ich verwende gerne Kamera Dummys. Diese sehen dann nicht nur aus wie echte Kameras, sondern lassen sich auch gut einstellen.

Zusammengerechnet komme ich dann nach aktuellem Stand auf ca. 60€.

Zusammenbau

Zum Zusammenbau braucht man nicht viel sagen. Alles kommt in den Stecker, wo es reinpasst ;). Zusammengebaut sieht die Kamera (ohne Gehäuse) so aus:

Einbau in das Gehäuse

Meine Kamera soll in einen Kameradummy. Ich habe diese hier verwendet. Vermutlich sind aber die meisten Kamera Dummys auf eBay sehr ähnlich, wenn nicht sogar gleich. Er lies sich sehr gut zerlegen. Das sieht dann so aus:

Das Schutzglas lässt sich ebenfalls noch ausbauen. So kann man es reinigen. Die Kameralinse und die LED werden nicht benötigt. Zwischen den beiden Hälften des Gehäuses lässt sich sehr gut eine Kunststoffplatte befestigen. Auf dieser habe ich dann den Raspberry festgeschraubt.

Hinter der Platte mit den IR LED Attrappen kann man mit Heißkleber die Kamera befestigen. Das sieht dann so aus:

Jetzt muss nur noch alles wieder zusammengebaut werden. Der Raspberry hängt bei mir in der unteren Kamerahälfte, da es wegen dem Batteriefach oben sehr eng wird.

Von vorne sieht die Kamera dann so aus:

Software

Installation des Images

Als Software für die Überwachungskamera verwende ich Motioneye OS. Das ist eine für verschiedene Einplatinencomputer optimierte Linuxdistribution, mit der man sehr einfach und benutzerfreundlich Überwachungskameras bauen kann.

Nachdem das Image heruntergeladen und mit z. B. dem Raspberry Pi Imager auf die SD Karte gespielt wurde, muss noch das WLAN, falls vorhanden eingestellt werden. Erstelle dazu auf der kleineren der beiden Partitionen auf der SD Karte (boot Partition) eine Datei mit dem Namen „wpa_supplicant.conf“. Diese Datei braucht folgenden Inhalt:

Die SSID und das Passwort müssen natürlich angepasst werden.

Konfiguration von Motioneye

Nach dem Booten und aufrufen der IP im Browser sieht man direkt das Bild der Kamera:

Userinterface Motioneye

Um weitere Einstellungen vorzunehmen, muss man sich aber anmelden. Das geht über den „switch user“ Button oben links. Der Benutzername ist „admin“ und das Passwort muss leer gelassen werden.

Jetzt kann man im seitlichen Menü alle möglichen Einstellungen vornehmen. Diese sind meist selbsterklärend, trotzdem gibt es noch neben jeder Einstellung ein ?, welches die Einstellung noch mal erklärt. Meine Einstellungen sehen so aus:

Wenn man auf den Livestream und anschließend auf das „Foto“ Icon klickt, kann man sich Kameraaufnahmen anschauen:

Picture Browser

Homeserver mit dem RaspberryPi

Hier möchte ich dir meinen kleinen Homeserver vorstellen.

Hardware

Materialliste

Zusammenbau

Achtung: Arbeiten an 230V darf nur von Elektrofachpersonal durchgeführt werden!

Versorgt wird der ganze Homeserver mit 230V. Diese gehen zuerst durch den Zähler, dann an eine Steckdose, an der der Überspannungsschutz und dann ein Mehrfachstecker angeschlossen ist. An dieser hängt das Netzteil für den Pi und das Netzteil für die HDD. Das 5V Netzteil hat zwei Ausgänge, einen verwende ich nur für den Pi, den anderen für alles andere.

Das Display ist mit 3,3V und I2C (Pin 3 und 5) angeschlossen. Onewire Sensoren, die die Temperatur der Wärmepumpe kontrollieren sind ebenfalls mit 3,3V und Onewire (Standard Pin 7) angeschlossen. Die Relais laufen mit 5V und beliebigen GPIOs. Die S0 Schnittstelle des Stromzählers ist an einen freien GPIO angeschlossen. Die HDD, SSD und der Modbus Adapter, der Stromzähler überwacht sind per USB angeschlossen (HDD und SSD an USB3, Modbus an USB2).

Software

Zur Software möchte ich gar nicht so viel sagen. Auf dem Raspberry läuft Raspbian 10 und:

  • Nextcloud
  • InfluxDB
  • Pihole
  • Wireguard
  • Webserver, u.A. für diese Webseite
  • Grafana
  • Minetest
  • Samba Server
  • Webmin
  • kleinere Skripte von mir, die verschiedene Werte (Modbus, Netzwerk, 1Wire) auslesen, verarbeiten, speichern und je nach Wert Relais schalten)
  • Und bestimmt noch ein paar weitere, die ich jetzt vergessen hab

LCD Display

Zu einem Punkt möchte ich doch noch weiter ins Detail gehen. Für das Display verwende ich folgendes Skript: klick. Ein Video dazu gibt es hier:

Statusdisplay für meinen Homeserver

SDM630 Modbus Zähler auslesen

In diesem Tutorial zeige ich dir, wie du mit einem RaspberryPi (oder auch jedem anderen Linux Rechner) einen SDM630 Modbus Zähler auslesen kannst. Das Tutorial soll eher eine Grundlage für ein eigenes Projekt sein. Fertige Software gibt es genug, wie zum Beispiel Smartmeter.

Hardware

An der oberen Klappe des Zählers gibt es u.A. die Anschlüsse A+ und B-. Diese werden mit den Klemmen A und B am Adapter verbunden. Ein Abschlusswiderstand von 150 Ohm kommt an die Endes des Bus bzw. an das letzte und erste Gerät. Da ich nur 2 Geräte habe, ist das der Zähler und der USB Adapter.

Am Bus können theoretisch mehrere Zähler parallel angeschlossen werden.

Software

Einstellungen am Zähler

Am Zähler müssen für den Modbus verschiedene Einstellungen vorgenommen werden. Das geht bei meinem Zähler so:

  1. Lange die Taste E drücken
  2. Passwort eingeben (Standard: 1000)
  3. Lange die Taste E drücken
  4. Es erscheint „Set Addr“
  5. Durch langes Drücken der Taste E die Einstellung wählen und mit den Pfeilen die Adresse ändern. Durch langes Drücken der Taste E die Einstellung Verlassen
  6. Mit den Pfeilen die Einstellungen „Set baud“, „Set Pari“ und „Set Stop“ wählen und ebenfalls einstellen

Die Adresse ist dazu das, das Gerät im Bus zu identifizieren. Wenn du nur ein Gerät hast, kannst du die Adresse bei 1 lassen, wenn du mehrere hast, den Geräten entsprechend unterschiedliche Adressen geben.

Die Baudrate ist einfach gesagt die Übertragungsgeschwindigkeit. Bei höherer Baudrate ist aber nur eine kürzere Kabellänge möglich.

Parität benutze ich keine, also „none“

Der Stop-Bit kann auf 1 gelassen werden

Mit Skript Werte auslesen

Neben den Einstellungen die du vorher vorgenommen hast, brauchst du noch einen weiteren Wert: Den USB Port. Durch ausprobieren ist man hier ziemlich erfolgreich. Mit ls /dev/ttyUSB* kannst du dir alle Ports anzeigen lassen. In meinem Fall gab es nur einen einzigen.

Mein Code sieht folgendermaßen aus:

In Zeile 1 wird das Modbus Modul von Python importiert. Dieses musst du vielleicht noch installieren:

In der nächsten Zeile wird das Gerät initialisiert. Hier musst du evtl. noch den USB Port und die Modbus Adresse ändern. Danach gibt es einen sehr langen Part, durch den das Skript später weiß, welcher Wert welche Nummer und welche Einheit hat. Durch das „use“ kann festgelegt werden, ob der Wert verwendet werden soll oder nicht. Dazu einfach den Wert auf True bzw. False setzen. In Zeile 177 befindet sich eine for Schleife, die einmal für jeden Wert ausgeführt wird. Zeile 178 prüft, ob der Wert verwendet werden soll. Alles danach (Einrückungen nicht vergessen) kannst du jetzt frei programmieren. In meinem Beispiel werden alles Daten einfach nur per print ausgegeben. Die Zeile

gibt den Wert zurück (der, bei der die for Schleife gerade ist). Mit

bekommst du die Einheit.

Dieses Codebeispiel schreib zum Beispiel die Daten in eine Influx Datenbank.

Und jetzt viel Spaß beim Programmieren!