Hi, gibt es sowas in der Art schon? Ich hatte an einen Daemon unter Debian gedacht der die Serielle Schnittstelle überwacht und wenn eine bestimmt Sequenz vom µC gesendet wird dann wird ein vordefiniertes Programm oder Script gestartet. Vorzugsweise alles in einer config anpassbar:) Kann man dazu vielleicht mgetty benutzen? Das war doch ein Daemon um Modems zu überwachen, wenn ich mir recht erinnere. Gruß candyman
Getty und die Varianten sind in erster Linie dazu da, ein Login-Prompt auf dem jeweiligen Gerät auszugeben und den Login zu steuern. DAS (inkl. Fehlerbehandlung) willst du deinem µC nicht wirklich antun. man 8 getty (oder mgetty) ist dein Freund. Wenn es auch ohne Konfigfile sein darf, dann tuts auch ein simples Shell-Skript in der Form: #!/bin/bash exec <> /tmp/xxx while read l; do if [ "$l" = "DOIT" ]; then ( echo "execute " # Hier dein Programmaufruf touch /tmp/xxx.live ) >> /tmp/xxx.log 2>&1 fi done Dabei ist /tmp/xxx durch den Namen des Seriellen Ports zu ersetzen, /tmp/xxx.log durch eine Log-Datei deiner Wahl und "Touch /tmp/xxx.live" durch dein Programm.
Danke für die schnelle Antwort. Wenn mein µC dann mal läuft werd ich das Script mal testen. Nur noch kurz ne Frage zu den Befehlen exec <> /tmp/xxx Das überwacht die Schnittstelle zb /dev/ttyS0 ? Ist exec nicht nur da um Programme innerhalb eines Scriptes unter der gleichen PID auszuführen? Theoretisch kann ich ja dann auch einfach wieder mit echo "01010111" > /dev/ttyS0 andere Daten zum µC senden. Oder? Das "DOIT" in der READ Schleife ist dann also die Sequenz die über die Serielle Schnittstelle kommt, wenn ich zb einen Taster drücke? Das ist ja doch gar nicht so schwer wie unter Windows. Die Bash ist schon ne feine Sache:)) Gruß candyman
Das "exec <> ..." ohne Angabe eines Kommandos dient dazu, die Standard-Ein- UND -Ausgabe des Skriptes mit der seriellen Schnittstelle zu verbinden. Vielleicht bei Gelegenheit einfach mal "help exec" in der Shell eingeben. D.h. nach dem "exec" und vor der öffnenden Klammer kannst du mit "echo Hallo uC" Daten an den µC senden oder (wie hier mit "read") lesen. An der Stelle ist keine weitere Umleitung mit ">" oder "<" nötig. Das "DOIT" ist tatsächlich das, was dein uC an den PC schicken sollte :-) Was ich aber bisher vergessen habe: Die serielle Schnittstelle muss wahrscheinlich noch konfiguriert werden. Das geschieht mit dem Befehl stty(1). "man stty" und ist dein Freund. Bei mir funktioniert zwischen dem "exec" und dem "while" folgender Aufruf für die übliche 9600 8N1 Einstellung: stty sane raw pass8 -echo 9600
Morgen, erstmal ganz vielen Dank für die schnelle Beantwortung. Das hat mir erstmal sehr viel weiter geholfen. Ich werde das alles Testen wenn ich der Versuchsaufbau bzw alle Bauteile zusammen hab.;) Danke Candyman
Hallo, kleines Problem habe ich noch. konfig: Taste1 -> µC -> BT-Platine --- BT-Stick -> /dev/rfcomm0 -> script Zur Zeit habe ich das obere Script so abgeändert:
1 | while read line; do |
2 | if [ "$line" = "taste1" ]; then |
3 | (
|
4 | echo "$line execute on `date`" |
5 | wget -q -O/dev/null "http://192.168.0.1/web/message?text=testtest&type=2&timeout=5" |
6 | echo "" |
7 | # Hier dein Programmaufruf
|
8 | # touch /tmp/xxx.live
|
9 | ) >> /tmp/uart.log 2>&1 |
10 | fi
|
11 | done
|
und es wird mit ./script.sh < /dev/rfcomm0 aufgerufen. Funktioniert auch wunderbar. Jetzt habe ich aber das Problem das die Bluetooth-Verbindung bestehen bleibt bei laufendem script. Wie kann ich folgendes Szenario realisieren? µC und Bluetooth Platine einschalten(Spannung anschließen) Taste drücken -> jetzt wird die BT-Verbindung initialisiert und das Script ausgeführt. Danach BT-Modul wieder in den Standby oder ausschalten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.