Forum: PC-Programmierung AVR Webserver / CronJop


von Stephan (Gast)


Lesenswert?

Hallo,

seit 2 Jahren hab ich schon den AVR Webserver, ein altes Projekt von 
(U.Radig / Buss) mit Isa Card / Software Version 1.39 auf Atmega32.

nun braucht das Ding nen neue Aufgabe :

auf meiner Webseite läuf dank Michael ein PHP Skript
diese Webseite soll nun 1 x Stunde aktiviert werden.

der frühere "Webserver" soll zum CronServer werden dh:
in von mir bestimmten Intervallen soll eine (meine) Webseite aufgerufen 
werden ein Cron Job ähnlich wie WEBCRON.ORG ihn anbietet.

für mich wichtig :
die Software sollte, bis auf die neue Funktion(Cron) bestehen bleiben.
ich kenne mich zwar mit grob mit C aus, aber nicht mit TCP / IP.
Kann mir vieleicht einer von euch einen Tipp geben bei welcher Datei 
tcp.c httpd.c oder.. /Funktion ich ansetzten soll.
Auszug aus dem Originalprogramm :
//Sendet das erzeugte TCP Packet
      Write_Ethernet_Frame (buffer,*bufferlen);
      if (Buffer_Full == 0)
        {
        #if USE_MMC
        tcp_socket->Cluster = 0;
        #endif //USE_MMC
        tcp_socket->Status = TCP_SOCKET_CLOSE;
        }
      return;

ich hoffe jemand versteht was ich meine
anbei : ein Cronjob bei meinem WebAccount würde mich 10,00 € extra im 
Monat  kosten, der freie Cronjobanbieter ist evtl. in 2 Jahren nicht 
mehr da.

gruß Stephan

von Εrnst B. (ernst)


Lesenswert?

Sehr konfus...

Schreib doch nochmal genau, was jede Stunde passieren soll, und welcher 
der ?drei? beteiligten Server das jede Stunde initieren soll.

Und was hat dein Quelltextschnipsel damit zu tun? War der Post zu kurz?

von Stephan (Gast)


Lesenswert?

Hallo Ernst
Sehr konfus.. du hast Recht

Es soll / ist ein Email-Checker

Beispiele

1)
mit anderer Software / anderes Board
http://home.arcor.de/fuenfundachtzig/me/me.htm
gut dokumentiert

2)
http://www.icplan.de/seite23.htm
hat eine Preisliste / ohne Quellcode

3)
mit der Fritzbox :

http://www.vollkornpapier.de/artikel-Email-Checker-mit-der-Fritz-Box-Fon-WLAN-%2528POP3-und-IMAP%2529-seite1.html

meine Fritzbox steht im Keller, und die Software der Fritzbox kann und 
will ich ohne Plan nicht verändern.

4)
mein Board, hier das Original
Beitrag "Einfacher und billiger Webserver mit AtMega32"
############################################

es geht mir um den Lerneffekt und Freude am schaffen, aber manchmal bin 
ich einfach nur zu dumm.

noch mal eine Kurzbeschreibung:

auf meinem Board mit ISA Card soll eine LED leuchten, wenn mein Postfach 
(WEB.DE) eine E-Mail erhalten hat.
##########
es funktioniert derzeit alles.

wenn Email da, dann LED an
###########
ich muss nur zu viele externe Dienste (2 Stück) in Anspruch nehmen
Beispiel

das PhP-Skript auf meiner Homepage bei 1&1 prüft bei Web.de ob neue 
Email vorhanden ist,
dieses Skript wird 1x pro Stunde durch "anpingen" meiner Homepage 
ausgeführt.
diese "anpingen" erledigt derzeit der CRON-Dienstanbieter WEBCRON.ORG

mit einer Softwareergänzung auf meinem Board sollte es nun möglich sein 
dass mein Board die Funktion "anpingen" mit übernimmt und ich 
WEBCRON.ORG (ist gratis) wieder deaktivieren kann.

viele Grüße
Stephan

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

eigene Ergänzung :

in der Softwareversion 1.40 gibt es die Möglichkeit E-Mail zu senden.

Dateien Sendmail.c Sendmail.h  also eine E-Mail an die Adresse  Xyz.de 
senden
jetzt müsste ich diese Dateien doch nur einbinden und alles rauswerfen 
was ncht benötigt wird und genau da ist mein Problem
was muss stehenbleiben so das nur die IP abgeschickt wird.
ich will die Webseite nur "anpingen" und keine E-Mail schicken




Stephan

von Εrnst B. (ernst)


Lesenswert?

Ah, also in etwa:

AVR-Webserver startet
HTTP GET auf http://deinewebseite.de/xxx/cron.php

