Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Messdaten aus Code auf USB speicher


von Periodendauer (Gast)


Lesenswert?

Hallo Leute,

momentan sitze ich an einem C-Code, der auf einem Raspberry Pi läuft, 
welcher über verschiedene Schnittstellen Messdaten aufnimmt und diese in 
ein .txt-File mit Zeitstempel abspeichert. Die Abspeicherung des Files 
auf dem Pi funktioniert einwandfrei. Ich stelle mir jedoch vor, dass ich 
nur einen USB-Stick an die Pi schließe und die Daten dann automatisch 
auf dem USB-Stick gespeichert werden, unabhängig davon an welchen Port 
ich diesen gehangen habe.

Gestern habe ich dazu folgenden Tutorial gefunden: 
https://www.elektronik-kompendium.de/sites/raspberry-pi/1911271.htm

Da ich nicht so viel Ahnung von Linus-System habe dachte ich, dass das 
soweit funktionieren sollte. Die Befehle ließen sich alle in der Console 
ausführen, aber zu dem gewünschten Ergebnis haben sie nicht geführt.

Vllt habt ihr noch einige Hinweise?

Vielen Dank

von PittyJ (Gast)


Lesenswert?

Ein Hinweis ist, sich die Probleme und Fehlermeldungen zu notieren.
Dann kann man sie z.B. bei Post in Foren benutzen.

von Periodendauer (Gast)


Lesenswert?

PittyJ schrieb:
> Ein Hinweis ist, sich die Probleme und Fehlermeldungen zu
> notieren.
> Dann kann man sie z.B. bei Post in Foren benutzen.

Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen 
usb0 bis usb7 erstellt werden. Ein Ordner usb verweist auf das 
Verzeichnis usb0 und wenn man einen USB anhängt, dann wird der 
automatisch gemountet. Weiterhin beschreibt das Tutorial, dass man in 
den Ordner usb Daten schreiben und lesen kann.
Das funktioniert auch. Wenn ich jedoch einen USB-Stick anhänge und Daten 
in den Ordner usb, wie beschrieben, beschreibe, landen die Daten nicht 
auf dem physischen Stick. Zumindest sehe ich keine Daten an einem 
Windowsrechner.

von Andreas B. (bitverdreher)


Lesenswert?

Periodendauer schrieb:
> Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen
> usb0 bis usb7 erstellt werden.

Nö, die werden in das Verzeichnis /media eingehängt.

Lies das am besten nochmal komplett durch und führe Schritt für Schritt 
aus. Dann meldest Du hier das Ergebnis für jeden Schritt.
Bei den dort beschriebenen Test ist von Windows nirgends die Rede.

von andy (Gast)


Lesenswert?

Du solltest erstmal erzählen welches Linux bei dir auf dem Raspi läuft. 
In dem Artikel gehts eigentlich um das Mounten/Einhängen von 
USB-Speichern ins Linux. Beim Raspbian sollte das Mounten sowieso 
automatisch funktionieren. Das, was du willst, ist, dass beim Einstecken 
eines (bestimmten) USB-Sticks, Daten übertragen werden. Da musst du nach 
"udev rules" googlen.

von Periodendauer (Gast)


Lesenswert?

Andreas B. schrieb:
> Periodendauer schrieb:
>> Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen
>> usb0 bis usb7 erstellt werden.
>
> Nö, die werden in das Verzeichnis /media eingehängt.
>
> Lies das am besten nochmal komplett durch und führe Schritt für Schritt
> aus. Dann meldest Du hier das Ergebnis für jeden Schritt.
> Bei den dort beschriebenen Test ist von Windows nirgends die Rede.


Ich wollte jetzt nicht den ganzen Pfad angeben.
Fakt ist, dass das Tutorial so funktioniert, wie es beschrieben steht. 
Ich kann einen USB-Stick einstecken, er wird anscheind gemountet und ich 
kann Daten in den Ordner /media/usb schreiben und wieder lesen.
Meine Vermutung war jedoch, dass die Daten, die ich in /media/usb 
schreibe, wenn ein USB-Stick angehangen ist, auch auf dem Stick 
gespeichert werden, welche ich dann an einem anderen Rechner (vllt auch 
Windows) wieder lesen kann.

Deswegen bitte ich ja bei euch um Hilfe, da es vllt der falsche Ansatz 
war, um mein Problem (siehe ersten Post) zu lösen.

Vllt sollte Du bitte nochmal den ersten Post lesen.

von Periodendauer (Gast)


Lesenswert?

andy schrieb:
> Da musst du nach
> "udev rules" googlen.

Das ist doch mal ein Ansatz.

Soweit ich weiß läuft ein Raspbian auf dem Raspi.
Ich versuche das Problem nochmal zu umreißen:
Ich führe auf dem Pi ein C-Code aus, der Daten in eine Datei schreibt. 
Das Schreiben und Speichern funktioniert auf dem Flash des Pis 
einwandfrei.
Nun möchte ich an irgendeinen Port des PIs irgendeinen USB-Stick hängen. 
Nun möchte ich, dass der Pi schaut, wo dieser USB-Stick hängt und diese 
Daten dort speichert. Im C-Code muss ich dann sicherlich eine allgemeine 
Pfadangabe machen, nehme ich mal an.

