Kann man eine neue Systemvariable von aussen definieren?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von Black » 09.02.2016, 20:41

funkleuchtturm hat geschrieben:
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 ?
kannst nicht mal nicht nur das ascii, sonsdern den HexDump des Telegrammes aufzeichnen und dann vergleichen wir mal..

und im idealfall nicht nur die response, sondern das telegramm, was der arduino an die ccu schickt...

bzw: probier mal als spass noch diese beiden möglichkeiten:
mir fiel da was ein, aus der Zeit, als ich für meine Frau mal nen Bot für ein Onlin eSpiel geschrieben hab ^^..
zwar AutoIT, aber da hab ich die Telegramme auch händisch zusammengesetzt.

Code: Alles auswählen

_WinHttpAddRequestHeaders($hRequest, "Accept: " & $sAccept)
	_WinHttpAddRequestHeaders($hRequest, "Referer: " & $aURL [0] & "://" & $aURL [2] & "/" & $sReferer)
	_WinHttpAddRequestHeaders($hRequest, "Accept-Language: de")
	_WinHttpAddRequestHeaders($hRequest, "Content-Type: application/x-www-form-urlencoded")
	_WinHttpAddRequestHeaders($hRequest, "Connection: keep-alive")
	_WinHttpAddRequestHeaders($hRequest, "Pragma: no-cache")
	_WinHttpAddRequestHeaders($hRequest, 'Cookie: ' & $oIE.document.cookie)
Ersetz mal definitiv dein Content-Type in dem text gegen das hier
anstatt dein
client.println("Content-Type: text/xml");
mal das hier

client.println("Content-Type: application/x-www-form-urlencoded");

bzw mal gegen das hier:
client.println("Content-Type: application/x-www-form-urlencoded; charset=UTF-8");
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
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, 21:47

Content-Length ist aber immer noch um das Extra-(CR)LF nach dem Inhalt zu niedrig...

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

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von mastermind611 » 09.02.2016, 22:10

Also das ist jetzt der Zeichenstrom der an einem Arduino-Server empfangen wird, wenn man den wget-Befehl (auf einem Raspberry) aus dem Script von jmaus laufen läßt:

