anetczuk / linakdeskapp Goto Github PK
View Code? Open in Web Editor NEWDesktop application that allows control of Linak office desk under Linux
License: MIT License
Desktop application that allows control of Linak office desk under Linux
License: MIT License
When I try to start I get the following error:
LinakDeskApp/src$ python3 -m linakdeskapp*
Traceback (most recent call last):
File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/main.py", line 7, in
from .main import main
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/main.py", line 46, in
from linakdeskapp.bt_device_connector import BTDeviceConnector
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/bt_device_connector.py", line 43, in
from linak_dpg_bt.linak_device import LinakDesk
ModuleNotFoundError: No module named 'linak_dpg_bt'
Hi Anetczuk,
At first: great project and thanks for sharing it at GitHub!
I bought an Inwerk Masterlift 2.
The Linak components are CBD6S 300W and I use a DPG1M (its the one without the lightstrip and without the display showing the hight).
My command opening your app:
sudo python3 src/linakdeskapp/main.py
I am able to connect and it is showing all the information. If my desk goes up and down (by my DPG1M) all the values are updated immediately.
If I click on "up" nothing is happening even if I press it longer (the other buttons do not work either). The log output is:
2020-05-09 11:08:46,695 DEBUG NotifHndlr-2 linak_dpg_bt.linak_device.LinakDesk:_handle_heigh_speed_notification [linak_device.py:714] Received height: 9960 3160 data: HeightSpeed[DeskPosition[3160] DeskSpeed[0]]
2020-05-09 11:09:01,213 INFO MainThread linak_dpg_bt.desk_mover.DeskMoverThread:moveUp [desk_mover.py:122] moving up
2020-05-09 11:09:01,216 INFO MainThread linak_dpg_bt.desk_mover.DeskMoverThread:stopMoving [desk_mover.py:157] stopping device
2020-05-09 11:09:01,252 DEBUG MainThread linak_dpg_bt.connection.BTLEConnection:_send_command_single [connection.py:225] Sending ControlCommand.STOP_MOVING: 0xFF 0x00 to Characteristic.CONTROL[99FA0002-338A-1024-8A49-009C0215F78A, 0xe] w_resp=False
2020-05-09 11:09:01,255 INFO MainThread linak_dpg_bt.desk_mover.DeskMoverThread:spawnThread [desk_mover.py:164] new thread spawned <CommandThread(DeskMover-7, started daemon 140648759031552)>
2020-05-09 11:09:01,314 INFO MainThread linak_dpg_bt.desk_mover.DeskMoverThread:stopMoving [desk_mover.py:155] stopping thread <CommandThread(DeskMover-7, started daemon 140648759031552)>
2020-05-09 11:09:01,756 DEBUG DeskMover-7 linak_dpg_bt.connection.BTLEConnection:_send_command_single [connection.py:225] Sending ControlCommand.MOVE_1_UP: 0x47 0x00 to Characteristic.CONTROL[99FA0002-338A-1024-8A49-009C0215F78A, 0xe] w_resp=False
2020-05-09 11:09:01,757 DEBUG DeskMover-7 linak_dpg_bt.desk_mover.CommandThread:_thread_loop [desk_mover.py:106] thread terminated
2020-05-09 11:09:01,757 INFO MainThread linak_dpg_bt.desk_mover.DeskMoverThread:stopMoving [desk_mover.py:157] stopping device
2020-05-09 11:09:02,258 DEBUG MainThread linak_dpg_bt.connection.BTLEConnection:_send_command_single [connection.py:225] Sending ControlCommand.STOP_MOVING: 0xFF 0x00 to Characteristic.CONTROL[99FA0002-338A-1024-8A49-009C0215F78A, 0xe] w_resp=False
What could be the reason? How can I fix it?
Thank you in advance!
Kind regards,
Lennard
I tried this app (master clone) and failing. I'm using Gentoo Linux.
Environment:
Linux 5.9.2-gentoo #2 SMP Sat Nov 7 13:43:31 CET 2020
Python 3.8.6
Matplotlib 3.3.3 (with wxwidgets, cairo, qt5)
Pandas 1.1.4-r1
Hardware: Linak DPG1C
Executing python3 -m linakdeskapp
results in:
2020-11-28 20:35:58,177 DEBUG MainThread linakdeskapp.main:main [main.py:108] Starting the application
2020-11-28 20:35:58,177 DEBUG MainThread linakdeskapp.main:main [main.py:109] Logger log file: /home/mono/.projects/LinakDeskApp/src/log.txt
/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py:39: MatplotlibDeprecationWarning:
The _init_toolbar function was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use __init__ instead.
self._init_toolbar() ## add current buttons
2020-11-28 20:35:58,632 ERROR MainThread linakdeskapp.main:main [main.py:131] Exception occurred
Traceback (most recent call last):
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/main.py", line 124, in main
exitCode = runApp(args)
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/main.py", line 77, in runApp
window = MainWindow()
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/main_window.py", line 51, in __init__
self.ui.setupUi(self)
File "<string>", line 26, in setupUi
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/app_settings_widget.py", line 85, in __init__
self.ui.setupUi(self)
File "<string>", line 41, in setupUi
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/position_chart_widget.py", line 57, in __init__
self.toolbar = DynamicToolbar(self.ui.positionChart, self)
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py", line 27, in __init__
self.removeButton( 'Subplots' )
File "/home/mono/.projects/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py", line 39, in removeButton
self._init_toolbar() ## add current buttons
File "/usr/lib/python3.8/site-packages/matplotlib/cbook/deprecation.py", line 234, in wrapper
return func(*args, **kwargs)
File "/usr/lib/python3.8/site-packages/matplotlib/backend_bases.py", line 2942, in _init_toolbar
raise NotImplementedError
NotImplementedError
2020-11-28 20:35:58,634 INFO MainThread linakdeskapp.main:main [main.py:147] Calculation time: 456.26497269ms
May i need some different versions of libraries? To be honest, i didn't worked yet with matplotlib and not sure, whats its trying here.
If i should try something, please let me know.
Thanks and best regards.
Having this app as Flatpak will be great since it will make it easily installable in every Linux distro that supports Flatpak, which is almost everyone. Uploading it to https://flathub.org/ will make it visible and allow everyone to easily install it.
Minor stuff, just noticed that configure_all.sh fails on executing install_reqs.sh
$ ./configure_all.sh
Installing dependencies
./configure_all.sh: line 13: /[...]/LinakDeskApp/src/install_reqs.sh: Permission denied
Other than that, seems that configure_all.sh nor configure_autostart.sh is called during installation.
Thanks for the project!
Hey,
I really like your App. More than the Original one.
Would it be possible, to get it working on Windows systems?
As I see, you are using bluepy, which is not running on other systems than Linux.
Are there bluetooth libraries which are working on both systems and do not need much modification of your code?
I would love it
This repo contains an MIT license, but the https://github.com/anetczuk/linak_bt_desk/ library doesn't, which makes it hard to know if another app (e.g. if I were to fork https://github.com/rhyst/idasen-controller) would be able to use it.
(that repo doesn't include an issue tracker, so am filing this here)
See companion ticket in upstream repo here: zewelor/linak_bt_desk#3
Considering, #3 is fixed, if the application was never started yet, following error appears (in CLI/log):
2020-11-28 21:53:13,278 DEBUG MainThread linakdeskapp.main:main [main.py:108] Starting the application
2020-11-28 21:53:13,280 DEBUG MainThread linakdeskapp.main:main [main.py:109] Logger log file: /home/mono/.projects/LinakDeskApp/src/log.txt
2020-11-28 21:53:13,774 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:start [suspenddetector.py:49] starting suspension detector
2020-11-28 21:53:13,781 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:setIconTheme [main_window.py:102] setting tray theme: <TrayIconTheme.WHITE: ('office-chair-gray.png', 'office-chair-white.png', 'office-chair-red.png')>
2020-11-28 21:53:13,785 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
2020-11-28 21:53:13,788 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:loadSettings [main_window.py:145] loading app state from /home/mono/.config/arnet/LinakDeskApp.ini
2020-11-28 21:53:13,788 DEBUG MainThread linakdeskapp.gui.app_settings_widget.AppSettingsWidget:_toggleAutoReconnectTime [app_settings_widget.py:182] setting auto reconnect timer to 60
2020-11-28 21:53:13,788 WARNING MainThread linakdeskapp.gui.app_settings_widget.AppSettingsWidget:_setCurrentTrayTheme [app_settings_widget.py:319] could not find index for theme: ''
2020-11-28 21:53:13,790 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
2020-11-28 21:53:13,794 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_tryReconnectOnStartup [main_window.py:98] trying reconnect on startup
2020-11-28 21:53:13,795 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.CONN_IN_PROGRESS
2020-11-28 21:53:13,795 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
2020-11-28 21:53:13,798 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
2020-11-28 21:53:13,816 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:288] Worker start
2020-11-28 21:53:13,822 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:__init__ [connection.py:62] Constructed BTLEConnection object: <linak_dpg_bt.connection.BTLEConnection object at 0x7f3b78380d90>
2020-11-28 21:53:13,823 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:__init__ [linak_device.py:109] Constructed LinakDesk object: <linak_dpg_bt.linak_device.LinakDesk object at 0x7f3b78380af0>
2020-11-28 21:53:13,823 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:_connect [linak_device.py:347] Initializing the device
2020-11-28 21:53:13,823 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:connect [connection.py:95] Trying to connect to
2020-11-28 21:53:13,823 ERROR Connect-1 linak_dpg_bt.linak_device.LinakDesk:initialize [linak_device.py:343] Initialization failed: <class 'ValueError'> Expected MAC address, got ''
Traceback (most recent call last):
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/linak_device.py", line 340, in initialize
self._connect()
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/linak_device.py", line 348, in _connect
with self._conn as conn:
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/synchronized.py", line 80, in decorator
return func(self, *args, **kws)
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 75, in __enter__
self.connect()
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/synchronized.py", line 80, in decorator
return func(self, *args, **kws)
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 37, in wrapper
return func(*args)
File "/home/mono/.projects/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 101, in connect
self._conn.connect(self._mac, addrType='random')
File "/home/mono/.local/lib/python3.8/site-packages/bluepy/btle.py", line 445, in connect
self._connect(addr, addrType, iface)
File "/home/mono/.local/lib/python3.8/site-packages/bluepy/btle.py", line 423, in _connect
raise ValueError("Expected MAC address, got %s" % repr(addr))
ValueError: Expected MAC address, got ''
2020-11-28 21:53:13,825 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_initializeDevice [bt_device_connector.py:119] Could not connect to to device: <linak_dpg_bt.linak_device.LinakDesk object at 0x7f3b78380af0>
2020-11-28 21:53:13,826 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.DISCONNECTED
2020-11-28 21:53:13,826 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:290] Worker complete
2020-11-28 21:53:13,830 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
2020-11-28 21:53:13,850 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:125] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7f3b783779d0>
Obviously its trying to connect to an empty MAC address which will not work.
Can this app be via console only? If so, could you add the commands to the documentation?
I followed the README.md and could not run the programs. Im using ubuntu 20. Where can I get these dependencies prompted in the error message?
Error should not be throwed.
./src/linakdeskctl
Traceback (most recent call last):
File "/home/linux_user/anaconda3/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/linux_user/anaconda3/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/__main__.py", line 7, in <module>
from .main import main
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/main.py", line 46, in <module>
from linakdeskapp.bt_device_connector import BTDeviceConnector
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/bt_device_connector.py", line 43, in <module>
from linak_dpg_bt.linak_device import LinakDesk
ModuleNotFoundError: No module named 'linak_dpg_bt'
./src/linakdeskapp/main.py
Traceback (most recent call last):
File "./src/linakdeskapp/main.py", line 46, in <module>
from linakdeskapp.bt_device_connector import BTDeviceConnector
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/bt_device_connector.py", line 43, in <module>
from linak_dpg_bt.linak_device import LinakDesk
ModuleNotFoundError: No module named 'linak_dpg_bt'
cd src; python3 -m linakdeskapp
Traceback (most recent call last):
File "/home/linux_user/anaconda3/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/linux_user/anaconda3/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/__main__.py", line 7, in <module>
from .main import main
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/main.py", line 46, in <module>
from linakdeskapp.bt_device_connector import BTDeviceConnector
File "/home/linux_user/Desktop/some_folder/some_folder/LinakDeskApp/src/linakdeskapp/bt_device_connector.py", line 43, in <module>
from linak_dpg_bt.linak_device import LinakDesk
ModuleNotFoundError: No module named 'linak_dpg_bt'
Similar to #6, I wonder if this would work on MacOS?
It seems that Bluepy is Linux only. Is that correct?
Glad to submit the first issue in this repository. Very nice work, this application looks great.
I am getting an error of some kind when I try to connect to my IKEA Linak powered standing desk.
Here is a link to the desk.
https://www.ikea.com/gb/en/p/idasen-desk-sit-stand-black-dark-grey-s89280993/
If this desk isn't supported I'm not here to chase you down to make you support the IKEA desks but could you maybe share some insights into how you managed to create this application? I'm not a Python programmer myself so I can't help too much with coding.
I tried asking Linak if they had some documentation but they responded by saying that was proprietary information. Do you have any advice for someone who hasn't programmed against a bluetooth interface before on how to reverse engineer and figure out how to connect to a Linak desk?
Bluetooth command failed (code: 1, error: Invalid handle) seems to be the important bit where it fails.
linak_dpg_bt.connection.BTLEConnection:read_characteristic_by_enum [connection.py:292] Got exception from bluepy while making a request: Bluetooth command failed (code: 1, error: Invalid handle)
linak_dpg_bt.connection:wrapper [connection.py:39] bluetooth exception occurred: <class 'bluepy.btle.BTLEGattError'> Bluetooth command failed (code: 1, error: Invalid handle)
linak_dpg_bt.connection.BTLEConnection:disconnect [connection.py:118] disconnecting
Here is the full log
2020-02-19 15:19:11,935 DEBUG MainThread __main__:main [main.py:108] Starting the application
2020-02-19 15:19:11,935 DEBUG MainThread __main__:main [main.py:109] Logger log file: /home/hermann/Programs/LinakDeskApp/log.txt
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
2020-02-19 15:19:11,984 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:start [suspenddetector.py:44] starting suspension detector
2020-02-19 15:19:11,985 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:setIconTheme [main_window.py:102] setting tray theme: <TrayIconTheme.WHITE: ('office-chair-gray.png', 'office-chair-white.png', 'office-chair-red.png')>
2020-02-19 15:19:11,989 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:loadSettings [main_window.py:142] loading app state from /root/.config/arnet/LinakDeskApp.ini
2020-02-19 15:19:11,990 DEBUG MainThread linakdeskapp.gui.app_settings_widget.AppSettingsWidget:_toggleAutoReconnectTime [app_settings_widget.py:182] setting auto reconnect timer to 60
2020-02-19 15:19:11,990 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_tryReconnectOnStartup [main_window.py:98] trying reconnect on startup
2020-02-19 15:19:11,990 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.CONN_IN_PROGRESS
2020-02-19 15:19:12,20 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:287] Worker start
2020-02-19 15:19:12,23 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:__init__ [connection.py:62] Constructed BTLEConnection object: <linak_dpg_bt.connection.BTLEConnection object at 0x7fb9c3045a60>
2020-02-19 15:19:12,23 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:__init__ [linak_device.py:109] Constructed LinakDesk object: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fb9c30457c0>
2020-02-19 15:19:12,23 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:_connect [linak_device.py:347] Initializing the device
2020-02-19 15:19:12,23 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:connect [connection.py:95] Trying to connect to
2020-02-19 15:19:12,23 ERROR Connect-1 linak_dpg_bt.linak_device.LinakDesk:initialize [linak_device.py:343] Initialization failed: <class 'ValueError'> Expected MAC address, got ''
2020-02-19 15:19:12,23 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_initializeDevice [bt_device_connector.py:119] Could not connect to to device: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fb9c30457c0>
2020-02-19 15:19:12,23 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.DISCONNECTED
2020-02-19 15:19:12,24 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:289] Worker complete
// Scan for desk
2020-02-19 15:19:16,45 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:74] Scanning bluetooth devices
2020-02-19 15:19:18,277 DEBUG MainThread linak_dpg_bt.linak_device.LinakDesk:__del__ [linak_device.py:112] Deleting LinakDesk object: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fb9c30457c0>
2020-02-19 15:19:18,277 DEBUG MainThread linak_dpg_bt.connection.BTLEConnection:__del__ [connection.py:87] Deleting BTLEConnection object: <linak_dpg_bt.connection.BTLEConnection object at 0x7fb9c3045a60>
2020-02-19 15:19:18,277 DEBUG MainThread linak_dpg_bt.connection.BTLEConnection:disconnect [connection.py:118] disconnecting
2020-02-19 15:19:26,298 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:90] Scanning finished
2020-02-19 15:19:26,300 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:checkResumed [suspenddetector.py:62] resumed from suspend / hibernation after 10.512005[s]
2020-02-19 15:19:26,316 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:74] Scanning bluetooth devices
2020-02-19 15:19:36,458 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:90] Scanning finished
2020-02-19 15:19:36,458 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:checkResumed [suspenddetector.py:62] resumed from suspend / hibernation after 10.158263[s]
2020-02-19 15:19:40,27 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:74] Scanning bluetooth devices
2020-02-19 15:19:50,281 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:scanDevices [bt_device_connector.py:90] Scanning finished
2020-02-19 15:19:50,283 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:checkResumed [suspenddetector.py:62] resumed from suspend / hibernation after 10.97479[s]
2020-02-19 15:19:54,537 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.CONN_IN_PROGRESS
// Connect to my IKEA desk, failed connection
2020-02-19 15:19:54,539 DEBUG Connect-2 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:287] Worker start
2020-02-19 15:19:54,539 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:__init__ [connection.py:62] Constructed BTLEConnection object: <linak_dpg_bt.connection.BTLEConnection object at 0x7fb9c3045ca0>
2020-02-19 15:19:54,540 DEBUG Connect-2 linak_dpg_bt.linak_device.LinakDesk:__init__ [linak_device.py:109] Constructed LinakDesk object: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fb9c3045d00>
2020-02-19 15:19:54,540 DEBUG Connect-2 linak_dpg_bt.linak_device.LinakDesk:_connect [linak_device.py:347] Initializing the device
2020-02-19 15:19:54,540 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:connect [connection.py:95] Trying to connect to f1:0c:41:3a:4b:20
2020-02-19 15:19:54,786 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:connect [connection.py:112] Connected to f1:0c:41:3a:4b:20
2020-02-19 15:19:55,322 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.HEIGHT_SPEED[99FA0021-338A-1024-8A49-009C0215F78A, 0x1d]
2020-02-19 15:19:55,323 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.HEIGHT_SPEED[99FA0021-338A-1024-8A49-009C0215F78A, 0x1d] w_resp=False
2020-02-19 15:19:55,324 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.TWO[99FA0022-338A-1024-8A49-009C0215F78A, 0x20]
2020-02-19 15:19:55,324 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.TWO[99FA0022-338A-1024-8A49-009C0215F78A, 0x20] w_resp=False
2020-02-19 15:19:55,325 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.THREE[99FA0023-338A-1024-8A49-009C0215F78A, 0x23]
2020-02-19 15:19:55,325 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.THREE[99FA0023-338A-1024-8A49-009C0215F78A, 0x23] w_resp=False
2020-02-19 15:19:55,326 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.FOUR[99FA0024-338A-1024-8A49-009C0215F78A, 0x26]
2020-02-19 15:19:55,326 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.FOUR[99FA0024-338A-1024-8A49-009C0215F78A, 0x26] w_resp=False
2020-02-19 15:19:55,326 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.FIVE[99FA0025-338A-1024-8A49-009C0215F78A, 0x29]
2020-02-19 15:19:55,327 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.FIVE[99FA0025-338A-1024-8A49-009C0215F78A, 0x29] w_resp=False
2020-02-19 15:19:55,327 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.SIX[99FA0026-338A-1024-8A49-009C0215F78A, 0x2c]
2020-02-19 15:19:55,327 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.SIX[99FA0026-338A-1024-8A49-009C0215F78A, 0x2c] w_resp=False
2020-02-19 15:19:55,328 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.SEVEN[99FA0027-338A-1024-8A49-009C0215F78A, 0x2f]
2020-02-19 15:19:55,328 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.SEVEN[99FA0027-338A-1024-8A49-009C0215F78A, 0x2f] w_resp=False
2020-02-19 15:19:55,329 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:231] Subscribing to Characteristic.EIGHT[99FA0028-338A-1024-8A49-009C0215F78A, 0x32]
2020-02-19 15:19:55,329 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:subscribe_to_notification_enum [connection.py:236] Writing value <class 'bytes'>:0x01 0x00 to Characteristic.EIGHT[99FA0028-338A-1024-8A49-009C0215F78A, 0x32] w_resp=False
2020-02-19 15:19:55,330 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:read_characteristic_by_enum [connection.py:284] Reading char: Characteristic.MASK[99FA0029-338A-1024-8A49-009C0215F78A, 0x35]
2020-02-19 15:19:55,516 ERROR Connect-2 linak_dpg_bt.connection.BTLEConnection:read_characteristic_by_enum [connection.py:292] Got exception from bluepy while making a request: Bluetooth command failed (code: 1, error: Invalid handle)
2020-02-19 15:19:55,517 ERROR Connect-2 linak_dpg_bt.connection:wrapper [connection.py:39] bluetooth exception occurred: <class 'bluepy.btle.BTLEGattError'> Bluetooth command failed (code: 1, error: Invalid handle)
2020-02-19 15:19:55,517 DEBUG Connect-2 linak_dpg_bt.connection.BTLEConnection:disconnect [connection.py:118] disconnecting
2020-02-19 15:19:55,521 ERROR Connect-2 linak_dpg_bt.linak_device.LinakDesk:initialize [linak_device.py:343] Initialization failed: <class 'bluepy.btle.BTLEGattError'> Bluetooth command failed (code: 1, error: Invalid handle)
2020-02-19 15:19:55,522 DEBUG Connect-2 linakdeskapp.bt_device_connector.BTDeviceConnector:_initializeDevice [bt_device_connector.py:119] Could not connect to to device: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fb9c3045d00>
2020-02-19 15:19:55,522 DEBUG Connect-2 linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.DISCONNECTED
2020-02-19 15:19:55,522 DEBUG Connect-2 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:289] Worker complete
When I try to start application I get the following error.
src$ python3 -m linakdeskapp*
2021-02-06 09:52:39,544 DEBUG MainThread linakdeskapp.main:main [main.py:108] Starting the application
2021-02-06 09:52:39,544 DEBUG MainThread linakdeskapp.main:main [main.py:109] Logger log file: /home/emil/programy/LinakDeskApp/src/log.txt
/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py:39: MatplotlibDeprecationWarning:
The _init_toolbar function was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use __init__ instead.
self._init_toolbar() ## add current buttons
2021-02-06 09:52:39,655 ERROR MainThread linakdeskapp.main:main [main.py:131] Exception occurred
Traceback (most recent call last):
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/main.py", line 124, in main
exitCode = runApp(args)
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/main.py", line 77, in runApp
window = MainWindow()
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/main_window.py", line 51, in __init__
self.ui.setupUi(self)
File "<string>", line 26, in setupUi
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/app_settings_widget.py", line 85, in __init__
self.ui.setupUi(self)
File "<string>", line 41, in setupUi
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/position_chart_widget.py", line 57, in __init__
self.toolbar = DynamicToolbar(self.ui.positionChart, self)
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py", line 27, in __init__
self.removeButton( 'Subplots' )
File "/home/emil/programy/LinakDeskApp/src/linakdeskapp/gui/mpl/mpl_toolbar.py", line 39, in removeButton
self._init_toolbar() ## add current buttons
File "/usr/lib/python3/dist-packages/matplotlib/cbook/deprecation.py", line 234, in wrapper
return func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 2942, in _init_toolbar
raise NotImplementedError
NotImplementedError
2021-02-06 09:52:39,658 INFO MainThread linakdeskapp.main:main [main.py:147] Calculation time: 113.75737190ms
I just bought a Linak SmartDesk with the DPG1C controller.
Bluetooth works with the official app (off course), but this application has issues connecting.
The connection process appears to hang while reading the MASK characteristic, here:
https://github.com/anetczuk/linak_bt_desk/blob/e782cf39b6dd2d255f5e184c60f614ed6b99b3af/linak_dpg_bt/linak_device.py#L375
When I swap the block after that, which retreives the name, that one works fine. Again getting the MASK blocks.
When I comment out the 3 lines getting the MASK (375-377), I get the debug information in the attached log.
linak-debug-log.txt
Please let me know what I can do to help solve this issue.
On my linux mint 21.3 laptop the app is unable to connect to the desk
This is the log:
2024-01-25 13:50:59,700 DEBUG MainThread __main__:main [main.py:109] Starting the application
2024-01-25 13:50:59,700 DEBUG MainThread __main__:main [main.py:110] Logger log file: /home/n/apps/LinakDeskApp/tmp/log/log.txt
2024-01-25 13:50:59,758 DEBUG MainThread linakdeskapp.gui.suspenddetector.QSuspendTimer:start [suspenddetector.py:49] starting suspension detector
2024-01-25 13:50:59,760 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:setIconTheme [main_window.py:103] setting tray theme: <TrayIconTheme.WHITE: ('office-chair-gray.png', 'office-chair-white.png', 'office-chair-red.png')>
2024-01-25 13:50:59,764 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
2024-01-25 13:50:59,766 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:loadSettings [main_window.py:146] loading app state from /home/n/.config/arnet/LinakDeskApp.ini
2024-01-25 13:50:59,766 DEBUG MainThread linakdeskapp.gui.app_settings_widget.AppSettingsWidget:_toggleAutoReconnectTime [app_settings_widget.py:182] setting auto reconnect timer to 60
2024-01-25 13:50:59,766 WARNING MainThread linakdeskapp.gui.app_settings_widget.AppSettingsWidget:_setCurrentTrayTheme [app_settings_widget.py:319] could not find index for theme: ''
2024-01-25 13:50:59,767 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
2024-01-25 13:50:59,768 INFO MainThread linakdeskapp.gui.webserver_settings_widget.WebServerSettingsWidget:attachConnector [webserver_settings_widget.py:40] desk connector attached to webserver <linakdeskapp.bt_device_connector.BTDeviceConnector object at 0x7fd6339afbe0>
2024-01-25 13:50:59,768 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_tryReconnectOnStartup [main_window.py:99] trying reconnect on startup
2024-01-25 13:50:59,768 DEBUG MainThread linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.CONN_IN_PROGRESS
2024-01-25 13:50:59,768 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
2024-01-25 13:50:59,768 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
2024-01-25 13:50:59,799 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:288] Worker start
2024-01-25 13:50:59,802 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:__init__ [connection.py:62] Constructed BTLEConnection object: <linak_dpg_bt.connection.BTLEConnection object at 0x7fd62dda6bf0>
2024-01-25 13:50:59,802 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:__init__ [linak_device.py:109] Constructed LinakDesk object: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fd62dda6950>
2024-01-25 13:50:59,802 DEBUG Connect-1 linak_dpg_bt.linak_device.LinakDesk:_connect [linak_device.py:347] Initializing the device
2024-01-25 13:50:59,802 DEBUG Connect-1 linak_dpg_bt.connection.BTLEConnection:connect [connection.py:95] Trying to connect to
2024-01-25 13:50:59,802 ERROR Connect-1 linak_dpg_bt.linak_device.LinakDesk:initialize [linak_device.py:343] Initialization failed: <class 'ValueError'> Expected MAC address, got ''
Traceback (most recent call last):
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/linak_device.py", line 340, in initialize
self._connect()
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/linak_device.py", line 348, in _connect
with self._conn as conn:
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/synchronized.py", line 80, in decorator
return func(self, *args, **kws)
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 75, in __enter__
self.connect()
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/synchronized.py", line 80, in decorator
return func(self, *args, **kws)
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 37, in wrapper
return func(*args)
File "/home/n/apps/LinakDeskApp/lib/linak_bt_desk/linak_dpg_bt/connection.py", line 101, in connect
self._conn.connect(self._mac, addrType='random')
File "/home/n/.local/lib/python3.10/site-packages/bluepy/btle.py", line 445, in connect
self._connect(addr, addrType, iface)
File "/home/n/.local/lib/python3.10/site-packages/bluepy/btle.py", line 423, in _connect
raise ValueError("Expected MAC address, got %s" % repr(addr))
ValueError: Expected MAC address, got ''
2024-01-25 13:50:59,803 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_initializeDevice [bt_device_connector.py:119] Could not connect to to device: <linak_dpg_bt.linak_device.LinakDesk object at 0x7fd62dda6950>
2024-01-25 13:50:59,803 DEBUG Connect-1 linakdeskapp.bt_device_connector.BTDeviceConnector:_changeConnectionStatus [bt_device_connector.py:150] changing connection state to ConnectionState.DISCONNECTED
2024-01-25 13:50:59,803 DEBUG Connect-1 linakdeskapp.bt_device_connector.ThreadWorker:run [bt_device_connector.py:290] Worker complete
2024-01-25 13:50:59,804 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
2024-01-25 13:50:59,806 DEBUG MainThread linakdeskapp.gui.main_window.MainWindow:_updateTrayIcon [main_window.py:126] setting tray icon office-chair-gray.png <PyQt5.QtGui.QIcon object at 0x7fd6339afac0>
There is an un-investigative issue in connecting my windows laptop to the idasen desk.
Please may I request an android version of the app.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.