Kann man eine neue Systemvariable von aussen definieren?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
funkleuchtturm
Beiträge: 2368
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 10.02.2016, 11:23

... hab ich jetzt erst gesehen im tmp/dump file. schau ich mir an !
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
funkleuchtturm
Beiträge: 2368
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 10.02.2016, 11:42

@owagner
Hier sind die Dump-Files, wenn vom Arduino (192.168.178.87) erfolgreich in 5s Abständen GET-Requests
und nicht erfolgreiche POST-Requests an die CCU (192.168.178.41) abgesetzt werden.
dump.zip
(4.18 KiB) 64-mal heruntergeladen
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von owagner » 10.02.2016, 15:51

Wenn man das in Wireshark lädt und sich mit "Follow TCP Stream" einmal anguckt, ergibt sich ein interessantes Bild. Geschickt wird erstmal nur:

Code: Alles auswählen

POST /tclrega.exe HTTP/1.1

Host: 192.168.178.41:8181

Anscheinend macht EthernetClient von sich aus bei println() ein CRLF, und verwandelt auch das explizite "\r" in ein CRLF-Paar, zumindestens sind nach jeder Zeile zwei CRLF im Stream.
Das mit dem "\r" war also ein roter Hering, mach das mal wieder weg, sorry.

Darüberhinaus scheinen die Zeilen nach dem Host:-Header nicht gesendet zu werden. Probier spaßhalber mal, vor dem Lesen explizit ein flush() aufzurufen.

mastermind611
Beiträge: 124
Registriert: 14.02.2011, 23:09

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von mastermind611 » 10.02.2016, 18:26

Also mit dem Code funktioniert es:

Code: Alles auswählen

#include <SPI.h>
#include <Ethernet.h>
EthernetClient client;
byte ccu[] = { 192, 168, 2, 82 };    //IP der CCU - LXCCU Test-Umgebung
byte mac[] = { 0xBA, 0xCC, 0xCC, 0xCC, 0xAC, 0xBC };

void setup() {
  Serial.begin(115200);
  Serial.println("Starting..."); // if you get a connection, report back via serial:
  if (Ethernet.begin(mac) == 0) { // start the Ethernet connection:
    Serial.println("Failed to configure Ethernet using DHCP");
  }
  delay(500);// give the Ethernet shield a second to initialize:
  Serial.println("connecting..."); Serial.print("Arduino is at "); Serial.println(Ethernet.localIP());
  
  String vaname = "sysvar20"; String comment = "Kommentar"; String presence = "present"; String away = "away";
  
  String PostData1 = "string v='"+String(vaname)+"';boolean f=true;string i;foreach(i,dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs())";
  String PostData2 = "{if(v==dom.GetObject(i).Name()){f=false;}};if(f){object s=dom.GetObject(ID_SYSTEM_VARIABLES);object n=dom.CreateObject(OT_VARDP);";
  String PostData3 = "n.Name(v);s.Add(n.ID());n.ValueType(ivtBinary);n.ValueSubType(istBool);n.DPInfo('"+String(comment) + "');n.ValueName1('"+String(presence);
  String PostData4 = "');n.ValueName0('"+String(away)+"');n.State(false);dom.RTUpdate(false);}";
  String PostData = PostData1 + PostData2 + PostData3 + PostData4;
  Serial.println(PostData);
  if (client.connect(ccu, 8181)) {
    delay(200);// give the Ethernet shield a second to initialize:
    client.println("POST /tclrega.exe HTTP/1.1");
    client.println("User-Agent: Wget/1.13.4 (linux-gnueabihf)");
    client.println("Accept: */*");
    client.println("Host: 192.168.2.82:8181");
    client.println("Connection: Keep-Alive");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.print  ("Content-Length: ");
    client.println(PostData.length()); client.println();
    client.print(PostData);
    delay(200);
  } else {
    Serial.println("connection failed");
  }
  String ServerResponse = "";
  delay(200); // kurzer Delay nach dem Verbindungsaufbau zum Server
  while (client.connected()) { //
    while (client.available()) { // lesen solange was kommt
      char c = client.read();
      if (ServerResponse.length() < 1024) { //store characters to string
        ServerResponse = ServerResponse + String(c); Serial.print(c);
      }
    } // Antwort des Web-Servers ist fertig übertragen
    Serial.println(); Serial.println("disconnecting.");
    client.stop(); // disconnecten
  } // end while
  if (ServerResponse.length() == 0) {
    Serial.println(); Serial.println("got no data ...");
  }
  Serial.print("ServerResponse: <"); Serial.print(ServerResponse); Serial.println(">");
}
void loop() {
}
Bei euch auch?

Benutzeravatar
funkleuchtturm
Beiträge: 2368
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 10.02.2016, 20:43

