Compare commits

..

No commits in common. "main" and "2024.12.2" have entirely different histories.

9 changed files with 57 additions and 69 deletions

View File

@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 🚀 Run stale
uses: actions/stale@v9.1.0
uses: actions/stale@v9.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 14

View File

@ -23,7 +23,7 @@ jobs:
with:
fetch-depth: 2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.6.0
uses: actions/setup-python@v5.3.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies

View File

@ -210,4 +210,4 @@ switch:
```
# Reporting issues
*Before* reporting issues please enable debug logging as described [here](https://www.home-assistant.io/docs/configuration/troubleshooting/#enabling-debug-logging), check logs and report issue attaching the log file and the relevant YAML section.
*Before* reporting issues please enable debug logging as described [here](https://www.home-assistant.io/docs/configuration/troubleshooting/#enabling-debug-logging), check logs and report issue attaching the log file.

View File

@ -52,20 +52,17 @@ async def async_setup_platform(
sensors = []
for sensor in config.get(CONF_SENSORS):
try:
sensors.append(
GPIODBinarySensor(
hub,
sensor[CONF_NAME],
sensor[CONF_PORT],
sensor.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{sensor[CONF_PORT]}_{sensor[CONF_NAME].lower().replace(' ', '_')}",
sensor.get(CONF_INVERT_LOGIC),
sensor.get(CONF_PULL_MODE),
sensor.get(CONF_BOUNCETIME)
)
sensors.append(
GPIODBinarySensor(
hub,
sensor[CONF_NAME],
sensor[CONF_PORT],
sensor.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{sensor[CONF_PORT]}_{sensor[CONF_NAME].lower().replace(' ', '_')}",
sensor.get(CONF_INVERT_LOGIC),
sensor.get(CONF_PULL_MODE),
sensor.get(CONF_BOUNCETIME)
)
except Exception as e:
_LOGGER.error(f"Failed to add binary sensor {sensor[CONF_NAME]} for port {sensor[CONF_PORT]}: {e}")
)
async_add_entities(sensors)

View File

@ -71,24 +71,21 @@ async def async_setup_platform(
invert_relay = config[CONF_INVERT_RELAY]
covers = []
for cover in config.get(CONF_COVERS):
try:
covers.append(
GPIODCover(
hub,
cover[CONF_NAME],
cover.get(CONF_RELAY_PIN),
relay_time,
invert_relay,
"AS_IS",
"PUSH_PULL",
cover.get(CONF_STATE_PIN),
state_pull_mode,
invert_state,
cover.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{cover.get(CONF_RELAY_PIN)}_{cover[CONF_NAME].lower().replace(' ', '_')}",
)
covers.append(
GPIODCover(
hub,
cover[CONF_NAME],
cover.get(CONF_RELAY_PIN),
relay_time,
invert_relay,
"AS_IS",
"PUSH_PULL",
cover.get(CONF_STATE_PIN),
state_pull_mode,
invert_state,
cover.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{cover.get(CONF_RELAY_PIN)}_{cover[CONF_NAME].lower().replace(' ', '_')}",
)
except Exception as e:
_LOGGER.error(f"Failed to add cover {cover[CONF_NAME]} for port {cover.get(CONF_RELAY_PIN)}:{cover.get(CONF_STATE_PIN)}: {e}")
)
async_add_entities(covers)

View File

@ -7,7 +7,7 @@ _LOGGER = logging.getLogger(__name__)
from homeassistant.core import HomeAssistant
from homeassistant.const import EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_START
from homeassistant.exceptions import HomeAssistantError,ServiceValidationError
from homeassistant.exceptions import HomeAssistantError
from typing import Dict
from datetime import timedelta
@ -73,7 +73,6 @@ class Hub:
_LOGGER.debug(f"verify_gpiochip: {path} is a gpiochip_device")
self._chip = gpiod.Chip(path)
info = self._chip.get_info()
_LOGGER.debug(f"verify_gpiochip: {path} info is: {info}")
if not "pinctrl" in info.label:
_LOGGER.debug(f"verify_gpiochip: {path} no pinctrl {info.label}")
return False
@ -83,12 +82,10 @@ class Hub:
def verify_port_ready(self, port: int):
info = self._chip.get_line_info(port)
_LOGGER.debug(f"original port {port} info: {info}")
if info.used:
if info.consumer != DOMAIN:
raise HomeAssistantError(f"Port {port} already in use by {info.consumer}")
else:
raise HomeAssistantError(f"Port {port} already in use by another entity, check your config for duplicates port usage")
_LOGGER.debug(f"original port info: {info}")
if info.used and info.consumer != DOMAIN:
_LOGGER.error(f"Port {port} already in use by {info.consumer}")
raise HomeAssistantError(f"Port {port} already in use by {info.consumer}")
@property
def hub_id(self) -> str:
@ -103,11 +100,11 @@ class Hub:
line_request = self._chip.request_lines(
consumer=DOMAIN,
config={port: gpiod.LineSettings(
direction = Direction.OUTPUT,
bias = BIAS[bias],
drive = DRIVE[drive_mode],
active_low = active_low,
output_value = Value.ACTIVE if init_state is not None and init_state else Value.INACTIVE)})
direction = Direction.OUTPUT,
bias = BIAS[bias],
drive = DRIVE[drive_mode],
active_low = active_low,
output_value = Value.ACTIVE if init_state is not None and init_state else Value.INACTIVE)})
_LOGGER.debug(f"add_switch line_request: {line_request}")
return line_request
@ -135,9 +132,9 @@ class Hub:
active_low = active_low,
debounce_period = timedelta(milliseconds=debounce),
event_clock = Clock.REALTIME)})
_LOGGER.debug(f"add_sensor line_request: {line_request}")
current_is_on = True if line_request.get_value(port) == Value.ACTIVE else False
_LOGGER.debug(f"add_sensor current state: {current_is_on}")
_LOGGER.debug(f"add_sensor line_request: {line_request}. current state: {current_is_on}")
return line_request, current_is_on
def add_cover(self, relay_port, relay_active_low, relay_bias, relay_drive,

View File

@ -7,5 +7,5 @@
"iot_class": "local_push",
"issue_tracker": "https://github.com/thecode/ha-rpi_gpio/issues",
"requirements": [ "gpiod>=2.2.1" ],
"version": "2025.2.1"
"version": "2024.12.2"
}

View File

@ -56,21 +56,18 @@ async def async_setup_platform(
switches = []
for switch in config.get(CONF_SWITCHES):
try:
switches.append(
GPIODSwitch(
hub,
switch[CONF_NAME],
switch[CONF_PORT],
switch.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{switch[CONF_PORT]}_{switch[CONF_NAME].lower().replace(' ', '_')}",
switch.get(CONF_INVERT_LOGIC),
switch.get(CONF_PULL_MODE),
switch.get(CONF_DRIVE),
switch[CONF_PERSISTENT]
)
switches.append(
GPIODSwitch(
hub,
switch[CONF_NAME],
switch[CONF_PORT],
switch.get(CONF_UNIQUE_ID) or f"{DOMAIN}_{switch[CONF_PORT]}_{switch[CONF_NAME].lower().replace(' ', '_')}",
switch.get(CONF_INVERT_LOGIC),
switch.get(CONF_PULL_MODE),
switch.get(CONF_DRIVE),
switch[CONF_PERSISTENT]
)
except Exception as e:
_LOGGER.error(f"Failed to add switch {switch[CONF_NAME]} for port {switch[CONF_PORT]}: {e}")
)
async_add_entities(switches)

View File

@ -1,7 +1,7 @@
black==25.1.0
flake8==7.3.0
isort==6.0.1
mypy==1.17.0
pre-commit==4.2.0
black==24.10.0
flake8==7.1.1
isort==5.13.2
mypy==1.14.0
pre-commit==4.0.1
pydocstyle==6.3.0
pylint==3.3.7
pylint==3.3.2