- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 52

Thema: Lighttpd + UART - Wird nichts gesendet

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hm. mein Edit mit der php ini kam bestimmt zu spät. Ich nutze im /tmp Verzeichnis das Tempfilesystem. Als letzte Möglichkeit könnte man da per echo was reinschreiben und ein Programm als root ausgeführt schickt das dann an die ttyAMA0
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #12
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Also Shell_exec funktioniert, da ich über das Webinterface auch meine GPIOs schalten kann.
    Dies funktioniert und das habe ich auch bereits getestet.
    Nur der Text wird halt nicht gesendet.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Wer ist der Empfänger? Ein Terminalprogramm oder schon eon AVR. Falls AVR: hast Du ein CHR(13) angehängt?

    Ich arbeite gerade an einem Internet-Radiowecker. Soweit läuft schon alles. Bin aber noch in der Testphase. Im Moment zieht er sich updates.

    Da ist noch kein Webserver drauf. Wenn es der Platz zulässt, mache ich morgen mal ein Backup und teste mit lighthttp. Mir fehlt eh noch ein WebIf, um die Einstellungen komfortabel zu machen. Weckzeiten und so geht per AVR problemlos. Die Senderliste soll aber noch per php änderbar werden.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #14
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ne erstmal ist der Empfänger nur ein Terminalprogramm.
    Das Pi soll aber später über UART mit einen meiner CAN-Knoten reden und dann empfangene Daten über ein Webinterface abrufbar machen.....nur bis dahin dauert es noch ein bischen
    Ich arbeite die Punkte lieber erstmal Schritt für Schritt ab, damit nicht gleich x Fehler auf einmal auftreten und im Moment soll einfach nur der Text vom Pi an meinen PC gesendet werden wenn ich ein Button in meinem Webinterface betätige.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    lighthttp ist bei mir jetzt drauf. allerdings sendet er wie bei dir nichts. Morgen gehts weiter, muss ins Bett...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #16
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ok
    Dank dir schon mal für die Mühe!
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    So, ich habe mal in der php.ini die Fehleranzeige eingeschaltet. Da kommt dann bei meinem Senden-Programm, die Meldung, dass er /dev/ttyAMA0 nicht öffnen kann. Über echo kommt keine Fehlermeldung. Leider komm ich grad nicht weiter, da meine 2GB Karte voll ist. Ich muss erstmal das Backup von gestern zurückspielen und dann gibt es Essen. Die Probleme hatte ich alle mit dem Apache nicht...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  8. #18
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    danke fuer die Muehe.......wie hast du dir den Fehler anzeigen lassen?
    Per PHP ueber den Shell_exec Befehl oder hast du das via C Programm getestet?
    Aber die Erkenntnis bestaetigt meine Theorie, dass es sich um ein Rechteproblem handelt.
    Nur die Frage ist....wie stelle ich es um.
    Was sagt den dein Bauchgefuehl? Hat man mit Apache weniger Probleme als mit Lighttpd?
    Weil Performancetechnisch ist das Raspberry Pi durch die Raspian Distribution ja recht gut dabei, sodass ich denke das da Apache nicht so ins Gewicht schlagen sollte.......
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Der Fehler wird mir auf dem WebIf angezeigt, da ich $output einfach noch mit einblende.
    Was mich stört ist, dass ich als user root arbeite. Es wird mir auch root als php-Benutzer angezeigt. Ich deinstalliere gerade php und danach lighthttp um dann (ab morgen) den apache zu testen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    So, Apache hat auch nicht geholfen.

    Ich nutze jetzt das senden Programm, welches per sudo aufgerufen wird. Dazu muss noch die Passwortabfrage deaktiviert werden.

    Also Befehl
    Code:
    visudo
    in die Konsole eingeben

    Dort dann die Zeile
    Code:
    www-data       ALL=(ALL) NOPASSWD: /var/scripte/senden
    am Ende einfügen.

    Jetzt wird für das eine Senden Programm kein Kennwort bei sudo verlangt.

    Meine Webseite zum Testen:
    Code:
    <html>
    <head>
    <title>Raspberry Pi PHP- Server - UART Test</title>
    </head>
    <body>
    <h1>Raspberry Pi PHP- Server - UART Test</h1>
    <div id="nav"><a href="index.php?safemode=1">Safemode?</a> <a href="index.php">Neu laden</a></div>
    <div id="main"><h2>RasPi-Sendetest<h2><br>
    <?php
    header("Cache-Control: no-cache, must-revalidate"); 
    echo "<br>";
    echo "Befehl eingeben";
    echo "<br>";
    
    if (isset($_GET["safemode"])) {
        if( ini_get('safe_mode') ){
            echo "<br>Safemode an<br>";
        }else{
            echo "<br>Safemode aus<br>";
        }
    };
    if (isset($_POST["befehl"])) {
            if ($_POST["befehl"]!=""){
                $befehl="sudo /var/scripte/senden ".$_POST["befehl"];
                $output = shell_exec($befehl); 
            }    
    };
     
    echo "<form method='post' action='index.php'>";
    echo "<input type='text' maxlength='40' size='40' id='1' name='befehl' value='HalloWelt' />";
    echo "<br>";
    echo ".$output"
    ?>
    
    <input type="submit" value="Senden"> </form>
    </div>
    </body>
    Mein Senden Programm:
    Code:
    // Compile with: GCC /var/scripte/senden.c -o /var/scripte/senden
     
    //#include <iostream>
    //using namespace std;
    #include <sys/types.h>                        //nicht benötigtes scheint keinen Platz zu verschwenden...
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    #define BAUDRATE B19200
    char MODEMDEVICE[]= "/dev/ttyAMA0";    // !!!
    
    int    fd;                // File descriptor
    struct    termios newtio={};
    
    unsigned char send(char c)
    {
        int res=write(fd, &c, 1);
        if (res<0) printf("Fehler beim Senden\n");
        return res;
    }
    
    int init()
    {
        /*** Init ***/
        
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
        fd = open(MODEMDEVICE, O_WRONLY | O_NOCTTY);
        if (fd < 0){
            printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;    //setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    int einmal()
    {
        int i=0;
        int anzahl=0;
        int laenge=0;
        char *ptr;
        FILE *in;
        extern FILE *popen();
        char buff[30];
        char rueckgabe[30]="";
    
        if(!(in = popen("pidof senden", "r"))){
            exit(1);
        }
        
        fgets(buff, sizeof(buff), in);
        pclose(in);
        laenge=strlen(buff);
        for(i=0;i<laenge;i++)
        {
            if(buff[i]==' ') anzahl++;
        }
        return anzahl;    
    }
    
    
    int main(int argc, char** argv)
    {
        char c;
        char vBuf[100]="",*pBuf;
        char buffer [100]="";
        char buffer1 [100]="";
        int i=0;
        int anzahl;
        anzahl=einmal();
        if (anzahl>0){
            anzahl++;
            sleep(anzahl);
        }
         init();
        if (argc == 1) {                                                    //Wenn nichts angegeben, dann Uhrzeit und Datum senden
            time_t rawtime;
            
            struct tm * timeinfo;
            time ( &rawtime );
            timeinfo = localtime ( &rawtime );
    
            strftime (buffer,80,"U%H:%M:%S",timeinfo);                        //Uhh:mm:ss
            pBuf=buffer;
            strcat(pBuf,"\r");
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
    
            strftime (buffer,80,"D%d.%m.%y",timeinfo);                        //Dtt.mm.yy
            pBuf=buffer;
            strcat(pBuf,"\r");
            sleep(1);
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
        }else{                                                                //Sonst Parameter einlesen und senden    
            if(strlen(argv[1])>75){                                            //Puffer im AVR ist auf 80 gestellt
                strncpy(buffer,argv[1],76);                
                buffer[76]='\0';
            }else{
                strcpy(buffer,argv[1]);
                if (argc >2){
                    for (i=2;i<argc;i++){
                        if(strlen(buffer)+strlen(argv[i])>75){
                            strcat(buffer," ");                                
                            strncat(buffer,argv[i],(76-strlen(buffer)));
                            buffer[76]='\0';
                            break;                                            //exit for in c...
                        }else{
                            strcat(buffer," ");
                            strcat(buffer,argv[i]);
                        }
                    }
                }
            }
            int o=0;
            for(i=0;i<strlen(buffer);i++){
                buffer1[o]=buffer[i];
                if (buffer1[o]==164){                                    //ä
                    buffer1[o]= 228;
                }
                if (buffer1[o]==188){                                    //ü
                    buffer1[o]= 252;
                }
                if (buffer1[o]==182){                                    //ö
                    buffer1[o]= 246;
                }
                if (buffer1[o]==132){                                    //Ä
                    buffer1[o]= 196;
                }
                if (buffer1[o]==156){                                    //Ü
                    buffer1[o]= 220;
                }
                if (buffer1[o]==150){                                    //Ö
                    buffer1[o]= 214;
                }
                if (buffer1[o]==159){                                    //ß
                    buffer1[o]= 223;
                }
                if (buffer1[o]==138){                                    //&
                    buffer1[o]= 38;
                }
                if (buffer1[o] != 195){                                    //Initialisierung Umlaut
                    o++;
                }
            }
            pBuf=buffer1;
            strcat(pBuf,"\r");                                                //CHR(13) anfügen, damit der AVR auswertet        
            while(pBuf && *pBuf){                                            //Zeichen einzeln senden
                send(*pBuf++);
            }
        } 
        close (fd);
        return 0;
    }
    Geändert von peterfido (13.09.2012 um 17:44 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] MCP2515 Remoteframe wird nicht gesendet.........
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 30.08.2012, 23:49
  2. [ERLEDIGT] Frage zu LightTPD
    Von Kampi im Forum Raspberry Pi
    Antworten: 69
    Letzter Beitrag: 17.07.2012, 15:57
  3. Auf LC-Display wird nichts angezeigt
    Von cesupa im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 28.02.2008, 19:44
  4. I2C Adapter Software es wird immer WRITE gesendet
    Von yunscher im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 29.03.2007, 19:12
  5. wegen UART wird 7805 kochend heiß
    Von batti112 im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 15.06.2004, 10:48

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress