<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://can4eve.bitplan.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wf</id>
	<title>BITPlan can4eve Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://can4eve.bitplan.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wf"/>
	<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php/Special:Contributions/Wf"/>
	<updated>2026-05-16T10:58:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1106</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1106"/>
		<updated>2019-10-25T11:53:51Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Changing the baud rate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
ATD&lt;br /&gt;
ATZ&lt;br /&gt;
ATE0&lt;br /&gt;
ATL1&lt;br /&gt;
ATI&lt;br /&gt;
STI&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The result should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
STN1130 v4.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
=== Changing the baud rate ===&lt;br /&gt;
see https://www.scantool.net/blog/switching-communication-baud-rate/&lt;br /&gt;
after sending the STSBR code you might want to change the communication baud rate of minicom and check that the STI or any other command works&lt;br /&gt;
before saving the new baud rate with STWBR&lt;br /&gt;
&amp;lt;source lang='bash' highlight='2-3'&amp;gt;&lt;br /&gt;
STSBR 115200&lt;br /&gt;
STI&lt;br /&gt;
STN1130 v4.0.1&lt;br /&gt;
STWBR&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1105</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1105"/>
		<updated>2019-10-25T11:51:31Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Testing with Python script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
ATD&lt;br /&gt;
ATZ&lt;br /&gt;
ATE0&lt;br /&gt;
ATL1&lt;br /&gt;
ATI&lt;br /&gt;
STI&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The result should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
STN1130 v4.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
=== Changing the baud rate ===&lt;br /&gt;
see https://www.scantool.net/blog/switching-communication-baud-rate/&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
STSBR 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1104</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1104"/>
		<updated>2019-10-25T11:50:18Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
ATD&lt;br /&gt;
ATZ&lt;br /&gt;
ATE0&lt;br /&gt;
ATL1&lt;br /&gt;
ATI&lt;br /&gt;
STI&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The result should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
STN1130 v4.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1103</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1103"/>
		<updated>2019-09-06T06:16:42Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
ATD&lt;br /&gt;
ATZ&lt;br /&gt;
ATE0&lt;br /&gt;
ATL1&lt;br /&gt;
ATI&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The result should be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1102</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1102"/>
		<updated>2019-09-06T06:16:07Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
ATD&lt;br /&gt;
ATZ&lt;br /&gt;
ATE0&lt;br /&gt;
ATL1&lt;br /&gt;
ATI&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1101</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1101"/>
		<updated>2019-09-06T05:56:46Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
=== Testing with Python script ===&lt;br /&gt;
see {{Link|target=OBDLink_LX#Testing}} - you might want to change the script and use /dev/ttyUSB0 instead of /dev/rfcomm and optionally change the baud rate&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1100</id>
		<title>OBDLink LX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1100"/>
		<updated>2019-09-06T05:49:39Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:OBDLinkLX .jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Connection: Bluetooth /WireLess&lt;br /&gt;
&lt;br /&gt;
This device is in principle fast and supports AT STM commands. Due to the bluetooth connection the handling may get somewhat unreliable in comparison to the {{Link|target=OBDLink SX}} USB cable variant&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::indirectly supported e.g. via rfcomm or ip forwarding on linux]]&lt;br /&gt;
= Identification =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
&amp;gt;AT I&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;AT @1&lt;br /&gt;
SCANTOOL.NET LLC&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STDI&lt;br /&gt;
OBDLink LX BT r1.2&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STI&lt;br /&gt;
STN1155 v4.0.0&lt;br /&gt;
&amp;gt;AT RV&lt;br /&gt;
13.4V&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-02 the device was available via [https://www.amazon.de/ScanTool-427201-OBDLink-Bluetooth-Professionelle/dp/B00H9S71LW Amazon] for some EUR 60 - as of 2017-08 the price is almost 100 EUR.&lt;br /&gt;
&lt;br /&gt;
As of 2017-06 it is advertised for some US50 at:&lt;br /&gt;
https://www.scantool.net/obdlink-lxbt/&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Connecting to an OBDLink LX from Linux ==&lt;br /&gt;
the following was tested on a {{Link|target=Raspberry PI}}&lt;br /&gt;
&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth pairing with bluetoothctl ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
agent on&lt;br /&gt;
scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
...&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
pair 00:04:3E:9F:A3:C0&lt;br /&gt;
Attempting to pair with 00:04:3E:9F:A3:C0&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Class: 0x020300&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Icon: network-wireless&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Connected: yes&lt;br /&gt;
Request confirmation&lt;br /&gt;
[agent] Confirm passkey 559460 (yes/no): yes&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 UUIDs:&lt;br /&gt;
	00001101-0000-1000-8000-00805f9b34fb&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Trusted: yes&lt;br /&gt;
Changing 00:04:3E:9F:A3:C0 trust succeeded&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting up an rfcomm device ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo rfcomm bind rfcomm0 00:04:3E:9F:A3:C0&lt;br /&gt;
ls -l /dev/rfcomm0&lt;br /&gt;
crw-rw---- 1 root dialout 216, 0 Jun 21 21:41 /dev/rfcomm0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/rfcomm0 -b 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing with a python script ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python3 source/java/can4eve/scripts/obdtest.py &lt;br /&gt;
&amp;gt;K&lt;br /&gt;
&amp;gt;LM327 v1.3a&lt;br /&gt;
&amp;gt;KE0&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ISO 15765-4 (CAN 11/500)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forwarding the OBDII Adapter via TCP/IP ===&lt;br /&gt;
There is a helper script obdii_blue available that you can use to redirect the bluetooth device to tcip/ip. &lt;br /&gt;
=== Example script call ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# WF 2019-01-24&lt;br /&gt;
cd $HOME/source/java/can4eve/scripts&lt;br /&gt;
./obdii_blue 00:04:3E:9F:A3:C0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== redirect script ====&lt;br /&gt;
You can also try out the redirect directly as shown below&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python source/java/can4eve/scripts/tcp_serial_redirect.py --debug -P 7000 /dev/rfcomm0 115200&lt;br /&gt;
--- TCP/IP to Serial redirect on /dev/rfcomm0  115200,8,N,1 ---&lt;br /&gt;
--- type Ctrl-C / BREAK to quit&lt;br /&gt;
Waiting for connection on 7000...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
At this point your OBDLink LX is available via LAN - you can simply do a telnet host 7000 to the server where you ran the commands.&lt;br /&gt;
The can4eve software can now use the bluetooth device as if it was a Wifi/LAN device&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:OBDLinkLX .jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1099</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1099"/>
		<updated>2019-09-06T05:48:17Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
Start minicom with the default baud rate of 115200&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0 -b 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1098</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1098"/>
		<updated>2019-09-06T05:46:21Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* start minicom using the ttyUSBx serial device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hit enter. then cntl-A then q then enter to exit minicom.&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1097</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1097"/>
		<updated>2019-09-06T05:44:50Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
=== Testing ===&lt;br /&gt;
==== If not installed install minicom ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== start minicom using the ttyUSBx serial device ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1096</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1096"/>
		<updated>2019-09-06T05:39:31Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* on Rapsberry PI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
There should also be a ttyUSBx device available&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/ttyUSB0 &lt;br /&gt;
crw-rw---- 1 root dialout 188, 0 Sep  6 07:27 /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This device can be used for testing&lt;br /&gt;
&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1095</id>
		<title>OBDLink SX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_SX&amp;diff=1095"/>
		<updated>2019-09-06T05:37:58Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:obd-usb.jpg|400px|link=OBDLink_SX]]&lt;br /&gt;
&amp;lt;img src='https://www.scantool.net/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/s/x/sx_full_web.png' width='200px'&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connection: USB / Cable &lt;br /&gt;
&lt;br /&gt;
This OBDII Can Bus Adapter connects to your USB port.&lt;br /&gt;
It is a fast and very reliable way to connect to your Car.&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::supported]]&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-08 the device is available via [https://www.amazon.de/OBDLink-425801-ScanTool-USB-Professionelles/dp/B005ZWM0R4 amazon] for some EUR 50&lt;br /&gt;
= How to use it =&lt;br /&gt;
Basically the OBDLink SX uses an USB to serial converter to connect your computer via USB to the ELM327 compatible chip that connects&lt;br /&gt;
to your Car.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== on Rapsberry PI ==&lt;br /&gt;
Plugin the device to the USB socket and check that it is activated&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
One of the lines should show:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
Bus 001 Device 005: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Indicating the use of an FTDI USB to serial converter&lt;br /&gt;
== on Mac OS X ==&lt;br /&gt;
After connecting the USB cable to your MAC you can check whether the device is visible.&lt;br /&gt;
If you have [https://stackoverflow.com/questions/17058134/is-there-an-equivalent-of-lsusb-for-os-x macports/lsusb] installed with the command&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
Bus 004 Device 001: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
otherwise/in any case&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ioreg -p IOUSB -l -w 0&lt;br /&gt;
&lt;br /&gt;
&amp;quot;idProduct&amp;quot; = 24597&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Product Name&amp;quot; = &amp;quot;OBDLink SX&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;USB Vendor Name&amp;quot; = &amp;quot;ScanTool.net LLC&amp;quot;&lt;br /&gt;
&amp;quot;idVendor&amp;quot; = 1027&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the cu.usbserial device is available with&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
ls -l /dev/cu.usb*&lt;br /&gt;
crw-rw-rw-  1 root  wheel   17,   1 10 Jun 14:28 /dev/cu.usbserial-113010822821&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name of the device will depend on your environment.&lt;br /&gt;
&lt;br /&gt;
From there http://pbxbook.com/other/mac-tty.html shows how you can test the connnection via a screen/minicom session.&lt;br /&gt;
If the device at /dev/cu does not show up you might want to fix the situation - it will depend on the version of your Mac OS.&lt;br /&gt;
&lt;br /&gt;
== Working around a bug in Mac OSX El Capitan ==&lt;br /&gt;
There is a built in driver:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/System/Library/Extensions/AppleUSBFTDI.kext&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
which is the original Apple FTDI driver. You might want to reboot to activate it.&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:obd-usb.jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Help&amp;diff=1094</id>
		<title>Help</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Help&amp;diff=1094"/>
		<updated>2019-09-06T05:17:30Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Prerequisites =&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html Oracle Java Runtime 8]&lt;br /&gt;
or if you'd like to build can4eve yourself:&lt;br /&gt;
* [http://www.oracle.com/technetwork/pt/java/javase/downloads/jdk8-downloads-2133151.html Oracle Java Development Kit 8 ]&lt;br /&gt;
* [https://maven.apache.org/install.html Maven 3]&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
# Download the software for your platform from {{Link|target=Downloads}}&lt;br /&gt;
or {{Link|target=Installation|title=build}} the software yourself&lt;br /&gt;
&lt;br /&gt;
= Starting =&lt;br /&gt;
Run the software with &amp;lt;nowiki&amp;gt;java -jar can4eve.jar&amp;lt;/nowiki&amp;gt; or &amp;lt;nowiki&amp;gt;can4eve&amp;lt;/nowiki&amp;gt; (If you built the software yourself: &amp;lt;nowiki&amp;gt;cd can4eve/obdii/release&amp;lt;/nowiki&amp;gt; before this command)&lt;br /&gt;
A {{Link|target=Help/Language|title=Welcome Wizard}} will guide you thru the setup process.&lt;br /&gt;
&lt;br /&gt;
= (Re) Configuring your OBD connection =&lt;br /&gt;
Select the menu Settings/OBDII&lt;br /&gt;
* Network connection: Select the deviceType Network, set the hostname and port&lt;br /&gt;
* USB connection: Select the deviceType USB, select the serialDevice via the &amp;quot;...&amp;quot; button near the serialDevice, set the baudRate (only click direct if you are setting the baudrate via a different means e.g. stty)&lt;br /&gt;
* Bluetooth connection: Not directly supported as of 2017-07 - you might want to e.g. use the {{Link|target=OBDLink_LX#Forwarding the OBDII Adapter via TCP/IP}} or {{Link|target=TCPIP_forwarding|title=forward via can4eve}} options&lt;br /&gt;
* Simulator connection: Select the deviceType simulator&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;testConnection&amp;quot;.&lt;br /&gt;
The result should be e.g.:&lt;br /&gt;
[[File:ConnectionOK2017-07-11.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Now you should be able to use the Menu OBD/Start or OBD/Start withLog.&lt;br /&gt;
&lt;br /&gt;
= Panels =&lt;br /&gt;
[[File:StartScreen2017-07-07.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Clocks ==&lt;br /&gt;
[[File:Clocks.png|800px]]&lt;br /&gt;
== Odometer ==&lt;br /&gt;
[[File:Odometer.png|800px]]&lt;br /&gt;
== SOC ==&lt;br /&gt;
[[File:SOC.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== RPM ==&lt;br /&gt;
[[File:RPM.png|800px]]&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
== Connection refused ==&lt;br /&gt;
If you get the message &amp;quot;Connection failed&amp;quot;, &amp;quot;ConnectException: Connection refused(Connection refused)&amp;quot;. You might want to check&lt;br /&gt;
the hostname and port settings.&lt;br /&gt;
Also you can tryout the connection e.g. on a command line.&lt;br /&gt;
&lt;br /&gt;
See e.g. {{Link|target=VGate_ICar_2#Testing}}&lt;br /&gt;
&lt;br /&gt;
== NoClassDefFoundError: javafx/event/EventHandler ==&lt;br /&gt;
If you get the following error message on OpenJDK:&lt;br /&gt;
&amp;lt;source lang='java'&amp;gt;&lt;br /&gt;
java -jar can4eve.jar&lt;br /&gt;
Exception in thread &amp;quot;main&amp;quot; java.lang.NoClassDefFoundError: javafx/event/EventHandler&lt;br /&gt;
        at java.lang.ClassLoader.defineClass1(Native Method)&lt;br /&gt;
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)&lt;br /&gt;
...&lt;br /&gt;
Caused by: java.lang.ClassNotFoundException: javafx.event.EventHandler&lt;br /&gt;
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)&lt;br /&gt;
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)&lt;br /&gt;
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)&lt;br /&gt;
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You might want to follow the following instructions:&lt;br /&gt;
* https://stackoverflow.com/a/34244308/1497139&lt;br /&gt;
That is&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo apt-get install openjfx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== fix for  Raspberry PI ===&lt;br /&gt;
If on a Raspberry PI you get the message &amp;lt;nowiki&amp;gt;java.lang.NoClassDefFoundError: javafx/application/Application&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get the SDK from:&lt;br /&gt;
http://gluonhq.com/products/mobile/javafxports/get/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cd /usr/local/src&lt;br /&gt;
sudo wget http://download.gluonhq.com/javafxports/embedded/armv6hf-sdk-8.60.9.zip&lt;br /&gt;
sudo unzip armv6hf-sdk-8.60.9.zip&lt;br /&gt;
cd /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/ext&lt;br /&gt;
sudo ln -s /usr/local/src/armv6hf-sdk/rt/lib/arm .&lt;br /&gt;
sudo ln -s /usr/local/src/armv6hf-sdk/rt/lib/ext/jfxrt.jar .&lt;br /&gt;
sudo ln -s /usr/local/src/armv6hf-sdk/lib/javafx-mx.jar .&lt;br /&gt;
sudo ln -s /usr/local/src/armv6hf-sdk/rt/lib/jfxswt.jar .&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== java.net.BindException: Address already in use (Bind failed) ==&lt;br /&gt;
There is probably another instance of can4eve already running. In rare cases another application might use the same port as can4eve.&lt;br /&gt;
== java.net.SocketException: Network is unreachable (connect failed) ==&lt;br /&gt;
At the network address and port you selected there was no connection possible. Please check the settings and the network device you'd like to connect to.&lt;br /&gt;
E.g. you can do a ping to the network address and try a telnet to the given port.&lt;br /&gt;
see {{Link|target=Help/NetworkConnection}}&lt;br /&gt;
&lt;br /&gt;
== com.bitplan.elm327.OBDException ==&lt;br /&gt;
Their has been a problem with the OBD connection. The most common error is a timeout which might e.g. happen if you set the wrong baud rate or the device is not listening e.g. because it went to sleep.&lt;br /&gt;
== java.net.ConnectException: Connection refused (Connection refused) ==&lt;br /&gt;
The network is reachable at the address but not the port you specified.\nYou might want to check the network device and the settings. &lt;br /&gt;
see {{Link|target=Help/NetworkConnection}}&lt;br /&gt;
&lt;br /&gt;
== File descriptor is -1 &amp;lt; 0, ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INFORMATION: purejavacomm.PureJavaIllegalStateException: File descriptor is -1 &amp;lt; 0, maybe closed by previous error condition&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The OBDII-Adapter is not properly connected or there is another issue with the connection.&lt;br /&gt;
&lt;br /&gt;
= Mediawiki Help =&lt;br /&gt;
[https://www.mediawiki.org/wiki/Help:Contents Mediawiki Help]&lt;br /&gt;
&lt;br /&gt;
[[Category:Help]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=JavaFX&amp;diff=1093</id>
		<title>JavaFX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=JavaFX&amp;diff=1093"/>
		<updated>2019-07-17T20:28:48Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* javafx install script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JavaFx on Raspberry PI =&lt;br /&gt;
* https://blog.codecentric.de/2015/09/kaffee-und-kuchen-projekte-mit-java-embedded-8-auf-dem-raspberry-pi/&lt;br /&gt;
* http://gluonhq.com/products/mobile/javafxports/get/&lt;br /&gt;
* https://stackoverflow.com/questions/28284239/javafx-ensemble-on-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
== javafx install script ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# install javafx on raspberry PI&lt;br /&gt;
# WF 2019-01-13&lt;br /&gt;
src=/usr/local/src&lt;br /&gt;
ext=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/ext&lt;br /&gt;
javafx=armv6hf-sdk&lt;br /&gt;
&lt;br /&gt;
#ansi colors&lt;br /&gt;
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html&lt;br /&gt;
blue='\033[0;34m'&lt;br /&gt;
red='\033[0;31m'&lt;br /&gt;
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.&lt;br /&gt;
endColor='\033[0m'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# a colored message &lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_color - the color of the message&lt;br /&gt;
#     2: l_msg - the message to display&lt;br /&gt;
#&lt;br /&gt;
color_msg() {&lt;br /&gt;
  local l_color=&amp;quot;$1&amp;quot;&lt;br /&gt;
  local l_msg=&amp;quot;$2&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${l_color}$l_msg${endColor}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# show the given error message on stderr and exit&lt;br /&gt;
#&lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_msg - the error message to display&lt;br /&gt;
#&lt;br /&gt;
error() {&lt;br /&gt;
	  local l_msg=&amp;quot;$1&amp;quot;&lt;br /&gt;
	    # use ansi red for error&lt;br /&gt;
	      color_msg $red &amp;quot;Error:&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
	        color_msg $red &amp;quot;\t$l_msg&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
		  exit 1&lt;br /&gt;
	  }&lt;br /&gt;
#&lt;br /&gt;
# error&lt;br /&gt;
#&lt;br /&gt;
# show the given error message on stderr and exit&lt;br /&gt;
#&lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_msg - the error message to display&lt;br /&gt;
#&lt;br /&gt;
error() {&lt;br /&gt;
  local l_msg=&amp;quot;$1&amp;quot;&lt;br /&gt;
  # use ansi red for error&lt;br /&gt;
  color_msg $red &amp;quot;Error:&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
  color_msg $red &amp;quot;\t$l_msg&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
color_msg $blue &amp;quot;Trying to install javafx&amp;quot;&lt;br /&gt;
if [ ! -d $ext ]&lt;br /&gt;
then&lt;br /&gt;
  error &amp;quot;directory $ext does not exists - was expecting a java installation&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $src ]&lt;br /&gt;
then&lt;br /&gt;
  error &amp;quot;directory $src is missing - was expecting it&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
cd $src &lt;br /&gt;
&lt;br /&gt;
if [ ! -f $javafx.zip ]&lt;br /&gt;
then&lt;br /&gt;
  color_msg $blue &amp;quot;downloading $javafx.zip&amp;quot;&lt;br /&gt;
  sudo curl -L https://gluonhq.com/download/javafx-embedded-sdk/ -o $javafx.zip&lt;br /&gt;
else&lt;br /&gt;
  color_msg $green &amp;quot;$javafx.zip already downloaded&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $javafx ]&lt;br /&gt;
then&lt;br /&gt;
  color_msg $blue &amp;quot;extracting&amp;quot; $javafx.zip&lt;br /&gt;
  sudo unzip $javafx.zip&lt;br /&gt;
else&lt;br /&gt;
  color_msg $green &amp;quot;$javafx already extracted&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd $ext&lt;br /&gt;
color_msg $blue &amp;quot;creating symlinks&amp;quot;&lt;br /&gt;
for path in rt/lib/arm rt/lib/ext/jfxrt.jar lib/javafx-mx.jar lib7JFX rt/lib/jfxswt.jar&lt;br /&gt;
do&lt;br /&gt;
  from=$src/$javafx/$path&lt;br /&gt;
  b=$(basename $from)&lt;br /&gt;
  if [ -L $b ]&lt;br /&gt;
  then&lt;br /&gt;
   color_msg $green &amp;quot;symbolic link $b already exists&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
   sudo ln -s $src/$javafx/$path .&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* http://docs.gluonhq.com/javafxports/&lt;br /&gt;
&lt;br /&gt;
= Medusa Gauge Library =&lt;br /&gt;
https://github.com/HanSolo/Medusa/wiki/Gauge-Skins&lt;br /&gt;
&lt;br /&gt;
= SwingNode not useable on Raspberry PI =&lt;br /&gt;
The following code needs Swing and doesn't run properly on a raspberry PI even if JavaFX support is enabled.&lt;br /&gt;
&amp;lt;source lang='java'&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
   * update the given tab with the given panel&lt;br /&gt;
   * &lt;br /&gt;
   * @param tab&lt;br /&gt;
   * @param panel&lt;br /&gt;
   */&lt;br /&gt;
  public void updateTab(Tab tab, JPanel panel) {&lt;br /&gt;
    if (panel != null) {&lt;br /&gt;
      final SwingNode swingNode = new SwingNode();&lt;br /&gt;
      swingNode.setContent(panel);&lt;br /&gt;
      tab.setContent(swingNode);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Links =&lt;br /&gt;
* https://de.slideshare.net/SimonRitter/the-raspberry-pi-javafx-carputer&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1092</id>
		<title>OBDLink LX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1092"/>
		<updated>2019-01-24T09:30:04Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* redirect script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:OBDLinkLX .jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Connection: Bluetooth /WireLess&lt;br /&gt;
&lt;br /&gt;
This device is in principle fast and supports AT STM commands. Due to the bluetooth connection the handling may get somewhat unreliable in comparison to the {{Link|target=OBDLink SX}} USB cable variant&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::indirectly supported e.g. via rfcomm or ip forwarding on linux]]&lt;br /&gt;
= Identification =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
&amp;gt;AT I&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;AT @1&lt;br /&gt;
SCANTOOL.NET LLC&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STDI&lt;br /&gt;
OBDLink LX BT r1.2&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STI&lt;br /&gt;
STN1155 v4.0.0&lt;br /&gt;
&amp;gt;AT RV&lt;br /&gt;
13.4V&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-02 the device was available via [https://www.amazon.de/ScanTool-427201-OBDLink-Bluetooth-Professionelle/dp/B00H9S71LW Amazon] for some EUR 60 - as of 2017-08 the price is almost 100 EUR.&lt;br /&gt;
&lt;br /&gt;
As of 2017-06 it is advertised for some US50 at:&lt;br /&gt;
https://www.scantool.net/obdlink-lxbt/&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Connecting to an OBDLink LX from Linux ==&lt;br /&gt;
the following was tested on a {{Link|target=Raspberry PI}}&lt;br /&gt;
&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth pairing with bluetoothctl ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
agent on&lt;br /&gt;
scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
...&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
pair 00:04:3E:9F:A3:C0&lt;br /&gt;
Attempting to pair with 00:04:3E:9F:A3:C0&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Class: 0x020300&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Icon: network-wireless&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Connected: yes&lt;br /&gt;
Request confirmation&lt;br /&gt;
[agent] Confirm passkey 559460 (yes/no): yes&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 UUIDs:&lt;br /&gt;
	00001101-0000-1000-8000-00805f9b34fb&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Trusted: yes&lt;br /&gt;
Changing 00:04:3E:9F:A3:C0 trust succeeded&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting up an rfcomm device ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo rfcomm bind rfcomm0 00:04:3E:9F:A3:C0&lt;br /&gt;
ls -l /dev/rfcomm0&lt;br /&gt;
crw-rw---- 1 root dialout 216, 0 Jun 21 21:41 /dev/rfcomm0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/rfcomm0 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing with a python script ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python3 source/java/can4eve/scripts/obdtest.py &lt;br /&gt;
&amp;gt;K&lt;br /&gt;
&amp;gt;LM327 v1.3a&lt;br /&gt;
&amp;gt;KE0&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ISO 15765-4 (CAN 11/500)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forwarding the OBDII Adapter via TCP/IP ===&lt;br /&gt;
There is a helper script obdii_blue available that you can use to redirect the bluetooth device to tcip/ip. &lt;br /&gt;
=== Example script call ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# WF 2019-01-24&lt;br /&gt;
cd $HOME/source/java/can4eve/scripts&lt;br /&gt;
./obdii_blue 00:04:3E:9F:A3:C0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== redirect script ====&lt;br /&gt;
You can also try out the redirect directly as shown below&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python source/java/can4eve/scripts/tcp_serial_redirect.py --debug -P 7000 /dev/rfcomm0 115200&lt;br /&gt;
--- TCP/IP to Serial redirect on /dev/rfcomm0  115200,8,N,1 ---&lt;br /&gt;
--- type Ctrl-C / BREAK to quit&lt;br /&gt;
Waiting for connection on 7000...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
At this point your OBDLink LX is available via LAN - you can simply do a telnet host 7000 to the server where you ran the commands.&lt;br /&gt;
The can4eve software can now use the bluetooth device as if it was a Wifi/LAN device&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:OBDLinkLX .jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1091</id>
		<title>OBDLink LX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1091"/>
		<updated>2019-01-24T09:29:06Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Connecting to an OBDLink LX from Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:OBDLinkLX .jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Connection: Bluetooth /WireLess&lt;br /&gt;
&lt;br /&gt;
This device is in principle fast and supports AT STM commands. Due to the bluetooth connection the handling may get somewhat unreliable in comparison to the {{Link|target=OBDLink SX}} USB cable variant&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::indirectly supported e.g. via rfcomm or ip forwarding on linux]]&lt;br /&gt;
= Identification =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
&amp;gt;AT I&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;AT @1&lt;br /&gt;
SCANTOOL.NET LLC&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STDI&lt;br /&gt;
OBDLink LX BT r1.2&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STI&lt;br /&gt;
STN1155 v4.0.0&lt;br /&gt;
&amp;gt;AT RV&lt;br /&gt;
13.4V&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-02 the device was available via [https://www.amazon.de/ScanTool-427201-OBDLink-Bluetooth-Professionelle/dp/B00H9S71LW Amazon] for some EUR 60 - as of 2017-08 the price is almost 100 EUR.&lt;br /&gt;
&lt;br /&gt;
As of 2017-06 it is advertised for some US50 at:&lt;br /&gt;
https://www.scantool.net/obdlink-lxbt/&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Connecting to an OBDLink LX from Linux ==&lt;br /&gt;
the following was tested on a {{Link|target=Raspberry PI}}&lt;br /&gt;
&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth pairing with bluetoothctl ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
agent on&lt;br /&gt;
scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
...&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
pair 00:04:3E:9F:A3:C0&lt;br /&gt;
Attempting to pair with 00:04:3E:9F:A3:C0&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Class: 0x020300&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Icon: network-wireless&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Connected: yes&lt;br /&gt;
Request confirmation&lt;br /&gt;
[agent] Confirm passkey 559460 (yes/no): yes&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 UUIDs:&lt;br /&gt;
	00001101-0000-1000-8000-00805f9b34fb&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Trusted: yes&lt;br /&gt;
Changing 00:04:3E:9F:A3:C0 trust succeeded&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting up an rfcomm device ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo rfcomm bind rfcomm0 00:04:3E:9F:A3:C0&lt;br /&gt;
ls -l /dev/rfcomm0&lt;br /&gt;
crw-rw---- 1 root dialout 216, 0 Jun 21 21:41 /dev/rfcomm0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/rfcomm0 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing with a python script ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python3 source/java/can4eve/scripts/obdtest.py &lt;br /&gt;
&amp;gt;K&lt;br /&gt;
&amp;gt;LM327 v1.3a&lt;br /&gt;
&amp;gt;KE0&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ISO 15765-4 (CAN 11/500)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forwarding the OBDII Adapter via TCP/IP ===&lt;br /&gt;
There is a helper script obdii_blue available that you can use to redirect the bluetooth device to tcip/ip. &lt;br /&gt;
=== Example script call ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# WF 2019-01-24&lt;br /&gt;
cd $HOME/source/java/can4eve/scripts&lt;br /&gt;
./obdii_blue 00:04:3E:9F:A3:C0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== redirect script ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python source/java/can4eve/scripts/tcp_serial_redirect.py --debug -P 7000 /dev/rfcomm0 115200&lt;br /&gt;
--- TCP/IP to Serial redirect on /dev/rfcomm0  115200,8,N,1 ---&lt;br /&gt;
--- type Ctrl-C / BREAK to quit&lt;br /&gt;
Waiting for connection on 7000...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
At this point your OBDLink LX is available via LAN - you can simply do a telnet host 7000 to the server where you ran the commands.&lt;br /&gt;
The can4eve software can now use the bluetooth device as if it was a Wifi/LAN device&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:OBDLinkLX .jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1090</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1090"/>
		<updated>2019-01-24T09:27:41Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Bluetooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can make the desktop shortcut available on your desktop by creating a symbolic link from your Desktop&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cd $HOME/Desktop&lt;br /&gt;
ln -s /home/wf/.config/autostart/Can4Eve.desktop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
See description of the Bluetooth dongle {{Link|target=OBDLink_LX}}&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1089</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1089"/>
		<updated>2019-01-24T09:21:00Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Bluetooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can make the desktop shortcut available on your desktop by creating a symbolic link from your Desktop&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cd $HOME/Desktop&lt;br /&gt;
ln -s /home/wf/.config/autostart/Can4Eve.desktop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
To use a Bluetooth dongle like {{Link|target=OBDLink_LX}} you need to first pair the device:&lt;br /&gt;
&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Redirecting bluetooth to TCP/IP ==&lt;br /&gt;
There is a helper script obdii_blue available that you can use to redirect the bluetooth device to tcip/ip. &lt;br /&gt;
=== Example script call ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# WF 2019-01-24&lt;br /&gt;
cd $HOME/source/java/can4eve/can4eve_bluetooth&lt;br /&gt;
./obdii_blue 00:04:3E:9F:A3:C0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1088</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1088"/>
		<updated>2019-01-24T09:18:22Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Python Helper Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can make the desktop shortcut available on your desktop by creating a symbolic link from your Desktop&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cd $HOME/Desktop&lt;br /&gt;
ln -s /home/wf/.config/autostart/Can4Eve.desktop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Example script ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# WF 2019-01-24&lt;br /&gt;
cd $HOME/source/java/can4eve/can4eve_bluetooth&lt;br /&gt;
./obdii_blue 00:04:3E:9F:A3:C0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1087</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1087"/>
		<updated>2019-01-24T08:56:31Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Autostart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can make the desktop shortcut available on your desktop by creating a symbolic link from your Desktop&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cd $HOME/Desktop&lt;br /&gt;
ln -s /home/wf/.config/autostart/Can4Eve.desktop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Python Helper Scripts ===&lt;br /&gt;
==== obdii_read.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
# WF 2017-02-10&lt;br /&gt;
# Python access to OBD trial&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import logging&lt;br /&gt;
import string&lt;br /&gt;
import io&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# &lt;br /&gt;
# Elm327 helper class&lt;br /&gt;
#&lt;br /&gt;
class Elm327:&lt;br /&gt;
  # initialize the serial communication&lt;br /&gt;
  def __init__(self,port=&amp;quot;/dev/rfcomm0&amp;quot;,baud=115200,timeout=1):&lt;br /&gt;
    self.log = logging.getLogger(__name__)&lt;br /&gt;
    self.port=port&lt;br /&gt;
    self.baud=baud&lt;br /&gt;
    self.timeout=timeout&lt;br /&gt;
    self.ser = serial.Serial(port,baud)&lt;br /&gt;
    self.ser.timeout=timeout&lt;br /&gt;
&lt;br /&gt;
  # send the given string &lt;br /&gt;
  def send(self,s):&lt;br /&gt;
    if (self.ser):&lt;br /&gt;
      self.ser.flushInput()&lt;br /&gt;
      self.ser.write(bytes(s + '\r\n', encoding = 'utf-8'))&lt;br /&gt;
      self.ser.flush()&lt;br /&gt;
      return self.read()&lt;br /&gt;
    else:&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
&lt;br /&gt;
  # read data from the serial device&lt;br /&gt;
  # http://stackoverflow.com/a/13018267/1497139&lt;br /&gt;
  def read(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    buffer=bytearray()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    # get all available data&lt;br /&gt;
    waiting=self.ser.inWaiting()&lt;br /&gt;
    if (waiting&amp;gt;0):&lt;br /&gt;
      readbytes= self.ser.read(self.ser.inWaiting())&lt;br /&gt;
    else:&lt;br /&gt;
      readbytes=[]&lt;br /&gt;
    # check &lt;br /&gt;
    if not readbytes:&lt;br /&gt;
      self.log.warning(&amp;quot;read from &amp;quot;+self.port+&amp;quot; failed&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    buffer.extend(readbytes)&lt;br /&gt;
&lt;br /&gt;
    return buffer.decode()&lt;br /&gt;
&lt;br /&gt;
  def close(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    self.ser.close()&lt;br /&gt;
&lt;br /&gt;
  def dcmd(self,cmd):&lt;br /&gt;
    response=self.send(cmd)&lt;br /&gt;
    print(response)&lt;br /&gt;
&lt;br /&gt;
#elm=Elm327(&amp;quot;/dev/rfcomm0&amp;quot;,115200)&lt;br /&gt;
elm=Elm327()&lt;br /&gt;
elm.dcmd(&amp;quot;ATD&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATZ&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATE0&amp;quot;) # switch off echo&lt;br /&gt;
elm.dcmd(&amp;quot;ATL1&amp;quot;) # switch on newlines&lt;br /&gt;
elm.dcmd(&amp;quot;ATI&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATSP6&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATDP&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATH1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATD1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATCAF0&amp;quot;)&lt;br /&gt;
if (len(sys.argv) &amp;gt;1):&lt;br /&gt;
  pid=sys.argv[1]&lt;br /&gt;
  elm.dcmd(&amp;quot;ATCRA &amp;quot;+pid)&lt;br /&gt;
  elm.dcmd(&amp;quot;AT MA&amp;quot;)&lt;br /&gt;
  while True:&lt;br /&gt;
    response=elm.read()&lt;br /&gt;
    print(response)&lt;br /&gt;
elm.close()&lt;br /&gt;
&lt;br /&gt;
#s = input('Enter AT command --&amp;gt; ')&lt;br /&gt;
#print ('AT command = ' + s)&lt;br /&gt;
#ser.timeout = 1&lt;br /&gt;
#response = ser.read(999).decode('utf-8')&lt;br /&gt;
#print(response)&lt;br /&gt;
#ser.close()  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tcp_serial_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# Redirect data from a TCP/IP connection to a serial port and vice versa.&lt;br /&gt;
#&lt;br /&gt;
# (C) 2002-2016 Chris Liechti &amp;lt;cliechti@gmx.net&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# SPDX-License-Identifier:    BSD-3-Clause&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import serial&lt;br /&gt;
import serial.threaded&lt;br /&gt;
import time&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class SerialToNet(serial.threaded.Protocol):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;serial-&amp;gt;socket&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.socket = None&lt;br /&gt;
&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
    # callback function&lt;br /&gt;
    # this is called by the ReaderThread on receiving data from&lt;br /&gt;
    # the serial device&lt;br /&gt;
    def data_received(self, data):&lt;br /&gt;
        if self.socket is not None:&lt;br /&gt;
            # first send data over network&lt;br /&gt;
            self.socket.sendall(data)&lt;br /&gt;
            # optionally show it for debug&lt;br /&gt;
            if (self.debug):&lt;br /&gt;
               print(&amp;quot;r&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':  # noqa&lt;br /&gt;
    import argparse&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(&lt;br /&gt;
        description='Simple Serial to Network (TCP/IP) redirector.',&lt;br /&gt;
        epilog=&amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
NOTE: no security measures are implemented. Anyone can remotely connect&lt;br /&gt;
to this service over the network.&lt;br /&gt;
&lt;br /&gt;
Only one connection at once is supported. When the connection is terminated&lt;br /&gt;
it waits for the next connect.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'SERIALPORT',&lt;br /&gt;
        help=&amp;quot;serial port name&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'BAUDRATE',&lt;br /&gt;
        type=int,&lt;br /&gt;
        nargs='?',&lt;br /&gt;
        help='set baud rate, default: %(default)s',&lt;br /&gt;
        default=9600)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-d', '--debug',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='debug',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-q', '--quiet',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='suppress non error messages',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '--develop',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='Development mode, prints Python internals on errors',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('serial port')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        &amp;quot;--parity&amp;quot;,&lt;br /&gt;
        choices=['N', 'E', 'O', 'S', 'M'],&lt;br /&gt;
        type=lambda c: c.upper(),&lt;br /&gt;
        help=&amp;quot;set parity, one of {N E O S M}, default: N&amp;quot;,&lt;br /&gt;
        default='N')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rtscts',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable RTS/CTS flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--xonxoff',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable software flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rts',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial RTS line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--dtr',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial DTR line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('network settings')&lt;br /&gt;
&lt;br /&gt;
    exclusive_group = group.add_mutually_exclusive_group()&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-P', '--localport',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='local TCP port',&lt;br /&gt;
        default=7777)&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-c', '--client',&lt;br /&gt;
        metavar='HOST:PORT',&lt;br /&gt;
        help='make the connection as a client, instead of running a server',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # connect to serial port&lt;br /&gt;
    ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)&lt;br /&gt;
    ser.baudrate = args.BAUDRATE&lt;br /&gt;
    ser.parity = args.parity&lt;br /&gt;
    ser.rtscts = args.rtscts&lt;br /&gt;
    ser.xonxoff = args.xonxoff&lt;br /&gt;
&lt;br /&gt;
    if args.rts is not None:&lt;br /&gt;
        ser.rts = args.rts&lt;br /&gt;
&lt;br /&gt;
    if args.dtr is not None:&lt;br /&gt;
        ser.dtr = args.dtr&lt;br /&gt;
&lt;br /&gt;
    if not args.quiet:&lt;br /&gt;
        sys.stderr.write(&lt;br /&gt;
            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'&lt;br /&gt;
            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        ser.open()&lt;br /&gt;
    except serial.SerialException as e:&lt;br /&gt;
        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    ser_to_net = SerialToNet()&lt;br /&gt;
    ser_to_net.debug=args.debug &lt;br /&gt;
    serial_worker = serial.threaded.ReaderThread(ser, ser_to_net)&lt;br /&gt;
    serial_worker.start()&lt;br /&gt;
&lt;br /&gt;
    if not args.client:&lt;br /&gt;
        # open the socket as a streaming socket&lt;br /&gt;
        srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)&lt;br /&gt;
        srv.bind(('', args.localport))&lt;br /&gt;
        srv.listen(1)&lt;br /&gt;
    try:&lt;br /&gt;
        intentional_exit = False&lt;br /&gt;
        while True:&lt;br /&gt;
            if args.client:&lt;br /&gt;
                host, port = args.client.split(':')&lt;br /&gt;
                sys.stderr.write(&amp;quot;Opening connection to {}:{}...\n&amp;quot;.format(host, port))&lt;br /&gt;
                client_socket = socket.socket()&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.connect((host, int(port)))&lt;br /&gt;
                except socket.error as msg:&lt;br /&gt;
                    sys.stderr.write('WARNING: {}\n'.format(msg))&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
                    continue&lt;br /&gt;
                sys.stderr.write('Connected\n')&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
                #~ client_socket.settimeout(5)&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))&lt;br /&gt;
                client_socket, addr = srv.accept()&lt;br /&gt;
                sys.stderr.write('Connected by {}\n'.format(addr))&lt;br /&gt;
                # More quickly detect bad clients who quit without closing the&lt;br /&gt;
                # connection: After 1 second of idle, start sending TCP keep-alive&lt;br /&gt;
                # packets every 1 second. If 3 consecutive keep-alive packets&lt;br /&gt;
                # fail, assume the client is gone and close the connection.&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)&lt;br /&gt;
                    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)&lt;br /&gt;
                except AttributeError:&lt;br /&gt;
                    pass # XXX not available on windows&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
            try:&lt;br /&gt;
                ser_to_net.socket = client_socket&lt;br /&gt;
                # enter network &amp;lt;-&amp;gt; serial loop&lt;br /&gt;
                while True:&lt;br /&gt;
                    try:&lt;br /&gt;
                        # read data from serial                    &lt;br /&gt;
                        data = client_socket.recv(2048)&lt;br /&gt;
                        if not data:&lt;br /&gt;
                            break&lt;br /&gt;
                        ser.write(data)                 # get a bunch of bytes and send them&lt;br /&gt;
                        if (args.debug):&lt;br /&gt;
                           print(&amp;quot;s&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
                    except socket.error as msg:&lt;br /&gt;
                        if args.develop:&lt;br /&gt;
                            raise&lt;br /&gt;
                        sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
                        # probably got disconnected&lt;br /&gt;
                        break&lt;br /&gt;
            except KeyboardInterrupt:&lt;br /&gt;
                intentional_exit = True&lt;br /&gt;
                raise&lt;br /&gt;
            except socket.error as msg:&lt;br /&gt;
                if args.develop:&lt;br /&gt;
                    raise&lt;br /&gt;
                sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
            finally:&lt;br /&gt;
                ser_to_net.socket = None&lt;br /&gt;
                sys.stderr.write('Disconnected\n')&lt;br /&gt;
                client_socket.close()&lt;br /&gt;
                if args.client and not intentional_exit:&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    sys.stderr.write('\n--- exit ---\n')&lt;br /&gt;
    serial_worker.stop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1086</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1086"/>
		<updated>2019-01-24T08:10:45Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* obdii_redirect.py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Python Helper Scripts ===&lt;br /&gt;
==== obdii_read.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
# WF 2017-02-10&lt;br /&gt;
# Python access to OBD trial&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import logging&lt;br /&gt;
import string&lt;br /&gt;
import io&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# &lt;br /&gt;
# Elm327 helper class&lt;br /&gt;
#&lt;br /&gt;
class Elm327:&lt;br /&gt;
  # initialize the serial communication&lt;br /&gt;
  def __init__(self,port=&amp;quot;/dev/rfcomm0&amp;quot;,baud=115200,timeout=1):&lt;br /&gt;
    self.log = logging.getLogger(__name__)&lt;br /&gt;
    self.port=port&lt;br /&gt;
    self.baud=baud&lt;br /&gt;
    self.timeout=timeout&lt;br /&gt;
    self.ser = serial.Serial(port,baud)&lt;br /&gt;
    self.ser.timeout=timeout&lt;br /&gt;
&lt;br /&gt;
  # send the given string &lt;br /&gt;
  def send(self,s):&lt;br /&gt;
    if (self.ser):&lt;br /&gt;
      self.ser.flushInput()&lt;br /&gt;
      self.ser.write(bytes(s + '\r\n', encoding = 'utf-8'))&lt;br /&gt;
      self.ser.flush()&lt;br /&gt;
      return self.read()&lt;br /&gt;
    else:&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
&lt;br /&gt;
  # read data from the serial device&lt;br /&gt;
  # http://stackoverflow.com/a/13018267/1497139&lt;br /&gt;
  def read(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    buffer=bytearray()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    # get all available data&lt;br /&gt;
    waiting=self.ser.inWaiting()&lt;br /&gt;
    if (waiting&amp;gt;0):&lt;br /&gt;
      readbytes= self.ser.read(self.ser.inWaiting())&lt;br /&gt;
    else:&lt;br /&gt;
      readbytes=[]&lt;br /&gt;
    # check &lt;br /&gt;
    if not readbytes:&lt;br /&gt;
      self.log.warning(&amp;quot;read from &amp;quot;+self.port+&amp;quot; failed&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    buffer.extend(readbytes)&lt;br /&gt;
&lt;br /&gt;
    return buffer.decode()&lt;br /&gt;
&lt;br /&gt;
  def close(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    self.ser.close()&lt;br /&gt;
&lt;br /&gt;
  def dcmd(self,cmd):&lt;br /&gt;
    response=self.send(cmd)&lt;br /&gt;
    print(response)&lt;br /&gt;
&lt;br /&gt;
#elm=Elm327(&amp;quot;/dev/rfcomm0&amp;quot;,115200)&lt;br /&gt;
elm=Elm327()&lt;br /&gt;
elm.dcmd(&amp;quot;ATD&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATZ&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATE0&amp;quot;) # switch off echo&lt;br /&gt;
elm.dcmd(&amp;quot;ATL1&amp;quot;) # switch on newlines&lt;br /&gt;
elm.dcmd(&amp;quot;ATI&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATSP6&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATDP&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATH1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATD1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATCAF0&amp;quot;)&lt;br /&gt;
if (len(sys.argv) &amp;gt;1):&lt;br /&gt;
  pid=sys.argv[1]&lt;br /&gt;
  elm.dcmd(&amp;quot;ATCRA &amp;quot;+pid)&lt;br /&gt;
  elm.dcmd(&amp;quot;AT MA&amp;quot;)&lt;br /&gt;
  while True:&lt;br /&gt;
    response=elm.read()&lt;br /&gt;
    print(response)&lt;br /&gt;
elm.close()&lt;br /&gt;
&lt;br /&gt;
#s = input('Enter AT command --&amp;gt; ')&lt;br /&gt;
#print ('AT command = ' + s)&lt;br /&gt;
#ser.timeout = 1&lt;br /&gt;
#response = ser.read(999).decode('utf-8')&lt;br /&gt;
#print(response)&lt;br /&gt;
#ser.close()  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tcp_serial_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# Redirect data from a TCP/IP connection to a serial port and vice versa.&lt;br /&gt;
#&lt;br /&gt;
# (C) 2002-2016 Chris Liechti &amp;lt;cliechti@gmx.net&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# SPDX-License-Identifier:    BSD-3-Clause&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import serial&lt;br /&gt;
import serial.threaded&lt;br /&gt;
import time&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class SerialToNet(serial.threaded.Protocol):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;serial-&amp;gt;socket&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.socket = None&lt;br /&gt;
&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
    # callback function&lt;br /&gt;
    # this is called by the ReaderThread on receiving data from&lt;br /&gt;
    # the serial device&lt;br /&gt;
    def data_received(self, data):&lt;br /&gt;
        if self.socket is not None:&lt;br /&gt;
            # first send data over network&lt;br /&gt;
            self.socket.sendall(data)&lt;br /&gt;
            # optionally show it for debug&lt;br /&gt;
            if (self.debug):&lt;br /&gt;
               print(&amp;quot;r&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':  # noqa&lt;br /&gt;
    import argparse&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(&lt;br /&gt;
        description='Simple Serial to Network (TCP/IP) redirector.',&lt;br /&gt;
        epilog=&amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
NOTE: no security measures are implemented. Anyone can remotely connect&lt;br /&gt;
to this service over the network.&lt;br /&gt;
&lt;br /&gt;
Only one connection at once is supported. When the connection is terminated&lt;br /&gt;
it waits for the next connect.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'SERIALPORT',&lt;br /&gt;
        help=&amp;quot;serial port name&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'BAUDRATE',&lt;br /&gt;
        type=int,&lt;br /&gt;
        nargs='?',&lt;br /&gt;
        help='set baud rate, default: %(default)s',&lt;br /&gt;
        default=9600)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-d', '--debug',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='debug',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-q', '--quiet',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='suppress non error messages',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '--develop',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='Development mode, prints Python internals on errors',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('serial port')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        &amp;quot;--parity&amp;quot;,&lt;br /&gt;
        choices=['N', 'E', 'O', 'S', 'M'],&lt;br /&gt;
        type=lambda c: c.upper(),&lt;br /&gt;
        help=&amp;quot;set parity, one of {N E O S M}, default: N&amp;quot;,&lt;br /&gt;
        default='N')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rtscts',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable RTS/CTS flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--xonxoff',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable software flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rts',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial RTS line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--dtr',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial DTR line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('network settings')&lt;br /&gt;
&lt;br /&gt;
    exclusive_group = group.add_mutually_exclusive_group()&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-P', '--localport',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='local TCP port',&lt;br /&gt;
        default=7777)&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-c', '--client',&lt;br /&gt;
        metavar='HOST:PORT',&lt;br /&gt;
        help='make the connection as a client, instead of running a server',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # connect to serial port&lt;br /&gt;
    ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)&lt;br /&gt;
    ser.baudrate = args.BAUDRATE&lt;br /&gt;
    ser.parity = args.parity&lt;br /&gt;
    ser.rtscts = args.rtscts&lt;br /&gt;
    ser.xonxoff = args.xonxoff&lt;br /&gt;
&lt;br /&gt;
    if args.rts is not None:&lt;br /&gt;
        ser.rts = args.rts&lt;br /&gt;
&lt;br /&gt;
    if args.dtr is not None:&lt;br /&gt;
        ser.dtr = args.dtr&lt;br /&gt;
&lt;br /&gt;
    if not args.quiet:&lt;br /&gt;
        sys.stderr.write(&lt;br /&gt;
            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'&lt;br /&gt;
            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        ser.open()&lt;br /&gt;
    except serial.SerialException as e:&lt;br /&gt;
        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    ser_to_net = SerialToNet()&lt;br /&gt;
    ser_to_net.debug=args.debug &lt;br /&gt;
    serial_worker = serial.threaded.ReaderThread(ser, ser_to_net)&lt;br /&gt;
    serial_worker.start()&lt;br /&gt;
&lt;br /&gt;
    if not args.client:&lt;br /&gt;
        # open the socket as a streaming socket&lt;br /&gt;
        srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)&lt;br /&gt;
        srv.bind(('', args.localport))&lt;br /&gt;
        srv.listen(1)&lt;br /&gt;
    try:&lt;br /&gt;
        intentional_exit = False&lt;br /&gt;
        while True:&lt;br /&gt;
            if args.client:&lt;br /&gt;
                host, port = args.client.split(':')&lt;br /&gt;
                sys.stderr.write(&amp;quot;Opening connection to {}:{}...\n&amp;quot;.format(host, port))&lt;br /&gt;
                client_socket = socket.socket()&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.connect((host, int(port)))&lt;br /&gt;
                except socket.error as msg:&lt;br /&gt;
                    sys.stderr.write('WARNING: {}\n'.format(msg))&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
                    continue&lt;br /&gt;
                sys.stderr.write('Connected\n')&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
                #~ client_socket.settimeout(5)&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))&lt;br /&gt;
                client_socket, addr = srv.accept()&lt;br /&gt;
                sys.stderr.write('Connected by {}\n'.format(addr))&lt;br /&gt;
                # More quickly detect bad clients who quit without closing the&lt;br /&gt;
                # connection: After 1 second of idle, start sending TCP keep-alive&lt;br /&gt;
                # packets every 1 second. If 3 consecutive keep-alive packets&lt;br /&gt;
                # fail, assume the client is gone and close the connection.&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)&lt;br /&gt;
                    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)&lt;br /&gt;
                except AttributeError:&lt;br /&gt;
                    pass # XXX not available on windows&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
            try:&lt;br /&gt;
                ser_to_net.socket = client_socket&lt;br /&gt;
                # enter network &amp;lt;-&amp;gt; serial loop&lt;br /&gt;
                while True:&lt;br /&gt;
                    try:&lt;br /&gt;
                        # read data from serial                    &lt;br /&gt;
                        data = client_socket.recv(2048)&lt;br /&gt;
                        if not data:&lt;br /&gt;
                            break&lt;br /&gt;
                        ser.write(data)                 # get a bunch of bytes and send them&lt;br /&gt;
                        if (args.debug):&lt;br /&gt;
                           print(&amp;quot;s&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
                    except socket.error as msg:&lt;br /&gt;
                        if args.develop:&lt;br /&gt;
                            raise&lt;br /&gt;
                        sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
                        # probably got disconnected&lt;br /&gt;
                        break&lt;br /&gt;
            except KeyboardInterrupt:&lt;br /&gt;
                intentional_exit = True&lt;br /&gt;
                raise&lt;br /&gt;
            except socket.error as msg:&lt;br /&gt;
                if args.develop:&lt;br /&gt;
                    raise&lt;br /&gt;
                sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
            finally:&lt;br /&gt;
                ser_to_net.socket = None&lt;br /&gt;
                sys.stderr.write('Disconnected\n')&lt;br /&gt;
                client_socket.close()&lt;br /&gt;
                if args.client and not intentional_exit:&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    sys.stderr.write('\n--- exit ---\n')&lt;br /&gt;
    serial_worker.stop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1085</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1085"/>
		<updated>2019-01-24T08:01:56Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* = obdii_redirect.py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Python Helper Scripts ===&lt;br /&gt;
==== obdii_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
# WF 2017-02-10&lt;br /&gt;
# Python access to OBD trial&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import logging&lt;br /&gt;
import string&lt;br /&gt;
import io&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# &lt;br /&gt;
# Elm327 helper class&lt;br /&gt;
#&lt;br /&gt;
class Elm327:&lt;br /&gt;
  # initialize the serial communication&lt;br /&gt;
  def __init__(self,port=&amp;quot;/dev/rfcomm0&amp;quot;,baud=115200,timeout=1):&lt;br /&gt;
    self.log = logging.getLogger(__name__)&lt;br /&gt;
    self.port=port&lt;br /&gt;
    self.baud=baud&lt;br /&gt;
    self.timeout=timeout&lt;br /&gt;
    self.ser = serial.Serial(port,baud)&lt;br /&gt;
    self.ser.timeout=timeout&lt;br /&gt;
&lt;br /&gt;
  # send the given string &lt;br /&gt;
  def send(self,s):&lt;br /&gt;
    if (self.ser):&lt;br /&gt;
      self.ser.flushInput()&lt;br /&gt;
      self.ser.write(bytes(s + '\r\n', encoding = 'utf-8'))&lt;br /&gt;
      self.ser.flush()&lt;br /&gt;
      return self.read()&lt;br /&gt;
    else:&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
&lt;br /&gt;
  # read data from the serial device&lt;br /&gt;
  # http://stackoverflow.com/a/13018267/1497139&lt;br /&gt;
  def read(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    buffer=bytearray()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    # get all available data&lt;br /&gt;
    waiting=self.ser.inWaiting()&lt;br /&gt;
    if (waiting&amp;gt;0):&lt;br /&gt;
      readbytes= self.ser.read(self.ser.inWaiting())&lt;br /&gt;
    else:&lt;br /&gt;
      readbytes=[]&lt;br /&gt;
    # check &lt;br /&gt;
    if not readbytes:&lt;br /&gt;
      self.log.warning(&amp;quot;read from &amp;quot;+self.port+&amp;quot; failed&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    buffer.extend(readbytes)&lt;br /&gt;
&lt;br /&gt;
    return buffer.decode()&lt;br /&gt;
&lt;br /&gt;
  def close(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    self.ser.close()&lt;br /&gt;
&lt;br /&gt;
  def dcmd(self,cmd):&lt;br /&gt;
    response=self.send(cmd)&lt;br /&gt;
    print(response)&lt;br /&gt;
&lt;br /&gt;
#elm=Elm327(&amp;quot;/dev/rfcomm0&amp;quot;,115200)&lt;br /&gt;
elm=Elm327()&lt;br /&gt;
elm.dcmd(&amp;quot;ATD&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATZ&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATE0&amp;quot;) # switch off echo&lt;br /&gt;
elm.dcmd(&amp;quot;ATL1&amp;quot;) # switch on newlines&lt;br /&gt;
elm.dcmd(&amp;quot;ATI&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATSP6&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATDP&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATH1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATD1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATCAF0&amp;quot;)&lt;br /&gt;
if (len(sys.argv) &amp;gt;1):&lt;br /&gt;
  pid=sys.argv[1]&lt;br /&gt;
  elm.dcmd(&amp;quot;ATCRA &amp;quot;+pid)&lt;br /&gt;
  elm.dcmd(&amp;quot;AT MA&amp;quot;)&lt;br /&gt;
  while True:&lt;br /&gt;
    response=elm.read()&lt;br /&gt;
    print(response)&lt;br /&gt;
elm.close()&lt;br /&gt;
&lt;br /&gt;
#s = input('Enter AT command --&amp;gt; ')&lt;br /&gt;
#print ('AT command = ' + s)&lt;br /&gt;
#ser.timeout = 1&lt;br /&gt;
#response = ser.read(999).decode('utf-8')&lt;br /&gt;
#print(response)&lt;br /&gt;
#ser.close()  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== tcp_serial_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# Redirect data from a TCP/IP connection to a serial port and vice versa.&lt;br /&gt;
#&lt;br /&gt;
# (C) 2002-2016 Chris Liechti &amp;lt;cliechti@gmx.net&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# SPDX-License-Identifier:    BSD-3-Clause&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import serial&lt;br /&gt;
import serial.threaded&lt;br /&gt;
import time&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class SerialToNet(serial.threaded.Protocol):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;serial-&amp;gt;socket&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.socket = None&lt;br /&gt;
&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
    # callback function&lt;br /&gt;
    # this is called by the ReaderThread on receiving data from&lt;br /&gt;
    # the serial device&lt;br /&gt;
    def data_received(self, data):&lt;br /&gt;
        if self.socket is not None:&lt;br /&gt;
            # first send data over network&lt;br /&gt;
            self.socket.sendall(data)&lt;br /&gt;
            # optionally show it for debug&lt;br /&gt;
            if (self.debug):&lt;br /&gt;
               print(&amp;quot;r&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':  # noqa&lt;br /&gt;
    import argparse&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(&lt;br /&gt;
        description='Simple Serial to Network (TCP/IP) redirector.',&lt;br /&gt;
        epilog=&amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
NOTE: no security measures are implemented. Anyone can remotely connect&lt;br /&gt;
to this service over the network.&lt;br /&gt;
&lt;br /&gt;
Only one connection at once is supported. When the connection is terminated&lt;br /&gt;
it waits for the next connect.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'SERIALPORT',&lt;br /&gt;
        help=&amp;quot;serial port name&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'BAUDRATE',&lt;br /&gt;
        type=int,&lt;br /&gt;
        nargs='?',&lt;br /&gt;
        help='set baud rate, default: %(default)s',&lt;br /&gt;
        default=9600)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-d', '--debug',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='debug',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-q', '--quiet',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='suppress non error messages',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '--develop',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='Development mode, prints Python internals on errors',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('serial port')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        &amp;quot;--parity&amp;quot;,&lt;br /&gt;
        choices=['N', 'E', 'O', 'S', 'M'],&lt;br /&gt;
        type=lambda c: c.upper(),&lt;br /&gt;
        help=&amp;quot;set parity, one of {N E O S M}, default: N&amp;quot;,&lt;br /&gt;
        default='N')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rtscts',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable RTS/CTS flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--xonxoff',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable software flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rts',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial RTS line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--dtr',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial DTR line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('network settings')&lt;br /&gt;
&lt;br /&gt;
    exclusive_group = group.add_mutually_exclusive_group()&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-P', '--localport',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='local TCP port',&lt;br /&gt;
        default=7777)&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-c', '--client',&lt;br /&gt;
        metavar='HOST:PORT',&lt;br /&gt;
        help='make the connection as a client, instead of running a server',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # connect to serial port&lt;br /&gt;
    ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)&lt;br /&gt;
    ser.baudrate = args.BAUDRATE&lt;br /&gt;
    ser.parity = args.parity&lt;br /&gt;
    ser.rtscts = args.rtscts&lt;br /&gt;
    ser.xonxoff = args.xonxoff&lt;br /&gt;
&lt;br /&gt;
    if args.rts is not None:&lt;br /&gt;
        ser.rts = args.rts&lt;br /&gt;
&lt;br /&gt;
    if args.dtr is not None:&lt;br /&gt;
        ser.dtr = args.dtr&lt;br /&gt;
&lt;br /&gt;
    if not args.quiet:&lt;br /&gt;
        sys.stderr.write(&lt;br /&gt;
            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'&lt;br /&gt;
            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        ser.open()&lt;br /&gt;
    except serial.SerialException as e:&lt;br /&gt;
        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    ser_to_net = SerialToNet()&lt;br /&gt;
    ser_to_net.debug=args.debug &lt;br /&gt;
    serial_worker = serial.threaded.ReaderThread(ser, ser_to_net)&lt;br /&gt;
    serial_worker.start()&lt;br /&gt;
&lt;br /&gt;
    if not args.client:&lt;br /&gt;
        # open the socket as a streaming socket&lt;br /&gt;
        srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)&lt;br /&gt;
        srv.bind(('', args.localport))&lt;br /&gt;
        srv.listen(1)&lt;br /&gt;
    try:&lt;br /&gt;
        intentional_exit = False&lt;br /&gt;
        while True:&lt;br /&gt;
            if args.client:&lt;br /&gt;
                host, port = args.client.split(':')&lt;br /&gt;
                sys.stderr.write(&amp;quot;Opening connection to {}:{}...\n&amp;quot;.format(host, port))&lt;br /&gt;
                client_socket = socket.socket()&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.connect((host, int(port)))&lt;br /&gt;
                except socket.error as msg:&lt;br /&gt;
                    sys.stderr.write('WARNING: {}\n'.format(msg))&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
                    continue&lt;br /&gt;
                sys.stderr.write('Connected\n')&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
                #~ client_socket.settimeout(5)&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))&lt;br /&gt;
                client_socket, addr = srv.accept()&lt;br /&gt;
                sys.stderr.write('Connected by {}\n'.format(addr))&lt;br /&gt;
                # More quickly detect bad clients who quit without closing the&lt;br /&gt;
                # connection: After 1 second of idle, start sending TCP keep-alive&lt;br /&gt;
                # packets every 1 second. If 3 consecutive keep-alive packets&lt;br /&gt;
                # fail, assume the client is gone and close the connection.&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)&lt;br /&gt;
                    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)&lt;br /&gt;
                except AttributeError:&lt;br /&gt;
                    pass # XXX not available on windows&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
            try:&lt;br /&gt;
                ser_to_net.socket = client_socket&lt;br /&gt;
                # enter network &amp;lt;-&amp;gt; serial loop&lt;br /&gt;
                while True:&lt;br /&gt;
                    try:&lt;br /&gt;
                        # read data from serial                    &lt;br /&gt;
                        data = client_socket.recv(2048)&lt;br /&gt;
                        if not data:&lt;br /&gt;
                            break&lt;br /&gt;
                        ser.write(data)                 # get a bunch of bytes and send them&lt;br /&gt;
                        if (args.debug):&lt;br /&gt;
                           print(&amp;quot;s&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
                    except socket.error as msg:&lt;br /&gt;
                        if args.develop:&lt;br /&gt;
                            raise&lt;br /&gt;
                        sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
                        # probably got disconnected&lt;br /&gt;
                        break&lt;br /&gt;
            except KeyboardInterrupt:&lt;br /&gt;
                intentional_exit = True&lt;br /&gt;
                raise&lt;br /&gt;
            except socket.error as msg:&lt;br /&gt;
                if args.develop:&lt;br /&gt;
                    raise&lt;br /&gt;
                sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
            finally:&lt;br /&gt;
                ser_to_net.socket = None&lt;br /&gt;
                sys.stderr.write('Disconnected\n')&lt;br /&gt;
                client_socket.close()&lt;br /&gt;
                if args.client and not intentional_exit:&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    sys.stderr.write('\n--- exit ---\n')&lt;br /&gt;
    serial_worker.stop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1084</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1084"/>
		<updated>2019-01-24T08:01:39Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Python Helper Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Python Helper Scripts ===&lt;br /&gt;
==== obdii_redirect.py ===&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
# WF 2017-02-10&lt;br /&gt;
# Python access to OBD trial&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import logging&lt;br /&gt;
import string&lt;br /&gt;
import io&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# &lt;br /&gt;
# Elm327 helper class&lt;br /&gt;
#&lt;br /&gt;
class Elm327:&lt;br /&gt;
  # initialize the serial communication&lt;br /&gt;
  def __init__(self,port=&amp;quot;/dev/rfcomm0&amp;quot;,baud=115200,timeout=1):&lt;br /&gt;
    self.log = logging.getLogger(__name__)&lt;br /&gt;
    self.port=port&lt;br /&gt;
    self.baud=baud&lt;br /&gt;
    self.timeout=timeout&lt;br /&gt;
    self.ser = serial.Serial(port,baud)&lt;br /&gt;
    self.ser.timeout=timeout&lt;br /&gt;
&lt;br /&gt;
  # send the given string &lt;br /&gt;
  def send(self,s):&lt;br /&gt;
    if (self.ser):&lt;br /&gt;
      self.ser.flushInput()&lt;br /&gt;
      self.ser.write(bytes(s + '\r\n', encoding = 'utf-8'))&lt;br /&gt;
      self.ser.flush()&lt;br /&gt;
      return self.read()&lt;br /&gt;
    else:&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
&lt;br /&gt;
  # read data from the serial device&lt;br /&gt;
  # http://stackoverflow.com/a/13018267/1497139&lt;br /&gt;
  def read(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    buffer=bytearray()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    # get all available data&lt;br /&gt;
    waiting=self.ser.inWaiting()&lt;br /&gt;
    if (waiting&amp;gt;0):&lt;br /&gt;
      readbytes= self.ser.read(self.ser.inWaiting())&lt;br /&gt;
    else:&lt;br /&gt;
      readbytes=[]&lt;br /&gt;
    # check &lt;br /&gt;
    if not readbytes:&lt;br /&gt;
      self.log.warning(&amp;quot;read from &amp;quot;+self.port+&amp;quot; failed&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    buffer.extend(readbytes)&lt;br /&gt;
&lt;br /&gt;
    return buffer.decode()&lt;br /&gt;
&lt;br /&gt;
  def close(self):&lt;br /&gt;
    if (not self.ser):&lt;br /&gt;
      raise RuntimeError('Serial port not initialized') from error&lt;br /&gt;
    self.ser.close()&lt;br /&gt;
&lt;br /&gt;
  def dcmd(self,cmd):&lt;br /&gt;
    response=self.send(cmd)&lt;br /&gt;
    print(response)&lt;br /&gt;
&lt;br /&gt;
#elm=Elm327(&amp;quot;/dev/rfcomm0&amp;quot;,115200)&lt;br /&gt;
elm=Elm327()&lt;br /&gt;
elm.dcmd(&amp;quot;ATD&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATZ&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATE0&amp;quot;) # switch off echo&lt;br /&gt;
elm.dcmd(&amp;quot;ATL1&amp;quot;) # switch on newlines&lt;br /&gt;
elm.dcmd(&amp;quot;ATI&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATSP6&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATDP&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATH1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATD1&amp;quot;)&lt;br /&gt;
elm.dcmd(&amp;quot;ATCAF0&amp;quot;)&lt;br /&gt;
if (len(sys.argv) &amp;gt;1):&lt;br /&gt;
  pid=sys.argv[1]&lt;br /&gt;
  elm.dcmd(&amp;quot;ATCRA &amp;quot;+pid)&lt;br /&gt;
  elm.dcmd(&amp;quot;AT MA&amp;quot;)&lt;br /&gt;
  while True:&lt;br /&gt;
    response=elm.read()&lt;br /&gt;
    print(response)&lt;br /&gt;
elm.close()&lt;br /&gt;
&lt;br /&gt;
#s = input('Enter AT command --&amp;gt; ')&lt;br /&gt;
#print ('AT command = ' + s)&lt;br /&gt;
#ser.timeout = 1&lt;br /&gt;
#response = ser.read(999).decode('utf-8')&lt;br /&gt;
#print(response)&lt;br /&gt;
#ser.close()  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== tcp_serial_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# Redirect data from a TCP/IP connection to a serial port and vice versa.&lt;br /&gt;
#&lt;br /&gt;
# (C) 2002-2016 Chris Liechti &amp;lt;cliechti@gmx.net&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# SPDX-License-Identifier:    BSD-3-Clause&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import serial&lt;br /&gt;
import serial.threaded&lt;br /&gt;
import time&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class SerialToNet(serial.threaded.Protocol):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;serial-&amp;gt;socket&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.socket = None&lt;br /&gt;
&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
    # callback function&lt;br /&gt;
    # this is called by the ReaderThread on receiving data from&lt;br /&gt;
    # the serial device&lt;br /&gt;
    def data_received(self, data):&lt;br /&gt;
        if self.socket is not None:&lt;br /&gt;
            # first send data over network&lt;br /&gt;
            self.socket.sendall(data)&lt;br /&gt;
            # optionally show it for debug&lt;br /&gt;
            if (self.debug):&lt;br /&gt;
               print(&amp;quot;r&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':  # noqa&lt;br /&gt;
    import argparse&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(&lt;br /&gt;
        description='Simple Serial to Network (TCP/IP) redirector.',&lt;br /&gt;
        epilog=&amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
NOTE: no security measures are implemented. Anyone can remotely connect&lt;br /&gt;
to this service over the network.&lt;br /&gt;
&lt;br /&gt;
Only one connection at once is supported. When the connection is terminated&lt;br /&gt;
it waits for the next connect.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'SERIALPORT',&lt;br /&gt;
        help=&amp;quot;serial port name&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'BAUDRATE',&lt;br /&gt;
        type=int,&lt;br /&gt;
        nargs='?',&lt;br /&gt;
        help='set baud rate, default: %(default)s',&lt;br /&gt;
        default=9600)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-d', '--debug',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='debug',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-q', '--quiet',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='suppress non error messages',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '--develop',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='Development mode, prints Python internals on errors',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('serial port')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        &amp;quot;--parity&amp;quot;,&lt;br /&gt;
        choices=['N', 'E', 'O', 'S', 'M'],&lt;br /&gt;
        type=lambda c: c.upper(),&lt;br /&gt;
        help=&amp;quot;set parity, one of {N E O S M}, default: N&amp;quot;,&lt;br /&gt;
        default='N')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rtscts',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable RTS/CTS flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--xonxoff',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable software flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rts',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial RTS line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--dtr',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial DTR line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('network settings')&lt;br /&gt;
&lt;br /&gt;
    exclusive_group = group.add_mutually_exclusive_group()&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-P', '--localport',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='local TCP port',&lt;br /&gt;
        default=7777)&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-c', '--client',&lt;br /&gt;
        metavar='HOST:PORT',&lt;br /&gt;
        help='make the connection as a client, instead of running a server',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # connect to serial port&lt;br /&gt;
    ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)&lt;br /&gt;
    ser.baudrate = args.BAUDRATE&lt;br /&gt;
    ser.parity = args.parity&lt;br /&gt;
    ser.rtscts = args.rtscts&lt;br /&gt;
    ser.xonxoff = args.xonxoff&lt;br /&gt;
&lt;br /&gt;
    if args.rts is not None:&lt;br /&gt;
        ser.rts = args.rts&lt;br /&gt;
&lt;br /&gt;
    if args.dtr is not None:&lt;br /&gt;
        ser.dtr = args.dtr&lt;br /&gt;
&lt;br /&gt;
    if not args.quiet:&lt;br /&gt;
        sys.stderr.write(&lt;br /&gt;
            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'&lt;br /&gt;
            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        ser.open()&lt;br /&gt;
    except serial.SerialException as e:&lt;br /&gt;
        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    ser_to_net = SerialToNet()&lt;br /&gt;
    ser_to_net.debug=args.debug &lt;br /&gt;
    serial_worker = serial.threaded.ReaderThread(ser, ser_to_net)&lt;br /&gt;
    serial_worker.start()&lt;br /&gt;
&lt;br /&gt;
    if not args.client:&lt;br /&gt;
        # open the socket as a streaming socket&lt;br /&gt;
        srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)&lt;br /&gt;
        srv.bind(('', args.localport))&lt;br /&gt;
        srv.listen(1)&lt;br /&gt;
    try:&lt;br /&gt;
        intentional_exit = False&lt;br /&gt;
        while True:&lt;br /&gt;
            if args.client:&lt;br /&gt;
                host, port = args.client.split(':')&lt;br /&gt;
                sys.stderr.write(&amp;quot;Opening connection to {}:{}...\n&amp;quot;.format(host, port))&lt;br /&gt;
                client_socket = socket.socket()&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.connect((host, int(port)))&lt;br /&gt;
                except socket.error as msg:&lt;br /&gt;
                    sys.stderr.write('WARNING: {}\n'.format(msg))&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
                    continue&lt;br /&gt;
                sys.stderr.write('Connected\n')&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
                #~ client_socket.settimeout(5)&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))&lt;br /&gt;
                client_socket, addr = srv.accept()&lt;br /&gt;
                sys.stderr.write('Connected by {}\n'.format(addr))&lt;br /&gt;
                # More quickly detect bad clients who quit without closing the&lt;br /&gt;
                # connection: After 1 second of idle, start sending TCP keep-alive&lt;br /&gt;
                # packets every 1 second. If 3 consecutive keep-alive packets&lt;br /&gt;
                # fail, assume the client is gone and close the connection.&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)&lt;br /&gt;
                    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)&lt;br /&gt;
                except AttributeError:&lt;br /&gt;
                    pass # XXX not available on windows&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
            try:&lt;br /&gt;
                ser_to_net.socket = client_socket&lt;br /&gt;
                # enter network &amp;lt;-&amp;gt; serial loop&lt;br /&gt;
                while True:&lt;br /&gt;
                    try:&lt;br /&gt;
                        # read data from serial                    &lt;br /&gt;
                        data = client_socket.recv(2048)&lt;br /&gt;
                        if not data:&lt;br /&gt;
                            break&lt;br /&gt;
                        ser.write(data)                 # get a bunch of bytes and send them&lt;br /&gt;
                        if (args.debug):&lt;br /&gt;
                           print(&amp;quot;s&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
                    except socket.error as msg:&lt;br /&gt;
                        if args.develop:&lt;br /&gt;
                            raise&lt;br /&gt;
                        sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
                        # probably got disconnected&lt;br /&gt;
                        break&lt;br /&gt;
            except KeyboardInterrupt:&lt;br /&gt;
                intentional_exit = True&lt;br /&gt;
                raise&lt;br /&gt;
            except socket.error as msg:&lt;br /&gt;
                if args.develop:&lt;br /&gt;
                    raise&lt;br /&gt;
                sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
            finally:&lt;br /&gt;
                ser_to_net.socket = None&lt;br /&gt;
                sys.stderr.write('Disconnected\n')&lt;br /&gt;
                client_socket.close()&lt;br /&gt;
                if args.client and not intentional_exit:&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    sys.stderr.write('\n--- exit ---\n')&lt;br /&gt;
    serial_worker.stop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1083</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1083"/>
		<updated>2019-01-24T07:59:48Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Pairing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Python Helper Scripts ===&lt;br /&gt;
==== tcp_serial_redirect.py ====&lt;br /&gt;
&amp;lt;source lang='python'&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# Redirect data from a TCP/IP connection to a serial port and vice versa.&lt;br /&gt;
#&lt;br /&gt;
# (C) 2002-2016 Chris Liechti &amp;lt;cliechti@gmx.net&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# SPDX-License-Identifier:    BSD-3-Clause&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import serial&lt;br /&gt;
import serial.threaded&lt;br /&gt;
import time&lt;br /&gt;
import datetime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class SerialToNet(serial.threaded.Protocol):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;serial-&amp;gt;socket&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.socket = None&lt;br /&gt;
&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
    # callback function&lt;br /&gt;
    # this is called by the ReaderThread on receiving data from&lt;br /&gt;
    # the serial device&lt;br /&gt;
    def data_received(self, data):&lt;br /&gt;
        if self.socket is not None:&lt;br /&gt;
            # first send data over network&lt;br /&gt;
            self.socket.sendall(data)&lt;br /&gt;
            # optionally show it for debug&lt;br /&gt;
            if (self.debug):&lt;br /&gt;
               print(&amp;quot;r&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':  # noqa&lt;br /&gt;
    import argparse&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(&lt;br /&gt;
        description='Simple Serial to Network (TCP/IP) redirector.',&lt;br /&gt;
        epilog=&amp;quot;&amp;quot;&amp;quot;\&lt;br /&gt;
NOTE: no security measures are implemented. Anyone can remotely connect&lt;br /&gt;
to this service over the network.&lt;br /&gt;
&lt;br /&gt;
Only one connection at once is supported. When the connection is terminated&lt;br /&gt;
it waits for the next connect.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'SERIALPORT',&lt;br /&gt;
        help=&amp;quot;serial port name&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        'BAUDRATE',&lt;br /&gt;
        type=int,&lt;br /&gt;
        nargs='?',&lt;br /&gt;
        help='set baud rate, default: %(default)s',&lt;br /&gt;
        default=9600)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-d', '--debug',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='debug',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '-q', '--quiet',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='suppress non error messages',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    parser.add_argument(&lt;br /&gt;
        '--develop',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='Development mode, prints Python internals on errors',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('serial port')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        &amp;quot;--parity&amp;quot;,&lt;br /&gt;
        choices=['N', 'E', 'O', 'S', 'M'],&lt;br /&gt;
        type=lambda c: c.upper(),&lt;br /&gt;
        help=&amp;quot;set parity, one of {N E O S M}, default: N&amp;quot;,&lt;br /&gt;
        default='N')&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rtscts',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable RTS/CTS flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--xonxoff',&lt;br /&gt;
        action='store_true',&lt;br /&gt;
        help='enable software flow control (default off)',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--rts',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial RTS line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group.add_argument(&lt;br /&gt;
        '--dtr',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='set initial DTR line state (possible values: 0, 1)',&lt;br /&gt;
        default=None)&lt;br /&gt;
&lt;br /&gt;
    group = parser.add_argument_group('network settings')&lt;br /&gt;
&lt;br /&gt;
    exclusive_group = group.add_mutually_exclusive_group()&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-P', '--localport',&lt;br /&gt;
        type=int,&lt;br /&gt;
        help='local TCP port',&lt;br /&gt;
        default=7777)&lt;br /&gt;
&lt;br /&gt;
    exclusive_group.add_argument(&lt;br /&gt;
        '-c', '--client',&lt;br /&gt;
        metavar='HOST:PORT',&lt;br /&gt;
        help='make the connection as a client, instead of running a server',&lt;br /&gt;
        default=False)&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # connect to serial port&lt;br /&gt;
    ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True)&lt;br /&gt;
    ser.baudrate = args.BAUDRATE&lt;br /&gt;
    ser.parity = args.parity&lt;br /&gt;
    ser.rtscts = args.rtscts&lt;br /&gt;
    ser.xonxoff = args.xonxoff&lt;br /&gt;
&lt;br /&gt;
    if args.rts is not None:&lt;br /&gt;
        ser.rts = args.rts&lt;br /&gt;
&lt;br /&gt;
    if args.dtr is not None:&lt;br /&gt;
        ser.dtr = args.dtr&lt;br /&gt;
&lt;br /&gt;
    if not args.quiet:&lt;br /&gt;
        sys.stderr.write(&lt;br /&gt;
            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'&lt;br /&gt;
            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        ser.open()&lt;br /&gt;
    except serial.SerialException as e:&lt;br /&gt;
        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
    ser_to_net = SerialToNet()&lt;br /&gt;
    ser_to_net.debug=args.debug &lt;br /&gt;
    serial_worker = serial.threaded.ReaderThread(ser, ser_to_net)&lt;br /&gt;
    serial_worker.start()&lt;br /&gt;
&lt;br /&gt;
    if not args.client:&lt;br /&gt;
        # open the socket as a streaming socket&lt;br /&gt;
        srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)&lt;br /&gt;
        srv.bind(('', args.localport))&lt;br /&gt;
        srv.listen(1)&lt;br /&gt;
    try:&lt;br /&gt;
        intentional_exit = False&lt;br /&gt;
        while True:&lt;br /&gt;
            if args.client:&lt;br /&gt;
                host, port = args.client.split(':')&lt;br /&gt;
                sys.stderr.write(&amp;quot;Opening connection to {}:{}...\n&amp;quot;.format(host, port))&lt;br /&gt;
                client_socket = socket.socket()&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.connect((host, int(port)))&lt;br /&gt;
                except socket.error as msg:&lt;br /&gt;
                    sys.stderr.write('WARNING: {}\n'.format(msg))&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
                    continue&lt;br /&gt;
                sys.stderr.write('Connected\n')&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
                #~ client_socket.settimeout(5)&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))&lt;br /&gt;
                client_socket, addr = srv.accept()&lt;br /&gt;
                sys.stderr.write('Connected by {}\n'.format(addr))&lt;br /&gt;
                # More quickly detect bad clients who quit without closing the&lt;br /&gt;
                # connection: After 1 second of idle, start sending TCP keep-alive&lt;br /&gt;
                # packets every 1 second. If 3 consecutive keep-alive packets&lt;br /&gt;
                # fail, assume the client is gone and close the connection.&lt;br /&gt;
                try:&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 1)&lt;br /&gt;
                    client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)&lt;br /&gt;
                    client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)&lt;br /&gt;
                except AttributeError:&lt;br /&gt;
                    pass # XXX not available on windows&lt;br /&gt;
                client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)&lt;br /&gt;
            try:&lt;br /&gt;
                ser_to_net.socket = client_socket&lt;br /&gt;
                # enter network &amp;lt;-&amp;gt; serial loop&lt;br /&gt;
                while True:&lt;br /&gt;
                    try:&lt;br /&gt;
                        # read data from serial                    &lt;br /&gt;
                        data = client_socket.recv(2048)&lt;br /&gt;
                        if not data:&lt;br /&gt;
                            break&lt;br /&gt;
                        ser.write(data)                 # get a bunch of bytes and send them&lt;br /&gt;
                        if (args.debug):&lt;br /&gt;
                           print(&amp;quot;s&amp;quot;+datetime.datetime.now().isoformat()+&amp;quot;:&amp;quot;+data)&lt;br /&gt;
                    except socket.error as msg:&lt;br /&gt;
                        if args.develop:&lt;br /&gt;
                            raise&lt;br /&gt;
                        sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
                        # probably got disconnected&lt;br /&gt;
                        break&lt;br /&gt;
            except KeyboardInterrupt:&lt;br /&gt;
                intentional_exit = True&lt;br /&gt;
                raise&lt;br /&gt;
            except socket.error as msg:&lt;br /&gt;
                if args.develop:&lt;br /&gt;
                    raise&lt;br /&gt;
                sys.stderr.write('ERROR: {}\n'.format(msg))&lt;br /&gt;
            finally:&lt;br /&gt;
                ser_to_net.socket = None&lt;br /&gt;
                sys.stderr.write('Disconnected\n')&lt;br /&gt;
                client_socket.close()&lt;br /&gt;
                if args.client and not intentional_exit:&lt;br /&gt;
                    time.sleep(5)  # intentional delay on reconnection as client&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    sys.stderr.write('\n--- exit ---\n')&lt;br /&gt;
    serial_worker.stop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1082</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1082"/>
		<updated>2019-01-24T07:57:44Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Pairing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1081</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1081"/>
		<updated>2019-01-24T07:57:26Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Pairing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right.&lt;br /&gt;
You will not be able to connect the message is &amp;quot;Connection failed - No usabel services on this device&amp;quot;. &lt;br /&gt;
We'll work around this with some python helper software&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1080</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1080"/>
		<updated>2019-01-24T07:56:05Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* check connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
=== Bluetooth services ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Pairing ===&lt;br /&gt;
Pair the device using the Graphical User Interface Bluetooth button in the top right&lt;br /&gt;
Check result with commmand line:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
[NEW] Controller B8:27:EB:2E:AB:2B pito [default]&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1079</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1079"/>
		<updated>2019-01-24T07:54:42Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Bluetooth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;br /&gt;
== check connection ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
service bluetooth status&lt;br /&gt;
● bluetooth.service - Bluetooth service&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset&lt;br /&gt;
   Active: active (running) since Thu 2019-01-24 08:51:05 CET; 3min 2s ago&lt;br /&gt;
     Docs: man:bluetoothd(8)&lt;br /&gt;
 Main PID: 849 (bluetoothd)&lt;br /&gt;
   Status: &amp;quot;Running&amp;quot;&lt;br /&gt;
   CGroup: /system.slice/bluetooth.service&lt;br /&gt;
           └─849 /usr/lib/bluetooth/bluetoothd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1078</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1078"/>
		<updated>2019-01-24T07:52:48Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Autostart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Bluetooth =&lt;br /&gt;
see https://www.raspberrypi.org/forums/viewtopic.php?t=214373&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1077</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1077"/>
		<updated>2019-01-23T15:13:45Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Run script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Autostart ==&lt;br /&gt;
Example Can4Eve.desktop file to be placed in .config/autostart of your user.&lt;br /&gt;
Please adapt the exec line to where you installed can4eve&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Can4Eve&lt;br /&gt;
Comment=Onboard Diagnostic software for Electric Vehicles&lt;br /&gt;
NoDisplay=false&lt;br /&gt;
Exec=/home/wf/source/java/can4eve/run&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=JavaFX&amp;diff=1076</id>
		<title>JavaFX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=JavaFX&amp;diff=1076"/>
		<updated>2019-01-23T14:56:49Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* JavaFx on Raspberry PI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JavaFx on Raspberry PI =&lt;br /&gt;
* https://blog.codecentric.de/2015/09/kaffee-und-kuchen-projekte-mit-java-embedded-8-auf-dem-raspberry-pi/&lt;br /&gt;
* http://gluonhq.com/products/mobile/javafxports/get/&lt;br /&gt;
* https://stackoverflow.com/questions/28284239/javafx-ensemble-on-raspberry-pi&lt;br /&gt;
&lt;br /&gt;
== javafx install script ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# install javafx on raspberry PI&lt;br /&gt;
# WF 2019-01-13&lt;br /&gt;
src=/usr/local/src&lt;br /&gt;
ext=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/ext&lt;br /&gt;
javafx=armv6hf-sdk&lt;br /&gt;
&lt;br /&gt;
#ansi colors&lt;br /&gt;
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html&lt;br /&gt;
blue='\033[0;34m'&lt;br /&gt;
red='\033[0;31m'&lt;br /&gt;
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.&lt;br /&gt;
endColor='\033[0m'&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# a colored message &lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_color - the color of the message&lt;br /&gt;
#     2: l_msg - the message to display&lt;br /&gt;
#&lt;br /&gt;
color_msg() {&lt;br /&gt;
  local l_color=&amp;quot;$1&amp;quot;&lt;br /&gt;
  local l_msg=&amp;quot;$2&amp;quot;&lt;br /&gt;
  echo -e &amp;quot;${l_color}$l_msg${endColor}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
#&lt;br /&gt;
# show the given error message on stderr and exit&lt;br /&gt;
#&lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_msg - the error message to display&lt;br /&gt;
#&lt;br /&gt;
error() {&lt;br /&gt;
	  local l_msg=&amp;quot;$1&amp;quot;&lt;br /&gt;
	    # use ansi red for error&lt;br /&gt;
	      color_msg $red &amp;quot;Error:&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
	        color_msg $red &amp;quot;\t$l_msg&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
		  exit 1&lt;br /&gt;
	  }&lt;br /&gt;
#&lt;br /&gt;
# error&lt;br /&gt;
#&lt;br /&gt;
# show the given error message on stderr and exit&lt;br /&gt;
#&lt;br /&gt;
#   params:&lt;br /&gt;
#     1: l_msg - the error message to display&lt;br /&gt;
#&lt;br /&gt;
error() {&lt;br /&gt;
  local l_msg=&amp;quot;$1&amp;quot;&lt;br /&gt;
  # use ansi red for error&lt;br /&gt;
  color_msg $red &amp;quot;Error:&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
  color_msg $red &amp;quot;\t$l_msg&amp;quot; 1&amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
color_msg $blue &amp;quot;Trying to install javafx&amp;quot;&lt;br /&gt;
if [ ! -d $ext ]&lt;br /&gt;
then&lt;br /&gt;
  error &amp;quot;directory $ext does not exists - was expecting a java installation&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $src ]&lt;br /&gt;
then&lt;br /&gt;
  error &amp;quot;directory $src is missing - was expecting it&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
cd $src &lt;br /&gt;
&lt;br /&gt;
if [ ! -f $javafx.zip ]&lt;br /&gt;
then&lt;br /&gt;
  color_msg $blue &amp;quot;downloading $javafx.zip&amp;quot;&lt;br /&gt;
  sudo curl -L https://gluonhq.com/download/javafx-embedded-sdk/ -o $javafx.zip&lt;br /&gt;
else&lt;br /&gt;
  color_msg $green &amp;quot;$javafx.zip already downloaded&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $javafx ]&lt;br /&gt;
then&lt;br /&gt;
  color_msg $blue &amp;quot;extracting&amp;quot; $javafx.zip&lt;br /&gt;
  sudo unzip $javafx.zip&lt;br /&gt;
else&lt;br /&gt;
  color_msg $green &amp;quot;$javafx already extracted&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd $ext&lt;br /&gt;
color_msg $blue &amp;quot;creating symlinks&amp;quot;&lt;br /&gt;
for path in rt/lib/arm rt/lib/ext/jfxrt.jar lib/javafx-mx.jar lib7JFX rt/lib/jfxswt.jar&lt;br /&gt;
do&lt;br /&gt;
  from=$src/$javafx/$path&lt;br /&gt;
  b=$(basename $from)&lt;br /&gt;
  if [ -L $b ]&lt;br /&gt;
  then&lt;br /&gt;
   color_msg $green &amp;quot;symbolic link $b already exists&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
   sudo ln -s $src/$javafx/$path .&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* http://docs.gluonhq.com/javafxports/&lt;br /&gt;
&lt;br /&gt;
= Medusa Gauge Library =&lt;br /&gt;
https://github.com/HanSolo/Medusa/wiki/Gauge-Skins&lt;br /&gt;
&lt;br /&gt;
= SwingNode not useable on Raspberry PI =&lt;br /&gt;
The following code needs Swing and doesn't run properly on a raspberry PI even if JavaFX support is enabled.&lt;br /&gt;
&amp;lt;source lang='java'&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
   * update the given tab with the given panel&lt;br /&gt;
   * &lt;br /&gt;
   * @param tab&lt;br /&gt;
   * @param panel&lt;br /&gt;
   */&lt;br /&gt;
  public void updateTab(Tab tab, JPanel panel) {&lt;br /&gt;
    if (panel != null) {&lt;br /&gt;
      final SwingNode swingNode = new SwingNode();&lt;br /&gt;
      swingNode.setContent(panel);&lt;br /&gt;
      tab.setContent(swingNode);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Links =&lt;br /&gt;
* https://de.slideshare.net/SimonRitter/the-raspberry-pi-javafx-carputer&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1075</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1075"/>
		<updated>2019-01-22T16:58:47Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Run script = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ==&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1074</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1074"/>
		<updated>2019-01-22T16:24:09Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Java 8 installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Run script ===&lt;br /&gt;
If you have an official touchscreen you can control the brightness of the screen with the darkmode button of can4eve.&lt;br /&gt;
&lt;br /&gt;
You might want to make sure that you use the run script to start the app. The important lines are:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo chmod 0664 /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
sudo chown root.pi /sys/class/backlight/rpi_backlight/brightness&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Main_Page&amp;diff=1073</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Main_Page&amp;diff=1073"/>
		<updated>2019-01-03T04:45:42Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* State of the project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:Sunflower.png|128px|left]]&lt;br /&gt;
[[File:Profiwikiicon.png|128px|right]]&lt;br /&gt;
= What is can4eve? =&lt;br /&gt;
can4eve &lt;br /&gt;
* is a software for electric vehicles&lt;br /&gt;
* it reads, analyzes, visualizes, stores and replays CAN bus data from the vehicle taken via an OBDII adapter&lt;br /&gt;
* is an open source software project see https://github.com/BITPlan/can4eve&lt;br /&gt;
&lt;br /&gt;
== Supported Vehicles ==&lt;br /&gt;
{{#ask:&lt;br /&gt;
 [[Category:Vehicle]]&lt;br /&gt;
 [[Has image::+]]&lt;br /&gt;
 |?Has image=image&lt;br /&gt;
 |?can4eve support&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
as of 2017-06 only {{Link|target=Triplet}} cars: Mitsubishi i-Miev, Citroën C-Zero, Peugeot-Ion are supported&lt;br /&gt;
The support for the {{Link|target=Mitsubishi Outlander PHEV}} is in preparation.&lt;br /&gt;
See also {{Link|target=Help/VehicleTypes}}&lt;br /&gt;
&lt;br /&gt;
= Contents =&lt;br /&gt;
__TOC__&lt;br /&gt;
== Supported OBDII-Adapters ==&lt;br /&gt;
{{#ask:&lt;br /&gt;
 [[Category:ELM327]]&lt;br /&gt;
 [[Has image::+]]&lt;br /&gt;
 |?Has image=image&lt;br /&gt;
 |?can4eve support&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Supported Platforms ==&lt;br /&gt;
&lt;br /&gt;
can4eve is written in Java&lt;br /&gt;
It has been tested on&lt;br /&gt;
* {{Link|target=Raspberry PI}}&lt;br /&gt;
* {{Link|target=MacOS}}&lt;br /&gt;
* {{Link|target=Windows}}&lt;br /&gt;
&lt;br /&gt;
An Android version is in preparation.&lt;br /&gt;
&lt;br /&gt;
Since Apple does not support Java on the iPhone and since Microsoft does not support Java on some of its environments can4eve &lt;br /&gt;
would have to be ported to run in these environments. Currently there are no concrete plans to work around this. Since can4eve uses JavaFX it is certainly feasible to get an iPhone and other ports. [http://openjdk.java.net/projects/mobile/ Oracle mobile] might also be a future option&lt;br /&gt;
to support many more mobile devices.&lt;br /&gt;
&lt;br /&gt;
== State of the project ==&lt;br /&gt;
* the software is in beta state - it has only been tested with a few vehicles so far &lt;br /&gt;
* To install you might want to follow the {{Link|target=Installation}} instructions.&lt;br /&gt;
* We are looking for more beta testers see e.g. [http://www.goingelectric.de/forum/c-zero-i-miev-ion/alpha-tester-fuer-neue-obdii-can-software-can4eve-gesucht-t24625.html german Triplet] and [http://www.goingelectric.de/forum/mitsubishi-plug-in-hybrid-outlander/ Outlander PHEV] forum&lt;br /&gt;
* https://github.com/BITPlan/can4eve/issues/4 is been worked on see {{Link|target=Simple Report}}&lt;br /&gt;
==== Screen Shots ====&lt;br /&gt;
===== Odometer =====&lt;br /&gt;
[[File:screenShot_Odometer_2017-08-16_103323.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===== Dashboard / Clocks =====&lt;br /&gt;
[[File:screenShot_RPM_2017-08-16_102742.png|600px]]&lt;br /&gt;
[[File:screenShot_Clocks_2017-08-16_102206.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Charging ===&lt;br /&gt;
[[File:screenShot_SOC_2017-08-16_103106.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Battery Cell states / SOC-RR history===&lt;br /&gt;
[[File:screenShot_Cell Voltage_2017-07-11_235316.png|600px]]&lt;br /&gt;
[[File:screenShot_Cell Temp_2017-07-11_235321.png|600px]]&lt;br /&gt;
[[File:socrr2017-06-18.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== General OBD info (debug) ===&lt;br /&gt;
[[File:Screenshot2017-06-18.png|600px]]&lt;br /&gt;
[[File:data2-2017-06-18.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
See {{Link|target=Help#Installation}}&lt;br /&gt;
&lt;br /&gt;
=== Building the software yourself ===&lt;br /&gt;
can4eve uses maven a build platform&lt;br /&gt;
see test video below.&lt;br /&gt;
&lt;br /&gt;
=== Developer / Unit Test ===&lt;br /&gt;
The software runs a test suite on each release.&lt;br /&gt;
If you want you can run the {{Link|target=JUnit tests|title=automated tests for can4eve}} yourself on your own development platform.&lt;br /&gt;
The following video shows an example of such a test run and how it should work in your environment in principle. The nice side effect is&lt;br /&gt;
that you get a preview of some of the features of the software this way.&lt;br /&gt;
&amp;lt;HTML5video width=&amp;quot;960&amp;quot; height=&amp;quot;600&amp;quot; autoplay=&amp;quot;false&amp;quot; loop=&amp;quot;false&amp;quot;&amp;gt;can4eveTest2017-08-16&amp;lt;/HTML5video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running from command line ===&lt;br /&gt;
As of 2017-06 the jar created by the rebuild script is compiled for the {{Link|target=Triplet}} vehicles.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
java -jar target/com.bitplan.obdii-0.0.1-jar-with-dependencies.jar -h&lt;br /&gt;
Help&lt;br /&gt;
CANTriplet: 0.0.1&lt;br /&gt;
&lt;br /&gt;
  usage: java CANTriplet&lt;br /&gt;
 --display [None | Console | Swing] : display&lt;br /&gt;
                                      the display to use one of:&lt;br /&gt;
                                       None,Console,Swing&lt;br /&gt;
 --host (--hostname) WERT           : host&lt;br /&gt;
                                      the host to connect to&lt;br /&gt;
 --limit (--framelimit) N           : limit&lt;br /&gt;
                                      the maximum number of frames to read&lt;br /&gt;
 --port (--portnumber) N            : port&lt;br /&gt;
                                      the port to connect to&lt;br /&gt;
 --vg (--vehicle-group) WERT        : vehicleGroup&lt;br /&gt;
                                      the vehicleGroup to connect to&lt;br /&gt;
 -c (--conn) WERT                   : connection device&lt;br /&gt;
                                      the connection to use&lt;br /&gt;
 -d (--debug)                       : debug&lt;br /&gt;
                                      create additional debug output if this&lt;br /&gt;
                                      switch is used&lt;br /&gt;
 -h (--help)                        : help&lt;br /&gt;
                                      show this usage&lt;br /&gt;
 -l (--log) WERT                    : log&lt;br /&gt;
                                      the logfile to write&lt;br /&gt;
 -p (--pid) WERT                    : pid to monitor&lt;br /&gt;
                                      the pid to monitor&lt;br /&gt;
 -t (--timeout) N                   : timeout in msecs&lt;br /&gt;
                                      the timeout for elm327 communication&lt;br /&gt;
 -v (--version)                     : showVersion&lt;br /&gt;
                                      show current version if this switch is&lt;br /&gt;
                                      used&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
https://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
&lt;br /&gt;
=== Creator ===&lt;br /&gt;
[[File:BITPlanLogo2012.svg|200px|link=http://web.bitplan.com]]&lt;br /&gt;
&lt;br /&gt;
= Other Apps =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Vehicles !! Icon !! App !! Link&lt;br /&gt;
|-&lt;br /&gt;
| Mitsubishi i-Miev, Citroen C-Zero, Peugeot Ion || || {{Link|target=CanIon}} || https://play.google.com/store/apps/details?id=emobility.canion&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
| [[File:Canze-icon-shading.png|64px]] || {{Link|target=CANZE}} ||  http://canze.fisch.lu/&lt;br /&gt;
|-&lt;br /&gt;
| Outlander PHEV || [[File:SmallEvLogo.png|64px]] || EVBatMon for PHEV || http://evpositive.com/evbatmon-for-phev.html&lt;br /&gt;
|-&lt;br /&gt;
| Nissan Leaf || [[File:LeafSpyLogo.png|64px]] || Leaf Spy || https://play.google.com/store/apps/details?id=com.Turbo3.Leaf_Spy_Lite&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
|Tesla || [[File:TM-SpyLogo.png|64px]] || TM-Spy || https://play.google.com/store/apps/details?id=com.Turbo3.TMSpy&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Combustion engine cars || [[File:TorqueLogo.png|64px]] || Torque Pro || https://play.google.com/store/apps/details?id=org.prowl.torque&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Combustion engine cars || [[File:EasyOBDIILogo.png|64px]] || Easy OBDII || http://www.easyobdii.com/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
=== EVBatMon ===&lt;br /&gt;
''Our App not only gives you access to  internal information at your fingertips, it will also track the health of the Li On drive battery over time and against distance. ''&lt;br /&gt;
https://c.apk.plus/screenshots/5/c/4/com.EvPositive.EvBatMon_6.png&lt;br /&gt;
&lt;br /&gt;
=== LeafSpy ===&lt;br /&gt;
''Leaf Spy Lite lets a Nissan Leaf owner view detailed information about their Leaf's battery by plugging in an inexpensive ELM-327 Bluetooth OBDII adapter into the standard OBDII port on the Leaf. ELM-327 Bluetooth adapters are available on eBay for around $10-$20 and one is required before Leaf Spy Lite can display information from your Leaf.''&lt;br /&gt;
[[File:Main-qimg-eaec4f6a0b00c9fc98d84f1b376f811a.png]]&lt;br /&gt;
&lt;br /&gt;
=== TM-Spy ===&lt;br /&gt;
''TM-Spy uses a standard ELM 327 type Bluetooth or WiFi OBDII adapter to decode information from the CAN service plug located below the center display screen. Check the internet for how to access this cable and the specifications for the custom adapter cable required to go from the Tesla 12 pin connector to the standard 16 pin OBDII connector which the ELM 327 adapter plugs into.''&lt;br /&gt;
&lt;br /&gt;
[[File:TM-3-Screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* https://www.quora.com/What-is-a-good-OBD2-that-is-compatible-with-Electric-Cars&lt;br /&gt;
* http://ion.bitplan.com&lt;br /&gt;
[[Category:can4eve]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Release&amp;diff=1072</id>
		<title>Release</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Release&amp;diff=1072"/>
		<updated>2019-01-02T18:12:20Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Version 0.0.1:&lt;br /&gt;
[[File:can4eve.jar]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Release&amp;diff=1071</id>
		<title>Release</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Release&amp;diff=1071"/>
		<updated>2019-01-02T18:12:10Z</updated>

		<summary type="html">&lt;p&gt;Wf: Created page with &amp;quot;File:can4eve.jar&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:can4eve.jar]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=File:Can4eve.jar&amp;diff=1070</id>
		<title>File:Can4eve.jar</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=File:Can4eve.jar&amp;diff=1070"/>
		<updated>2019-01-02T18:12:02Z</updated>

		<summary type="html">&lt;p&gt;Wf: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1069</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1069"/>
		<updated>2018-12-31T14:44:01Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Software configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Java 8 installation ==&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
apt-get install oracle-java8-jdk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1068</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1068"/>
		<updated>2018-12-31T14:43:38Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Software configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Raspberry Setup =&lt;br /&gt;
You'll find setup guides all over the internet here are just two links:&lt;br /&gt;
* https://www.macworld.co.uk/how-to/mac/how-to-set-up-raspberry-pi-3-with-mac-3637490/&lt;br /&gt;
* https://www.raspberrypi.org/downloads/raspbian/&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1067</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1067"/>
		<updated>2018-12-31T14:28:43Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. http://ion.bitplan.com/index.php/Ion2017-07-18#Raspberry_PI&lt;br /&gt;
= Hardware =&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1066</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1066"/>
		<updated>2018-12-31T14:27:15Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/91zSu44%2B34L._SL1500_.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1065</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1065"/>
		<updated>2018-12-31T14:26:55Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
* https://www.amazon.de/gp/product/B01CD5VC92&lt;br /&gt;
&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1064</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1064"/>
		<updated>2018-12-31T14:26:23Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
&lt;br /&gt;
= Software configuration =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1063</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1063"/>
		<updated>2018-12-31T14:26:01Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. &lt;br /&gt;
https://images-na.ssl-images-amazon.com/images/I/31jEGhZmPdL.jpg&lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1062</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1062"/>
		<updated>2018-12-31T14:25:37Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
See e.g. &lt;br /&gt;
* https://www.amazon.de/gp/product/B01M0AT5O5&lt;br /&gt;
&lt;br /&gt;
Here is an example:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1061</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1061"/>
		<updated>2018-12-31T14:23:27Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
Here is an example:&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
PRETTY_NAME=&amp;quot;Raspbian GNU/Linux 9 (stretch)&amp;quot;&lt;br /&gt;
NAME=&amp;quot;Raspbian GNU/Linux&amp;quot;&lt;br /&gt;
VERSION_ID=&amp;quot;9&amp;quot;&lt;br /&gt;
VERSION=&amp;quot;9 (stretch)&amp;quot;&lt;br /&gt;
ID=raspbian&lt;br /&gt;
ID_LIKE=debian&lt;br /&gt;
HOME_URL=&amp;quot;http://www.raspbian.org/&amp;quot;&lt;br /&gt;
SUPPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianForums&amp;quot;&lt;br /&gt;
BUG_REPORT_URL=&amp;quot;http://www.raspbian.org/RaspbianBugs&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1060</id>
		<title>OBDLink LX</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=OBDLink_LX&amp;diff=1060"/>
		<updated>2018-08-08T06:34:29Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Connecting to an OBDLink LX from Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:OBDLinkLX .jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Connection: Bluetooth /WireLess&lt;br /&gt;
&lt;br /&gt;
This device is in principle fast and supports AT STM commands. Due to the bluetooth connection the handling may get somewhat unreliable in comparison to the {{Link|target=OBDLink SX}} USB cable variant&lt;br /&gt;
= Status =&lt;br /&gt;
[[can4eve support::indirectly supported e.g. via rfcomm or ip forwarding on linux]]&lt;br /&gt;
= Identification =&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
&amp;gt;AT I&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;AT @1&lt;br /&gt;
SCANTOOL.NET LLC&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STDI&lt;br /&gt;
OBDLink LX BT r1.2&lt;br /&gt;
&lt;br /&gt;
&amp;gt;STI&lt;br /&gt;
STN1155 v4.0.0&lt;br /&gt;
&amp;gt;AT RV&lt;br /&gt;
13.4V&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
= Where to Buy =&lt;br /&gt;
As of 2017-02 the device was available via [https://www.amazon.de/ScanTool-427201-OBDLink-Bluetooth-Professionelle/dp/B00H9S71LW Amazon] for some EUR 60 - as of 2017-08 the price is almost 100 EUR.&lt;br /&gt;
&lt;br /&gt;
As of 2017-06 it is advertised for some US50 at:&lt;br /&gt;
https://www.scantool.net/obdlink-lxbt/&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Connecting to an OBDLink LX from Linux ==&lt;br /&gt;
the following was tested on a {{Link|target=Raspberry PI}}&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth pairing with bluetoothctl ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
bluetoothctl&lt;br /&gt;
agent on&lt;br /&gt;
scan on&lt;br /&gt;
Discovery started&lt;br /&gt;
...&lt;br /&gt;
[NEW] Device 00:04:3E:9F:A3:C0 OBDLink LX&lt;br /&gt;
pair 00:04:3E:9F:A3:C0&lt;br /&gt;
Attempting to pair with 00:04:3E:9F:A3:C0&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Class: 0x020300&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Icon: network-wireless&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Connected: yes&lt;br /&gt;
Request confirmation&lt;br /&gt;
[agent] Confirm passkey 559460 (yes/no): yes&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 UUIDs:&lt;br /&gt;
	00001101-0000-1000-8000-00805f9b34fb&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Paired: yes&lt;br /&gt;
Pairing successful&lt;br /&gt;
[CHG] Device 00:04:3E:9F:A3:C0 Trusted: yes&lt;br /&gt;
Changing 00:04:3E:9F:A3:C0 trust succeeded&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting up an rfcomm device ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
sudo rfcomm bind rfcomm0 00:04:3E:9F:A3:C0&lt;br /&gt;
ls -l /dev/rfcomm0&lt;br /&gt;
crw-rw---- 1 root dialout 216, 0 Jun 21 21:41 /dev/rfcomm0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
minicom -D /dev/rfcomm0 115200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testing with a python script ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python3 source/java/can4eve/scripts/obdtest.py &lt;br /&gt;
&amp;gt;K&lt;br /&gt;
&amp;gt;LM327 v1.3a&lt;br /&gt;
&amp;gt;KE0&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ELM327 v1.3a&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
ISO 15765-4 (CAN 11/500)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Forwarding the OBDII Adapter via TCP/IP ===&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
python source/java/can4eve/scripts/tcp_serial_redirect.py --debug -P 7000 /dev/rfcomm0 115200&lt;br /&gt;
--- TCP/IP to Serial redirect on /dev/rfcomm0  115200,8,N,1 ---&lt;br /&gt;
--- type Ctrl-C / BREAK to quit&lt;br /&gt;
Waiting for connection on 7000...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
At this point your OBDLink LX is available via LAN - you can simply do a telnet host 7000 to the server where you ran the commands.&lt;br /&gt;
The can4eve software can now use the bluetooth device as if it was a Wifi/LAN device&lt;br /&gt;
&lt;br /&gt;
= What links here =&lt;br /&gt;
{{WhatLinksHere}}&lt;br /&gt;
= Picture =&lt;br /&gt;
[[Has image::File:OBDLinkLX .jpg]]&lt;br /&gt;
[[Category:can4eve]]&lt;br /&gt;
[[Category:ELM327]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1059</id>
		<title>Raspberry PI</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Raspberry_PI&amp;diff=1059"/>
		<updated>2018-08-08T06:33:44Z</updated>

		<summary type="html">&lt;p&gt;Wf: Created page with &amp;quot;To run on a Raspberry PI you need a properly configured device. Here is an example:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To run on a Raspberry PI you need a properly configured device.&lt;br /&gt;
Here is an example:&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Main_Page&amp;diff=1058</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Main_Page&amp;diff=1058"/>
		<updated>2018-08-08T06:32:27Z</updated>

		<summary type="html">&lt;p&gt;Wf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:Sunflower.png|128px|left]]&lt;br /&gt;
[[File:Profiwikiicon.png|128px|right]]&lt;br /&gt;
= What is can4eve? =&lt;br /&gt;
can4eve &lt;br /&gt;
* is a software for electric vehicles&lt;br /&gt;
* it reads, analyzes, visualizes, stores and replays CAN bus data from the vehicle taken via an OBDII adapter&lt;br /&gt;
* is an open source software project see https://github.com/BITPlan/can4eve&lt;br /&gt;
&lt;br /&gt;
== Supported Vehicles ==&lt;br /&gt;
{{#ask:&lt;br /&gt;
 [[Category:Vehicle]]&lt;br /&gt;
 [[Has image::+]]&lt;br /&gt;
 |?Has image=image&lt;br /&gt;
 |?can4eve support&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
as of 2017-06 only {{Link|target=Triplet}} cars: Mitsubishi i-Miev, Citroën C-Zero, Peugeot-Ion are supported&lt;br /&gt;
The support for the {{Link|target=Mitsubishi Outlander PHEV}} is in preparation.&lt;br /&gt;
See also {{Link|target=Help/VehicleTypes}}&lt;br /&gt;
&lt;br /&gt;
= Contents =&lt;br /&gt;
__TOC__&lt;br /&gt;
== Supported OBDII-Adapters ==&lt;br /&gt;
{{#ask:&lt;br /&gt;
 [[Category:ELM327]]&lt;br /&gt;
 [[Has image::+]]&lt;br /&gt;
 |?Has image=image&lt;br /&gt;
 |?can4eve support&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Supported Platforms ==&lt;br /&gt;
&lt;br /&gt;
can4eve is written in Java&lt;br /&gt;
It has been tested on&lt;br /&gt;
* {{Link|target=Raspberry PI}}&lt;br /&gt;
* {{Link|target=MacOS}}&lt;br /&gt;
* {{Link|target=Windows}}&lt;br /&gt;
&lt;br /&gt;
An Android version is in preparation.&lt;br /&gt;
&lt;br /&gt;
Since Apple does not support Java on the iPhone and since Microsoft does not support Java on some of its environments can4eve &lt;br /&gt;
would have to be ported to run in these environments. Currently there are no concrete plans to work around this. Since can4eve uses JavaFX it is certainly feasible to get an iPhone and other ports. [http://openjdk.java.net/projects/mobile/ Oracle mobile] might also be a future option&lt;br /&gt;
to support many more mobile devices.&lt;br /&gt;
&lt;br /&gt;
== State of the project ==&lt;br /&gt;
* the software is in alpha/beta - experimental state - it has only been tested with a handful of vehicles so far&lt;br /&gt;
* as of 2017-06-08 the software is not available for endusers yet. &lt;br /&gt;
* As an interested developer you can follow the {{Link|target=Installation}} instructions.&lt;br /&gt;
* We are looking for alpha and beta testers see e.g. [http://www.goingelectric.de/forum/c-zero-i-miev-ion/alpha-tester-fuer-neue-obdii-can-software-can4eve-gesucht-t24625.html german Triplet] and [http://www.goingelectric.de/forum/mitsubishi-plug-in-hybrid-outlander/ Outlander PHEV] forum&lt;br /&gt;
* https://github.com/BITPlan/can4eve/issues/4 is been worked on see {{Link|target=Simple Report}}&lt;br /&gt;
==== Screen Shots ====&lt;br /&gt;
===== Odometer =====&lt;br /&gt;
[[File:screenShot_Odometer_2017-08-16_103323.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===== Dashboard / Clocks =====&lt;br /&gt;
[[File:screenShot_RPM_2017-08-16_102742.png|600px]]&lt;br /&gt;
[[File:screenShot_Clocks_2017-08-16_102206.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Charging ===&lt;br /&gt;
[[File:screenShot_SOC_2017-08-16_103106.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Battery Cell states / SOC-RR history===&lt;br /&gt;
[[File:screenShot_Cell Voltage_2017-07-11_235316.png|600px]]&lt;br /&gt;
[[File:screenShot_Cell Temp_2017-07-11_235321.png|600px]]&lt;br /&gt;
[[File:socrr2017-06-18.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== General OBD info (debug) ===&lt;br /&gt;
[[File:Screenshot2017-06-18.png|600px]]&lt;br /&gt;
[[File:data2-2017-06-18.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
See {{Link|target=Help#Installation}}&lt;br /&gt;
&lt;br /&gt;
=== Building the software yourself ===&lt;br /&gt;
can4eve uses maven a build platform&lt;br /&gt;
see test video below.&lt;br /&gt;
&lt;br /&gt;
=== Developer / Unit Test ===&lt;br /&gt;
The software runs a test suite on each release.&lt;br /&gt;
If you want you can run the {{Link|target=JUnit tests|title=automated tests for can4eve}} yourself on your own development platform.&lt;br /&gt;
The following video shows an example of such a test run and how it should work in your environment in principle. The nice side effect is&lt;br /&gt;
that you get a preview of some of the features of the software this way.&lt;br /&gt;
&amp;lt;HTML5video width=&amp;quot;960&amp;quot; height=&amp;quot;600&amp;quot; autoplay=&amp;quot;false&amp;quot; loop=&amp;quot;false&amp;quot;&amp;gt;can4eveTest2017-08-16&amp;lt;/HTML5video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running from command line ===&lt;br /&gt;
As of 2017-06 the jar created by the rebuild script is compiled for the {{Link|target=Triplet}} vehicles.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
java -jar target/com.bitplan.obdii-0.0.1-jar-with-dependencies.jar -h&lt;br /&gt;
Help&lt;br /&gt;
CANTriplet: 0.0.1&lt;br /&gt;
&lt;br /&gt;
  usage: java CANTriplet&lt;br /&gt;
 --display [None | Console | Swing] : display&lt;br /&gt;
                                      the display to use one of:&lt;br /&gt;
                                       None,Console,Swing&lt;br /&gt;
 --host (--hostname) WERT           : host&lt;br /&gt;
                                      the host to connect to&lt;br /&gt;
 --limit (--framelimit) N           : limit&lt;br /&gt;
                                      the maximum number of frames to read&lt;br /&gt;
 --port (--portnumber) N            : port&lt;br /&gt;
                                      the port to connect to&lt;br /&gt;
 --vg (--vehicle-group) WERT        : vehicleGroup&lt;br /&gt;
                                      the vehicleGroup to connect to&lt;br /&gt;
 -c (--conn) WERT                   : connection device&lt;br /&gt;
                                      the connection to use&lt;br /&gt;
 -d (--debug)                       : debug&lt;br /&gt;
                                      create additional debug output if this&lt;br /&gt;
                                      switch is used&lt;br /&gt;
 -h (--help)                        : help&lt;br /&gt;
                                      show this usage&lt;br /&gt;
 -l (--log) WERT                    : log&lt;br /&gt;
                                      the logfile to write&lt;br /&gt;
 -p (--pid) WERT                    : pid to monitor&lt;br /&gt;
                                      the pid to monitor&lt;br /&gt;
 -t (--timeout) N                   : timeout in msecs&lt;br /&gt;
                                      the timeout for elm327 communication&lt;br /&gt;
 -v (--version)                     : showVersion&lt;br /&gt;
                                      show current version if this switch is&lt;br /&gt;
                                      used&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
https://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
&lt;br /&gt;
=== Creator ===&lt;br /&gt;
[[File:BITPlanLogo2012.svg|200px|link=http://web.bitplan.com]]&lt;br /&gt;
&lt;br /&gt;
= Other Apps =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Vehicles !! Icon !! App !! Link&lt;br /&gt;
|-&lt;br /&gt;
| Mitsubishi i-Miev, Citroen C-Zero, Peugeot Ion || || {{Link|target=CanIon}} || https://play.google.com/store/apps/details?id=emobility.canion&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
| [[File:Canze-icon-shading.png|64px]] || {{Link|target=CANZE}} ||  http://canze.fisch.lu/&lt;br /&gt;
|-&lt;br /&gt;
| Outlander PHEV || [[File:SmallEvLogo.png|64px]] || EVBatMon for PHEV || http://evpositive.com/evbatmon-for-phev.html&lt;br /&gt;
|-&lt;br /&gt;
| Nissan Leaf || [[File:LeafSpyLogo.png|64px]] || Leaf Spy || https://play.google.com/store/apps/details?id=com.Turbo3.Leaf_Spy_Lite&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
|Tesla || [[File:TM-SpyLogo.png|64px]] || TM-Spy || https://play.google.com/store/apps/details?id=com.Turbo3.TMSpy&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Combustion engine cars || [[File:TorqueLogo.png|64px]] || Torque Pro || https://play.google.com/store/apps/details?id=org.prowl.torque&amp;amp;hl=de&lt;br /&gt;
|-&lt;br /&gt;
| Combustion engine cars || [[File:EasyOBDIILogo.png|64px]] || Easy OBDII || http://www.easyobdii.com/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
=== EVBatMon ===&lt;br /&gt;
''Our App not only gives you access to  internal information at your fingertips, it will also track the health of the Li On drive battery over time and against distance. ''&lt;br /&gt;
https://c.apk.plus/screenshots/5/c/4/com.EvPositive.EvBatMon_6.png&lt;br /&gt;
&lt;br /&gt;
=== LeafSpy ===&lt;br /&gt;
''Leaf Spy Lite lets a Nissan Leaf owner view detailed information about their Leaf's battery by plugging in an inexpensive ELM-327 Bluetooth OBDII adapter into the standard OBDII port on the Leaf. ELM-327 Bluetooth adapters are available on eBay for around $10-$20 and one is required before Leaf Spy Lite can display information from your Leaf.''&lt;br /&gt;
[[File:Main-qimg-eaec4f6a0b00c9fc98d84f1b376f811a.png]]&lt;br /&gt;
&lt;br /&gt;
=== TM-Spy ===&lt;br /&gt;
''TM-Spy uses a standard ELM 327 type Bluetooth or WiFi OBDII adapter to decode information from the CAN service plug located below the center display screen. Check the internet for how to access this cable and the specifications for the custom adapter cable required to go from the Tesla 12 pin connector to the standard 16 pin OBDII connector which the ELM 327 adapter plugs into.''&lt;br /&gt;
&lt;br /&gt;
[[File:TM-3-Screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* https://www.quora.com/What-is-a-good-OBD2-that-is-compatible-with-Electric-Cars&lt;br /&gt;
* http://ion.bitplan.com&lt;br /&gt;
[[Category:can4eve]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
	<entry>
		<id>http://can4eve.bitplan.com/index.php?title=Cantriplet&amp;diff=1057</id>
		<title>Cantriplet</title>
		<link rel="alternate" type="text/html" href="http://can4eve.bitplan.com/index.php?title=Cantriplet&amp;diff=1057"/>
		<updated>2018-07-31T15:02:23Z</updated>

		<summary type="html">&lt;p&gt;Wf: /* Cell numbering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOCACHE__&lt;br /&gt;
see https://github.com/BITPlan/can4eve/issues/2&lt;br /&gt;
These are the OBDII PIDs for the {{Link|target=Triplet}} Cars &lt;br /&gt;
= PIDs =&lt;br /&gt;
{{#ask: [[Concept:PID]]&lt;br /&gt;
| ?PID id = id&lt;br /&gt;
| ?PID name = name&lt;br /&gt;
| ?PID description = description&lt;br /&gt;
| ?PID frequency = frequency&lt;br /&gt;
| ?PID links = links&lt;br /&gt;
| ?PID examples = examples&lt;br /&gt;
| mainlabel=link&lt;br /&gt;
| sort=PID id&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
=== PIDS ===&lt;br /&gt;
* https://github.com/openvehicles/Open-Vehicle-Monitoring-System/blob/master/vehicle/OVMS.X/vehicle_mitsubishi.c&lt;br /&gt;
* https://github.com/plaes/i-miev-obd2&lt;br /&gt;
* https://github.com/harite/i-miev-obd2/blob/master/docs/research.txt&lt;br /&gt;
* http://prius-touring-club.com/vbf/showthread.php?t=3830&lt;br /&gt;
* http://myimiev.com/forum/viewtopic.php?f=25&amp;amp;t=763&amp;amp;sid=023d63954d59057b1b3b9eeab88ce541&lt;br /&gt;
* https://www.dropbox.com/s/m36u0j905xgfi6a/i-Miev%20CAN-PID.xlsx&lt;br /&gt;
* http://lists.teslaclub.hk/pipermail/ovmsdev/2013-September/001543.html&lt;br /&gt;
&lt;br /&gt;
=== OBD Monitoring ===&lt;br /&gt;
* https://gist.github.com/JamesHagerman/18047979da6f4fd680eb&lt;br /&gt;
&lt;br /&gt;
= Battery Pack =&lt;br /&gt;
* http://4.bp.blogspot.com/-ajk7Nq1dvDY/UOxiUaup0PI/AAAAAAAAAAs/F5CS1pKJ4Ok/s1600/mitsubishi-i-miev-battery-pack-photo-335601-s-1280x782.jpg&lt;br /&gt;
== Cell numbering ==&lt;br /&gt;
* [[File:packnumbering.jpeg|400px]] (from &amp;lt;pre&amp;gt;http://fsamw.myevblog.com/files/2015/06/pack_numbering-300x190.png&amp;lt;/pre&amp;gt; which seems not to work any more)&lt;br /&gt;
* http://myimiev.com/forum/viewtopic.php?f=23&amp;amp;t=1853&lt;br /&gt;
* https://www.mysnip.de/forum-archiv/thema-28653-375830/Zuordung+Daten+aus+der+caniOn+App+zu+den+Akkuzellen.html&lt;br /&gt;
* http://www.umdenken.at/images_old/i-MiEV_OBD/Temp_Nr64/1-i-MiEV_Battery_Cells_and_Temperature_Sensors.jpg&lt;br /&gt;
* http://i.imgur.com/C6DcyF4.png&lt;br /&gt;
&lt;br /&gt;
[[Category:cantriplet]]&lt;br /&gt;
[[Category:can4eve]]&lt;/div&gt;</summary>
		<author><name>Wf</name></author>
	</entry>
</feed>