mikrocontroller.net

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


Autor: Kendy B. (kendy_b)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kendy B. (kendy_b)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kendy B. (kendy_b)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kendy B. (kendy_b)
Datum:

Bewertung
0 lesenswert
nicht 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:
while read line; do
        if [ "$line" = "taste1" ]; then
        (
                echo "$line execute on `date`"
                wget -q -O/dev/null "http://192.168.0.1/web/message?text=testtest&type=2&timeout=5"
                echo ""
                # Hier dein Programmaufruf
                # touch /tmp/xxx.live
        ) >> /tmp/uart.log 2>&1
        fi
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.