POST /tclrega.exe HTTP/1.1
User-Agent: Wget/1.13.4 (linux-gnueabihf)
Accept: */*
Host: 192.168.2.177:8181
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 403

string v='test2';boolean f=true;string i;foreach(i,dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()){if(v==dom.GetObject(i).Name()){f=false;}};if(f){object s=dom.GetObject(ID_SYSTEM_VARIABLES);object n=dom.CreateObject(OT_VARDP);n.Name(v);s.Add(n.ID());n.ValueType(ivtBinary);n.ValueSubType(istBool);n.DPInfo('Kommentar');n.ValueName1('present');n.ValueName0('away');n.State(false);dom.RTUpdate(false);}


Ich habe dann genau das gleiche mit einem zweiten Arduino generiert und auf die Homematic geschickt - leider ohne Erfolg.

Als nächstes bleibt wohl wirklich nur ein Hexdump.

Benutzeravatar
funkleuchtturm
Beiträge: 2367
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 » 09.02.2016, 22:42

mastermind611 hat geschrieben:Ich habe dann genau das gleiche mit einem zweiten Arduino generiert und auf die Homematic geschickt - leider ohne Erfolg.
Hab ich auch gemacht. Kein Erfolg.
Hab dann einen POST-Request mit HttpRequester erfolgreich an die CCU abgesetzt und mit dem Fiddler das Telegramm aufgezeichnet.
Wenn man dieses Telegramm 1:1 vom Arduino sendet , dann funktioniert es nicht??
owagner hat geschrieben:Content-Length ist aber immer noch um das Extra-(CR)LF nach dem Inhalt zu niedrig...
Hab ich korrigiert, geht auch nicht !
Black hat geschrieben:Ersetz mal definitiv dein Content-Type in dem text gegen das hier
anstatt dein
client.println("Content-Type: text/xml");
mal das hier

client.println("Content-Type: application/x-www-form-urlencoded");

bzw mal gegen das hier:
client.println("Content-Type: application/x-www-form-urlencoded; charset=UTF-8");
... auch schon probiert, geht leider auch nicht.
Ich mache morgen weiter !
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 » 09.02.2016, 23:35

so nun auch der HEX Vergleich:
wget
504F5354202F74636C726567612E65786520485454502F312E31DA557365722D4167656E743A20576765742F312E31332E342028
6C696E75782D676E7565616269686629DA4163636570743A202A2F2ADA486F73743A203139322E3136382E322E3137373A38313
831DA436F6E6E656374696F6E3A204B6565702D416C697665DA436F6E74656E742D547970653A206170706C69636174696F6E2F
782D7777772D666F726D2D75726C656E636F646564DA436F6E74656E742D4C656E6774683A20343033DADA737472696E672076
3D277465737432273B626F6F6C65616E20663D747275653B737472696E6720693B666F726561636828692C646F6D2E4765744F6
26A6563742849445F53595354454D5F5641524941424C4553292E456E756D557365644944732829297B696628763D3D646F6D2E
4765744F626A6563742869292E4E616D652829297B663D66616C73653B7D7D3B69662866297B6F626A65637420733D646F6D2E4
765744F626A6563742849445F53595354454D5F5641524941424C4553293B6F626A656374206E3D646F6D2E4372656174654F62
6A656374284F545F5641524450293B6E2E4E616D652876293B732E416464286E2E49442829293B6E2E56616C7565547970652869
767442696E617279293B6E2E56616C75655375625479706528697374426F6F6C293B6E2E4450496E666F28274B6F6D6D656E746
17227293B6E2E56616C75654E616D6531282770726573656E7427293B6E2E56616C75654E616D653028276177617927293B6E2E
53746174652866616C7365293B646F6D2E52545570646174652866616C7365293B7D

ARDUINO
504F5354202F74636C726567612E65786520485454502F312E31DA557365722D4167656E743A20576765742F312E31332E342028
6C696E75782D676E7565616269686629DA4163636570743A202A2F2ADA486F73743A203139322E3136382E322E3137373A38313
831DA436F6E6E656374696F6E3A204B6565702D416C697665DA436F6E74656E742D547970653A206170706C69636174696F6E2F
782D7777772D666F726D2D75726C656E636F646564DA436F6E74656E742D4C656E6774683A20343033DADA737472696E672076
3D277465737434273B626F6F6C65616E20663D747275653B737472696E6720693B666F726561636828692C646F6D2E4765744F6
26A6563742849445F53595354454D5F5641524941424C4553292E456E756D557365644944732829297B696628763D3D646F6D2E
4765744F626A6563742869292E4E616D652829297B663D66616C73653B7D7D3B69662866297B6F626A65637420733D646F6D2E4
765744F626A6563742849445F53595354454D5F5641524941424C4553293B6F626A656374206E3D646F6D2E4372656174654F62
6A656374284F545F5641524450293B6E2E4E616D652876293B732E416464286E2E49442829293B6E2E56616C7565547970652869
767442696E617279293B6E2E56616C75655375625479706528697374426F6F6C293B6E2E4450496E666F28274B6F6D6D656E746
17227293B6E2E56616C75654E616D6531282770726573656E7427293B6E2E56616C75654E616D653028276177617927293B6E2E
53746174652866616C7365293B646F6D2E52545570646174652866616C7365293B7D


kein Unterschied.
Und der zugehörige Code:
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.177:8181");
client.println("Connection: Keep-Alive");
client.println("Content-Type: application/x-www-form-urlencoded");
// client.println("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); // Variante von Black im HM-Forum
client.print("Content-Length: ");
client.println(PostData.length());
client.println();
client.print(PostData);

Also doch ein Unterschied. Der "wget" funzt, der Arduino nicht ;-(
Zuletzt geändert von mastermind611 am 10.02.2016, 18:25, insgesamt 1-mal geändert.

Benutzeravatar
funkleuchtturm
Beiträge: 2367
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 » 09.02.2016, 23:58

... ich vermute, da gibt´s bei wget noch irgendeinen Header o.ä., den der Arduino so nicht sendet.
Irgendwie ist da gewaltig der Wurm drin :mrgreen: !!
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

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Kann man eine neue Systemvariable von aussen definieren?

Beitrag von Familienvater » 10.02.2016, 00:10

Hi,

"irgendwo" ist ein Unterschied :-)
winmerge.png
Der Familienvater

Nachtrag:
Es ist aber nur eine Stelle des Variablennamens, die anders ist (test2 gegenüber test4)...

Benutzeravatar
funkleuchtturm
Beiträge: 2367
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, 09:59

Der eigentliche POST-request ist ja wohl offensichtlich gleich. Danke allen Vorschreibern für die Arbeit!

Kann es nicht sein, daß POST-Datenpaket ein mit den Monitorprogrammen nicht sichtbarer Adressier-Header vorangestellt ist,
der neben der Zieladresse noch zusätzlich date/time Informationen hat. Der Arduino selbst hat keine aktuelle
Zeitinformation ( nur die UNIX-Zeit seit Rechnerstart!), der Raspberry hat aber vermutlich über ntp die aktuelle Zeit.
Und dann lehnt u.U. die CCU eine zu alte POST-Anfrage des Arduino einfach ab.
Interessant ist auch, daß bei mir mit irgendeinem Monitorprogramm (ich weiß schon gar nicht mehr welches!) die Arduino Anfrage
insofern angemeckert wurde, dass RFC 2822 nicht eingehalten wurde. Und das behandelt date/time!

Also müßte man im POST-Request irgendwo das aktuelle Datum reinschreiben.

...Hm

@mastermind611 Kannst Du bitte in Deine HEX-Strings hier im Thread einige CRLF einfügen, dann läßt sich dieser Post besser ansehen.
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, 10:13

Datum ist irrelevant.

Wenn man application/x-www-form-urlencoded als Content-Type schickt, muss man den Body auch entsprechend kodieren. Das ist aber bei POST gar nicht nötig.

Kannst Du vielleicht einmal den rohen IP-Datenverkehr zwischen Arduino, Pi und der ccu2 aufzeichnen? Auf der ccu2 ist m.E. tcpdump installieren, also einfach mal

tcpdump -s 0 -w /tmp/dump.pcap host <ip arduino> or host <ip raspi>

und das File dann anhängen?

Viele Grüße,
Olli

Benutzeravatar
funkleuchtturm
Beiträge: 2367
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:11

owagner hat geschrieben:und das File dann anhängen?
Leichter gesagt als getan, habe lange nicht mehr in der CCU rumgegraben:
Habe mit WinSCP im Terminalfenster das Programm aufgerufen. Scheint auch zu laufen. Aber im Fenster sehe ich keinen Traffic , wenn ich vom Arduino daten an die CCU absetze.
Werden die Daten im Terminalfenster angezeigt oder in irgendeinem File , den man sich anschauen kann ?
tcpdump.jpg
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)“