mmrelay 1.1.3__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mmrelay might be problematic. Click here for more details.

@@ -1,17 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mmrelay
3
- Version: 1.1.3
3
+ Version: 1.2.0
4
4
  Summary: Bridge between Meshtastic mesh networks and Matrix chat rooms
5
- Home-page: https://github.com/geoffwhittington/meshtastic-matrix-relay
5
+ Home-page: https://github.com/jeremiah-k/meshtastic-matrix-relay
6
6
  Author: Geoff Whittington, Jeremiah K., and contributors
7
7
  Author-email: jeremiahk@gmx.com
8
- Project-URL: Bug Tracker, https://github.com/geoffwhittington/meshtastic-matrix-relay/issues
8
+ Project-URL: Bug Tracker, https://github.com/jeremiah-k/meshtastic-matrix-relay/issues
9
9
  Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.9
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
10
14
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
11
15
  Classifier: Operating System :: OS Independent
12
16
  Classifier: Development Status :: 4 - Beta
13
17
  Classifier: Topic :: Communications
14
- Requires-Python: >=3.8
18
+ Requires-Python: >=3.9
15
19
  Description-Content-Type: text/markdown
16
20
  License-File: LICENSE
17
21
  Requires-Dist: meshtastic>=2.6.4
@@ -20,12 +24,17 @@ Requires-Dist: matrix-nio==0.25.2
20
24
  Requires-Dist: matplotlib==3.10.1
21
25
  Requires-Dist: requests==2.32.4
22
26
  Requires-Dist: markdown==3.8.2
27
+ Requires-Dist: bleach==6.2.0
23
28
  Requires-Dist: haversine==2.9.0
24
29
  Requires-Dist: schedule==1.2.2
25
30
  Requires-Dist: platformdirs==4.3.8
26
31
  Requires-Dist: py-staticmaps>=0.4.0
32
+ Requires-Dist: psutil>=5.8.0
27
33
  Requires-Dist: rich==14.1.0
28
34
  Requires-Dist: setuptools==80.9.0
35
+ Provides-Extra: e2e
36
+ Requires-Dist: matrix-nio[e2e]==0.25.2; extra == "e2e"
37
+ Requires-Dist: python-olm; extra == "e2e"
29
38
  Dynamic: author
30
39
  Dynamic: author-email
31
40
  Dynamic: classifier
@@ -34,6 +43,7 @@ Dynamic: description-content-type
34
43
  Dynamic: home-page
35
44
  Dynamic: license-file
36
45
  Dynamic: project-url
46
+ Dynamic: provides-extra
37
47
  Dynamic: requires-dist
38
48
  Dynamic: requires-python
39
49
  Dynamic: summary
@@ -55,59 +65,20 @@ A powerful and easy-to-use relay between Meshtastic devices and Matrix chat room
55
65
  - Configurable through a simple YAML file
56
66
  - Supports mapping multiple rooms and channels 1:1
57
67
  - Relays messages to/from an MQTT broker, if configured in the Meshtastic firmware
58
- - ✨️ _Bidirectional replies and reactions support_ ✨️ **NEW!!**
59
- - ✨️ _Native Docker support_ ✨️ **NEW!!**
68
+ - ✨️ _Bidirectional replies and reactions support_ ✨️
69
+ - ✨️ _Native Docker support_ ✨️
70
+ - 🔐 **Matrix End-to-End Encryption (E2EE) support** 🔐 **NEW in v1.2!**
60
71
 
