Liebe Leute,
ich möchte in einem Wochenendhaus die Temperatur überwachen, inklusive
einer Email falls die Temperatur (z.B wegen Heizungsausfall) unter 10°C
fällt. Dazu soll ein Gerät minütlich eine URL aufrufen und die aktuellen
Werte als Parameter in der URL mit übergeben. Ich habe schon für meine
Heizung hier zuhause ein CGI-Skript laufen, dass solche Werte dann in
eine MySql-Datenbank schreibt; eine Email auszulösen ist damit ein
leichtes.
Die jetzige Lösung ist ein RasPi Typ A über WLAN. Das WLAN ist
allerdings sehr fragil, fällt häufig aus und startet dann nicht mehr
korrekt neu.
Ich habe mir nun einen AVR-NET-IO von Pollin besorgt, und suche nun "nur
noch" nach einer Ethernet-Bibliothek für Atmega32/Enc28j60 mit DNS- und
TCP-Client-Funktionalität.
Darüber bin ich schier am Verzweifeln. uIP, Radig, und die diversen
Abkömmlinge scheinen alle nicht out-of-the-box zu funktionieren.
Webserver wohin man schaut, aber meine heutigen Versuche, das TCP-Client
Wetterbeispiel z.B. in der Radig-Lib zum Laufen zu bringen waren nicht
von Erfolg gekrönt. Auch mein Versuch, einen Enc28j60-Treiber an die
uIP-Lib zu flanschen, bringt mich vom Hölzchen zum Stöckchen und ein
Ende ist nicht abzusehen.
Inzwischen ärgere ich mich fast, nicht für denselben Preis einen Arduino
Uno plus W5100 Ethernet Shield gekauft zu haben -- die Arduino
Ethernet-Bibliothek funktioniert wenigstens.
Kennt jemand eine zuverlässige und gepflegte Ethernet-Bibliothek mit DNS
und TCP-Client für AVR Studio/Atmega32/Enc28j60?
Oder sollte ich mich noch einmal an die Radig-Lib trauen? Kann mir in
dem Fall jemand verraten, was der Code in http_get.c hinter
tcp_port_open genau macht? Wofür ist der tmp_counter gut, wenn
tcp_port_open doch eh schon einen Eintrag in tcp_entry belegt hat? Und
warum wird auf app_status zugegriffen wenn index = MAX_ARP_ENTRY ist?
Und wieso wird first_ack = 1 gesetzt?
1 | tcp_port_open (WEATHER_SERVER_IP,HTONS(80),HTONS(my_http_cp));
|
2 |
|
3 | unsigned char tmp_counter = 0;
|
4 | while((index >= MAX_ARP_ENTRY) && (tcp_entry[index].app_status != 1))
|
5 | {
|
6 | index = tcp_entry_search (WEATHER_SERVER_IP,HTONS(80));
|
7 | if (tmp_counter++ > 30)
|
8 | {
|
9 | HTTPC_DEBUG("TCP Eintrag nicht gefunden (HTTP_CLIENT)!\r\n");
|
10 | return;
|
11 | }
|
12 | }
|
13 |
|
14 | HTTPC_DEBUG("TCP Eintrag gefunden (HTTP_CLIENT)!\r\n");
|
15 | tcp_entry[index].first_ack = 1;
|
LG, Sebastian