Über Arduino eine Webseite aufrufen (ETHER_28J60)

Hallo zusammen,

ETHER_28J60

ich verzweifel grade ein wenig und hoffe auf Hilfe :slight_smile:

Ich möchte über einen Arduino eine Variabel in meiner Homematic CCU setzen.

Zum setzen muss folgender Link aufgerufen werden.

-> http://192.168.0.100/config/xmlapi/statechange.cgi?ise_id=2522&new_value=true

Über einen Browser funktioniert es wunderbar.

Was ich will:

Die CCU ruft einen Arduino mit ""?cmd=set_D6_ON"" auf und schaltet den Pin6.
Dann möchte ich von Arduino aus eine Variable in der CCU setzen(als Bestätigung).

Ich schaffe es einfach nicht über den Arduino den Link zu rufen.

Auszug aus dem Coding:
ETHER_28J60 e;

else if (strcmp(params, "?cmd=set_D6_OFF") == 0)
{
digitalWrite(6, LOW);
e.print("GET http://192.168.0.100/config/xmlapi/statechange.cgi?ise_id=2522&new_value=false ");
}

Die Zeile e.print("GET http** wird bestimmt falsch sein.
Leider finde ich im Netz keine passenden Informationen.
Kann mir dabei bitte jemand helfen?

Dank und Grüße,
nox

Soweit ich mir die Library (arduino-projects/ETHER_28J60.cpp at master · muanis/arduino-projects · GitHub) durchgesehen habe, tut der "print"-Befehl genau das was man denken könnte: er sendet eine Antwort an den client (normalerweise ein Browser) - als HTML mit ensprechendem header. Ich sehe momentan keine möglichkeit, Header-Informationen zu übertragen.

Hi,

danke für die schnelle Antwort.

Ich würde dafür gerne meine ENC28J60 dafür nutzen, habe aber auch noch andere LAN Module.

Ist es den generell möglich eine Seite über einen Arduino aufzurufen?

losNOXos:
Ich würde dafür gerne meine ENC28J60 dafür nutzen, habe aber auch noch andere LAN Module.

Ist es den generell möglich eine Seite über einen Arduino aufzurufen?

Im Gegensatz zum offiziellen Ethernet Shield mit W5100 Chip ist der ENC28J60 der blödestmögliche Netzwerkchip: Er hat null eigene Intelligenz und null eigenen Speicher. Damit kannst Du zwar mit der entsprechenden Library im Prinzip Netzwerkzugriffe mit einigen Klimmzügen programmieren, auch per HTTP, aber erstens ist die Programmierung solcher Zugriffe viel aufwändiger und zweitens verbrauchen sie auf dem Arduino viel mehr RAM-Speicher als wenn Du dasselbe mit dem W5100 Chip machst.

Also wenn Du mit dem ISO/OSI 7-Schichtenmodell bei Netzwerken nicht so ganz vertraut bist, den TCP-Netzwerkverkehr der von Dir genutzten Internetprotokolle nicht aus dem FF beherrscht, und Du mit dem Arduino vielleicht noch was anderes machen möchtest, das ein bischen vom Arduino RAM-Speicher benötigt, dann ist der ENC28J60 nicht die erste Wahl für Dich, sondern dann sollte Deine bevorzugte Wahl unbedingt der W5100 auf dem originalen Ethernet-Shield sein. Sonst wirst Du nur Frust schieben.

Die billigsten Ethernet-Shields vom China-Versender über eBay bestellt kosten inzwischen keine 10 EUR mehr, selbst vom Versender aus Deutschland nur ca. 11 EUR, da ist die Geldersparnis bei weitem nicht den möglichen Ärger und Frust wert, den die ENC28J60 Chips bei der Programmierung realer Anwendungen per HTTP verursachen können.

Hi,

fand sie sehr praktisch wegen der größe, aber ok.

Ich habe auch noch "Ethernet Shield W5100" hier liegen.

Die Arduino sollen nicht viel machen. Ein Mega steuert z.B. 10 Steckdosen an meinem Schreibtisch und einen LED Strip.
Das ganze Steuer ich momentan über die NetIO APP. Funktioniert so weit wunderbar.

Jetzt habe ich mir aber für Aufgaben wie z.B Jalousien und Heizungssteuerung das Homematic System gekauft. Und ich möchte gerne die Arduino in das HM intrigieren.

Einfaches Beispiel für eine Steckdose:

-HM ruft die Seite http://192.168.0.222/?cmd=set_D6_ON
-Arduino Webserver schaltet Pin6

funktioniert auch wunderbar.

Es wäre aber wichtig das der Arduino korrekt antwortet.
Mit client.println("ON"); kann HM leider nix anfangen.

Der Arduino müsste einfach nur die Seite "http://192.168.0.100/config/xmlapi/statechange.cgi?ise_id=2522&new_value=false" rufen können. Damit könnte ich direkt eine Variable im System setzen. Dann wäre alles gut.

Aber dann muss ich wohl einen anderen Weg zur Kommunikation finden.

losNOXos:
Der Arduino müsste einfach nur die Seite "http://192.168.0.100/config/xmlapi/statechange.cgi?ise_id=2522&new_value=false" rufen können. Damit könnte ich direkt eine Variable im System setzen. Dann wäre alles gut.

Als einzelne Funktion geht das mit einem Arduino und einem W5100 wie mit einem ENC28J60 zu realisieren.

Mit dem ENC28J60 eben auf die harte Tour.

Für einen W5100 als dem Chip vom offiziellen Ethernet-Shield gibt es zahllose funktionierende Programmbeispiele, ready for Copy-and-Paste.

Und für einen ENC28J60 als einem von Arduino nicht offiziell unterstützten Chip mußt Du ggf. ein bischen länger suchen oder sogar selbst tüfteln. Und hast nach Fertigstellung schon den größten Teil des Arduino RAM-Speichers voll, nur mit dieser einen Funktion.

hi,

Aber dann muss ich wohl einen anderen Weg zur Kommunikation finden.

nein, warum denn?

nimm den Ethernet Shield W5100, unter file > examples > ethenet ist ein webclient, der sollte das können...
bin mir jetzt nur nicht sicher, ob die ethernet-library schon bei der IDE dabei ist oder man sie nachrüsten muß.

gruß stefan

Hi,

alles klar!

Funktioniert vielen Dank!

if (client.connect(server, 80))
{
client.println("GET /config/xmlapi/statechange.cgi?ise_id=2522&new_value=true HTTP/1.0");
client.stop();
}
}
Ist alles was nötig ist. Das müsste ich im Server mit einbauen und bei bedarf kurz die Verbindung öffnen.

