Raspberry Pi's sind eigentlich interessante kleine Computer. Meine Erfahrungen damit sind aber eher durchwachsen.
In meinem Haushalt befinden sich ein Pi1, ein Pi2 und ein Pi4. Alle Jahre wieder versuche ich es mal.
Den Pi1 kaufte ich für ein Robotikprojekt. Ich brauchte einen Server, ein paar PWM Pins und Wlan. Heute würde ich hierfür ein ESP32 verwenden. Den gab es zu vor 8 Jahren aber noch nicht. Der Pi war aber gut geeignet. Ich konnte ein NodeJS installieren und machen was ich wollte. 1min nach dem Anschalten war alles bereit. Meine Tochter hatte so langsam wieder das Interesse verloren. Aber dann ging es los.
Ein paar Notizen und die Software liegt bei github.com/Matthias-Hermsdorf/robotik.
Der Roboter hatte ein 12V Akkupack für die Motoren und eine kleine Powerbank für den Pi. Hohe Anfahrströme wenn der Pi gleichzeitig auch mehr Strom haben möchte, kann dazu führen, das der Pi Probleme bekommt und sich ausschaltet.
Das Ausschalten ist so eine Sache. Bis heute hat kein Pi einen Powerbutton. Es gibt Anleitungen im Netz, wie man sich einen baut. Und das sollte man auch. Mit einem einfachen Strom trennen, ist danach gern die SD Karte korrupt und der Pi lässt sich nicht mehr anschalten.
Pi2 kaufte ich wenig später. Es sollte ein lokaler Webserver und vielleicht ein NAS werden.
Das Standardbetriebssystem der Raspberry Pi's hieß früher Rasbian und heute Raspberry OS. Es ist ein modifiziertes Debian und funktioniert im großen und ganzen gut. Dieses Linux lebt im allgemeinen auf einer Micro SD Karte. Nur haben diese Karten im Vergleich zu SSDs eine sehr beschränkte Anzahl von möglichen Schreibvorgängen. Bei dem Webserver hoffte ich, dass das Rasbian darauf getrimmt ist vorrangig readonly zu arbeiten. Nach 9 Monaten war der Pi die Karte dann tot und der Server wieder Weg. Die alten Pi's hatten nur USB2 und ein 100Mbit LAN. Selbst mit einer Festplatte am USB war der Datentransfer zu langsam um als NAS sinnvoll zu sein. Als Webserver für kleine lokale Projekte aber war er gut.
Aktuell habe ich wieder ein Projekt, für dass sich ein Pi anbietet. Es muss ein NodeJS Server sein, der zuhause permanent angeschaltet ist. Der Pi braucht unter 2W und bietet sich hier als langfristig kostengünstiger Server an. Es wäre gut, wenn das Raspbian jetzt auf einer Festplatte liegen würde. Doch die alten Pi's können nicht von USB booten. Die Lösung hierfür fand ich im rasberrypi.org forum. Erst alles auf der Karte installieren, dann die wichtigen Teile auf die Festplatte kopieren, so dass nur noch von der Karte gebootet wird, aber alles weitere auf der SSD passiert. Ich kaufte eine SSD und einen SSD zu SATA Adapter und los geht es.
apt-get install nodejs
So einfach könnte es sein. Damit bekomme ich aber derzeit ein nodejs@10 und das wo derzeit 14 und 15 aktuelle sind. Spätestens npm meckert über die alte Version. In den Tutorials da draußen gibt es dann die krudesten Vorschläge vom selber bauen der Sourcen über alternative Paketmanager. Selten stieß ich auf den Hinweis die aktuellen Paketquellen hinzuzufügen
curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -
Gut, damit habe ich ein aktuelles Node auf einem genügsamen Server. Anders als vorherige Projekte, in denen ich die Daten des Servers gern als JSON in ein Datenverzeichnis ablegte, würde das hier mehr Daten generieren, die ich auswerten möchte. Aus NodeJs heraus macht es wirklich keinen Spaß SQL zu benutzen. Ich hatte erst sqlite probiert und dann ein mysql. Schön war das nicht.
MongoDB wird häufig von den JS Hipstern eingesetzt und dann werden Terrabyteweise Daten im Internet freigegeben. Kann schon sein. Diese Instanz soll aber nur im LAN verfügbar sein. Dann ist es nicht so schlimm, wenn es Löcher gibt. Dafür ist die API schön.
await rates.findOne({ tradingPair: tradingPair }, {sort: {created: -1}})
So zum Beispiel. Auf meinem Laptop war alles gut. Auf dem Pi ließ es sich installieren. Aber bei genauem hinschauen, installierte es dort eine deutlich ältere Version. Das Netz sagt: Mongo will eine 64 Bit Umgebung. Der Raspi2 war der letzte 32 Bit Prozessor.
...
Ach eigentlich hatte ich besseres zu tun. Nunja, kaufe ich halt ein neuen Pi, ein 4er mit viel Ram. Und noch den HDMI Adapter dazu weil der Pi MicroHDMI Ports hat. Weiteres Doku lesen sagte das Raspberry OS zwar mit 64 Bit umgehen kann, Programme aber nur eine 32 Bit Umgebung bekommen. Aber man könne ja Ubuntu installieren und dort würde wirklich alles gehen.
Ubuntu ließ sich sofort auf der MicroSD Karte betreiben. Der Pi4 kann auch von USB booten. Zumindest in Rasberry OS. Ubuntu startete einfach nicht von der Karte. Es war frustrierend.
Gut, dann also kein Mongo. Was gibt es noch? CouchDB hatte ich in Erinnerung. Von der API her war auch RavenDB interessant. Es gibt eine kostenlose Community Edition. Aber eigentlich ist es doch ein Freemium Modell. In der Community Edition ist auch der RAM und die Anzahl der Cores beschränkt. Aber dafür steht explizit bei den Downloads, das es eine Variante für den Pi gibt. Aber kaum weitere Doku.
Mein Code hatte ich umgeändert, so dass jetzt statt Mongo RavenDB genutzt wird. Der Raspberry Pi Imager kann jetzt direkt USB Geräte als Ziel auswählen. Ich hatte alles auf dem Pi. Auf dem Schreibtisch, am Monitor hängend lief alles gut. Also fahre ich es runter, hänge es an seine Zielposition neben den Router, schalte ein und sehe... nichts. Er meldet sich nicht im LAN. Und er ist an und weit weg von Monitor und Tastatur. Einen Power Button habe ich nicht.
Ich habe den Pi dann vom Strom getrennt, zurück zum Schreibtisch gebracht und wieder angeschaltet. Dort bekam ich verschiedene Fehlermeldungen. Alles deutet auf ein korruptes Filessystem hin. Es startet nicht mehr.
Vielleicht stelle ich doch den alten zotac ci passiv gekühlten MiniPC hin. Der hat einen Power Button und einen Sata Steckplatz. Die 7 Watt mehr sind ok, wenn es dafür einfach mal funktioniert.
Die Pi's sind klein, billig, genügsam und frustrierend. Kurzfristig zum Entdecken ist das wohl ok. Aber diese Kombination vom fehlenden Power Button und korruptionsanfälligem kurzlebigem Speicher sind ein echtes Hindernis für längerfristige Benutzung.