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 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;
}
Lesezeichen