serial to socket bridge
Project description
ser2sock
A single-threaded, multi serial line to TCP bridge server.
Can run under python 2.6 up to 3.x (tested 3.8).
Installation
From within your favorite python environment:
pip install ser2sock
Usage
ser2sock -c <configuration file>
Configuration
In order to provide flexibility, configuration is written in python.
The only requirement is to have a bridges
member which consists of a
sequence of bridges. A bridge is a dictionary with mandatory keys serial
and tcp
.
Example:
bridges = [
{
'serial': {'port': '/dev/ttyS0'},
'tcp': {'address': ("0", 18500)}
},
{
'serial': {'port': '/dev/ttyS1', 'baudrate': 19200},
'tcp': {'address': ("0", 18501), 'no_delay': False}
}
]
serial
:port
mandatory. Supports any keyword supported byserial.serial_for_url
(orserial.Serial
ifserial_for_url
does not existtcp
:address
mandatory (must be a pair bind host and port).reuse_addr
: (default: True) TCP reuse addressno_delay
: (default: True) disable Nagle's algorithmtos
: (default:0x10
, meaning low delay) type of service.
tcp
and serial
helpers are automatically loaded to the config namespace.
Here is the equivalent above config using helpers:
bridges = [
[serial(port="/dev/ttyS0"), tcp(address=("0", 18500))],
[serial(port="/dev/ttyS1", baudrate=19200),
tcp(address=("0", 18501), no_delay=False)],
]
You are free to put any code in your python configuration file. Here is an example setting up logging:
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s'
)
bridges = [
[serial(port="/dev/ttyS0"), tcp(address=("0", 18500))],
[serial(port="/dev/ttyS1", baudrate=19200),
tcp(address=("0", 18501), no_delay=False)],
]
Web UI
The active configuration can be changed online through a web UI.
To enable web you need to install the extra package:
$ pip install ser2sock[web]
...and enable the web app in the configuration with:
bridges = [...]
web = ':8000'
ser2sock should now be visible here.
You should see something like this:
Note that changes made with the web interface only affect the active ser2sock instance and never the original configuration file.
Tests
Tests should be performed within a python 3.5 or higher environment.
$ python setup.py test
running pytest
Searching for pytest-asyncio
Best match: pytest-asyncio 0.14.0
Processing pytest_asyncio-0.14.0-py3.7.egg
Using /home/tcoutinho/workspace/ser2sock/.eggs/pytest_asyncio-0.14.0-py3.7.egg
Searching for pytest-cov
Best match: pytest-cov 2.10.0
Processing pytest_cov-2.10.0-py3.7.egg
Using /home/tcoutinho/workspace/ser2sock/.eggs/pytest_cov-2.10.0-py3.7.egg
running egg_info
writing ser2sock.egg-info/PKG-INFO
writing dependency_links to ser2sock.egg-info/dependency_links.txt
writing entry points to ser2sock.egg-info/entry_points.txt
writing requirements to ser2sock.egg-info/requires.txt
writing top-level names to ser2sock.egg-info/top_level.txt
reading manifest file 'ser2sock.egg-info/SOURCES.txt'
writing manifest file 'ser2sock.egg-info/SOURCES.txt'
running build_ext
==================================== test session starts =====================================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 -- /home/tcoutinho/miniconda/envs/py37/bin/python
cachedir: .pytest_cache
rootdir: /home/tcoutinho/workspace/ser2sock, inifile: setup.cfg
plugins: cov-2.10.0, asyncio-0.14.0
collected 8 items
tests/test_ser2sock.py::test_load_config PASSED [ 12%]
tests/test_ser2sock.py::test_web_server PASSED [ 25%]
tests/test_ser2sock.py::test_server PASSED [ 37%]
tests/test_ser2sock.py::test_server_no_serial PASSED [ 50%]
tests/test_ser2sock.py::test_server_serial_close_after_success PASSED [ 62%]
tests/test_ser2sock.py::test_server_no_client PASSED [ 75%]
tests/test_ser2sock.py::test_server_missing_argument PASSED [ 87%]
tests/test_ser2sock.py::test_2_clients_to_1_serial PASSED [100%]
----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name Stmts Miss Cover
------------------------------------------
ser2sock/__init__.py 1 0 100%
ser2sock/server.py 321 56 83%
------------------------------------------
TOTAL 322 56 83%
Coverage HTML written to dir htmlcov
================================== slowest 2 test durations ==================================
0.02s call tests/test_ser2sock.py::test_server_no_client
0.02s setup tests/test_ser2sock.py::test_web_server
===================================== 8 passed in 0.30s ======================================
That's all folks!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ser2sock-4.1.2.tar.gz
.
File metadata
- Download URL: ser2sock-4.1.2.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84562f8b9b30fa62b40355790b7e4631c73a33811dfe60c06a751c1ac1cc6aed |
|
MD5 | 756616894a7d737362d2a9db0e877093 |
|
BLAKE2b-256 | b409826c3b72e133073af8447c0a2a854f74dfbf645327931cb77f52b9176a43 |