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
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...
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
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.
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
So sollte es richtig sein (Stichwort Quoting):
1 | PROGMEM char WEATHER_GET_STRING[] = "{ id : 123; value : \"dd:mm:yyyy hh:mm:ss\" }"; |
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
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
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(ð_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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.