Sensordaten mit Uni Wifi Rev2 an Server senden

Guten Abend!

Ich versuche seit Tagen einen Sensorwert auf einen Server zu übertragen. Leider bin ich überfordert und finde nicht, wo das Problem liegt. Vlt kann mir jemand weiterhelfen? Den Sketch hab ich nach der Anleitung für den Uno Wifi Rev 2 zusammengebastelt - impliziert halt auch, dass ich nur bestehenden Code etwas weiterentwickeln kann (langsam bezweifle ich das aber....). Ähnliche Themen hab ich durchsucht, dort gibt es auch Lösungsvorschläge aber die kann ich anscheinend nicht richtig anwenden...

In meinem Fall ist der Server ein Raspberry auf dem Homematic läuft. Dort habe ich eine Systemvariable definiert (?ise_id=3553) und möchte dieser einen neuen Wert zuweisen (?new_value="Sensorwert=13").
Gebe ich die Zeile "http://"ServerIP"/config/xmlapi/statechange.cgi?ise_id=3553&new_value=13" im Browser ein, wird der Wert geschrieben.

Mit meinem Sketch passiert das aber nicht. Verbindung zum Server scheint aber gegeben zu sein????? Ich weiß nicht, wo der Fehler liegt. Die Firewall der Homematic ist offen.

#include <SPI.h>
#include <WiFiNINA.h>

char ssid[] = "";          //netzwerk SSID
char pass[] = "";        //netzwerk pw

int status = WL_IDLE_STATUS;
IPAddress server(hier die ServerIP);         // Homematic IP
IPAddress ip(hier die Arduino IP), gateway(192, 168, 1, 1), subnet(255, 255, 255, 0);    //statische IP für board



// Initialize the client library
WiFiClient client;

void setup() {
  Serial.begin(9600);
  Serial.println("Attempting to connect to network...");
  Serial.print("SSID: ");
  Serial.println(ssid);

  WiFi.config(ip, gateway, subnet);
  status = WiFi.begin(ssid, pass);
  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);                                      //weiter soll nix passieren
  }
  else {
    Serial.println("Connected to wifi");
          
        //ausgabe board IP:
        IPAddress ip = WiFi.localIP();
        Serial.print("IP Address: ");
        Serial.println(ip);Serial.println("\nStarting connection...");
   
    //bei verbindung, im Serial Monitor ausgeben 
    if (client.connect(server, 80)) {
      Serial.print("connected to ");
      Serial.println(server);
      // Make a HTTP request:
      client.println("GET /search?q=arduino HTTP/1.0");
      client.println();
    }

    //wenn nicht verbunden, dann Ausgabe
    else {
      Serial.print("connection failure to host");
      while(true);
    }
  }
}

//Daten an Server senden

void loop() {
  int pHMeter = 0;
  pHMeter=13;        //zum Test fixen wert zuweisen, sonst analogRead
 
  if (client.connect(server,80)) {
    Serial.print("pH = ");
    Serial.println(pHMeter);
    client.println("GET /config/xmlapi/statechange.cgi?ise_id=3553&new_value=");
    client.print(pHMeter);
    client.println(" HTTP/1.1");
      
    while (client.available()) {
    client.read();
   }
    if (client.connected()){
    client.stop();
    }
  
 delay(10000);   //alle 10sek ausgeben
 } 
 
}

Wäre super, wenn mir jemand helfen könnte.
Vielen, vielen Dank im Voraus!

Das da in der Zeile mit dem "GET ..." println steht bedeutet dass da auch Zeilenumbruch gesendet wird. Das macht der direkte Browseraufruf nicht.
Ich würde den Fixtext und den variablen Teil zunächst in einer String-Variable speichern und dann den Inhalt dieser String-variablen senden.

Das ganze scheint ja noch ein Testprogramm zu sein.
Funktioniert es denn wenn du den ganzen String als einen Fixtext sendest?

also so

client.println("GET config/xmlapi/statechange.cgi?ise_id=3553&new_value=13");

?

Allgemeiner Hinweis. Wenn das stark verändertes Programm nicht funktioniert.
Zu einer funktionierenden Programmversion zurückkehren und dann in kleinen Schritten verändern.
Auch wenn das bedeutet, dass man zu einem Demoprogramm zurückkehrt an dem man ganz viel ändern muss. Das ist im Endeffekt effektiver als spekulativ herumzuprobieren

Ergänzung: und googeln hilft auch oft weiter.
Mein erster Versuch sehr spezfische Suchworte in größerer Anzahl
https://www.google.de/search?q=arduino+mit+get+daten+an+homematic+server+senden

Wenn man mit den vielen Stichworten keinen Volltreffer landet kann man immer noch reduzieren oder allgemeinere Begriffe nehmen

Der Treffer sieht jedenfalls vielversprechend aus

Und der hier macht es so wie ich vermutet habe
client.print und nicht client.println

vgs
vgs

    client.print("GET /config/xmlapi/statechange.cgi?ise_id=3553&new_value=");
    client.print(pHMeter);

Hallo StefanL38 und my_xy_project!

Vielen Dank für eure super schnellen Antworten!!!!!!!!!!!!!!!!!!!!
Jetzt läufts mit:

if (client.connect(server,80)) {
    Serial.print("pH = ");
    Serial.println(pHMeter);
    client.print("GET /config/xmlapi/statechange.cgi?ise_id=3553&new_value=");
    client.print(pHMeter);
    client.println(" HTTP/1.0");
    client.println();
   

Super cool!!!! Vielen Dank!
Schöne Grüße

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.