Forum: PC-Programmierung Daemon um Serielle Schnittstelle zu überwachen


von Kendy B. (kendy_b)


Lesenswert?

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

von A.H. (Gast)


Lesenswert?

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.

von Kendy B. (kendy_b)


Lesenswert?

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

von A.H. (Gast)


Lesenswert?

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

von Kendy B. (kendy_b)


Lesenswert?

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

von Kendy B. (kendy_b)


Lesenswert?

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
Noch kein Account? Hier anmelden.