www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Webserver NETIO Paket senden?


Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute :)

Ich würde gerne mit dem Webserver von Ulrich Radig einfach ein kleines 
Paket (string) an einen Server in meinem Heimnetz versenden.
Zum Beispiel soll er alle 3 sekunden den String an den Server schicken.
Ist das möglich? Wie würde das denn ca funktionieren?
Ich muss ihm ja sagen an welche IP und so weiter...

Bitte um Hilfe :)

Mfg
Hannes

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Radig-Server kann doch UDP, oder?
Dann unterstützt die Software auch noch die GET-Methode, um von 
Wetter.com das Wetter abzuholen.
Damit sollte man doch was machen können...

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Wetter hast du recht danke ;)
da kann man sicher was machen
Ich werd mal schauen was ich da tun kann danke :)

mfg
Hannes

Autor: Chris M. (shortie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was für einen Server hast du im Netzwerk?

Wenn es ein Linux/BSD-Server ist würde ich es mir so einfach wie möglich 
machen und UDP nehmen. Da kannst du als Sender den Code von Dietmar aus 
dem Thread http://ulrichradig.de/forum/viewtopic.php?f=27&t=1186 nehmen. 
Als Empfänger nimmst du ein kleines Perl-Skript. Ein Beispiel dazu 
findest du unter 
http://docstore.mik.ua/orelly/perl/cookbook/ch17_06.htm. Dort das 
Example 17.2: udpqotd

Bei dem Wetter-Code hast du TCP, was ein komplexeres Protokoll als UDP 
ist und mußt einen größeren Aufwand treiben.

Alternativ könntest du auch über SYSLOG das ganze machen. 
Beitrag "SYSLOG für Ulrich Radigs Webserver auf AVR-NET-IO"
Das hätte den Vorteil daß du auf einem Windows-Server das ganze ins 
Ereignislog schreiben könnte. Ab Windows 2003 R2 Server ist wohl ein 
Syslogserver enthalten. Anderenfalls ist 
http://www.msxfaq.de/tools/ntsyslog.htm ganz hilfreich.

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten hat mir sehr geholfen.
Ich kann jetzt mein Paket jede Sekunden auf die Reise schicken.
Nun hab ich folgendes Problem:

PROGMEM char WEATHER_GET_STRING[] = {"{ id : 123; value : "dd:mm:yyyy 
hh:mm:ss" }"};

Ich möchte den String genau so übergeben. Also mein eigentlicher Wert 
ist:

{ id : 123; value : "dd:mm:yyyy hh:mm:ss" }

Leider zeigt der Compiler nun eine Fehlermeldung an:

../http_get.c:28: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before ':' token

Das heißt er kommt mit den Hochkommern und so nicht zurecht oder?
Hat vielleicht jemand eine Lösung für mich :)??

mfg
Hannes

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sollte es richtig sein (Stichwort Quoting):
PROGMEM char WEATHER_GET_STRING[] = "{ id : 123; value : \"dd:mm:yyyy hh:mm:ss\" }";

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke es funktioniert :) du bist mein held xD

So wenn wir schon dabei wären ;)

Ich würde nun gerne wie du sicher aus dem String erkennen kannst die 
Uhrzeit versenden. Also müsste sich der Wert jede Sekunde ändern.
Das heißt ich müsste diesen Teil:

\"dd:mm:yyyy hh:mm:ss\"

als eigene Variable definieren oder? und dann zuweisen?
am besten ich teil den String und füge ihn später wieder zusammen?

mfg
Hannes

Autor: Hannes Höttinger (hansl_)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute

Angehängt hab ich ein Bild von Wireshark wo ich die gesendeten Daten 
aufgezeichnet habe.
Denkt ihr ich kann so Daten an einen Server versenden?
TCP Protokoll würde passen und die Daten auch ;)

mfg
Hannes

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn der Verbindungsauf und -abbau von dem TCP Socket?

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einfach den Code von http_get.c genommen und verändert:

void http_request (void)
{
    unsigned long index = MAX_TCP_ENTRY;
   /* if (http_get_state > 1 && http_get_state < 20) http_get_state++;

    if (http_get_state == 0)
    {
        //offnet eine Verbindung zu meinem Webserver
        HTTPC_DEBUG("ARP Request\n\r");
        unsigned int my_http_cp = 2354;
        add_tcp_app (my_http_cp, (void(*)(unsigned char))test);

        //ARP Request senden
        if(arp_request (WEATHER_SERVER_IP))
        {
            for(unsigned long a=0;a<2000000;a++){asm("nop");};

            tcp_port_open 
(WEATHER_SERVER_IP,HTONS(80),HTONS(my_http_cp));

            unsigned char tmp_counter = 0;
            while((index >= MAX_ARP_ENTRY) && 
(tcp_entry[index].app_status != 1))
            {
                index = tcp_entry_search (WEATHER_SERVER_IP,HTONS(80));
                if (tmp_counter++ > 30)
                {
                    HTTPC_DEBUG("TCP Eintrag nicht gefunden 
(HTTP_CLIENT)!\r\n");
                    return;
                }
            }

            HTTPC_DEBUG("TCP Eintrag gefunden (HTTP_CLIENT)!\r\n");
            tcp_entry[index].first_ack = 1;
            http_get_state = 2;
        }
        else
        {
            http_get_state = 1;
        }
    }*/
    //if (http_get_state == 10)
    if (http_get_state > 10 && http_get_state < 20)
    {
        HTTPC_DEBUG("\r\n\r\n\r\nDaten Anfordern\r\n");
        index = tcp_entry_search (WEATHER_SERVER_IP,HTONS(80));
        memcpy_P(&eth_buffer[TCP_DATA_START],WEATHER_GET_STRING,(sizeof(WEATHER_ 
GET_STRING)-1));
        tcp_entry[index].status =  ACK_FLAG | PSH_FLAG;
        create_new_tcp_packet((sizeof(WEATHER_GET_STRING)-1),index);
    }
}

Benötige ich auch das ARP Request? Hier habe ich es einfach 
auskommentiert.
Ich hab das leider nicht ganz verstanden und habe einfach http_get_state 
auf 12 gesetzt somit sendet er mir die ganze Zeit den String aus.

mfg
Hannes

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo :)

Also ich habe heute die ersten Tests mit dem Server gemacht.
Source Code ist wie original nur der String wurde geändert.
Komischerweiße sendet er mir immer nur beim flashen.
Ok http_get_state wird nur einmal auf 0 gesetzt deswegen oder?
Er sendet mir den String an den Server das stimmt soweit. Aber 
irgendwelche Acknowledges oder Timings stimmen nicht.
Hatt bei jemandem schon das Wetter funktioniert??

Bitte helft mir :)

mfg
Hannes

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.