diff --git a/API.md b/API.md index 550225982..46098df0f 100644 --- a/API.md +++ b/API.md @@ -462,6 +462,7 @@ Get all available addons. "stdin": "bool", "webui": "null|http(s)://[HOST]:port/xy/zx", "gpio": "bool", + "devicetree": "bool", "audio": "bool", "audio_input": "null|0,0", "audio_output": "null|0,0", diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 40a838dd5..51804ca26 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -25,7 +25,8 @@ from ..const import ( ATTR_HASSIO_API, ATTR_AUDIO, ATTR_AUDIO_OUTPUT, ATTR_AUDIO_INPUT, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_DISCOVERY, ATTR_SERVICES, - ATTR_APPARMOR, SECURITY_PROFILE, SECURITY_DISABLE, SECURITY_DEFAULT) + ATTR_APPARMOR, ATTR_DEVICETREE, SECURITY_PROFILE, SECURITY_DISABLE, + SECURITY_DEFAULT) from ..coresys import CoreSysAttributes from ..docker.addon import DockerAddon from ..utils.json import write_json_file, read_json_file @@ -354,6 +355,11 @@ class Addon(CoreSysAttributes): """Return True if the add-on access to gpio interface.""" return self._mesh[ATTR_GPIO] + @property + def with_devicetree(self): + """Return True if the add-on read access to devicetree.""" + return self._mesh[ATTR_DEVICETREE] + @property def with_audio(self): """Return True if the add-on access to audio.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 822b448ba..55afc55e8 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -18,7 +18,7 @@ from ..const import ( ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API, ATTR_BUILD_FROM, ATTR_SQUASH, ATTR_ARGS, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_SERVICES, ATTR_DISCOVERY, - ATTR_APPARMOR) + ATTR_APPARMOR, ATTR_DEVICETREE) from ..validate import NETWORK_PORT, DOCKER_PORTS, ALSA_DEVICE _LOGGER = logging.getLogger(__name__) @@ -111,6 +111,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_APPARMOR, default=True): vol.Boolean(), vol.Optional(ATTR_AUDIO, default=False): vol.Boolean(), vol.Optional(ATTR_GPIO, default=False): vol.Boolean(), + vol.Optional(ATTR_DEVICETREE, default=False): vol.Boolean(), vol.Optional(ATTR_HASSIO_API, default=False): vol.Boolean(), vol.Optional(ATTR_HOMEASSISTANT_API, default=False): vol.Boolean(), vol.Optional(ATTR_STDIN, default=False): vol.Boolean(), diff --git a/hassio/api/addons.py b/hassio/api/addons.py index ab31bbc1c..badfb0489 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -17,7 +17,7 @@ from ..const import ( ATTR_CHANGELOG, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_LONG_DESCRIPTION, ATTR_CPU_PERCENT, ATTR_MEMORY_LIMIT, ATTR_MEMORY_USAGE, ATTR_NETWORK_TX, ATTR_NETWORK_RX, ATTR_BLK_READ, ATTR_BLK_WRITE, ATTR_ICON, ATTR_SERVICES, - ATTR_DISCOVERY, ATTR_APPARMOR, + ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT) from ..coresys import CoreSysAttributes from ..validate import DOCKER_PORTS, ALSA_DEVICE @@ -136,6 +136,7 @@ class APIAddons(CoreSysAttributes): ATTR_HASSIO_API: addon.access_hassio_api, ATTR_HOMEASSISTANT_API: addon.access_homeassistant_api, ATTR_GPIO: addon.with_gpio, + ATTR_DEVICETREE: addon.with_devicetree, ATTR_AUDIO: addon.with_audio, ATTR_AUDIO_INPUT: addon.audio_input, ATTR_AUDIO_OUTPUT: addon.audio_output, diff --git a/hassio/const.py b/hassio/const.py index 92e1629c4..8958c8274 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -165,6 +165,7 @@ ATTR_CRYPTO = 'crypto' ATTR_BRANCH = 'branch' ATTR_KERNEL = 'kernel' ATTR_APPARMOR = 'apparmor' +ATTR_DEVICETREE = 'devicetree' SERVICE_MQTT = 'mqtt' diff --git a/hassio/docker/addon.py b/hassio/docker/addon.py index cba7e8870..c2801832c 100644 --- a/hassio/docker/addon.py +++ b/hassio/docker/addon.py @@ -201,6 +201,8 @@ class DockerAddon(DockerInterface): }}) # Init other hardware mappings + + # GPIO support if self.addon.with_gpio: volumes.update({ "/sys/class/gpio": { @@ -211,6 +213,14 @@ class DockerAddon(DockerInterface): }, }) + # DeviceTree support + if self.addon.with_devicetree: + volumes.update({ + "/sys/firmware/devicetree": { + 'bind': "/sys/firmware/devicetree", 'mode': 'r' + }, + }) + # Host dbus system if self.addon.host_dbus: volumes.update({