heute wollte ich auch mal direkt die Kommunikation von LCN-P mitschneiden, und nicht nur wie bisher die Kommunikations zwischen den Modulen. Ich bin dabei über ein paar Probleme gestolpert, vielleicht wisst ihr da ja mehr:
Ich benutze ausschließlich Linux, daher habe ich versucht LCN-P in Dosbox, Dosemu und vmware zum Laufen zu bekommen - alles war von mäßigem Erfolg gekrönt. Das höchste der Gefühle war, dass LCN-P den Bus beim Start erkannt hat - weiter kam man aber dabei nie.
Dies hat mich dazu bewogen LCN-P auf einem alten DOS Laptop auszuführen, und die Kommunikation durch einen zweiten Rechner zu leiten, der das Protokoll analysiert.
Leider scheint dies nicht so einfach wie gedacht, da diverse Steuersignal gesetzt werden,von denen ich meine, dass dies gar nicht möglich ist.
Betrachtet man zum Beispiel den Mitschnitt dieses Kommunikationsversuches, von Programmstart bis darauf folgendem 'Handbedienung'>'Status'>'Modul: 10'
LCN-P meldet hierbei 'Zu viel Betrieb auf dem Bus'
Es sei angemerkt, dass dies vllt daran zu verschulden ist, dass LCN-PC das CD Flag nach jedem Byte toggled, dies aus Übersichtsgründen aber ausgeblendet wurde.
Man sieht auch, dass LCN-P auf dem Laptop das CS Signal bedient, vielleicht bin ich einfach nur zu jung, und habe mit RS232 zu wenig gemacht - aber der PC sollte doch dies als EINGANG haben - und nicht Ausgang? Könnte aus diesem Grund eine Simulation/Emulation schief laufen? Evt. gibt es einen bösen Hack diesen im IO Baustein umzudefinieren?
Ok, das Poblem hat sich erledigt, indem LCN-PC und LCN-P direkt verbunden habe, und nur jeweils eine Datenader an einen COM Port gehängt habe. Ich bin jetzt dabei einen Mittschnitt über jeden einzelnen Befehl aufzuzeichenen. Das Programm hierfür untersucht hierbei die Kommunikation anhand der Prüfsummen.
Ich habe jetzt noch einmal mein Analyseprogramm in Python neu programmiert. Im Moment ist nur lesender Zugriff auf den Bus möglich. Das Programm interpretiert eine leicht abgewandelte Version der XMLs aus gadals Java Lib.
Das Programm sollte unter Linux/Mac OSX/Windows lauffähig sein. Nicht vergessen in io.manager.IOManager den Port zu ändern.
Hallo zusammen,
heute wollte ich auch mal direkt die Kommunikation von LCN-P mitschneiden, und nicht nur wie bisher die Kommunikations zwischen den Modulen. Ich bin dabei über ein paar Probleme gestolpert, vielleicht wisst ihr da ja mehr:
Ich benutze ausschließlich Linux, daher habe ich versucht LCN-P in Dosbox, Dosemu und vmware zum Laufen zu bekommen - alles war von mäßigem Erfolg gekrönt. Das höchste der Gefühle war, dass LCN-P den Bus beim Start erkannt hat - weiter kam man aber dabei nie.
Dies hat mich dazu bewogen LCN-P auf einem alten DOS Laptop auszuführen, und die Kommunikation durch einen zweiten Rechner zu leiten, der das Protokoll analysiert.
Leider scheint dies nicht so einfach wie gedacht, da diverse Steuersignal gesetzt werden,von denen ich meine, dass dies gar nicht möglich ist.
Betrachtet man zum Beispiel den Mitschnitt dieses Kommunikationsversuches, von Programmstart bis darauf folgendem 'Handbedienung'>'Status'>'Modul: 10'
LCN-P meldet hierbei 'Zu viel Betrieb auf dem Bus'
Es sei angemerkt, dass dies vllt daran zu verschulden ist, dass LCN-PC das CD Flag nach jedem Byte toggled, dies aus Übersichtsgründen aber ausgeblendet wurde.
Man sieht auch, dass LCN-P auf dem Laptop das CS Signal bedient, vielleicht bin ich einfach nur zu jung, und habe mit RS232 zu wenig gemacht - aber der PC sollte doch dies als EINGANG haben - und nicht Ausgang? Könnte aus diesem Grund eine Simulation/Emulation schief laufen? Evt. gibt es einen bösen Hack diesen im IO Baustein umzudefinieren?
Würde mich freuen von euch zu hören
MaBl
Anhang:
Programm zum Mitschneiden < http://mabl.no-ip.com/LCN/portForwarder/main2.py.html >
Mitschnitt LCNP < http://mabl.no-ip.com/LCN/logs/verbindungsversuchLCNP.txt >
Ok, das Poblem hat sich erledigt, indem LCN-PC und LCN-P direkt verbunden habe, und nur jeweils eine Datenader an einen COM Port gehängt habe. Ich bin jetzt dabei einen Mittschnitt über jeden einzelnen Befehl aufzuzeichenen. Das Programm hierfür untersucht hierbei die Kommunikation anhand der Prüfsummen.
Anhang:
Programm zur Untersuchung der Kommunikation
< http://mabl.no-ip.com/LCN/SerialAnalyzer/main3.py.html >
Entstehende Dokumentation
< http://mabl.no-ip.com/LCN/logs/doku.pdf >
Ich habe jetzt noch einmal mein Analyseprogramm in Python neu programmiert. Im Moment ist nur lesender Zugriff auf den Bus möglich. Das Programm interpretiert eine leicht abgewandelte Version der XMLs aus gadals Java Lib.
Das Programm sollte unter Linux/Mac OSX/Windows lauffähig sein. Nicht vergessen in io.manager.IOManager den Port zu ändern.
http://mabl.no-ip.com/LCN/pyLCN3.tar.gz
Die Statusmeldungen des Programms sehen dabei wie folgt aus, der Mitschnitt beinhaltet einmal Licht ausschalten, und Relais ändern:
* Add command EmptyCommand (0x0)
* Add command SwitchOutput3 (0x3)
* Add SubcommandWithRange Brightness (0x0 to 0x32)
* Add CalculatedValue BrightnessInPercent
* Add Subcommand SwitchToMemory (0xfb)
* Add data attribute ramp
* Add command SwitchOutput1 (0x4)
* Add SubcommandWithRange Brightness (0x0 to 0x32)
* Add CalculatedValue BrightnessInPercent
* Add Subcommand SwitchToMemory (0xfb)
* Add data attribute ramp
* Add command SwitchOutput2 (0x5)
* Add SubcommandWithRange Brightness (0x0 to 0x32)
* Add CalculatedValue BrightnessInPercent
* Add Subcommand SwitchToMemory (0xfb)
* Add data attribute ramp
* Add CalculatedValue rampInSeconds
* Add command EnableButtonTableB (0xc)
* Add SubcommandWithRange BitmaskButtonToSet (0x0 to 0xff)
* Add data attribute BitmaskSetAction
* Add command EnableButtonTableC (0xd)
* Add SubcommandWithRange BitmaskButtonToSet (0x0 to 0xff)
* Add data attribute BitmaskSetAction
* Add command EnableButtonTableD (0x11)
* Add SubcommandWithRange BitmaskButtonToSet (0x0 to 0xff)
* Add data attribute BitmaskSetAction
* Add command SwitchRelais (0x13)
* Add SubcommandWithRange BitmaskButtonToSet (0x0 to 0xff)
* Add data attribute BitmaskSetAction
* Add CalculatedValue switchRelais
* Add command SwitchRelaisTimer (0x14)
* Add SubcommandWithRange TimerStep30ms (0x0 to 0x20)
* Add SubcommandWithRange TimerStep60ms (0x21 to 0x40)
* Add SubcommandWithRange TimerStep120ms (0x41 to 0x60)
* Add SubcommandWithRange TimerStep240ms (0x61 to 0x80)
* Add SubcommandWithRange TimerStep480ms (0x81 to 0xa0)
* Add data attribute BitmaskRelais
* Add command SwitchLed (0x16)
* Add Subcommand SwitchOff (0x0)
* Add Subcommand SwitchOn (0x2)
* Add data attribute noOfLed
* Add command SendKeypress (0x17)
* Add data attribute unkown
* Add command EnableButtonTableA (0x19)
* Add SubcommandWithRange BitmaskButtonToSet (0x0 to 0xff)
* Add data attribute BitmaskSetAction
* Add command ModuleVars (0x28)
* Add SubcommandWithRange TVarHighByte (0x3 to 0x4)
* Add data attribute TVarLowByte
* Add payload attribute R1Var
* Add payload attribute R2Var
* Add Subcommand RequestVars (0x3)
* Add payload attribute R1Var
* Add payload attribute R2Var
* Add payload attribute R1Var
* Add payload attribute R2Var
* Add command MoveThresholdCurrent (0x2b)
* Add Subcommand MoveRelativeUp (0x4)
* Add Subcommand MoveRelativeDown (0x84)
* Add data attribute amount
* Add command MoveThresholdProgrammed (0x2c)
* Add Subcommand MoveRelativeUp (0x4)
* Add Subcommand MoveRelativeDown (0x84)
* Add data attribute amount
* Add command Beep (0x40)
* Add Subcommand StandardBeep (0x0)
* Add Subcommand SpecialBeep (0x1)
* Add data attribute countOfBeeps
* Add command StatusOutputBrightness (0x68)
* Add Subcommand Out1RampChanging (0x11)
* Add Subcommand Out1RampStoped (0x10)
* Add Subcommand Out2RampChanging (0x21)
* Add Subcommand Out2RampStoped (0x20)
* Add data attribute brightness
* Add CalculatedValue BrightnessInPercent
* Add command UnprogrammedKey (0x69)
* Add command _Unknown3 (0x2a)
* Add command QueryModuleProgramming (0x7a)
* Add Subcommand BitMaskOutputProgrammedTarget1 (0x0)
* Add Subcommand BitMaskOutputProgrammedTarget2 (0x1)
* Add Subcommand RetrieveBitMaskOutputProgrammed (0xd3)
* Add data attribute programmedBitmaskTableA
* Add CalculatedValue programmedTableASwitch1
* Add CalculatedValue programmedTableASwitch2
* Add CalculatedValue programmedTableASwitch3
* Add CalculatedValue programmedTableASwitch4
* Add CalculatedValue programmedTableASwitch5
* Add CalculatedValue programmedTableASwitch6
* Add CalculatedValue programmedTableASwitch7
* Add CalculatedValue programmedTableASwitch8
* Add Subcommand RetrieveOutputProgrammingD (0x7c)
* Add Subcommand RetrieveOutputProgrammingC (0x7d)
* Add Subcommand QueryOutputProgrammingD (0xfc)
* Add Subcommand QueryOutputProgrammingC (0xfd)
* Add command ModuleData (0x7e)
* Add Subcommand DataCommentBlock (0x80)
* Add Subcommand QueryCommentBlock (0xff)
Seg 0 Mod: 1 -> Seg 0 Mod 30: Command <SwitchOutput2.Brightness {u'BrightnessInPercent': 0}> Payload: <ramp>:7 {u'rampInSeconds': 4.0899999999999999}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:45 {u'BrightnessInPercent': 90}
!!PURGED!!: ['0x78', '0x0', '0xa1', '0x0', '0x1', '0x0']
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:28 {u'BrightnessInPercent': 56}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:26 {u'BrightnessInPercent': 52}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:20 {u'BrightnessInPercent': 40}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:18 {u'BrightnessInPercent': 36}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampChanging {}> Payload: <brightness>:16 {u'BrightnessInPercent': 32}
Seg 0 Mod: 30 -> Seg 0 Mod 4: Command <StatusOutputBrightness.Out2RampStoped {}> Payload: <brightness>:0 {u'BrightnessInPercent': 0}
Seg 0 Mod: 10 -> Seg 0 Mod 22: Command <SwitchRelais.BitmaskButtonToSet {}> Payload: <BitmaskSetAction>:2 {u'switchRelais': '10------'}
Seg 0 Mod: 10 -> Seg 0 Mod 22: Command <SwitchRelais.BitmaskButtonToSet {}> Payload: <BitmaskSetAction>:3 {u'switchRelais': '00------'}
!!PURGED!!: ['0x68', '0x6', '0xba', '0x0', '0x4', '0x68', '0x30', '0x51']