Webserver deinewebseite.de führt cron.php aus, dabei:
 => greift er auf Web.de zu, checked nach mails
 => Schickt neuen Status an den AVR-Webserver, wiederrum über
 HTTP GET auf http://deinAVRwebserver.de/xxx/yyy

Webserver deinewebseite.de ist mit cron.php fertig, beendet verbindung.

AVR-Webserver ist mit GET fertig.

d.h. du brauchst für den AVR neben dem HTTP-Server auch noch einen 
HTTP-Client.
und der AVR muss mindestens zwei Verbindungen gleichzeitig offen haben 
können (einmal outgoing, einmal incoming)


Wenn der Webserver auf uIP basiert, geht das out-of-the-box nicht, da 
kanns z.B. nur eine appstate_t typedef geben...

wenns was anderes ist, wirst du wohl tief in den Quelltext einsteigen 
müssen...

EDIT: wenn das mit deinem sendmail.c funktioniert, sollte das auch 
leicht für einen HTTP-GET request umzuschreiben sein...

evtl reicht: Verbindung aufbauen,
1
GET /pfad/pingme.php HTTP/1.0
2
Host: www.deinwebserver.de
Senden, und auf verbindungsende warten.

von Stephan (Gast)


Lesenswert?

Hallo Ernst,

mir fällt gerade ein:

ich könnte doch meiner Webseite bei 1&1 per Sendmail.c eine E-Mail 
schicken, die Webseite kann damit zwar nichts anfangen aber "angepingt" 
ist "angepingt".
es wäre aber schön wenn es sauberer ginge.


######## dein Text #####
evtl reicht: Verbindung aufbauen,

GET /pfad/pingme.php HTTP/1.0
Host: www.deinwebserver.de


Senden, und auf verbindungsende warten.
################
das reicht, aber was muss im Quelltext geändert werden ?
im Originalquelltext Sendmail.c blick ich nicht durch


danke

Stephan

von Markus L. (lucky79)


Lesenswert?

Stephan wrote:
> ich könnte doch meiner Webseite bei 1&1 per Sendmail.c eine E-Mail
> schicken, die Webseite kann damit zwar nichts anfangen aber "angepingt"
> ist "angepingt".
> es wäre aber schön wenn es sauberer ginge.
was soll das "anpingen" bringen?
Um ein Script auf deinem WebServer zu starten bedarf es einer HTTP-GET 
Anweisung an den Server. Ein e-mail wird nichts bringen, da
   Mailserver <> WebServer
Der Ansatz bei sendmail.c is sicherlich der einfachste Weg.

so wie ich das sehe baut der sendmail void die Verbindung auf und der 
smtp void überträgt dann a la Telnet die SMTP-Kommandos, wartet auf 
die Statusmeldungen des Servers und wertet diese aus.

Du musst nur die IP-Adresse vom WebServer dort einsetzen, wo die Adresse 
vom SMTP-Server is (ich vermute im Header) und eine HTTP-Anforderung 
senden. Die Daten, die da zurückkommen sind dein Status...

Probiers mal:
öffne  "telnet www.deinserver.com 80" wenn Verbunden gib "GET /" ein und 
wart was passiert...

Grüße,
Markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Warum so kompliziert?

Auch web.de sollte den Zugang zu ihrem Email-Server mit dem 
standardisierten POP3-Protokoll unterstützen. Und einen 
POP3-Mail-Checker sollte man auf einem AVR mit Netzwerk hinbekommen; das 
Protokoll ist recht simpel.

Mit telnet kann man das ausprobieren:

telnet pop3.web.de 110

Dann auf die Begrüßungsmeldung warten

[r] +OK WEB.DE POP3-Server

[w] USER HORST
[r] +OK Bitte Kennwort eingeben/enter password

[w] PASS GLOTTKE
[r] +OK Mailbox locked and ready

[w] STAT
[r] +OK 572 90547605

[w] QUIT

(mit [r] gekennzeichnete Zeilen wurden empfangen, mit [w] 
gekennzeichnete gesendet)

Anstelle von HORST und GLOTTKE sind natürlich sinnvolle Anmeldedaten 
anzugeben.
Die Klartextmeldungen hinter '+OK' haben nur Kommentarcharakter; ich 
habe keinen web.de-Account und kann daher die web.de-Meldungen nicht 
vollständig wiedergeben.

Interessant ist die Antwort auf das STAT-Kommando, hier wird in zwei 
Zahlen die Anzahl der gespeicherten Nachrichten und deren Gesamtgröße in 
Bytes ausgegeben.

Dieses Postfach ist offensichtlich ziemlich voll ...

Mit QUIT wird die Verbindung beendet.

Eine ausführliche Protokollbeschreibung findet sich hier 
http://www.ietf.org/rfc/rfc1939.txt

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.