Hi,
ich bin zwar auch kein Experte aber hier mal ein Erklärungsansatz.
Wenn du mit einem Browser eine GET Anfrage an einen WEB-Server sendest dann erwartet der Web-Server eine paar Parameter. Genau genommen diese:
GET /index.php?suche=anfragemethoden+formular HTTP/1.1
Host:
www.example.com
User-Agent: Mozilla/5.0
Accept: image/gif, image/jpeg, */*
Connection: close
<EINE LEERZEILE>
Du hast geschrieben, dass du in einen Browser folgende Zeile eintippen kannst und alles geht:
http://192.168.1.90:8181/xy.exe?antwort ... ATE).State()
Ist klar, weil der Browser ja die oben genannten Parameter korrekt an den Web-Server sendet (der Webserver ist in unserem Fall übrigens die CCU).
Ok, in deinem Arduino Programm hast du zuerst folgendes gemacht:
client.connect(host, 8181);
client.println("GET /xy.exe?antwort=dom.GetObject('CUxD.CUX4000001:4.STATE').State()");
client.stop();
Damit sendet der Arduino aber nur : GET /xy.exe?antwort=dom.GetObject('CUxD.CUX4000001:4.STATE').State() an den Web-Server der CCU. Alles Andere, was der Web-Server eigentlich auch noch erwartet, wird nicht gesendet.
In deinem 2. Post hast du es dann mit folgender Zeile hin bekommen:
client.print(befehl + " Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
Man sieht schon, dass du hier die Benötigten Infos reingepackt hast. Man kann es noch etwas lesbarer schreiben ("host" ist die IP der CCU):
client.connect(host, 8181);
client.println ("GET /xy.exe?antwort=dom.GetObject('CUxD.CUX4000001:4.STATE').State() HTTP/1.1");
client.println ("Host: 192.168.0.10"); <-Das ist die IP MEINER CCU. Muss man an die eigene anpassen.
client.println("Connection: close");
client.println();
Ich hab deine Zeile hierbei nur in mehrere Zeilen zerlegt. Man sieht auch, das die \r\n verschwunden sind. \r\n bedeutet nur "neue leere Zeile" und das Kommando client.println macht das automatisch.
Dann hab ich in der ersten Zeile noch ein HTTP/1.1 angehängt. Achso.... und das "Connection: close" nicht vergessen. Einige denken, dass der Befehl client.close() das machen würde. Tut er aber nicht
Und ganz am schluss kommt dann noch eine Leerzeile. Und damit geht es dann.
Ich selbst hab meine Arduinos früher so wie du mit der CCU reden lassen. Das hat eine ganze Zeit lang gut funktioniert. Aber seit dem letzten Firmwareupdate der CCU hat das nichtmehr zuverlässig funktioniert. Daher muss jetzt die "korrekte" kommunikation in das Arduinoprogramm.
Hier ist das mit dem HTTP GEP, POST usw. gut erklärt:
https://wiki.selfhtml.org/wiki/HTTP/Anfragemethoden
Und hier ist ein Arduino Beispielprogramm, in dem man sieht wie die GET-Geschichte im Arduino programiert wird:
https://www.arduino.cc/en/Tutorial/WebClient
GRüße und schönen Sonntag, Bernd