Autostart mit Crontab klappt: Anzeige bei C-Programm geht nicht

  • Hallo Zusammen,
    bin etwas in Not :helpnew: !
    Ich habe ein Raspi 2b mit Jessie
    Ich habe ein c-Programm welches Mess-Werte vom Hubo von Schnasseldag auf der normalen Console ausgibt.
    Manuell gestartet klappt alles und ich schreibt mir Zeile für Zeile den Bildschirm voll. Nicht hübsch aber es geht. Es sind in diesem Beispiel einfache Temperatur Werte aus und steuer entsprechen bei unterschreiten ein Relais des Hubo durch.


    Alles wunderbar.

    Das ganze Programm soll als Autostart sofort nach dem Hochfahren starten.

    Code
    @reboot    root /home/pi/hubo/Regelung.out &

    Dafür habe ich in der Crontab folgende Zeile eingefügt. Wenn ich den Prozess mit z.B.

    Code
    Htop

    prüfe, ist zu sehen, dass das ganz läuft. Das Relais klackt auch und wird angesteuert.

    Einzig: Ich bekomme KEINE Ausgabe auf dem Bildschirm (Composite-Ausgang) :X . Es soll künfig ein 7" Rückfahr-Monitor die Messdaten anzeigen.
    Hatt jemand einen Vorschlag für ein Messwert-Ausgabe in C die nicht einfach nur Zeile für Zeile über den Bildschirm flimmert? Ich füge noch ein Beispiel-Foto bei. Das ist dann die End-Anwendung für eine Drehzahl-Regelung...


    Ich habe im Forum schon rauf und runter gesucht und Meigrafd Infos zu Crontab etc gelesen.

    Wer kann mir sagen warum ich die Werte bei Autostart nicht angezeigt bekomme? - Probehalber habe ich mal mit

    Code
    > Ausgabefile.txt

    in der Crontab geguckt, was das Programm ausgibt. Doch auch bekam ich keine Ausgbabe file. - Leer


    :danke_ATDE:

  • Autostart mit Crontab klappt: Anzeige bei C-Programm geht nicht? Schau mal ob du hier fündig wirst!

  • Da bin ich jetzt nicht der richtige Ansprechpartner, da ich selbst meine Probleme damit habe ;) ,aber ich sehe das so, dass in dieser Zeile eine Ausgabe in eine Datei stattfinden müsste, dann nimmt man fprintf, glaube ich:

    Zitat


    printf ("Associated temperatures: MCP9700=%lf°C \n", Get_MCP7900_Temperature(volt));


    Denn wenn die Anwendung gestartet wird, ist ja nicht autom. jemand angemeldet, der das Ergebnis sieht.
    Da gibts Beispiele:
    https://de.wikibooks.org/wiki/C-Program…ben_.C3.B6ffnen

  • Erstens:

    Code
    @reboot    root /home/pi/hubo/Regelung.out > /home/pi/hubo/log.txt &

    WARTEN bis das Programm 4096 Bytes geschrieben hat.
    File pruefen

    Wenn das klappt, das Programm so abändern:

    Code
    printf ("Associated temperatures: MCP9700=%lf°C \n", Get_MCP7900_Temperature(volt));
    fflush( stdout ) ;

    Die letzte Zeile aus dem Log kriegt man dann mit:

    tail -1 log.txt

  • Danke erstmal, für die schnelle Antwort


    Erstens:

    Code
    @reboot    root /home/pi/hubo/Regelung.out > /home/pi/hubo/log.txt &

    WARTEN bis das Programm 4096 Bytes geschrieben hat.
    File pruefen

    Wenn das klappt, das Programm so abändern:

    Code
    printf ("Associated temperatures: MCP9700=%lf°C \n", Get_MCP7900_Temperature(volt));
    fflush( stdout ) ;

    Die letzte Zeile aus dem Log kriegt man dann mit:

    tail -1 log.txt

    Punkt 1) klappt, Das schreiben in die Datei sehen ich genau nach 4096 Byte. :^^:
    Punkt 2) und darun geht es mir, klappt aber so noch nicht auch nicht mit dem fflush (stdout). Ich möchte ja eine Anzeige auf dem Bildschirm sehen. Das schreiben in Datei war nur zum testen,....
    ich habe die Crontab nun so abgeändert:

    Code
    @reboot    root /home/pi/hubo/Regelung.out &

    Ich vermute nun es liegt nicht am C-Programm sondern an der Ausgabe. Auf den Wiki.Seiten zu C bin ich nicht fündig geworden.
    Bin schon gespannt auf die Lösung. :daumendreh2:

  • Wo soll denn die Ausgabe *HIN*? Du startest ein Programm im Autostart. Das ist eines von dutzenden, wenn nicht mehr Programmen, die laufen. Wenn ein jedes dieser Programme eine Ausgabe erzeugt, bekommst du riesigen Buchstabensalat auf deinem Schirm.

    Darum werden Programme im Hintergrund *ohne* Terminal gestartet. Dadurch kommt es auch zu der beschriebenen Bufferung.

    Was willst du denn schlussendlich mal fuer eine Ausgabe machen? Soll die wirklich nur textbasiert sein?


  • Wo soll denn die Ausgabe *HIN*? Du startest ein Programm im Autostart. Das ist eines von dutzenden, wenn nicht mehr Programmen, die laufen. Wenn ein jedes dieser Programme eine Ausgabe erzeugt, bekommst du riesigen Buchstabensalat auf deinem Schirm.

    Darum werden Programme im Hintergrund *ohne* Terminal gestartet. Dadurch kommt es auch zu der beschriebenen Bufferung.

    Was willst du denn schlussendlich mal fuer eine Ausgabe machen? Soll die wirklich nur textbasiert sein?

    Hi Deets,
    ich habe weiter oben mal ein Foto gepostet. Es ist ein Display (Composite) installiert. Die Auflösung habe ich auf ca. 30 x 15 Zeichen reduziert. (Ist sonst zu klein) Ich habe dort eine Regelung für eine Turbinen-Steuerung. Z. Z. gebe ich dort nur die Drehzahl von Turbine und Generator aus.
    Ja nur Text!

    Evtl. folgen weitere Messwerte und Statusmeldung. Schön wäre wenn das ganze nicht nur durchläuft. Bisher hatte ich außerdem noch TMUX - Laufen, damit klappte es gut den Bildschirm via OPENVPN- zu doppel. Das ist jetzt aber gerade deaktiviert, da kein Internet.

    Gibt´s eine passende Textbasierte Programm-Bibliothek, ähnlich wie GUI-Grafik-Ausgabe,...?

    :danke_ATDE:

  • Zur Ausgabe selbst bietet sich ncurses an, damit kannst du Text-GUIs erstellen. Fuer dein eigentliches Problem musst du tiefer in die Trickkiste greifen, oder umdisponieren.

    Es gibt IMHO zwei Moeglichkeiten:

    - du bleibst bei terminal-Ausgabe. Dann musst du dem System beibiegen, statt einem getty (das ist der Prozess, der einen login-prompt & ein Terminal zur Verfuegung stellt) deine Software zu starten. Wie das fuer CentOS zB geht findet man hier: http://unix.stackexchange.com/questions/3182…gram-after-boot - aber ACHTUNG: dadurch *musst* du dich mit SSH anmelden am System, um Wartungsarbeiten vornehmen zu koennen!
    - du benutzt eine "richtige" GUI, bzw den XServer. Der kann automatisch gestartet werden, und auch ohne login. Dann kannst du ein Programm in FullScreen starten, das kann auch wieder ein terminal (zB Xterm etc) sein, und das macht dann die Bildschirmausgabe.

  • Suppi, Deets, dannke erstmal für die Erläuterungen. Habe nicht gedacht, dass das nun so was besonderes wird.
    Ich habe das Englische Info mal überflogen. Gibts hier im Forum nix?? - Bzw. unter welchem Stichwort müßte ich suchen?

    SSH- Ist kein Problem, mache ich zu 95% sowieso. Das bleibt dann doch auch unverändert möglich oder??

    Ich komme wohl erst morgen oder Di. zum Testen, hoffe ich kann dann nochmal rückfragem. Was ist denn eigentlich CentOS ?? -

    Danke soweit schonmal.

  • CentOS ist einfach nur ein Linux. Ob es hier im Forum etwas gibt - kA. getty ist ein Stichwort. Aber gesehen habe ich das hier noch nicht. Es ist halt auch eher unueblich, was du da vorhast. Dafuer bauen sich die meisten Leute dann doch irgendwas mit einer GUI/Kioskmode+Browser etc. Ist glaube ich auch wirklich besser, aber stellt natuerlich mehr Anforderungen an deine C-Programmierkenntnisse.

  • Stimmt, haste Recht - das hab' ich ohne nachdenken aus der Anleitung entnommen, aber die war eher bezogen auf ein Kiosk-System mit freiem Nutzerzugriff - da will man sowas natuerlich verhindern.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!