von Martin H. (horo)


Lesenswert?

Periodendauer schrieb:
> aber zu dem gewünschten Ergebnis haben sie nicht geführt.

was ist das gewünschte Ergebnis?

Periodendauer schrieb:
> Wenn ich jedoch einen USB-Stick anhänge und Daten
> in den Ordner usb, wie beschrieben, beschreibe, landen die Daten nicht
> auf dem physischen Stick. Zumindest sehe ich keine Daten an einem
> Windowsrechner.

wie beschrieben? wie im Tutorial?

"
Zum Testen einen USB-Stick einstecken, folgende Datei erzeugen und 
speichern.
1
nano /media/usb/test.txt

Anzeigen, ob die Datei wirklich existiert:
1
cd /media/usb
2
ls

Anschließend kann man die Datei löschen:
1
rm test.txt
"

Wenn Du die Datei löschst, dann ist auch nix mehr zu sehen in Windows. 
;)

Teste doch mal folgendes:
1.) Datei in Windows auf dem Stick erzeugen (vorzugsweise eine 
Textdatei)
2.) Stick aushängen und in den Raspi.
3.) Im Raspi schauen, ob die Datei da ist.
1
cat /media/usb/NAME_DER_DATEI
4.) Im Raspi eine Datei anlegen, z.B. mit
1
echo hallo > /media/usb/raspi_hallo.txt
5.) Stick in den Windows-Rechner und die Datei raspi_hallo.txt 
anschauen.

Um einfacher Dateien zu bearbeiten empfehle ich den Midnight-Commander 
(ähnliche Anmutung wie der Norton-Commander aus DOS-Zeiten, aber viel 
mächtiger), der läuft in der Linux-Konsole, z.B. beim Zugriff per ssh. 
Einfach als root installieren:
1
apt install mc
und als mc aufrufen.

Ciao, Martin

von Andreas B. (bitverdreher)


Lesenswert?

Wenn es noch um das beschreiben geht: Hast Du umountet, bevor Du den 
Stick vom Raspi abgezogen hast?

Falls außer mount beim reinstecken des Sticks automatisch etwas 
passieren soll, ist der von andy beschriebene Tip mit udev rules der 
richtige Weg.

von andy (Gast)


Lesenswert?

Periodendauer schrieb:
> Ich versuche das Problem nochmal zu umreißen:

Dein Problem ist bereits angekommen. Den Lösungsansatzt hast du jetzt 
auch, den Rest musst du dir selbst erarbeiten. Es wird dir keiner hier 
eine massgeschneiderte Lösung fertig programmieren, dafür bist du im 
falschen Forum. Da musst du z.B. ins Raspi-Forum.

Das was du willst, geht mit udev rules. Hier wäre ein guter erster 
Schritt:

https://github.com/stonfute/BashUSBCopy

Ansonsten nach "udev rules copy data on usb storage" googln, verstehen 
und zu einem Ganzen zusammensetzen.

von Periodendauer (Gast)


Lesenswert?

Martin H. schrieb:
> Periodendauer schrieb:
>> aber zu dem gewünschten Ergebnis haben sie nicht geführt.
>
> Wenn Du die Datei löschst, dann ist auch nix mehr zu sehen in Windows.
> ;)
>
> Teste doch mal folgendes:
> 1.) Datei in Windows auf dem Stick erzeugen (vorzugsweise eine
> Textdatei)
> 2.) Stick aushängen und in den Raspi.
> 3.) Im Raspi schauen, ob die Datei da ist.cat
> /media/usb/NAME_DER_DATEI4.) Im Raspi eine Datei anlegen, z.B. mitecho
> hallo > /media/usb/raspi_hallo.txt5.) Stick in den Windows-Rechner und
> die Datei raspi_hallo.txt
> anschauen.
>
> Um einfacher Dateien zu bearbeiten empfehle ich den Midnight-Commander
> (ähnliche Anmutung wie der Norton-Commander aus DOS-Zeiten, aber viel
> mächtiger), der läuft in der Linux-Konsole, z.B. beim Zugriff per ssh.
> Einfach als root installieren:apt install mcund als mc aufrufen.
>
> Ciao, Martin

Vielen Dank für die Hinweise, gelöscht habe ich die erstellte Datei 
nicht. Hätte ich dazusagen sollen ;)

Ich habe jetzt einen USB-Stick gemountet, wo bereits txt-Datein 
gespeichert sind. In den Verzeichnissen /media/usb0 bis usb7 und 
/media/usb kann ich keine Datein entdecken. Ich muss dazusagen, dass ich 
das nicht mit der Konsole nachprüfe. Gibt es da unterschiede?
Jedoch habe ich folgenden Ordner in /media: /media/pi/8415-BCDF und dort 
kann ich meine Datei finden und auch Datein hinzufügen. Diese Datein 
sehe ich dann auch auf anderen Rechnern.
Wieso sind die Datein nicht in dem Ordner /media/usb?

