Raspberry Pi Messdaten aus Code auf USB speicher

Gast #5596169
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
Gast #5596217
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.
#5596228
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.
Gast #5596238
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.
Gast #5596241
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.
Gast #5596245
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.
#5596253
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
Gast #5596257
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.
Gast #5596267
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?
Gast #5596287
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
#5596294
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/
Gast #5596310
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!
Gast #5596341
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren