maniac103 / ems-collector

Buderus EMS heating control data collection daemon
GNU General Public License v3.0
28 stars 10 forks source link

The last missing pieces #8

Closed moosy closed 10 years ago

moosy commented 10 years ago

Finished RC and UBA sections Add raw read/write mode Add UBA test mode Add version number for output via getversion

maniac103 commented 10 years ago

@moosy Ich habe alles gemergt, mit Ausnahme der read/write-Kommandos. In Anbetracht der Tatsache, dass das Kommando-Interface ja gerade eine Abstraktion der Bus-Nachrichten ist, passen diese Kommandos da IMHO überhaupt nicht rein. Der Use Case erschließt sich mir auch nicht ganz: Wenn man ein neues Kommando implementieren will, kann man den Sendeteil doch implementieren, sich die Antwort in der Debug-Ausgabe anschauen und dann die Behandlung der Antwort implementieren?

moosy commented 10 years ago

Zunächst mal ganz herzlichen Dank!! Zum Thema raw read/write: Wenn man die Spezifikation für ein neues Feature hat, bzw. wenigstens die Typen und Offsets der beteiligten Telegramme klar sind, dann hast Du recht. Was aber, wenn man nicht weiß, an welcher Stelle oder gar in welchem Type die Daten stehen? Ich habe für diesen Zweck ein Skript, das alle Telegrammnummern abklappert, ein raw read xx yy 0 25 bzw. 25 25 macht und die Ausgaben in eine Textdatei schreibt. Dann wird manuell an der Anlage möglichst nur der Wert verändert, der mich interessiert, und dann das Skript nochmals gestartet, mit Ausgabe in eine neue Textdatei. Dann darauf ein Diff, und geguckt, wo sich was geändert hat. Meist hat man damit dann schonmal den Type. Dann verändert man nochmal den Wert manuell an der Anlage, und liest nochmal mit raw read xx yy zz 1. Hat sich der Wert angepasst? Ja? Prima. Dann der finale Test: ein raw write xx yy zz neuerwert auf diesen Wert. Check an der Anlage: Hat die das Schreiben übernommen? Ja? Super, dann ist erstmal ein EMS-Wiki-Update und ein Bier fällig. Und dann implementiere ich den Sende- und Empfangsteil (in welcher Reihenfolge auch immer). Wenn ich neben der Heizung knie, dann ist es sehr mühsam, für jeden Versuch im Code zu panschen. Da hab ich in der Regel nur das iPad dabei. Der raw mode ist also mitnichten für den produktiven Einsatz gedacht (da taugt er wegen der 1 Byte Schreiblängenbeschränkung ohnehin nur bedingt), sondern für Debugging und Reverse-Engineering Zwecke. Aber hierfür ist er extrem nützlich. Ich hätte auch kein Problem damit, ihn per Kommandozeilenoption oder per Compilerdirektive oder per make-Option --with-raw-commands nur auf ausdrücklichen Wunsch freizuschalten. Aber ich glaube, für alle, die am EMS-Protokoll forschen, ist der raw mode eine sehr wertvolle Hilfe. Ohne ihn hätte ich die vielen Werte, die ich ins Wiki eingepflegt habe, niemals in der kurzen Zeit herausbekommen...

maniac103 commented 10 years ago

Hmm, ok. Mit einem ifdef lasse ich mich breitschlagen ;)

maniac103 commented 10 years ago

@moosy Ich gehe mal davon aus, dass dein Skript auch 0x12 an Stelle von 12 ausgeben kann? Dann entferne ich nämlich mal parseHexParameter...

maniac103 commented 10 years ago

Und das Format würde ich auch umstellen, auf das hier:

source 0x12 type 0x34 data 0x56 0x78 0x9a [...]

Offset ist ja bekannt.

maniac103 commented 10 years ago

So, alles drin: https://github.com/maniac103/ems-collector/commit/914a28211f897ba0fb75075d098a9394342ba3fc https://github.com/maniac103/ems-collector/commit/0b6c975e2c40fd281340d23f7f08de971412894d

:)

moosy commented 10 years ago

Super!! Danke :D Wobei:

source 0x12 type 0x34 data 0x56 0x78 0x9a [...] Offset ist ja bekannt.

source und type auch ;) was hat der offset getan, dass er diskriminiert wird? entweder alle drei oder keiner, oder?

maniac103 commented 10 years ago

Stimmt. source und type können dann auch noch mit raus :) https://github.com/maniac103/ems-collector/commit/2121774cc068f03a3df410b1058559cb223656d5

moosy commented 10 years ago

Ich gehe mal davon aus, dass dein Skript auch 0x12 an Stelle von 12 ausgeben kann? Dann entferne ich nämlich mal parseHexParameter...

Das Format -- egal ob ein- oder ausgehend -- ist mir weitgehend wurst, da ich da eh meine eigene CLI davorschraube, die das so liefert, wie es der collectord braucht und so ausgibt und formatiert, wie der User es gerne hätte. Ich habs halt so eingebaut, wie ich es am komfortabelsten finde, das wandert dann in die CLI. Ein direktes Telnet auf 7777 macht ja sowieso keinen Spass, weil Ctrl-C die Verbindung nicht abbaut, und die ewigen "killall telnet"s regen irgendwann auf. Jetzt sag nur, das sei keine Absicht ;)

maniac103 commented 10 years ago

Absicht ist das nicht (ich muss mal schauen, woran das liegt), aber telnet lässt sich üblicherweise auch via Strg+] und dann 'q' beenden ;)

maniac103 commented 10 years ago

OK, das liegt daran, dass die Ctrl+C-Behandlung Teil des Telnet-Protokolls ist (http://pcmicro.com/netfoss/telnet.html, Kommando 'IP'). Die Verwendung von Strg+] finde ich an der Stelle eleganter als den Einbau dieses Teils des Telnet-Protokolls in den Collector.