von Andreas B. (bitverdreher)


Lesenswert?

gib mal auf den konsole
> mount
ein, nachdem Du den Stick eingesteckt hast.
(und poste das Ergebnis)
und dann noch:
ls /media -al

von Periodendauer (Gast)


Lesenswert?

Vielen Dank für eure Hilfe!

nach mount
/dev/mmcblk0p2 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs 
(rw,relatime,size=470180k,nr_inodes=117545,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts 
(rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs 
(rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup 
(rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/system 
d-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup 
(rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup 
(rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup 
(rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/net_cls type cgroup 
(rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/freezer type cgroup 
(rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup 
(rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs 
(rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
sunrpc on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p1 on /boot type vfat 
(rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortnam 
e=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs 
(rw,nosuid,nodev,relatime,size=94956k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse 
(rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
xrdp-chansrv on /home/pi/thinclient_drives type fuse.xrdp-chansrv 
(rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sda on /media/pi/8415-BCDF type vfat 
(rw,nosuid,nodev,relatime,sync,gid=100,fmask=0117,dmask=0007,allow_utime 
=0020,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro,uhe 
lper=udisks2)

ls /media -al
insgesamt 44
drwxr-xr-x  11 root root 4096 Okt 22 15:42 .
drwxr-xr-x  21 root root 4096 Mär 14  2018 ..
drwxr-x---+  3 root root 4096 Okt 23 11:16 pi
lrwxrwxrwx   1 root root    4 Okt 22 15:42 usb -> usb0
drwxr-xr-x   2 root root 4096 Okt 23 11:11 usb0
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb1
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb2
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb3
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb4
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb5
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb6
drwxr-xr-x   2 root root 4096 Okt 22 15:42 usb7

von Andreas B. (bitverdreher)


Lesenswert?

So wie das aussieht, wird der Stick automatisch in /media/pi/8415-BCDF
gemounted.
Die Anleitung ist für die Uralt Version des Raspians (Wheezy) und kann 
komplett rückgängig gemact werden. Du hast bereits eine neue Version, 
die das Automount schon drin hat.
Lösch also den ganzen USB Kram in /mount und regle den Rest mit udev 
rules.

Edit:
Hier ist eine ganz gute Anleitung dazu:
https://wiki.ubuntuusers.de/udev/

: Bearbeitet durch User
von Periodendauer (Gast)


Lesenswert?

Andreas B. schrieb:
> So wie das aussieht, wird der Stick automatisch in
> /media/pi/8415-BCDF
> gemounted.
> Die Anleitung ist für die Uralt Version des Raspians (Wheezy) und kann
> komplett rückgängig gemact werden. Du hast bereits eine neue Version,
> die das Automount schon drin hat.
> Lösch also den ganzen USB Kram in /mount und regle den Rest mit udev
> rules.
>
> Edit:
> Hier ist eine ganz gute Anleitung dazu:
> https://wiki.ubuntuusers.de/udev/

Vielen Dank für deine Hilfe und für den Link!

von Periodendauer (Gast)


Lesenswert?

Andreas B. schrieb:
> Edit:
> Hier ist eine ganz gute Anleitung dazu:
> https://wiki.ubuntuusers.de/udev/

Ich habe nochmal eine Rückfrage. Das Einbinden eines USB-Sticks scheint 
machbar mit den udev-Regeln zu sein, zumindest nachdem, was ich dort 
gelesen habe.
In dem Beispiel wird sich aber auf ein bestimmtes USB-Gerät mit 
Seriennummer und Vendor bezogen. Wenn ich die Sache aber allgemein 
halten will, also einen beliebigen USB-Stick verwenden möchte, würde 
dann die Zeile in etwa so aussehen?

KERNEL=="sd?1", SUBSYSTEMS=="usb", SYMLINK+="blablabla"

Brauch ich die Seriennummer oder Hersteller, wenn ich es allgemein 
halten möchte?

von Andreas B. (bitverdreher)


Lesenswert?

Zum Einbinden des USB Sticks sind die Regeln schon drin, sonst würde er 
bei Dir nicht automatisch mounten.

Der Eintrag SUBSYSTEM=="block" funktioniert für jedes Block device, also 
auch USB sticks.

Also:
ACTION=="add", KERNEL=="sda", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", 
RUN+="MeinScript"

: Bearbeitet durch User
von Ingo W. (uebrig) Benutzerseite


Lesenswert?

Periodendauer schrieb:
> /dev/sda on /media/pi/8415-BCDF type vfat

Wobei hier der Mountpoint aus der Datenträgerbezeichnung (8415-BCDF) 
gebildet wird, für dich daher vorhersagbar/beeinflussbar ist, Die 
Datenträgerbezeichnung ist ja auch unter Windows änderbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.