https://github.com/gryf/linak-ctrl
Simple python script to control Linak powered desks and USB2LIN06 cable.
https://github.com/gryf/linak-ctrl
linak python usb
Last synced: about 3 hours ago
JSON representation
Simple python script to control Linak powered desks and USB2LIN06 cable.
- Host: GitHub
- URL: https://github.com/gryf/linak-ctrl
- Owner: gryf
- License: other
- Created: 2021-02-27T18:05:36.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2025-04-18T14:07:28.000Z (17 days ago)
- Last Synced: 2025-04-19T03:30:02.389Z (16 days ago)
- Topics: linak, python, usb
- Language: Python
- Homepage:
- Size: 19.5 KB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
==========
Linak-ctrl
==========.. image:: https://badge.fury.io/py/linak-ctrl.svg
:target: https://badge.fury.io/py/linak-ctrlSimple python script to control Linak powered desks and USB2LIN06 cable.
Requirements
============* Linak desk ;)
* USB2LIN06 device
* Python
* `pyusb`_Installation
============There are couple of different ways for installing ``linak-ctrl``. One of the
preferred ways is to use virtualenv and pip:.. code:: shell-session
$ git clone https://github.com/gryf/linak-ctrl
$ cd linak-ctrl
linak-ctrl $ python -m venv linak
(linak) linak-ctrl $ pip install .
(linak) linak-ctrl $ linak-ctrl status
Position: 767, height: 78.80cm, moving: FalseOr, you can install it system-wide:
.. code:: shell-session
# sudo pip install linak-ctrl
And finally, you could also install dependences from your system repositories,
and use script directly, by placing it somewhere in your ``$PATH``.Usage
=====Currently, script have two available commands: ``status`` and ``move``.
Invoking ``status`` will give information about desk height - both in absolute
number, and in centimeters, and information if desk is moving... code:: shell-session
$ linak_ctrl/__init__.py status
Position: 767, height: 78.80cm, moving: FalseNote, that height was measured manually and may differ depending if desk have
casters or regular foots.Command ``status`` accept optional parameter ``--loop`` for fetching
information from USB2LIN06 device every 0.2 seconds:.. code:: shell-session
$ linak_ctrl/__init__.py status -l
Position: 2161, height: 100.25cm, moving: True
Position: 2109, height: 99.45cm, moving: True
Position: 2026, height: 98.17cm, moving: True
Position: 1960, height: 97.15cm, moving: True
Position: 1872, height: 95.80cm, moving: True
Position: 1797, height: 94.65cm, moving: True
Position: 1728, height: 93.58cm, moving: True
Position: 1675, height: 92.77cm, moving: True
Position: 1652, height: 92.42cm, moving: True
Position: 1651, height: 92.40cm, moving: FalseCommand ``move`` is used for adjusting desk height. It needs parameter
``position``, which is absolute number, and its range is between 0 and 6480 (in
my case). For example:.. code:: shell-session
$ linak_ctrl/__init__.py move 1000
For displaying debug information verbosity can be increased using ``--verbose``
parameter:.. code:: shell-session
$ linak_ctrl/__init__.py -v move 1000
Current position: 771
Current position: 792
Current position: 825
Current position: 873
Current position: 939
Current position: 988
Current position: 1000Adding more `-v` will increase amount of information:
.. code:: shell-session
$ linak_ctrl/__init__.py -vv move 1000
array('B', [4, 56, 17, 8, 3, 3, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 771
array('B', [4, 56, 17, 0, 21, 3, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 789
array('B', [4, 56, 17, 0, 55, 3, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 823
array('B', [4, 56, 17, 0, 101, 3, 16, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 869
array('B', [4, 56, 17, 0, 162, 3, 16, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 930
array('B', [4, 56, 17, 0, 217, 3, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 985
array('B', [4, 56, 17, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0])
Current position: 1000Alternatives
============There are two projects, which more or less are doing the same. Fist one can be
treated as a reference project - lots of information in the source code, second
one is a python project, which uses `libusb1`_ wrapper library instead of
`pyusb`_:* `usb2lin06-HID-in-linux-for-LINAK-Desk-Control-Cable`_
* `python-linak-desk-control`_License
=======This software is licensed under 3-clause BSD license. See LICENSE file for
details... _pyusb: https://github.com/pyusb/pyusb
.. _usb2lin06-HID-in-linux-for-LINAK-Desk-Control-Cable: https://github.com/UrbanskiDawid/usb2lin06-HID-in-linux-for-LINAK-Desk-Control-Cable
.. _python-linak-desk-control: https://github.com/monofox/python-linak-desk-control
.. _libusb1: https://github.com/vpelletier/python-libusb1