v0.1.7 add remote server, agent, client

This commit is contained in:
controllerzz 2025-12-24 20:01:47 +03:00
parent b91733c713
commit 63e6ed4ffd
5 changed files with 88 additions and 6 deletions

View File

@ -243,8 +243,38 @@ vin = await uds.read_data_by_identifier(0xF190)
print("VIN:", vin.decode(errors="ignore")) print("VIN:", vin.decode(errors="ignore"))
```` ````
## Удалённая работа через внешний сервер
### 1. Сервер/Relay
На сервере устанавливаем библиотеку carbus-lib, далее запускаем сервер
## Удалённая работа через TCP (tcp_bridge) carbus-relay-server --host 0.0.0.0 --port 9000
или
python -m carbus_async.remote.server --host 0.0.0.0 --port 9000
### 2. Агент
На машине куда подключен девайс запускаем агента
carbus-relay-agent --port COM6 --baudrate 115200 --server <IP_СЕРВЕРА>:9000 --serial 5957 --password 1234
или
python -m carbus_async.remote.agent --port COM6 --baudrate 115200 --server <IP_СЕРВЕРА>:9000 --serial 5957 --password 1234
где
--server <IP_СЕРВЕРА>:9000 - адрес и порт сервера
--serial 5957 - серийный номер девайса
--password 1234 - пароль, требуется для получения уделнного доступа
### 3. Клиент (удалённая машина)
Для получения удаленного доступа используем функцию ***open_remote_device***
````python
from carbus_async import open_remote_device
dev = await open_remote_device(<IP_СЕРВЕРА>, 9000, serial=5957, password="1234")
````
## Удалённая работа в локальной сети через TCP (tcp_bridge)
### 1. Сервер (рядом с адаптером) ### 1. Сервер (рядом с адаптером)

View File

@ -11,7 +11,7 @@ async def main(is_debug=False):
nominal_bitrate=500_000, nominal_bitrate=500_000,
) )
await dev.set_terminator(channel=1, enabled=True) await dev.ensure_terminator(channel=1, enabled=True)
sender = PeriodicCanSender(dev) sender = PeriodicCanSender(dev)
@ -33,7 +33,7 @@ async def main(is_debug=False):
channel=1, channel=1,
can_id=0x123, can_id=0x123,
data=b"\x01\x02\x03\x04\x05\x06\x07\x08", data=b"\x01\x02\x03\x04\x05\x06\x07\x08",
period_s=0.1, period_s=0.05,
) )
try: try:

View File

@ -0,0 +1,48 @@
import asyncio
from carbus_async import CarBusDevice, PeriodicCanSender, open_remote_device
async def main(is_debug=False):
dev = await open_remote_device("84.54.37.149", 9000, serial=5957, password="1234")
await dev.open_can_channel(
channel=1,
nominal_bitrate=500_000,
)
await dev.ensure_terminator(channel=1, enabled=True)
sender = PeriodicCanSender(dev)
def mod(tick, data):
b = bytearray(data)
b[0] = tick & 0xFF
return bytes(b)
sender.add(
"cnt",
channel=1,
can_id=0x100,
data=b"\x00" * 8,
period_s=0.5,
modify=mod)
sender.add(
"heartbeat",
channel=1,
can_id=0x123,
data=b"\x01\x02\x03\x04\x05\x06\x07\x08",
period_s=0.05,
)
try:
await asyncio.Event().wait()
finally:
await sender.stop_all()
await dev.close()
return
asyncio.run(main())

View File

@ -16,7 +16,7 @@ async def main(is_debug=False):
) )
logging.getLogger("carbus_async.wire").setLevel(logging.DEBUG) logging.getLogger("carbus_async.wire").setLevel(logging.DEBUG)
dev = await open_remote_device("127.0.0.1", 9000, serial=5957, password="1234") dev = await open_remote_device("84.54.37.149", 9000, serial=5957, password="1234")
print(f"Devise SN: {await dev.get_serial()}") print(f"Devise SN: {await dev.get_serial()}")
@ -36,4 +36,4 @@ async def main(is_debug=False):
await dev.close() await dev.close()
asyncio.run(main(is_debug=True)) asyncio.run(main())

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "carbus-lib" name = "carbus-lib"
version = "0.1.6" version = "0.1.7"
description = "Async CAN / ISO-TP / UDS library for Car Bus Analyzer" description = "Async CAN / ISO-TP / UDS library for Car Bus Analyzer"
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.10"
@ -25,3 +25,7 @@ package-dir = {"" = "."}
[tool.setuptools.packages.find] [tool.setuptools.packages.find]
where = ["."] where = ["."]
include = ["carbus_async*", "isotp_async*", "uds_async*"] include = ["carbus_async*", "isotp_async*", "uds_async*"]
[project.scripts]
carbus-relay-server = "carbus_async.remote.server:main"
carbus-relay-agent = "carbus_async.remote.agent:main"