Kommunikation über seriellen Port - Tipps/Vorgehensweise gesucht
Hallo, ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall. Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ? Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1). Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen) Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Jürgen, Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1). Hierzu kann ich dir leider mangels Eigenerfahrung keine Tipp s geben
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Das ist ein Fall für eine udev Regel. Google mal danach, da gibt es massig Beispiele, z.B erster Treffer http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/ lg Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Sonntag, 1. November 2015, 13:31:36 schrieb Jürgen Hochwald:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Schau dir mal expect (1) an . -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1).
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Jürgen
Hi, seriell alleine hätte ich kein Problem. Da würde man man mit stty alles erledigen können. Die Frage bei Dir ist: wie spricht man denn das Gerät nun an? Testen würde ich mal mit tee </dev/ttyUSB... logdatei und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was) Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script: echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
die codes lesen, $TTY ist dabei /dev/ttyS0 oder so, $LOGTTY ist /dev/tty10, so dass ich das ganze bei Bedarf auf Console 10 sehen kann und außerdem landen die Rückmeldungen der Scanner in der Datei $LOG. Mit echo -e "\oooo" (oooo = Oktadezimalcode des Zeichens, 4-stellig, also meist eine weitere "0" vorn dran) kann man so ziemlich alles an /dev/... schicken, kannst Du ja mal probieren. Und das "cat ... awk ... strftime ... tee..." - Ding fügt einfach jeder Ausgabezeile des Scanners einen Zeitstempel an. Ob /dev/USB... das akzeptiert und vor allem 1:1 an den seriellen Port weiterreicht, ist natürlich nicht sicher. Aber wenn Du das Gerät nicht vom seriell/usb-Wandler trennen kannst, ist das wohl die einzige Chance. Ansonsten würde ich mir ja eine serielle Schnittstelle besorgen (gibt es immer noch gut zu kaufen, oft haben etwas ältere (3...4 Jahre) Boards sogar eine, d.h. nur die Steckverbinder aufgelötet und Du brauchst nur die Buchse mit dem Anschlußstecker. Dann hast Du das mit setserial schnell am Laufen. HTH cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02.11.2015 um 08:05 schrieb Joerg Thuemmler:
Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1).
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Jürgen
Hi,
seriell alleine hätte ich kein Problem. Da würde man man mit stty alles erledigen können. Die Frage bei Dir ist: wie spricht man denn das Gerät nun an? Testen würde ich mal mit
tee </dev/ttyUSB... logdatei
und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf
echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was)
Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script:
echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
die codes lesen, $TTY ist dabei /dev/ttyS0 oder so, $LOGTTY ist /dev/tty10, so dass ich das ganze bei Bedarf auf Console 10 sehen kann und außerdem landen die Rückmeldungen der Scanner in der Datei $LOG. Mit echo -e "\oooo" (oooo = Oktadezimalcode des Zeichens, 4-stellig, also meist eine weitere "0" vorn dran) kann man so ziemlich alles an /dev/... schicken, kannst Du ja mal probieren. Und das "cat ... awk ... strftime ... tee..." - Ding fügt einfach jeder Ausgabezeile des Scanners einen Zeitstempel an. Ob /dev/USB... das akzeptiert und vor allem 1:1 an den seriellen Port weiterreicht, ist natürlich nicht sicher. Aber wenn Du das Gerät nicht vom seriell/usb-Wandler trennen kannst, ist das wohl die einzige Chance. Ansonsten würde ich mir ja eine serielle Schnittstelle besorgen (gibt es immer noch gut zu kaufen, oft haben etwas ältere (3...4 Jahre) Boards sogar eine, d.h. nur die Steckverbinder aufgelötet und Du brauchst nur die Buchse mit dem Anschlußstecker. Dann hast Du das mit setserial schnell am Laufen.
HTH
cu jth
Hallo, so sieht die Kommunikation bei mir aus. Das Gerät ist ein Meteosick (Funkempfänger für eine Wetterstation).
Willkommen zu minicom 2.6.1
Optionen: I18n Port /dev/meteostick
Drücken Sie CTRL-A Z für Hilfe zu speziellen Tasten # MeteoStick Version 2.3b1 (Apr 24 2015 12:14:04), Free RAM 723, SN:XXX # License Information: # MeteoStick (c) 2014-2015 by smartbedded.com ? # Meteostick Version 2.3b1 t2 # listening to transmitter 2 o1 # output computed values m1 # chip authentication ok: 14 # frequency band 868MHz (EU) B 21.8 1019.40 O 2 1 21.3 -53 O 2 2 21.8 -51 L 2 1 0 -53 L 2 2 0 -53 O 2 1 21.3 -52 O 2 2 21.8 -57 L 2 1 0 -54 L 2 2 0 -52 O 2 1 21.3 -56 O 2 2 21.8 -54 (usw.)
Das Empfangen der Daten funktioniert, wenn ich vorher alles mit Minicon eingestellt habe (in test.txt steht dann das selbe):
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/meteostick test.txt B 23.7 1019.51 44.4% L 2 2 0 -56 O 2 1 21.1 -52 O 2 2 21.6 -52 L 2 1 0 -55 L 2 2 0 -53 O 2 1 21.1 -52 O 2 2 21.6 -53
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Unklar ist mir dabei, ob ich noch explizit ein cr und/oder lf mitsenden muß. Alle Kombinationen mit "\x0D","\x0A" oder "\r","\n" führten bisher nicht zum Erfolg.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0\x0D\x0A" /dev/meteostick o0 /dev/meteostick cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/ttyUSB0 test.txt L 2 1 0 -56
Wenn ich das Senden der Kommandos noch hinbekomme, könnte ich darauf meine Auswertung aufbauen. Aber was ist beim Senden noch falsch ? Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Jürgen Hochwald wrote: [...]
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Ohne den Rest hier zu kommentieren - aber muesste das nicht: echo -e "dein Text" > /dev/meteostick heissen? Du willst doch dein device ansprechen! Andreas Rgbx������ץ���r���҉碝��V������uﮞ˛���m�)z{.��+�I�zr�ק٢�+-��h�;����r���brG�J'��w�j)Z��^�ˬy� ޮ�^�ˬz��
Am 02.11.2015 um 14:18 schrieb Kyek, Andreas, Vodafone DE:
Jürgen Hochwald wrote: [...]
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Ohne den Rest hier zu kommentieren - aber muesste das nicht:
echo -e "dein Text" > /dev/meteostick
heissen? Du willst doch dein device ansprechen! (?) Genau das habe ich auch eingegeben. Die 2. Zeile ist das, was der echo-Befehl dann ausgibt.
Andreas Rgbx������ץ���r���҉碝��V������uﮞ˛���m�)z{.��+�I�zr�ק٢�+-��h�;����r���brG�J'��w�j)Z��^�ˬy� ޮ�^�ˬz�
Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Jürgen Hochwald wrote:
Am 02.11.2015 um 14:18 schrieb Kyek, Andreas, Vodafone DE:
Jürgen Hochwald wrote: [...]
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Ohne den Rest hier zu kommentieren - aber muesste das nicht:
echo -e "dein Text" > /dev/meteostick
heissen? Du willst doch dein device ansprechen! (?) Genau das habe ich auch eingegeben. Die 2. Zeile ist das, was der echo-Befehl dann ausgibt.
Sicher? Wenn du das hier: echo -e "o0" /dev/meteostick eingibst ist (wie du sagst) die Ausgabe das hier: o0 /dev/meteostick Was kommt zurück wenn du die Ausgabe von echo in dein device lenkst: echo -e "o0" > /dev/meteostick Da kommt NIE IM LEBEN das gleiche zurück wie in deinem Post. Andreas
On Mon, 2 Nov 2015 14:07, Jürgen Hochwald <jh@...> wrote:
Am 02.11.2015 um 08:05 schrieb Joerg Thuemmler:
Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo, [snip] tee </dev/ttyUSB... logdatei
und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf
echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was)
Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script:
echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
[snip]
Hallo, so sieht die Kommunikation bei mir aus. Das Gerät ist ein Meteosick (Funkempfänger für eine Wetterstation).
Willkommen zu minicom 2.6.1
Optionen: I18n Port /dev/meteostick
Drücken Sie CTRL-A Z für Hilfe zu speziellen Tasten # MeteoStick Version 2.3b1 (Apr 24 2015 12:14:04), Free RAM 723, SN:XXX # License Information: # MeteoStick (c) 2014-2015 by smartbedded.com ? # Meteostick Version 2.3b1 t2 # listening to transmitter 2 o1 # output computed values m1 # chip authentication ok: 14 # frequency band 868MHz (EU) B 21.8 1019.40 O 2 1 21.3 -53 O 2 2 21.8 -51 L 2 1 0 -53 L 2 2 0 -53 O 2 1 21.3 -52 O 2 2 21.8 -57 L 2 1 0 -54 L 2 2 0 -52 O 2 1 21.3 -56 O 2 2 21.8 -54 (usw.)
Das Empfangen der Daten funktioniert, wenn ich vorher alles mit Minicon eingestellt habe (in test.txt steht dann das selbe):
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/meteostick test.txt B 23.7 1019.51 44.4% L 2 2 0 -56 O 2 1 21.1 -52 O 2 2 21.6 -52 L 2 1 0 -55 L 2 2 0 -53 O 2 1 21.1 -52 O 2 2 21.6 -53
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Tröt! Fehler hier: keine Umleitung! (>) Das sollte heisen: [code] echo -e "o0" >/dev/meteostick [/code]
Unklar ist mir dabei, ob ich noch explizit ein cr und/oder lf mitsenden muß. Alle Kombinationen mit "\x0D","\x0A" oder "\r","\n" führten bisher nicht zum Erfolg.
"echo" als normaler Aufruf endet mit "lf" aka "\n"
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0\x0D\x0A" /dev/meteostick o0 /dev/meteostick
und wieder das Ding mit der Umleitung.
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/ttyUSB0 test.txt L 2 1 0 -56
Wenn ich das Senden der Kommandos noch hinbekomme, könnte ich darauf meine Auswertung aufbauen. Aber was ist beim Senden noch falsch ?
Jürgen
Allgemein: Ein-/Ausgabeumleitung. 1. Standard-Ausgabe umleiten in Datei, falls Datei existiert, überschreiben. Befehl >Datei 2. Standard-Ausgabe umleiten in Datei, falls Datei existiert, anhängen. Befehl >>Datei 3. Standard-Eingabe umleiten, Datei an Befehl senden. Befehl <Datei "man bash", dann suchen nach "Umleitung" (falls man-page in deutsch), oder "redirect" (falls man-page in englisch) - Yamaban.
Am 02.11.2015 um 14:22 schrieb Yamaban:
On Mon, 2 Nov 2015 14:07, Jürgen Hochwald <jh@...> wrote:
Am 02.11.2015 um 08:05 schrieb Joerg Thuemmler:
Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo, [snip] tee </dev/ttyUSB... logdatei
und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf
echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was)
Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script:
echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
[snip]
Hallo, so sieht die Kommunikation bei mir aus. Das Gerät ist ein Meteosick (Funkempfänger für eine Wetterstation).
Willkommen zu minicom 2.6.1
Optionen: I18n Port /dev/meteostick
Drücken Sie CTRL-A Z für Hilfe zu speziellen Tasten # MeteoStick Version 2.3b1 (Apr 24 2015 12:14:04), Free RAM 723, SN:XXX # License Information: # MeteoStick (c) 2014-2015 by smartbedded.com ? # Meteostick Version 2.3b1 t2 # listening to transmitter 2 o1 # output computed values m1 # chip authentication ok: 14 # frequency band 868MHz (EU) B 21.8 1019.40 O 2 1 21.3 -53 O 2 2 21.8 -51 L 2 1 0 -53 L 2 2 0 -53 O 2 1 21.3 -52 O 2 2 21.8 -57 L 2 1 0 -54 L 2 2 0 -52 O 2 1 21.3 -56 O 2 2 21.8 -54 (usw.)
Das Empfangen der Daten funktioniert, wenn ich vorher alles mit Minicon eingestellt habe (in test.txt steht dann das selbe):
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/meteostick test.txt B 23.7 1019.51 44.4% L 2 2 0 -56 O 2 1 21.1 -52 O 2 2 21.6 -52 L 2 1 0 -55 L 2 2 0 -53 O 2 1 21.1 -52 O 2 2 21.6 -53
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Tröt! Fehler hier: keine Umleitung! (>) Das sollte heisen: [code] echo -e "o0" >/dev/meteostick [/code]
Unklar ist mir dabei, ob ich noch explizit ein cr und/oder lf mitsenden muß. Alle Kombinationen mit "\x0D","\x0A" oder "\r","\n" führten bisher nicht zum Erfolg.
"echo" als normaler Aufruf endet mit "lf" aka "\n"
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0\x0D\x0A" /dev/meteostick o0 /dev/meteostick
und wieder das Ding mit der Umleitung. (??) klär mich mal auf ?
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/ttyUSB0 test.txt L 2 1 0 -56
Wenn ich das Senden der Kommandos noch hinbekomme, könnte ich darauf meine Auswertung aufbauen. Aber was ist beim Senden noch falsch ?
Jürgen
Allgemein: Ein-/Ausgabeumleitung. 1. Standard-Ausgabe umleiten in Datei, falls Datei existiert, überschreiben. Befehl >Datei
2. Standard-Ausgabe umleiten in Datei, falls Datei existiert, anhängen. Befehl >>Datei
3. Standard-Eingabe umleiten, Datei an Befehl senden. Befehl <Datei
"man bash", dann suchen nach "Umleitung" (falls man-page in deutsch), oder "redirect" (falls man-page in englisch)
- Yamaban. Anscheinend verwirrt die mitgepostete Ausgabe von dem echo-Befehl. Die Zeile mit dem prompt ist das, was ich eingegeben habe (hier umgebrochen), die 2. Zeile (ohne Prompt) ist die direkt folgende Ausgabe vom echo. Von der Vorgehensweise selbst beziehe ich mich auf Jörg's Post.
Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02.11.2015 um 14:42 schrieb Jürgen Hochwald:
Am 02.11.2015 um 14:22 schrieb Yamaban:
On Mon, 2 Nov 2015 14:07, Jürgen Hochwald <jh@...> wrote:
Am 02.11.2015 um 08:05 schrieb Joerg Thuemmler:
Am 01.11.2015 um 13:31 schrieb Jürgen Hochwald:
Hallo, [snip] tee </dev/ttyUSB... logdatei
und dann das Teil anstecken.... passiert da was? Irgendwelche Zeichen in der logdatei? Irgendeine Reaktion auf
echo "abc123" >/dev/ttyUSB.... am Gerät (LED blinkt kurz oder so was)
Was sind denn so die Kommandos? Ich habe hier serielle Barcodeleser, die werden mit Steuerzeichen 0x02 (STX) und 0x03 (ETX) gesteuert, von denen lasse ich z.B. mit folgendem Script:
echo "Schnittstelle $TTY initialisieren...">$LOGTTY stty -F $TTY $INIT stty -aF $TTY >$LOGTTY echo "Lesen von Schnittstelle starten...">$LOGTTY cat <$TTY | awk '{print $1 strftime("%Y%m%d%H%M%S") | "tee -a $LOG" ; }'
$LOGTTY echo "Scanner initialisieren...">$LOGTTY echo -e "\000211\0003" >$TTY # Start echo -e "\000214\0003" >$TTY # DataGroupMode echo -e "\00024?ID\0003" >$TTY # ID echo -e "\00024?DD\0003" >$TTY # DataInputs echo -e "\0002SF000\0003" >$TTY # SelfTest echo -e "\000211\0003" >$TTY # Start reading echo "Scancodes lesen...">$LOGTTY
[snip]
Hallo, so sieht die Kommunikation bei mir aus. Das Gerät ist ein Meteosick (Funkempfänger für eine Wetterstation).
Willkommen zu minicom 2.6.1
Optionen: I18n Port /dev/meteostick
Drücken Sie CTRL-A Z für Hilfe zu speziellen Tasten # MeteoStick Version 2.3b1 (Apr 24 2015 12:14:04), Free RAM 723, SN:XXX # License Information: # MeteoStick (c) 2014-2015 by smartbedded.com ? # Meteostick Version 2.3b1 t2 # listening to transmitter 2 o1 # output computed values m1 # chip authentication ok: 14 # frequency band 868MHz (EU) B 21.8 1019.40 O 2 1 21.3 -53 O 2 2 21.8 -51 L 2 1 0 -53 L 2 2 0 -53 O 2 1 21.3 -52 O 2 2 21.8 -57 L 2 1 0 -54 L 2 2 0 -52 O 2 1 21.3 -56 O 2 2 21.8 -54 (usw.)
Das Empfangen der Daten funktioniert, wenn ich vorher alles mit Minicon eingestellt habe (in test.txt steht dann das selbe):
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/meteostick test.txt B 23.7 1019.51 44.4% L 2 2 0 -56 O 2 1 21.1 -52 O 2 2 21.6 -52 L 2 1 0 -55 L 2 2 0 -53 O 2 1 21.1 -52 O 2 2 21.6 -53
Was nicht funktioniert, ist das Senden der Kommandos. Der Befehl "o0" sollte zB. das Ausgabeformat auf binär umstellen, tut es aber nicht.
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0" /dev/meteostick o0 /dev/meteostick
Tröt! Fehler hier: keine Umleitung! (>) Das sollte heisen: [code] echo -e "o0" >/dev/meteostick [/code]
Unklar ist mir dabei, ob ich noch explizit ein cr und/oder lf mitsenden muß. Alle Kombinationen mit "\x0D","\x0A" oder "\r","\n" führten bisher nicht zum Erfolg.
"echo" als normaler Aufruf endet mit "lf" aka "\n"
cfjh@bastau:~/projects/wst/reader_dev> echo -e "o0\x0D\x0A" /dev/meteostick o0 /dev/meteostick
und wieder das Ding mit der Umleitung. (??) klär mich mal auf ?
cfjh@bastau:~/projects/wst/reader_dev> tee < /dev/ttyUSB0 test.txt L 2 1 0 -56
Wenn ich das Senden der Kommandos noch hinbekomme, könnte ich darauf meine Auswertung aufbauen. Aber was ist beim Senden noch falsch ?
Jürgen
Allgemein: Ein-/Ausgabeumleitung. 1. Standard-Ausgabe umleiten in Datei, falls Datei existiert, überschreiben. Befehl >Datei
2. Standard-Ausgabe umleiten in Datei, falls Datei existiert, anhängen. Befehl >>Datei
3. Standard-Eingabe umleiten, Datei an Befehl senden. Befehl <Datei
"man bash", dann suchen nach "Umleitung" (falls man-page in deutsch), oder "redirect" (falls man-page in englisch)
- Yamaban. Anscheinend verwirrt die mitgepostete Ausgabe von dem echo-Befehl. Die Zeile mit dem prompt ist das, was ich eingegeben habe (hier umgebrochen), die 2. Zeile (ohne Prompt) ist die direkt folgende Ausgabe vom echo. Von der Vorgehensweise selbst beziehe ich mich auf Jörg's Post.
Jürgen
Hi, was verwirrt, ist, dass in Deinen Posts echo -e "o0" /dev/meteostick statt echo -e "o0" >/dev/meteostick steht. Die Ausgabe ist dann ganz die erwartete: er gibt o0 /dev/meteostick aus. Das ist aber nicht der Stick, der das tut, sondern nur Dein Terminal; es gibt via echo aus, was es bekommen hat, also 2 Zeichenketten, einmal "o0" und einmal "/dev/meteostick". Dir fehlt das Ausgabeumlenkungszeichen ">"! Außerdem musst Du das evt. entweder als root machen oder das Device /dev/meteostick zum Schreiben für Deinen User freigeben. Üblicherweise dürfen normale User nämlich nicht direkt auf alle Geräte schreiben. cu jth -- www.teddylinx.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 02.11.2015 um 16:04 schrieb Joerg Thuemmler:
(snip= Dir fehlt das Ausgabeumlenkungszeichen ">"!
cu jth Genau das war der Fehler. Beim Editieren habe ich wohl das Umleitungszeichen versehentlich mit gelöscht und im weiteren Verlauf konsequent übersehen :-0 Jetzt funktioniert es und ich kann mich an die weitere Verarbeitung machen.
Vielen Dank für die Infos. Jürgen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo zusammen, ich persönlich benutze für die Kommunikation über COM - Ports kermit. Da kann man schön bestimme was gemacht werden soll. Beispiel: COM.ini ############ cd /var/log log session set session-log text set port /dev/ttyS0 set parity none set serial 8n1 clear output \{13} # das ist einfach enter input 20 login> # wartet 20s auf den String "login>" IF NOT OK GOTO weiter ................ :weiter output \{13} input 250 ENDE# # wartet 20s auf den String "ENDE#" IF NOT OK GOTO ende ...................... :ende ................ output \{13} close cd / exit ############ Aufrufen : kermit COM.ini Jürgen Hochwald schrieb:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1).
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Jürgen
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo zusammen, ich persönlich benutze für die Kommunikation über COM - Ports kermit. Da kann man schön bestimme was gemacht werden soll. Beispiel: COM.ini ############ cd /var/log log session set session-log text set port /dev/ttyS0 set parity none set serial 8n1 clear output \{13} # das ist einfach enter input 20 login> # wartet 20s auf den String "login>" IF NOT OK GOTO weiter ................ :weiter output \{13} input 250 ENDE# # wartet 20s auf den String "ENDE#" IF NOT OK GOTO ende ...................... :ende ................ output \{13} close cd / exit ############ Aufrufen : kermit COM.ini Frank Jäschke Jürgen Hochwald schrieb:
Hallo,
ich stehe momentan vor folgender Aufgabe: es sollen Daten von einem seriellem Gerät erfaßt und verarbeitet werden. Das Gerät selber ist zwar über USB angeschlossen, enthält aber einen seriellen Wandler und erscheint dann als /dev/ttyUSBirgendwas. Der Kommunikationsablauf ist folgender: - Zuerst meldet sich das Gerät mit Versionsinfos - es müssen ein paar Befehle gesendet werden, um das Gerät zu konfigurieren, wo das Gerät auch nach jedem Befehl entspr. antwortet. - nach erfolgreicher Konfiguration sendet das Gerät ohne weiteres Zutun seine Daten kontinuierlich im 3-Sekundentakt bis zum nächsten Stromausfall.
Meine Fragen: Wie gehe ich das ambesten an? Kann man das einfach mit Shellbefehlen schaffen ohne tiefergehende Programmierung in einer Hochsprache ? Wenn ja, wie (Doku) ?
Wenn Hochsprache, dann wäre mir PHP am liebsten, doch da habe nicht nichts passendes zur Kommunikation gefunden, außer dio, was anscheinend nicht mehr weiterentwickelt wird. Es gibt auch kein per yast installierbares Paket (Suse 13.1).
Wie kann ich sicherstellen, daß das Gerät immer auf demselben ttyUSB? erscheint ? (soll später automatisch im Hintergrund laufen)
Jürgen
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (7)
-
Frank Jäschke
-
Joerg Thuemmler
-
Jürgen Hochwald
-
Kyek, Andreas, Vodafone DE
-
Manfred Kreisl
-
Markus Koßmann
-
Yamaban