61
- _We would love to support [Matrix E2EE rooms](https://github.com/jeremiah-k/meshtastic-matrix-relay/issues/33), but this is currently not implemented._
72
+ **MMRelay v1.2** introduces full **Matrix End-to-End Encryption** support for secure communication in encrypted rooms. Messages are automatically encrypted/decrypted when communicating with encrypted Matrix rooms, with simple setup using `mmrelay auth login` or automatic credentials creation from config.yaml.
62
73
 
63
74
  ## Documentation
64
75
 
65
76
  Visit our [Wiki](https://github.com/jeremiah-k/meshtastic-matrix-relay/wiki) for comprehensive guides and information.
66
77
 
67
- - [Installation Instructions](docs/INSTRUCTIONS.md) - Setup and configuration guide
68
-
69
- ---
70
-
71
- ## Quick Start
72
-
73
- MMRelay runs on Linux, macOS, and Windows.
74
-
75
- ```bash
76
- # Install using pipx for isolated installation (recommended)
77
- pipx install mmrelay
78
-
79
- # Generate a sample configuration file & then edit it
80
- mmrelay --generate-config
81
-
82
- # Start the relay (without --install-service to run manually)
83
- mmrelay --install-service
84
- ```
85
-
86
- For detailed installation and configuration instructions, see the [Installation Guide](docs/INSTRUCTIONS.md).
87
-
88
- ## Docker
78
+ MMRelay supports multiple deployment methods including Docker, pip installation, and standalone executables. For complete setup instructions and all deployment options, see:
89
79
 
90
- MMRelay includes official Docker support for easy deployment and management:
91
-
92
- ```bash
93
- # Quick setup with Docker
94
- make setup # Copy config and open editor (first time)
95
- make build # Build the Docker image
96
- make run # Start the container
97
- make logs # View logs
98
- ```
99
-
100
- Docker provides isolated environment, easy deployment, automatic restarts, and volume persistence.
101
-
102
- For detailed Docker setup instructions, see the [Docker Guide](docs/DOCKER.md).
103
-
104
- ---
105
-
106
- ## Windows Installer
107
-
108
- ![Windows Installer Screenshot](https://user-images.githubusercontent.com/1770544/235249050-8c79107a-50cc-4803-b989-39e58100342d.png)
109
-
110
- The latest installer is available in the [releases section](https://github.com/jeremiah-k/meshtastic-matrix-relay/releases).
80
+ - [Installation Instructions](docs/INSTRUCTIONS.md) - Setup and configuration guide
81
+ - [Docker Guide](docs/DOCKER.md) - Docker deployment methods
111
82
 
112
83
  ---
113
84
 
@@ -0,0 +1,45 @@
1
+ mmrelay/__init__.py,sha256=CcCX3oC0CS1MiZg2aWA5KXA2UXqYLXBT4GP3M07R-cs,120
2
+ mmrelay/cli.py,sha256=LT_DVvhXFPCpGxU5RD4SxNNqtIJyVVD8bwMm9YSz2q8,55711
3
+ mmrelay/cli_utils.py,sha256=z1TfgHM82NdTtO0toGyQrNdeB7F8khtzuLJYjvDG1j8,26380
4
+ mmrelay/config.py,sha256=qajoYz_KCRWCw6ULAND0ysmHqw4Nbv_PjewNrW22O8o,32640
5
+ mmrelay/db_utils.py,sha256=b_cuw4zOwGlvk4CljFh3SguqOi-TRCHW_s9RCt9gUsU,19920
6
+ mmrelay/e2ee_utils.py,sha256=4VL6sP3ln0bZ7ZubE_dSejo0WYMOWqaduWLKnURoeIY,16574
7
+ mmrelay/log_utils.py,sha256=6O-dvt9K5uT89XkA74gcYYQJ5lADAk5U9IVL4mj1XwM,8764
8
+ mmrelay/main.py,sha256=QwOLY6uLvFQZhHRlJrbp_D_-xDuEHQIgEsQ6ME_g1EI,16360
9
+ mmrelay/matrix_utils.py,sha256=at0mME8nWwN-yxGGIlH4GblwGmrJd6DrjlNhM794scU,99146
10
+ mmrelay/meshtastic_utils.py,sha256=86U8vQuWW7xR4E-_n-d7vlQhQ40gO-tJGZcVjzoeFhc,43027
11
+ mmrelay/message_queue.py,sha256=tHKziIPwQ9Xm7qpITyR1r2e-ftdn4ZivdZhek9SmMcQ,18703
12
+ mmrelay/plugin_loader.py,sha256=6SD7eoO0VHnsEPI_YrrnrbeHAjC7okmyUpaA4Eu5AHo,41718
13
+ mmrelay/setup_utils.py,sha256=EAVPmKHQmlXnxMcrkhlU27fBPjJCiwTVSLZdbEFsWLQ,22095
14
+ mmrelay/constants/__init__.py,sha256=M8AXeIcS1JuS8OwmfTmhcCOkAz5XmWlNQ53GBxYOx94,1494
15
+ mmrelay/constants/app.py,sha256=1NoX00c65CcHzQxHjnKCPaFbkJQo3MnNytAe_XmvJUo,714
16
+ mmrelay/constants/config.py,sha256=B1A_OZLLNXHM9rHOwc01ZaJBvFugR2eXlhYYl4nUxlY,2479
17
+ mmrelay/constants/database.py,sha256=4cHfYfBePDUUtVSflrWyStcxKSQv7VE-jSrb1IzAjls,646
18
+ mmrelay/constants/formats.py,sha256=cjbrfNNFCKoGSFsFHR1QQDEQudiGquA9MUapfm0_ZNI,494
19
+ mmrelay/constants/messages.py,sha256=Reu_-6gZGGZQVP6BuqBm01QBhVTFjHVRQSPTUcQJG2Q,1531
20
+ mmrelay/constants/network.py,sha256=QjROOAMxcP1pA1F_gUtuXzm2tORCqo5koqZbwrZRSns,1186
21
+ mmrelay/constants/queue.py,sha256=yyWSrtq06b5GWzZwdl6IFtrMvxEuF9PdKSNPh8DdL2M,565
22
+ mmrelay/plugins/__init__.py,sha256=KVMQIXRhe0wlGj4O3IZ0vOIQRKFkfPYejHXhJL17qrc,51
23
+ mmrelay/plugins/base_plugin.py,sha256=Nh_zz-Z49qYatS4i38C2bLOl1sNDUgWsqpD8NLJdnl0,20807
24
+ mmrelay/plugins/debug_plugin.py,sha256=adX0cRJHUEDLldajybPfiRDDlvytkZe5aN_dSgNKP2Y,870
25
+ mmrelay/plugins/drop_plugin.py,sha256=x4S-e0Muun2Dy1H2qwRMTBB1ptLmy7ZZJhgPu-KefGs,5394
26
+ mmrelay/plugins/health_plugin.py,sha256=svV_GfpAVL0QhiVzi3PVZ1mNpsOL1NHSmkRF-Mn_ExE,2250
27
+ mmrelay/plugins/help_plugin.py,sha256=S7nBhsANK46Zv9wPHOVegPGcuYGMErBsxAnrRlSSCwg,2149
28
+ mmrelay/plugins/map_plugin.py,sha256=eHV_t3TFcypBD4xT_OQx0hD6_iGkLJOADjwYVny0PvE,11292
29
+ mmrelay/plugins/mesh_relay_plugin.py,sha256=gpQkO8S-LqDNwqJpqq5ewGXVEST-JZgOsJmrE-qRzuw,7631
30
+ mmrelay/plugins/nodes_plugin.py,sha256=RDabzyG5hKG5aYWecsRUcLSjMCCv6Pngmq2Qpld1A1U,2903
31
+ mmrelay/plugins/ping_plugin.py,sha256=8uFnT3qfO3RBaTUOx348voIfKpzXB3zTfcT6Gtfc8kM,4070
32
+ mmrelay/plugins/telemetry_plugin.py,sha256=8SxWv4BLXMUTbiVaD3MjlMMdQyS7S_1OfLlVNAUMSO0,6306
33
+ mmrelay/plugins/weather_plugin.py,sha256=7si8q43Fw6Gghj0x7Ah2gyFcdwxodNqINmIj9Olprjg,14412
34
+ mmrelay/tools/__init__.py,sha256=WFjDQjdevgg19_zT6iEoL29rvb1JPqYSd8708Jn5D7A,838
35
+ mmrelay/tools/mmrelay.service,sha256=3vqK1VbfXvVftkTrTEOan77aTHeOT36hIAL7HqJsmTg,567
36
+ mmrelay/tools/sample-docker-compose-prebuilt.yaml,sha256=NWV-g3RwiFlYfjgGL5t9DtInoJJDUSaTBy4w1ICk81A,3136
37
+ mmrelay/tools/sample-docker-compose.yaml,sha256=PHt0MGrzUAzxBovtf1TZyrvJ9YK-ZpdSyyp5Tmp8zIY,2543
38
+ mmrelay/tools/sample.env,sha256=RP-o3rX3jnEIrVG2rqCZq31O1yRXou4HcGrXWLVbKKw,311
39
+ mmrelay/tools/sample_config.yaml,sha256=wQnEhL5St7Xqeb--ClJQVcbVXu_n69fPHuF2zSB0Zu4,6250
40
+ mmrelay-1.2.0.dist-info/licenses/LICENSE,sha256=aB_07MhnK-bL5WLI1ucXLUSdW_yBVoepPRYB0kaAOl8,35204
41
+ mmrelay-1.2.0.dist-info/METADATA,sha256=RvrjFahRkYXAokF54_gLy24oD2pgjjvQEYjcm0oi9BM,6143
42
+ mmrelay-1.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
43
+ mmrelay-1.2.0.dist-info/entry_points.txt,sha256=SJZwGUOEpQ-qx4H8UL4xKFnKeInGUaZNW1I0ddjK7Ws,45
44
+ mmrelay-1.2.0.dist-info/top_level.txt,sha256=B_ZLCRm7NYAmI3PipRUyHGymP-C-q16LSeMGzmqJfo4,8
45
+ mmrelay-1.2.0.dist-info/RECORD,,
mmrelay/config_checker.py DELETED
@@ -1,133 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- import os
5
-
6
- import yaml
7
- from yaml.loader import SafeLoader
8
-
9
-
10
- def get_config_paths():
11
- """
12
- Get a list of possible configuration file paths.
13
-
14
- Returns:
15
- list: A list of possible configuration file paths
16
- """
17
- from mmrelay.config import get_config_paths as get_paths
18
-
19
- return get_paths()
20
-
21
-
22
- def check_config():
23
- """
24
- Check if the configuration file is valid.
25
-
26
- Returns:
27
- bool: True if the configuration is valid, False otherwise.
28
- """
29
- config_paths = get_config_paths()
30
- config_path = None
31
-
32
- # Try each config path in order until we find one that exists
33
- for path in config_paths:
34
- if os.path.isfile(path):
35
- config_path = path
36
- print(f"Found configuration file at: {config_path}")
37
- try:
38
- with open(config_path, "r") as f:
39
- config = yaml.load(f, Loader=SafeLoader)
40
-
41
- # Check if config is empty
42
- if not config:
43
- print("Error: Configuration file is empty or invalid")
44
- return False
45
-
46
- # Check matrix section
47
- if "matrix" not in config:
48
- print("Error: Missing 'matrix' section in config")
49
- return False
50
-
51
- matrix_section = config["matrix"]
52
- required_matrix_fields = ["homeserver", "access_token", "bot_user_id"]
53
- missing_matrix_fields = [
54
- field
55
- for field in required_matrix_fields
56
- if field not in matrix_section
57
- ]
58
-
59
- if missing_matrix_fields:
60
- print(
61
- f"Error: Missing required fields in 'matrix' section: {', '.join(missing_matrix_fields)}"
62
- )
63
- return False
64
-
65
- # Check matrix_rooms section
66
- if "matrix_rooms" not in config or not config["matrix_rooms"]:
67
- print("Error: Missing or empty 'matrix_rooms' section in config")
68
- return False
69
-
70
- if not isinstance(config["matrix_rooms"], list):
71
- print("Error: 'matrix_rooms' must be a list")
72
- return False
73
-
74
- for i, room in enumerate(config["matrix_rooms"]):
75
- if not isinstance(room, dict):
76
- print(
77
- f"Error: Room {i+1} in 'matrix_rooms' must be a dictionary"
78
- )
79
- return False
80
-
81
- if "id" not in room:
82
- print(
83
- f"Error: Room {i+1} in 'matrix_rooms' is missing the 'id' field"
84
- )
85
- return False
86
-
87
- # Check meshtastic section
88
- if "meshtastic" not in config:
89
- print("Error: Missing 'meshtastic' section in config")
90
- return False
91
-
92
- meshtastic_section = config["meshtastic"]
93
- if "connection_type" not in meshtastic_section:
94
- print("Error: Missing 'connection_type' in 'meshtastic' section")
95
- return False
96
-
97
- connection_type = meshtastic_section["connection_type"]
98
- if connection_type not in ["tcp", "serial", "ble"]:
99
- print(
100
- f"Error: Invalid 'connection_type': {connection_type}. Must be 'tcp', 'serial', or 'ble'"
101
- )
102
- return False
103
-
104
- # Check connection-specific fields
105
- if (
106
- connection_type == "serial"
107
- and "serial_port" not in meshtastic_section
108
- ):
109
- print("Error: Missing 'serial_port' for 'serial' connection type")
110
- return False
111
-
112
- if connection_type == "tcp" and "host" not in meshtastic_section:
113
- print("Error: Missing 'host' for 'tcp' connection type")
114
- return False
115
-
116
- if connection_type == "ble" and "ble_address" not in meshtastic_section:
117
- print("Error: Missing 'ble_address' for 'ble' connection type")
118
- return False
119
-
120
- print("Configuration file is valid!")
121
- return True
122
- except yaml.YAMLError as e:
123
- print(f"Error parsing YAML in {config_path}: {e}")
124
- return False
125
- except Exception as e:
126
- print(f"Error checking configuration: {e}")
127
- return False
128
-
129
- print("Error: No configuration file found in any of the following locations:")
130
- for path in config_paths:
131
- print(f" - {path}")
132
- print("\nRun 'mmrelay --generate-config' to generate a sample configuration file.")
133
- return False
@@ -1,35 +0,0 @@
1
- mmrelay/__init__.py,sha256=4ciaRmcwzGfuaU_HuNDXVr4Qk0WVkPydhrdXIVo9VOs,120
2
- mmrelay/cli.py,sha256=hdPTlcGsXTJC9GEUiScG7b3IFp02B3lwhqgwFpU3NsM,13835
3
- mmrelay/config.py,sha256=5VZag8iSc5yLQgvwI76bbpizbtqag74cHnfXCrWHNyA,7910
4
- mmrelay/config_checker.py,sha256=UnoHVTXzfdTfFkbmXv9r_Si76v-sxXLb5FOaQSOM45E,4909
5
- mmrelay/db_utils.py,sha256=eTMMkYVWsmO_DkrBfnZMw4ohg_xa0S9TXJoBjRFTwzo,13590
6
- mmrelay/log_utils.py,sha256=1zVHBJ5qSOG1O4cq4Ebngq9dp81vaZOEq5khulAFuuM,6611
7
- mmrelay/main.py,sha256=46J-B6wDRawB392u71kP6pxNoayBdmwOiKcqsleikhU,13182
8
- mmrelay/matrix_utils.py,sha256=Ans7Wroh693un0LOp4x2p8NPfGFJ9z6TnG6ApXRXg7Q,55686
9
- mmrelay/meshtastic_utils.py,sha256=iy7BwMlqOwpkqSB0pTx2n8oqaKs2kWQ4PXFk4y16ys8,31440
10
- mmrelay/message_queue.py,sha256=spLK7pVugnl9djVLIh5-P7iHZ7kRtZEZIWTcQ4X1TfI,18529
11
- mmrelay/plugin_loader.py,sha256=UJ-i6cL2q_hwMTqjRkaOAQDTj6uUrmyj56-XbUVGcng,39231
12
- mmrelay/setup_utils.py,sha256=N6qdScHKHEMFKDmT1l7dcLDPNTusZXPkyxrLXjFLhRI,19910
13
- mmrelay/plugins/__init__.py,sha256=KVMQIXRhe0wlGj4O3IZ0vOIQRKFkfPYejHXhJL17qrc,51
14
- mmrelay/plugins/base_plugin.py,sha256=DJdM-l-69sMnx6Fgn0rweWF5CuWilnQQAT3nm6eq8f4,18359
15
- mmrelay/plugins/debug_plugin.py,sha256=adX0cRJHUEDLldajybPfiRDDlvytkZe5aN_dSgNKP2Y,870
16
- mmrelay/plugins/drop_plugin.py,sha256=0GOz0dgLnFST1HTgqrMayrjwmYlnu02QxfnTZtdPZ3U,4671
17
- mmrelay/plugins/health_plugin.py,sha256=svV_GfpAVL0QhiVzi3PVZ1mNpsOL1NHSmkRF-Mn_ExE,2250
18
- mmrelay/plugins/help_plugin.py,sha256=S7nBhsANK46Zv9wPHOVegPGcuYGMErBsxAnrRlSSCwg,2149
19
- mmrelay/plugins/map_plugin.py,sha256=eHV_t3TFcypBD4xT_OQx0hD6_iGkLJOADjwYVny0PvE,11292
20
- mmrelay/plugins/mesh_relay_plugin.py,sha256=PIQBACC7Yjq7hzKJJNycHTjkayEC9tsC8-JNG4q_AY8,7563
21
- mmrelay/plugins/nodes_plugin.py,sha256=RDabzyG5hKG5aYWecsRUcLSjMCCv6Pngmq2Qpld1A1U,2903
22
- mmrelay/plugins/ping_plugin.py,sha256=8uFnT3qfO3RBaTUOx348voIfKpzXB3zTfcT6Gtfc8kM,4070
23
- mmrelay/plugins/telemetry_plugin.py,sha256=8SxWv4BLXMUTbiVaD3MjlMMdQyS7S_1OfLlVNAUMSO0,6306
24
- mmrelay/plugins/weather_plugin.py,sha256=1bQhmiX-enNphzGoFVprU0LcZQX9BvGxWAJAG8Wekg0,8596
25
- mmrelay/tools/__init__.py,sha256=WFjDQjdevgg19_zT6iEoL29rvb1JPqYSd8708Jn5D7A,838
26
- mmrelay/tools/mmrelay.service,sha256=3vqK1VbfXvVftkTrTEOan77aTHeOT36hIAL7HqJsmTg,567
27
- mmrelay/tools/sample-docker-compose.yaml,sha256=vVgJrh-6l48hkj5F-52JA5tpDWPBjiPQ36CE9Pkqn44,1251
28
- mmrelay/tools/sample.env,sha256=RP-o3rX3jnEIrVG2rqCZq31O1yRXou4HcGrXWLVbKKw,311
29
- mmrelay/tools/sample_config.yaml,sha256=grS70MKHFd9e_lZ3GkmzPi4RRW-PdahMOMPCAg07MWs,4718
30
- mmrelay-1.1.3.dist-info/licenses/LICENSE,sha256=aB_07MhnK-bL5WLI1ucXLUSdW_yBVoepPRYB0kaAOl8,35204
31
- mmrelay-1.1.3.dist-info/METADATA,sha256=gNG_TVwJfpvt0s7sd3WDEceXl8Li2WCLGHTkYkXOWVQ,6493
32
- mmrelay-1.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
- mmrelay-1.1.3.dist-info/entry_points.txt,sha256=SJZwGUOEpQ-qx4H8UL4xKFnKeInGUaZNW1I0ddjK7Ws,45
34
- mmrelay-1.1.3.dist-info/top_level.txt,sha256=B_ZLCRm7NYAmI3PipRUyHGymP-C-q16LSeMGzmqJfo4,8
35
- mmrelay-1.1.3.dist-info/RECORD,,