Name | mutenix JSON |
Version |
0.4.16
JSON |
| download |
home_page | None |
Summary | Mutenix host software for the Mutenix macropad |
upload_time | 2025-01-20 15:21:25 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | None |
keywords |
keyboard
macroboard
remote
teams
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
|
# Mutenix Host Application
Mutenix is a host application designed to translate the button presses of the hardware device into something usefull.
It consists of basically those parts
- **HID Device Communication**: General communication with the device
- **Update**: Updating the device firmware (via USB HID)
- **Teams Websocket Communication**: Connect with teams using the [local api](#enable-local-api)
- **Virtual Keypad**: Offers a virtual keypad to play around without the hardware.
Mutenix is ideal for software teams looking to enhance their project management and collaboration capabilities.
## Tray Icon & Menu
![images/tray_icon.png]
- **Open Virtual Macroboard**: Opens a virtual Macroboard in the browser, same functionalities as the hardware one.
- **Teams connected**: Status information if teams connection has been established.
- **Device connected**: Status information if the device connection has been established.
- **Help**: Opens the help page in the browser.
- **About**: Opens the about page in the browser.
- **Debug Options**: Set some debug options persistent
- **Activate Serial Console**: Activates the serial console (Circuitpython)
- **Deactivate Serial Console**: Deactivates the serial console (Circuitpython)
- **Enable Filesystem**: Enables the filesystem. This cannot be undone using the tray icon. It has to be done by yourself on the filesystem. The file you need to alter is `debug_on.py`. Reason for this is, that the device cannot mount the drive writeable the same time the host has it mounted.
- **Quit**: Quit Mutenix
## Installation
### Executable
Download the executable here: [Releases](https://github.com/mutenix-org/software-host/releases/latest)
Run it.
### Using uv
```bash
uv tool mutenix
```
or
```bash
uvx mutenix
```
### Command Line options
**NB**: Command line options may not work on the executable version.
- `--list-devices`: lists HID devices
- `--config <your config file>`: Use that config file
- `--update-file <firmware archive>`: perform an update with that file
## Configuration
Using the configuration file several things could be configured:
- actions of the buttons
- led states/colors
- virtual keypad binding (address and port)
- device identification to connect to
Mutenix tries to find a file called `mutenix.yaml` in the directory it is run from or `$HOME/.config/`. It it does not find one, it will create one in the current directory.
# Actions configuration
The file could be used to configure the action triggered by each of the buttons.
There are are two sections corresponding to trigger types to configure actions:
- `actions`: actions triggered by a single press
- `double_tap_actions`: actions triggered by a double tap on a button
Each of the buttons can be configured in one of the following ways:
```yaml
actions:
- action: key-press
button_id: 1
extra:
- modifiers: [cmd_l, shift]
key: p
- string: Reload Window
- key: enter
- action: mouse
button_id: 2
extra:
- action: move
x: 100
y: 100
- action: click
button: left
- action: move
x: 200
y: 200
- action: cmd
button_id: 3
extra: net send * Please call me
- action: send-reaction
button_id: 4
extra: like
double_tap_action:
- action: webhook
button_id: 5
extra:
url: https://some.end.point/wherever
headers:
X-Auth: "12345"
data: {"key": "value"}
```
- `action`:
- Simple action: `mute`, `unmute`, `toggle-mute`, `hide-video`, `show-video`, `toggle-video`, `unblur-background`, `blur-background`, `toggle-background-blur`, `lower-hand`, `raise-hand`, `toggle-hand`, `leave-call`, `toggle-ui`, `stop-sharing`
- Send Reaction: `send-reaction`, this requires `extra` to be one of: `applause`, `laugh`, `like`, `love`, `wow`
- Additional Options:
- `activate-teams` to trigger an action to bring teams into the foreground
- `cmd` to run an arbitrary command. This is to be used with case, as no check is performed on the output or what command is run. Specify the command in `extra`.
- `type`: Type the text in `extra` using keyboard emulation
- `keypress`: Press keys. In extra you can specify one or many keys or key combinations (can be one or a list)
- `key`: like 'A', B', ...
- `modifiers`: with modifiers as `shift`, `alt`, ... see [pynput](https://pynput.readthedocs.io/en/latest/keyboard.html#pynput.keyboard.Key)
- `string`: a string to type
- `mouse`: Simulate mouse (can be one or a list)
- One of the following actions:
- `action`: `move` (can be omitted), `set`, `click`, `press`, `release`
- `x`: Relative or Absolute Position
- `y`: Relative or Absolute Position
- `button`: Mouse button: `left`, `middle`, `right`
- `count`: for click, the times to click
- `webhook` to make a user defined webhook call, make sure `extra has the following information:
- `url`: the url endpoint
- `method`: (optional, default: GET) the method to use
- `data`: (optional) json string to send
- `headers`: headers to add
- `button_id`: the id of the buttons, starting with 1
- `extra`: see the actions which require it
### LED Configuration
Next section is for the colors of the LED, each LED which is associated with a button can be controlled.
```yaml
leds:
- button_id: 1
source: teams
color_off: green
color_on: red
extra: is-muted
interval: 0.0
read_result: false
```
- `source`:
- `teams`: based on the information received by the websocket. The following informations are available and could be selected by `extra`: `is-muted`, `is-hand-raised`, `is-in-meeting`, `is-recording-on`, `is-background-blurred`, `is-sharing`, `has-unread-messages`, `is-video-on`
- `cmd`: A command to execute and take its output/return code.
- if `read_result` is `false` or not set the exit code will be used so select `color_off` or `color_on`.
- if `read_result` is `true`, the output of the command will be used. Supported output is one of the colors listed below.
- `color_on/color_off` define the colors to use in case the state is true or the exit code is 0
- `interval` the amount of seconds between two checks/runs of the call.
**Supported Colors**: `red`, `green`, `blue`, `white`, `black`, `yellow`, `cyan`, `magenta`, `orange`, `purple`
### Websocket config
- `address`: The bind address.
- `port`: The bind port for the virtual macropad.
### Device Config
```yaml
device_identifications:
- vendor_id: 12345
product_id: 1
serial_number: 9121DB23244
- vendor_id: 12345
product_id: 1
serial_number: 9121DB2324F
```
The settings can configure for which device to look for. If not given it will search for a device with `mutenix` in the `product_string` or the default PID/VID combination.
### Teams Token
After allowing the access to teams, the token is also stored in the file. Changing or deleting requires a reauthentication in teams.
## Teams it not working
In teams the `Third Pary API` must be enabled.
![Privacy Settings in Teams](images/privacy_settings.png)
## Contributing
### Setting up pre-commit hooks
To set up pre-commit hooks for this project, run the following commands:
```sh
pip install pre-commit
pre-commit install
pre-commit run --all-files
```
## Links
- [Hardware](https://github.com/mutenix-org/hardware-macroboard)
- [Firmware](https://github.com/mutenix-org/firmware-macroboard)
Raw data
{
"_id": null,
"home_page": null,
"name": "mutenix",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "keyboard, macroboard, remote, teams",
"author": null,
"author_email": "Matthias Bilger <matthias@bilger.info>",
"download_url": "https://files.pythonhosted.org/packages/c2/1f/9a43bfe686934eef11e0748388280271aab69c9afd04a52af64ee9b559e0/mutenix-0.4.16.tar.gz",
"platform": null,
"description": "# Mutenix Host Application\n\nMutenix is a host application designed to translate the button presses of the hardware device into something usefull.\n\nIt consists of basically those parts\n\n- **HID Device Communication**: General communication with the device\n- **Update**: Updating the device firmware (via USB HID)\n- **Teams Websocket Communication**: Connect with teams using the [local api](#enable-local-api)\n- **Virtual Keypad**: Offers a virtual keypad to play around without the hardware.\n\nMutenix is ideal for software teams looking to enhance their project management and collaboration capabilities.\n\n## Tray Icon & Menu\n\n![images/tray_icon.png]\n\n- **Open Virtual Macroboard**: Opens a virtual Macroboard in the browser, same functionalities as the hardware one.\n- **Teams connected**: Status information if teams connection has been established.\n- **Device connected**: Status information if the device connection has been established.\n- **Help**: Opens the help page in the browser.\n- **About**: Opens the about page in the browser.\n- **Debug Options**: Set some debug options persistent\n - **Activate Serial Console**: Activates the serial console (Circuitpython)\n - **Deactivate Serial Console**: Deactivates the serial console (Circuitpython)\n - **Enable Filesystem**: Enables the filesystem. This cannot be undone using the tray icon. It has to be done by yourself on the filesystem. The file you need to alter is `debug_on.py`. Reason for this is, that the device cannot mount the drive writeable the same time the host has it mounted.\n- **Quit**: Quit Mutenix\n\n\n## Installation\n\n### Executable\n\nDownload the executable here: [Releases](https://github.com/mutenix-org/software-host/releases/latest)\nRun it.\n\n### Using uv\n\n```bash\nuv tool mutenix\n```\n\nor\n\n```bash\nuvx mutenix\n```\n\n### Command Line options\n\n**NB**: Command line options may not work on the executable version.\n\n- `--list-devices`: lists HID devices\n- `--config <your config file>`: Use that config file\n- `--update-file <firmware archive>`: perform an update with that file\n\n## Configuration\n\nUsing the configuration file several things could be configured:\n\n- actions of the buttons\n- led states/colors\n- virtual keypad binding (address and port)\n- device identification to connect to\n\nMutenix tries to find a file called `mutenix.yaml` in the directory it is run from or `$HOME/.config/`. It it does not find one, it will create one in the current directory.\n\n\n# Actions configuration\n\nThe file could be used to configure the action triggered by each of the buttons.\n\nThere are are two sections corresponding to trigger types to configure actions:\n\n- `actions`: actions triggered by a single press\n- `double_tap_actions`: actions triggered by a double tap on a button\n\nEach of the buttons can be configured in one of the following ways:\n\n```yaml\nactions:\n- action: key-press\n button_id: 1\n extra:\n - modifiers: [cmd_l, shift]\n key: p\n - string: Reload Window\n - key: enter\n- action: mouse\n button_id: 2\n extra:\n - action: move\n x: 100\n y: 100\n - action: click\n button: left\n - action: move\n x: 200\n y: 200\n- action: cmd\n button_id: 3\n extra: net send * Please call me\n- action: send-reaction\n button_id: 4\n extra: like\ndouble_tap_action:\n- action: webhook\n button_id: 5\n extra:\n url: https://some.end.point/wherever\n headers:\n X-Auth: \"12345\"\n data: {\"key\": \"value\"}\n```\n\n- `action`:\n - Simple action: `mute`, `unmute`, `toggle-mute`, `hide-video`, `show-video`, `toggle-video`, `unblur-background`, `blur-background`, `toggle-background-blur`, `lower-hand`, `raise-hand`, `toggle-hand`, `leave-call`, `toggle-ui`, `stop-sharing`\n - Send Reaction: `send-reaction`, this requires `extra` to be one of: `applause`, `laugh`, `like`, `love`, `wow`\n - Additional Options:\n - `activate-teams` to trigger an action to bring teams into the foreground\n - `cmd` to run an arbitrary command. This is to be used with case, as no check is performed on the output or what command is run. Specify the command in `extra`.\n - `type`: Type the text in `extra` using keyboard emulation\n - `keypress`: Press keys. In extra you can specify one or many keys or key combinations (can be one or a list)\n - `key`: like 'A', B', ...\n - `modifiers`: with modifiers as `shift`, `alt`, ... see [pynput](https://pynput.readthedocs.io/en/latest/keyboard.html#pynput.keyboard.Key)\n - `string`: a string to type\n - `mouse`: Simulate mouse (can be one or a list)\n - One of the following actions:\n - `action`: `move` (can be omitted), `set`, `click`, `press`, `release`\n - `x`: Relative or Absolute Position\n - `y`: Relative or Absolute Position\n - `button`: Mouse button: `left`, `middle`, `right`\n - `count`: for click, the times to click\n - `webhook` to make a user defined webhook call, make sure `extra has the following information:\n - `url`: the url endpoint\n - `method`: (optional, default: GET) the method to use\n - `data`: (optional) json string to send\n - `headers`: headers to add\n- `button_id`: the id of the buttons, starting with 1\n- `extra`: see the actions which require it\n\n\n### LED Configuration\n\nNext section is for the colors of the LED, each LED which is associated with a button can be controlled.\n\n```yaml\nleds:\n- button_id: 1\n source: teams\n color_off: green\n color_on: red\n extra: is-muted\n interval: 0.0\n read_result: false\n```\n\n- `source`:\n - `teams`: based on the information received by the websocket. The following informations are available and could be selected by `extra`: `is-muted`, `is-hand-raised`, `is-in-meeting`, `is-recording-on`, `is-background-blurred`, `is-sharing`, `has-unread-messages`, `is-video-on`\n - `cmd`: A command to execute and take its output/return code.\n - if `read_result` is `false` or not set the exit code will be used so select `color_off` or `color_on`.\n - if `read_result` is `true`, the output of the command will be used. Supported output is one of the colors listed below.\n - `color_on/color_off` define the colors to use in case the state is true or the exit code is 0\n - `interval` the amount of seconds between two checks/runs of the call.\n\n**Supported Colors**: `red`, `green`, `blue`, `white`, `black`, `yellow`, `cyan`, `magenta`, `orange`, `purple`\n\n### Websocket config\n\n- `address`: The bind address.\n- `port`: The bind port for the virtual macropad.\n\n### Device Config\n\n```yaml\ndevice_identifications:\n- vendor_id: 12345\n product_id: 1\n serial_number: 9121DB23244\n- vendor_id: 12345\n product_id: 1\n serial_number: 9121DB2324F\n```\n\nThe settings can configure for which device to look for. If not given it will search for a device with `mutenix` in the `product_string` or the default PID/VID combination.\n\n### Teams Token\n\nAfter allowing the access to teams, the token is also stored in the file. Changing or deleting requires a reauthentication in teams.\n\n\n## Teams it not working\n\nIn teams the `Third Pary API` must be enabled.\n\n![Privacy Settings in Teams](images/privacy_settings.png)\n\n\n## Contributing\n\n### Setting up pre-commit hooks\n\nTo set up pre-commit hooks for this project, run the following commands:\n\n```sh\npip install pre-commit\npre-commit install\npre-commit run --all-files\n```\n\n\n## Links\n\n- [Hardware](https://github.com/mutenix-org/hardware-macroboard)\n- [Firmware](https://github.com/mutenix-org/firmware-macroboard)\n",
"bugtrack_url": null,
"license": null,
"summary": "Mutenix host software for the Mutenix macropad",
"version": "0.4.16",
"project_urls": {
"Documentation": "https://mutenix.de/docs/host",
"Homepage": "https://mutenix.de",
"Issues": "https://github.com/mutenix-org/software-host/issues",
"Repository": "https://github.com/mutenix-org/software-host"
},
"split_keywords": [
"keyboard",
" macroboard",
" remote",
" teams"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c13527f00261dbc416f75d638f9ef833717730a549d9efd448c0368ba2377887",
"md5": "0a2a17b3b1d604f05212b4d71575b53e",
"sha256": "804bcccd53bc693598bdf3973a9946cb5c9dfcd43cbf01dc168c64af625569b5"
},
"downloads": -1,
"filename": "mutenix-0.4.16-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0a2a17b3b1d604f05212b4d71575b53e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 3366089,
"upload_time": "2025-01-20T15:21:23",
"upload_time_iso_8601": "2025-01-20T15:21:23.864103Z",
"url": "https://files.pythonhosted.org/packages/c1/35/27f00261dbc416f75d638f9ef833717730a549d9efd448c0368ba2377887/mutenix-0.4.16-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c21f9a43bfe686934eef11e0748388280271aab69c9afd04a52af64ee9b559e0",
"md5": "af9ed02cd2657c9801ad7a5a000222ea",
"sha256": "49ae734c25fbb464b4be6b747eca2a9166cd4d75a294e7c29400bb7096fb3063"
},
"downloads": -1,
"filename": "mutenix-0.4.16.tar.gz",
"has_sig": false,
"md5_digest": "af9ed02cd2657c9801ad7a5a000222ea",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 3418160,
"upload_time": "2025-01-20T15:21:25",
"upload_time_iso_8601": "2025-01-20T15:21:25.936854Z",
"url": "https://files.pythonhosted.org/packages/c2/1f/9a43bfe686934eef11e0748388280271aab69c9afd04a52af64ee9b559e0/mutenix-0.4.16.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-20 15:21:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mutenix-org",
"github_project": "software-host",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "mutenix"
}