Kann man eine neue Systemvariable von aussen definieren?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 07.02.2016, 18:13

@Black
Probier ich aus .
Danke!
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: 2371
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 07.02.2016, 20:52

Die Semikolons wegzulassen hat´s leider auch nicht gebracht.
Hier der Arduino Programmschnipsel, mit dem ich versuche den POST-request zu machen.

Code: Alles auswählen

String HM_skript = "string antwort=dom.GetObject(\"Anwesenheit\").State(0);";

  if (client.connect(ccu_ip, 8181))
  {Serial.println("connected"); delay(2500);
   client.println("POST /tclrega.exe HTTP/1.1");
   client.println("Content-Type: Content-type: application/x-www-form-urlencoded;");
   client.println("Host: 192.168.178.41");  //das ist die CCU IP
   client.print("Content-Length: "); client.println(HM_skript.length());
   client.println("Connection: Close");client.println();
   Serial.println( HM_skript);  
   client.println(HM_skript);
  }else{Serial.println("connection failed");delay(1000);}
   if(client.connected()){client.stop();}
   delay(2000);
Der Arduino verbindet sich mit der CCU ("connected") und setzt die client.print-Meldungen ab. Aber keine Wirkung auf die Systemvariable "Anwesenheit", die ich damit setzen wollte.
:( :(
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: 2371
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 07.02.2016, 21:36

Ich habe mal das Firefox-Plugin HttpRequester installiert. Damit lassen sich auch PoST-Requests absetzen.

Mit diesem Programm funktioniert es einwandfrei! Man kann per POST die Systemvariable Anwesenheit setzen. Funktioniert aber nur , wenn die HM-Skriptzeile mit Semikolon abgeschlossen ist.
httpRequester.jpg
Jetzt muß ich nur(!) noch herausfinden, warum mein Arduino-Schnipsel nicht funktioniert .
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 » 08.02.2016, 22:00

Hallo in die Runde,

@funkleuchtturm: Du hast ja auf Deinem Arduino einen Webserver laufen - oder kannst dir so einen zurechtbauen. Wenn Du dann den "wget" Befehl wie angegeben auf den Arduino-Webserver laufen läßt, indem du die IP-Adresse von dem Arduino eingibst, kannst du den gesamten Stream abfangen und dir anschauen was der wget genau sendet. Diesen String musst du dann halt umgekehrt mit dem Arduino erzeugen und an die CCU senden.

Ich hoffe das war verständlich ;-) und hilft weiter.

Viele Grüße

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

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 09.02.2016, 15:14

@mastermind611
Ich kann ja mit dem Firefox-Plugin HttpRequester die Telegramme detailliert ansehen/editieren und die POST-Requests so absetzen, daß die CCU das auch versteht bzw erfolgreich mit "true" quittiert. So kann man genau sehen, ob ein Punkt und Komma evtl zuviel ist.

Mein Problem ist aber, daß wenn ich das gleiche Telegramm vom Arduino verschicke, die CCU das eben nicht erfolgreich annimmt. Ich hab schon Leerzeichen und Sonderzeichen duch die ASCII-Werte ersetzt usw. aber keine "true" Quittung seitens CCU erfolgt. :evil:
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 » 09.02.2016, 15:44

HTTP-Zeilenenden müssen CR LF sein, der EthernetClient der Arduino-Library (ich nehme an, den verwendest Du) schreibt aber nur ein LF. Probier mal

client.println("POST /tclrega.exe HTTP/1.1\r");

etc.

Außerdem ist Deine Content-Length um ein Byte zu klein:

client.println(HM_skript);

sollte

client.print(HM_skript);

sein

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

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 09.02.2016, 16:41

Danke für den Hinweis. Habe schon nur mit \r und mit \n\r probiert. Aber läuft nicht! Hier der letzte Code:

Code: Alles auswählen

String HM_skript = "string antwort=dom.GetObject('Anwesenheit').State(0);";

  if (client.connect(ccu_ip,8181))
  {Serial.println("connected post"); delay(2500);
   client.println("POST /tclrega.exe HTTP/1.1\r"); 
   client.println("Host:192.168.178.41:8181\r");
   client.println("Connection: Close\r");client.println();
   client.println("Content-Type: application/xml\r"); 
   client.print("Content-Length: "); client.println(HM_skript.length());client.print("\r");
    Serial.print(HM_skript.length()+1 );  Serial.println(HM_skript);  
   client.print(HM_skript);
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
Black
Beiträge: 5550
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 434 Mal
Danksagung erhalten: 1097 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von Black » 09.02.2016, 19:07

arduino ist jetzt nicht grade mein spezialgebiet, das wäre in der richtung eher python.

kannst nicht mal mit wireshark oder fiddler in einer testumgebung mal gucken und vergleichen, wie ein manuell erzeugtes Telegramm und eines deines Arduinos ausschaut ?

irgendwo muss da ja der wurm sein.

greetz und viel Erfolg,

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

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

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 09.02.2016, 19:30

Black hat geschrieben:kannst nicht mal mit wireshark oder fiddler in einer testumgebung mal gucken und vergleichen
... das mach ich schon den ganzen Nachmittag. Ich bin sicher, das ist irgendein lächerliches Steuerzeichen. Aber wo ?
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: 2371
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von funkleuchtturm » 09.02.2016, 20:20

Also ich hab jetzt mal erfolgreich einen GET-Request abgeschickt und das Echo aufgezeichnet. Mit folgendem Arduino Programm...

Code: Alles auswählen

   String befehl = "GET /blabla.exe?antwort=dom.GetObject(\"Anwesenheit\").State(1)";
   client.print(befehl);   Serial.print(befehl);
 
   //read back one line from server
    String line = client.readStringUntil('%03');
    Serial.println(); Serial.println("serverantwort:");
    Serial.println(line);
ergibt das folgendes Echo:
echo_get.jpg
Die gleiche Transaktion als nicht erfolgreichem POST-request abgeschickt mit ...

Code: Alles auswählen

String HM_skript = "string antwort=dom.GetObject(\"Anwesenheit\").State(0);";  
   client.println("POST /tclrega.exe HTTP/1.1"); 
   client.println("Host:192.168.178.41:8181");
   client.println("Connection: close");
   client.println("Content-Type: text/xml"); 
   client.println("Content-Length: "); client.println(HM_skript.length());
   Serial.print(HM_skript.length());  Serial.println(HM_skript);  
   client.println(HM_skript);

   //read back one line from server
    String line = client.readStringUntil('%03');
    Serial.println(); Serial.println("serverantwort:");
    Serial.println(line);
    
    delay(10); client.stop();
    Serial.println("closing connection");;

führt zu folgendem Echo:
post_antwort.jpg
Irgendwo ist im POST-request der Wurm drin :evil: :evil:
So langsam bin ich mit meinem Latein am Ende.
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

Antworten

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