Sensorwert vom Arduino zur Homematic CCU2 senden

Guten Abend,

ich versuche seit Stunden vom Arduino Daten an die Homematic CCU2 zu schicken. Ich komme einfach nicht weiter und hoffe es kann mir jemand bei meinem Problem helfen.

Ich habe folgenden Aufbau:

  • Arduino UNO mit Ethernet Shield
  • An dem Arduino ist ein Varistor angeschlossen, der die Helligkeit misst.
    Das funktioniert auch soweit und die Daten werden am Seriellen Monitor angezeigt.

Ich habe in der Homematik CCU2 eine Systemvariable “Helligkeit” angelegt in der ich die Daten vom Arduino speichern will.

Im Arduino habe ich folgenden Sketch laufen:

#include <SPI.h>
#include <Ethernet.h>


//Analoge Fotozelle initialisieren
int FotozellePin = A0; //Eingangspin für Fotozelle
int FotozelleValue = 0;

boolean reading = false;
boolean connected = false;

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 192, 168, 178, 99 };                           // Arduino IP-Adresse
byte HomematicIP[]  = { 192, 168, 178, 69 };            // Homematic IP-Adresse
byte gateway[] = { 192, 168, 178, 1 };                   // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // subnet mask

EthernetClient client;

void setup()
{
 Ethernet.begin(mac, ip, gateway, subnet);
 Serial.begin(9600);
 delay(1000);

 Serial.println("connecting...");

 if (client.connect(HomematicIP, 80)) {
   Serial.println("connected");
 } else {
   Serial.println("connection failed");
 }
}


void loop()
{

 FotozelleValue=analogRead(FotozellePin);
 
 if (client.connect(HomematicIP,80)) {
   Serial.println(FotozelleValue);
   client.print("GET /config/xmlapi/statechange.cgi?ise_id=5239&new_value=");
   client.print(FotozelleValue);
   client.println(" HTTP/1.0");
 }
 
 if (client.connected()){
   client.stop();
 }
 
 delay(5000); //Poll every 5000ms
}

Wenn ich die Zeile “192.168.178.69/config/xmlapi/statechange.cgi?ise_id=5239&new_value=50 HTTP/1.0” direkt im Browser eingebe wird die Variable aktualisiert. Lasse ich das Programm laufen wird die Variable aber nicht aktualisiert.

ise_id=5239 ist die VariablenID in der Homematic

Ich hoffe mir kann jemand bei meinem Problem helfen

Vielen Dank schon mal

Grüße Markus :slight_smile:

Der Protokoll-Header wird mit einer Leerzeile abgeschlossen, Das passiert in Deinem Sketch aber nicht.

Du solltest die Antwrot des Servers entgegennehmen, bevor Du die Verbindung wieder unterbrichst. Wenn der Server halbwegs fix ist, sollte der folgende Code dafür genügen:

while (client.available()) {
  client.read();
}

Damit weisst Du zwar noch nicht, ob die Anfrage erfolgreich war, aber Du hast zumindest die Antwort eingelesen (und gleich wieder verworfen).

Vielen Dank für den Tipp.
Hat jetzt super funktioniert :slight_smile: :slight_smile:

hab das gleiche Problem. verstehe die antwort aber noch nicht. wo genau soll das Leerzeichen hinkommen?
den Code schnipsel kopier ich an welcher stelle rein?