Schreibgeschütztes Dateisystem auf meinem RaspAP-Gateway-Pi: Was passiert mit den gepufferten Messwerten?
Von English mit KI übersetzt ·
Wieder da mit dem Gewächshaus-Pi (den ich nicht ins Internet gestellt habe, nochmals danke). Er betreibt jetzt RaspAP als kleinen Access Point für sechs ESP8266-Sensoren. Diese veröffentlichen an mosquitto auf dem Pi, und ein Python-Skript leitet alles als Gateway über v1/gw/telemetry an Hermetry weiter, mit einem Child pro ESP.Zwei Stromausfälle in einer Woche, und die SD-Karte kam einmal mit einer beschädigten mosquitto.db zurück. Die Leute sagen, man solle ein schreibgeschütztes Dateisystem verwenden. Ich habe aber auch gelesen, dass RaspAP das Dateisystem „sperrt“ oder Overlays nicht mag? Und mein Forwarder hält einen Puffer in einer SQLite-Datei, für den Fall, dass das 4G ausfällt. Wohin geht dieser, wenn das Dateisystem schreibgeschützt ist?Entschuldigung, drei Fragen in einer.
Back with the greenhouse Pi (the one I didn’t expose to the internet, thanks again). It now runs RaspAP as a little access point for six ESP8266 sensors. They publish to mosquitto on the Pi, and a Python script forwards everything to Hermetry as a gateway on v1/gw/telemetry, one child per ESP.
Two power cuts in a week and the SD card came back with a corrupted mosquitto.db once. People say use a read-only filesystem. But I also read that RaspAP „locks“ the filesystem or doesn’t like overlays? And my forwarder keeps a buffer in a SQLite file for when the 4G drops. If the filesystem is read-only, where does that go?
Sorry, three questions in one.
Von English mit KI übersetzt ·
SD-Karten-Beschädigung bei Stromausfall ist der klassische Pi-Fehler. Das Overlay-Dateisystem über raspi-config (Performance Options > Overlay File System) funktioniert gut.
SD corruption on power loss is the classic Pi failure. Overlay FS through raspi-config (Performance Options > Overlay File System) works well.
Von English mit KI übersetzt ·
Wie lange dauern die Ausfälle normalerweise? Minuten oder Stunden?
How long are the outages usually? Minutes or hours?
Von English mit KI übersetzt ·
4G-Abbrüche dauern Minuten. Stromausfälle sind das Problem der Parzelle, ein paar Stunden.
4G drops are minutes. Power cuts are the allotment’s fault, a few hours.
Von English mit KI übersetzt ·
RaspAP sperrt nichts, es schreibt seine Konfiguration unter /etc/raspap und in die Dateien hostapd/dnsmasq. Bei aktivem Overlay ist jede Änderung, die du in seiner Web-UI vornimmst, nach einem Neustart weg. Das ist die Geschichte von „mag keine Overlays“.
RaspAP doesn’t lock anything, it writes its config under /etc/raspap and the hostapd/dnsmasq files. With the overlay on, any change you make in its web UI is gone after reboot. That’s the „it doesn’t like overlays“ story.
Von English mit KI übersetzt ·
Ein kleines UPS-HAT würde verhindern, dass Stromausfälle überhaupt zum Problem werden.
A small UPS HAT would stop the power cuts being a problem at all.
Von English mit KI übersetzt ·
Würden die Messwerte aus dem Ausfall beim endlichen Senden trotzdem zum richtigen Zeitpunkt angezeigt?
Would the readings from the outage still show at the right time when they finally get sent?
Von English mit KI übersetzt ·
Ich betreibe etwa dreißig dieser kleinen Gateways in Umspannwerken, nach demselben Muster.Overlay für das Root-Dateisystem ist aktiv, ja. Nimm deine RaspAP-Änderungen mit ausgeschaltetem Overlay vor, starte neu und schalte es danach wieder ein. Lästig, aber selten.Der Puffer braucht einen Ort, der Neustarts und Stromausfälle übersteht: eine zweite Partition auf der Karte (oder ein USB-Stick), mit ext4 und Journal schreibend eingebunden, außerhalb des Overlays. Richte SQLite dorthin, mit PRAGMA journal_mode=WAL und synchronous=NORMAL. Ein Abbruch kostet dann höchstens die letzten Schreibvorgänge, nicht die Datenbank. Verschiebe auch die Persistenz von mosquitto dorthin oder schalte sie ab, da dein Forwarder ohnehin puffert.Zu Rachels Frage: Ja, wenn du jeden Messwert beim Senden durch den ESP mit ts in UTC-Millisekunden versiehst (nur wenn die Uhr des Pi synchronisiert ist, was sie nach dem Start von 4G ist, und behalte eine fake-hwclock bei, damit es nach einem Stromausfall nicht 1970 ist). Sende den Rückstau gebündelt pro Child:
{"esp-bed3": [{"ts": 1767254400000, "values": {"soil_pct": 41}},
{"ts": 1767254460000, "values": {"soil_pct": 41}}]}
Die Datensätze landen zu ihrer eigenen Zeit in der Historie. Eine Nachricht, deren Datensätze alle älter als eine Minute sind, gilt als Replay und muss zur Replay-Rate des Profils passen, daher wird ein langer Rückstau über einige Zeit abgebaut. Keine Panik, wenn nicht alles in einer Sekunde erscheint. Und warte auf das PUBACK, bevor du Zeilen löschst. Siehe Devices behind a gateway.
I run about thirty of these little gateways on substations, same pattern.
Overlay on for the root filesystem, yes. Do your RaspAP changes with the overlay switched off, reboot, switch it back on. Annoying but rare.
The buffer needs a place that survives reboots and power loss: a second partition on the card (or a USB stick) mounted read-write with ext4 and its journal, outside the overlay. Point SQLite there, with PRAGMA journal_mode=WAL and synchronous=NORMAL. A cut then costs you at most the last few writes, not the database. Move mosquitto’s persistence there too, or turn persistence off since your forwarder already buffers.
On Rachel’s question: yes, if you stamp each reading with ts in UTC milliseconds when the ESP sends it (only if the Pi’s clock is synced, which it is once 4G is up, and keep a fake-hwclock so it isn’t 1970 after a power cut). Send the backlog in batches per child:
{"esp-bed3": [{"ts": 1767254400000, "values": {"soil_pct": 41}},
{"ts": 1767254460000, "values": {"soil_pct": 41}}]}
Records land at their own time in history. A message whose every record is older than a minute counts as a replay and has to fit the profile’s replay rate, so a long backlog drains over a while. Don’t panic when it doesn’t all appear in one second. And wait for the PUBACK before deleting rows. See Devices behind a gateway.
Von English mit KI übersetzt ·
Overlay aktiv, buffer.db auf einem USB-Stick mit ext4, WAL-Modus, mosquitto-Persistenz aus. Während eines 4G-Ausfalls absichtlich den Stecker gezogen: Der Pi kam zurück, die 20 Minuten Messwerte wurden in etwa einer Minute abgearbeitet und sitzen im Diagramm zu den richtigen Zeiten. Emily, danke, ich hätte meine AP-Einstellungen verloren, ohne zu wissen warum.
Overlay on, buffer.db on a USB stick with ext4, WAL mode, mosquitto persistence off. Pulled the plug during a 4G outage on purpose: Pi came back, the 20 minutes of readings drained over about a minute and sit at the right times on the chart. Emily, thanks, I’d have lost my AP settings without knowing why.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

