0

我在带有 Raspbian 的 RPi 4 上的 docker 容器中运行 homeassistant。我正在使用tributs script来提高以 root 身份运行 docker 映像的需要。这一切都很有效。但现在我正在尝试添加dsmr 集成,但我没有成功。集成需要通过 USB 连接到“Slimme Meter”。但是,我收到权限错误。我对 docker 和 linux 特权的了解太有限了,不知道从哪里开始调试。有人对我有一些指示吗?

这是家庭助理向我抛出的错误消息:

Logger: homeassistant.components.dsmr
Source: components/dsmr/config_flow.py:93
Integration: dsmr (documentation, issues)
First occurred: 21:18:17 (1 occurrences)
Last logged: 21:18:17

Error connecting to DSMR
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/serial/serialposix.py", line 322, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/dsmr/config_flow.py", line 93, in validate_connect
    transport, protocol = await asyncio.create_task(reader_factory())
  File "/usr/local/lib/python3.9/site-packages/serial_asyncio/__init__.py", line 445, in create_serial_connection
    serial_instance = serial.serial_for_url(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/serial/__init__.py", line 90, in serial_for_url
    instance.open()
  File "/usr/local/lib/python3.9/site-packages/serial/serialposix.py", line 325, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'
4

1 回答 1

0

经过一番研究,我发现我需要将用户添加到一个名为 dialout 的额外组中,因为只有该组的成员才能访问 USB 端口(以及其他设备)。

首先,我通过运行找出主机(运行 docker 容器的机器)中拨出组的组 ID

cat /etc/group | grep dialout

就我而言,它返回了 20。幸运的是,tributs脚本可以通过环境变量将用户添加到额外的组中EXTRA_GID。因此 docker-compose 文件中用于访问 USB 的所有相关行都是(使用tribut脚本时)是:

    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    environment:
      - PUID=1000
      - PGID=1000
      - EXTRA_GID=20  # this is the ID of the group 'dialout'
于 2021-09-02T18:58:29.310 回答