Super, daß es bei Dir funktioniert, das läßt hoffen!
Manchmal ist es wie verhext: Hab heute Stunden damit verbracht, nach einem Fehler im LAN zu suchen. Ergebnis: bei der Fritzbox hatte sich das Netzteil verabschiedet, aber nicht so ganz. Mal Funktion, mal keine. Da kommt Freude auf :mrgreen: :mrgreen:
Mit neuem Netzteil scheint jetzt wieder alles o.k. zu sein. Manchmal kommt alles auf einmal!

Getestet habe ich den Sketch mit MEGA2560 und W5100 Ethernet Board, damit ich nicht noch irgendwelche WLAN-Probleme dabei habe. Also habe ich dann vermutlich die gleiche Test-Konstellation wie Du.

Dein Programm läuft zwar durch ("connecting"), aber das Echo ist nur
got no data ...
ServerResponse: <>

Die Systemvariable wird bei mir dementsprechend nicht angelegt.

Schicke ich mit dem Programm statt der POST-statements das alte GET Statement, dann funktioniert es. Irgendwas ist bei mir wohl anders als bei Dir ????

Wie sieht das Echo bei Dir aus ?
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

mastermind611
Beiträge: 124
Registriert: 14.02.2011, 23:09

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von mastermind611 » 11.02.2016, 22:31

tja, heute läuft es bei mit auch nicht mehr. Weiß der Geier warum.

Ich hatte gestern die CCU2 mehrfach rebootet, das Logging eingeschaltet, parallel mehrfach mit wget ausprobiert, das Programm und den wget so umgeschrieben dass er nur das "Hello World"-Skript ausgibt und da hat es funktioniert. Jetzt krieg ich es wieder nicht mehr zum Laufen.

Ich komm jetzt auch nicht mehr weiter und hoffe darauf, dass weitere Experten noch kreativen Input liefern können.

Benutzeravatar
funkleuchtturm
Beiträge: 2368
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 11.02.2016, 22:58

Ja, es ist fast unglaublich, daß man so ein einfaches Arduino-Sketch nicht zur richtigen Funktion bringen kann.

Ich werde in den nächsten Tagen dem Ratschlag von owagner folgen und mit tcpdump den Traffic genauer ansehen.

Insgesamt eigentlich ein einfaches Problem, aber....
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

mastermind611
Beiträge: 124
Registriert: 14.02.2011, 23:09

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von mastermind611 » 20.02.2016, 17:02

Interessant ist, dass wenn ich auf dem Raspberry auf dem die lxccu läuft den IP-Verkehr mitschneide mit:

Code: Alles auswählen

sudo tcpdump -i lxccubr0 -s0 port 8181 -A -vvv -l
dann funktioniert das ganze und bring folgenden Output:

Starting...
connecting...
Arduino is at 192.168.2.83
WriteLine('Hallo Welt!');

disconnecting.
ServerResponse: <HTTP/1.1 200 OK
Server: ise GmbH HTTP-Server v2.0
Accept-Ranges: bytes
Cache-Control: no-store, no-cache
Content-Type: text/xml
Content-Length: 144
Date: Sat, 20 Feb 2016 16:58:09 GMT

Hallo Welt!
<xml><exec>/tclrega.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: Wget/1.13.4 (linux-gnueabihf)</httpUserAgent></xml>>

Habe das Arduino-Programm so geändert, dass es folgenden Befehlt per PUT übermittelt:

Code: Alles auswählen

PostData = "WriteLine('Hallo Welt!');";

mainframe
Beiträge: 12
Registriert: 08.09.2016, 14:25
Wohnort: Pfalz

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von mainframe » 06.10.2016, 11:54

Hallo Zusammen,

ich bin durch Eugen auf diesen Thread aufmerksam geworden. Ich kämpfe gerade damit, mit einem Arduino Systemvariablen der CCU abzufragen.
Mit dem Browser funktiniert das einwandfrei. Allerdings nicht mit dem Arduino.

Ich hab es bisher auf 2 Arten versucht:

1. Direkt über die CCU http://IP-CCU:8181/GET%20/xy.exe?antwor ... %27).State()
Antwort der CCU:

Bild

2. Über XMLAPI http://IP-CCU:80/config/xmlapi/state.cg ... nt_id=5825

Bild

Wenn ich das ganze mit dem Arduino abfrage bekomme ich nur das zurück:
Bild

Das Arduino Skript ist das Beispiel Skript der Ethernet Lib um Google abzufragen wo ich den GET Befehl entsprechend abgeändert habe. Ich bekomme aber einfach keinen vernünftigen Output hin.
Was nach wie vor komisch ist, dass man mit Variante 1 wunderbar Variabeln über den Arduino setzen kann... aber nicht abfragen... :evil:

Wenn jemand eine Idee hat...

LG Denis
Haussteuerung zur Zeit Profilab mit diversen Erweiterungen. Arduinos die Daten senden und Empfangen.
MAX Heizungssteuerung

Gerade dabei einiges auf Homematic umzustellen
Ziel Alles mit Homekit über Homematik zu regeln :-)
_________________________________________________________________________
aus der schönen Pfalz, immer Interessiert an Austausch

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“