Seite 4 von 5

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 20:41
von Black
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");

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 21:47
von owagner
Content-Length ist aber immer noch um das Extra-(CR)LF nach dem Inhalt zu niedrig...

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 22:10
von mastermind611
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.

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 22:42
von funkleuchtturm
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 !

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 23:35
von mastermind611
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 ;-(

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 09.02.2016, 23:58
von funkleuchtturm
... 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: !!

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 10.02.2016, 00:10
von Familienvater
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)...

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 10.02.2016, 09:59
von funkleuchtturm
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.

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 10.02.2016, 10:13
von owagner
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

Re: Kann man eine neue Systemvariable von aussen definieren?

Verfasst: 10.02.2016, 11:11
von funkleuchtturm
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