<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Am 19.01.2018 um 01:55 schrieb Mark
Webb-Johnson:<br>
</div>
<blockquote type="cite"
cite="mid:60FA5D4E-3BAC-4334-A293-34AEF1794169@webb-johnson.net">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Looks good to me. I can at least get traces logged.
<div class=""><br class="">
</div>
<div class="">Not sure about this, though:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding:
0px;" class="">
<div class="">Note: info logging is done at log level debug,
frame logging at verbose</div>
</blockquote>
<div class="">
<div><br class="">
</div>
<div>Is that the right way around? I haven’t got a can bus
connected at the moment, so all I get is the errors shown
(even on rx after a failed tx).</div>
</div>
</blockquote>
<br>
"info logging" here is packet statistics and other bus events /
comments sent to the log. My standard log level is "info", so I can
see the basic system & component events. If I want to see the
log events, I switch to "debug", if I want to see frame dumps as
well, it's "verbose". That works well for me.<br>
<br>
Bus errors are normal on all transceivers if not connected. can1
looks more noisy there just because it's much faster to process --
you can actually watch the rx error counter rising.<br>
<br>
Regards,<br>
Michael<br>
<br>
<br>
<blockquote type="cite"
cite="mid:60FA5D4E-3BAC-4334-A293-34AEF1794169@webb-johnson.net">
<div class="">
<div>I’ll try it on a real bus, to see what it looks like there.
Maybe if there are less errors, it would make more sense.</div>
<div><br class="">
</div>
<div>Regards, Mark.</div>
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 19 Jan 2018, at 7:17 AM, Michael Balzer
<<a href="mailto:dexter@expeedo.de" class=""
moz-do-not-send="true">dexter@expeedo.de</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""> OK, first
implementation is done & pushed. Documentation is
missing, I'll add that ASAP.<br class="">
<br class="">
Basic usage:<br class="">
<br class="">
<tt class="">OVMS > can ?</tt><tt class=""><br
class="">
</tt><tt class="">can1 CANx framework</tt><tt
class=""><br class="">
</tt><tt class="">can2 CANx framework</tt><tt
class=""><br class="">
</tt><tt class="">can3 CANx framework</tt><tt
class=""><br class="">
</tt><tt class="">log CAN logging
framework</tt><tt class=""><br class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log ?</tt><tt class=""><br
class="">
</tt><tt class="">crtd ...format logging</tt><tt
class=""><br class="">
</tt><tt class="">off Stop logging</tt><tt
class=""><br class="">
</tt><tt class="">status Logging status</tt><tt
class=""><br class="">
</tt><tt class="">trace Logging to syslog</tt><tt
class=""><br class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log status </tt><tt
class=""><br class="">
</tt><tt class="">CAN logging inactive.</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log trace ?</tt><tt
class=""><br class="">
</tt><tt class="">Usage: can log trace [filter1]
[filter2] [filter3]</tt><tt class=""><br class="">
</tt><tt class="">Filter: <bus> /
<id>[-<id>] /
<bus>:<id>[-<id>]</tt><tt class=""><br
class="">
</tt><tt class="">Example: 2:2a0-37f</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log crtd ?</tt><tt
class=""><br class="">
</tt><tt class="">Usage: can log crtd <path>
[filter1] [filter2] [filter3]</tt><tt class=""><br
class="">
</tt><tt class="">Filter: <bus> /
<id>[-<id>] /
<bus>:<id>[-<id>]</tt><tt class=""><br
class="">
</tt><tt class="">Example: 2:2a0-37f</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log trace </tt><tt
class=""><br class="">
</tt><tt class="">CAN logging active: Type:trace;
Path:''; Filter:off; Vehicle:;</tt><tt class=""><br
class="">
</tt><tt class="">Note: info logging is done at log
level debug, frame logging at verbose</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can2 tx standard 201 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">E (358776) canlog: Error can2 rxpkt=0
txpkt=1 errflags=0x8000 rxerr=63 txerr=0 rxovr=0
txovr=0 txdelay=0</tt><tt class=""><br class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log off </tt><tt
class=""><br class="">
</tt><tt class="">Closing log: Type:trace; Path:'';
Filter:off; Vehicle:;</tt><tt class=""><br class="">
</tt><tt class="">CAN logging stopped.</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log crtd /sd/test.crtd 1
2:780-7ff</tt><tt class=""><br class="">
</tt><tt class="">CAN logging active: Type:crtd;
Path:'/sd/test.crtd'; Filter:1:0-ffffffff,2:780-7ff;
Vehicle:;</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can1 rx standard 100 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can1 tx standard 101 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can2 rx standard 200 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can2 tx standard 201 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can2 rx standard 7d2 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can can2 tx standard 7d3 12
34 56 11 22 33 44 55</tt><tt class=""><br class="">
</tt><tt class="">OVMS > can log off </tt><tt
class=""><br class="">
</tt><tt class="">Closing log: Type:crtd;
Path:'/sd/test.crtd'; Filter:1:0-ffffffff,2:780-7ff;
Vehicle:;</tt><tt class=""><br class="">
</tt><tt class="">CAN logging stopped.</tt><tt class=""><br
class="">
</tt><tt class=""><br class="">
OVMS > vfs cat /sd/test.crtd</tt><tt class=""><br
class="">
</tt><tt class="">459.576 CXX Info Type:crtd;
Path:'/sd/test.crtd'; Filter:1:0-ffffffff,2:780-7ff;
Vehicle:;</tt><tt class=""><br class="">
</tt><tt class="">476.706 1R11 100 12 34 56 11 22 33 44
55</tt><tt class=""><br class="">
</tt><tt class="">480.366 1T11 101 12 34 56 11 22 33 44
55</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=28 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=28 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=37 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=46 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=55 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=64 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=73 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8000a6 rxerr=82 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x44000 rxerr=99 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x44000 rxerr=99 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8040a6 rxerr=100 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8040a6 rxerr=109 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8040a6 rxerr=118 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8040a6 rxerr=127 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x204000 rxerr=135 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">480.366 1CEV Error rxpkt=1 txpkt=1
errflags=0x8040a6 rxerr=135 txerr=0 rxovr=0 txovr=0
txdelay=0</tt><tt class=""><br class="">
</tt><tt class="">522.616 2R11 7D2 12 34 56 11 22 33 44
55</tt><tt class=""><br class="">
</tt><tt class="">522.616 2CEV TX_Queue T11 7D3 12 34 56
11 22 33 44 55</tt><br class="">
<br class="">
<br class="">
Vehicle events are also logged, and if you issue "can
<bus> status", the packet statistics will be
logged.<br class="">
<br class="">
The crtd logger is fast enough for the (single bus)
Twizy at 500 kbit without filters. I still have no means
to test multiple buses.<br class="">
<br class="">
The current implementation limits the user to one active
can logger, but that's just for ease of use and not
fixed. We can add support for multiple parallel loggers,
but I doubt there's an actual use case for this.<br
class="">
<br class="">
Btw, as a next logger, we could implement the pcapng
format: <a class="moz-txt-link-freetext"
href="https://wiki.wireshark.org/Development/PcapNg"
moz-do-not-send="true">https://wiki.wireshark.org/Development/PcapNg</a><br
class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 14.01.2018 um 18:13
schrieb Michael Balzer:<br class="">
</div>
<blockquote type="cite"
cite="mid:fde432cc-6489-1d73-44e3-5a3b840c332c@expeedo.de"
class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
Mark,<br class="">
<br class="">
thanks for the info, I'll add a documentation file on
this.<br class="">
<br class="">
It just turned out writing into a file is far too slow
to be done inline with the frame processing… and yes,
I _could_ have anticipated that ;)<br class="">
<br class="">
Maybe idf 3.x will perform better on file I/O, but a
separate logging task is better anyway.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 12.01.2018 um 01:44
schrieb Mark Webb-Johnson:<br class="">
</div>
<blockquote type="cite"
cite="mid:04E65A88-EB04-4159-A302-F39EB4DF7DE9@webb-johnson.net"
class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
Thanks.
<div class=""><br class="">
</div>
<div class="">I really should formally document the
CRTD format properly somewhere. Anyway, here are
my old notes on it, and an example:
<div class=""><br class="">
</div>
<div class="">+++++</div>
<div class=""><br class="">
</div>
<div class="">CRTD Example:</div>
<div class=""><br class="">
</div>
<blockquote style="margin: 0 0 0 40px; border:
none; padding: 0px;" class="">
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 14px;" class="">1320724293.000
CXX OVMS Tesla Roadster cando2crtd
converted log</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 14px;" class="">1320724293.000
CXX OVMS Tesla roadster log:
trip.20111108.csv</span></font></div>
<div class=""><font class="" face="Andale Mono"><span
style="font-size: 14px;" class="">1320724294.072
R11 420 00 96 96<br class="">
1320724294.073 R11 588 00 00 86<br
class="">
1320724294.073 R11 280 00 00 03 00 00 00
00 00<br class="">
1320724294.073 R11 001 00 00 00 00<br
class="">
1320724294.073 R11 590 01 00 00 00 00 00
00 00<br class="">
1320724294.113 R11 400 01 01 00 00 00 00
4C 1D</span></font></div>
</blockquote>
<div class="">
<div class=""><br class="">
</div>
<div class="">Generators should use whatever
line termination the host system uses. For
Unix and embedded systems that is LF. Parsers
should support all CR, LF, and CRLF variants.</div>
<div class=""><br class="">
</div>
<div class="">Generators should output hex
fields in upper-case and front zero padded
(for clarity). Parsers should support both
upper and lower case, as well as variable
length.</div>
<div class=""><br class="">
</div>
<div class="">By convention, the .crtd extension
is used for these files. It is suggested that
generators prefix all crtd files with CXX
lines documenting the generator, comment and
source of log file.</div>
<div class=""><br class="">
</div>
<div class="">Space-separated fields are:</div>
<div class="">
<ul class="MailOutline">
<li class="">Timestamp (can be seconds,
milliseconds, or microseconds - zero
prefixed and full length padded for ms and
us).</li>
<li class="">Type:</li>
<ul class="">
<li class="">C*: comment</li>
<ul class="">
<li class="">CXX: general comment (rest
of line is a comment)</li>
<li class="">CEV: user-generated event
(rest of line is event description)</li>
</ul>
<li class="">R11: rx standard frame</li>
<li class="">R29: rx extended frame</li>
<li class="">T11: tx standard frame</li>
<li class="">T29: tx extended frame</li>
</ul>
</ul>
<div class=""><br class="">
</div>
<div class="">Other field notes:</div>
<ul class="MailOutline">
<li class="">For the R?? and T?? types, the
rest of the line is hex ID followed by hex
data bytes (up to 8).<br class="">
</li>
<li class="">In the case of systems
supporting multiple CAN buses, the type
can be prefixed with the bus number (eg;
1R11, 2T29, etc). Messages from different
CAN bus captures can be written to one
shared crtd file, or individual files for
each bus - entirely up to the generator.</li>
</ul>
</div>
<div class=""><br class="">
</div>
<div class="">+++++</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 11 Jan 2018, at 8:59 PM,
Michael Balzer <<a
href="mailto:dexter@expeedo.de" class=""
moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"
class="">
<div text="#000000" bgcolor="#FFFFFF"
class="">
<div class="moz-cite-prefix">Mark,<br
class="">
<br class="">
I'll add the logging support along
with the TX queue.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
Am 10.01.2018 um 01:27 schrieb Mark
Webb-Johnson:<br class="">
</div>
<blockquote type="cite"
cite="mid:D4A07E68-FD57-4A6E-AEDC-FD4FBE97E547@webb-johnson.net"
class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"
class="">
Probably best to split this off as a
separate eMail thread.
<div class=""><br class="">
</div>
<div class="">I think the
implementation would be relatively
simple.</div>
<div class=""><br class="">
</div>
<div class="">
<ul class="MailOutline">
<li class="">Create a canlog class
with a FILE* m_log member
variable, and a virtual function
Log() that is called with a
direction (tx/rx) and frame to
log.</li>
<ul class="">
<li class="">The constructor
should be passed the vfs file
path to log to. It should
fopen the m_log file to that.</li>
<li class="">The destructor
should fclose the m_log file.</li>
</ul>
<li class="">Create a canlog_crtd
class, derived from canlog, that
supports Log() to log to m_log
in CRTD format.</li>
<li class="">Optionally create
other canlog_* classes, for
other logging formats that we
want to support.</li>
<li class="">Add a canlog* m_log
member variable in canbus.</li>
<ul class="">
<li class="">Initialise m_log to
NULL in the constructor.</li>
<li class="">In the destructor,
if m_log is not null, delete
it’s object and set it to
NULL.</li>
<li class="">Have a command ‘can
log’ like ‘can trace’ that
specifies a vfs file path
(remember to check it with
OvmsConfig ProtectedPath) and
logging format. It will then
’new’ a canlog_* style object
(depending on logging format).</li>
</ul>
<li class="">In can::IncomingFrame,
log incoming CAN messages with
m_log->Log(), in the same way
as m_trace is handled.</li>
<li class="">In canbus::Write, log
outgoing CAN messages with
m_log->Log(), in the same way
as m_trace is handled.</li>
</ul>
<div class=""><br class="">
</div>
<div class="">Volunteer?</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 10 Jan 2018, at
8:07 AM, Mark Webb-Johnson
<<a
href="mailto:mark@webb-johnson.net"
class=""
moz-do-not-send="true">mark@webb-johnson.net</a>>
wrote:</div>
<br
class="Apple-interchange-newline">
<div class=""><span
style="font-family:
Helvetica; font-size: 24px;
font-style: normal;
font-variant-caps: normal;
font-weight: normal;
letter-spacing: normal;
text-align: start;
text-indent: 0px;
text-transform: none;
white-space: normal;
word-spacing: 0px;
-webkit-text-stroke-width:
0px; float: none; display:
inline !important;" class="">Now
SD CARD support is coming,
anybody want to step forward
and extend components/can to
support CAN bus logging to a
file (in crtd format, or
perhaps support one or two
popular formats)?
Implementation would be in
class canbus, very similar
to m_trace; just need to
have a FILE* m_log and
appropriate commands /
logging of packet write/read
in the same place that trace
does it.</span></div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre class="" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<br class="">
<pre class="moz-signature" cols="144">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a
href="mailto:OvmsDev@lists.teslaclub.hk"
class="" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a><br
class="">
<a class="moz-txt-link-freetext"
href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev"
moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre class="" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre class="" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br
class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.teslaclub.hk" class=""
moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a><br
class="">
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="144">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</body>
</html>