nimm den Ethernet Shield W5100, unter file > examples > ethenet ist ein webclient, der sollte das können...
bin mir jetzt nur nicht sicher, ob die ethernet-library schon bei der IDE dabei ist oder man sie nachrüsten muß.

Das ist definitiv die beste und einfachste Lösung.
Ethernet Shields mit einem WizNet Controller gibt es ja mittlerweile auch schon recht günstig. Ich nutze gerne die Shields von Seeedstudio:
http://www.seeedstudio.com/depot/ethernet-shield-p-518.html

losNOXos:
Hi,

alles klar!

Funktioniert vielen Dank!

if (client.connect(server, 80))
{
client.println("GET /config/xmlapi/statechange.cgi?ise_id=2522&new_value=true HTTP/1.0");
client.stop();
}
}
Ist alles was nötig ist. Das müsste ich im Server mit einbauen und bei bedarf kurz die Verbindung öffnen.

Ich möchte Werte an meine Homematic CCU senden, der folgende Aufruf funktioniert:
{
if (client.connect(serverccu, 80))
{
// Aufruf CCU2-Server
Serial.println("Daten an CCU2 senden - Verbindung zum Server...");
client.println("GET /config/xmlapi/statechange.cgi?ise_id=13731&new_value=17.9 HTTP/1.0");
client.println();
Serial.println("mit CCU2 verbunden...");
}
else
{
Serial.println("nicht mit CCU2 Server verbunden");
}

client.stop();
Jetzt möchte ich den Wert 17.9 hinter new_value durch den echten Wert der Variable "pptempjetzt" ersetzen. Wie kann ich den String im Arduino zusammensetzen? 10000 Dank

losNOXos:
Hi,

alles klar!

Funktioniert vielen Dank!

if (client.connect(server, 80))
{
client.println("GET /config/xmlapi/statechange.cgi?ise_id=2522&new_value=true HTTP/1.0");
client.stop();
}
}
Ist alles was nötig ist. Das müsste ich im Server mit einbauen und bei bedarf kurz die Verbindung öffnen.

Ich möchte Werte an meine Homematic CCU senden, der folgende Aufruf funktioniert:
{
if (client.connect(serverccu, 80))
{
// Aufruf CCU2-Server
Serial.println("Daten an CCU2 senden - Verbindung zum Server...");
client.println("GET /config/xmlapi/statechange.cgi?ise_id=13731&new_value=17.9 HTTP/1.0");
client.println();
Serial.println("mit CCU2 verbunden...");
}
else
{
Serial.println("nicht mit CCU2 Server verbunden");
}

client.stop();
Jetzt möchte ich den Wert 17.9 hinter new_value durch den echten Wert der Variable "pptempjetzt" ersetzen. Wie kann ich den String im Arduino zusammensetzen? 10000 Dank

Dem Ethernet Controller dürfte es völlig egal sein ob das auf dem Arduino in einer oder mehreren Zeilen steht.