Switch gpiozero(fuck you) for lgpio

This commit is contained in:
2026-08-01 14:45:44 +02:00
parent 158b430235
commit 936b786659
3 changed files with 28 additions and 42 deletions

View File

@@ -2,8 +2,7 @@ import logging
from datetime import date, datetime, timedelta
from time import sleep
from gpiozero import OutputDevice
from gpiozero.pins.mock import MockFactory
import lgpio
from sqlalchemy import exc
from sqlmodel import select
@@ -25,33 +24,37 @@ class DoorController:
self._is_open: bool = False
self._lock_pin = lock_pin
self._unlock_pin = unlock_pin
self._mock = mock_factory
self._chip = None
if mock_factory:
from gpiozero import Device
Device.pin_factory = MockFactory()
self._lock = OutputDevice(pin=lock_pin, active_high=False)
self._unlock = OutputDevice(pin=unlock_pin, active_high=False)
if not mock_factory:
self._chip = lgpio.gpiochip_open(0)
lgpio.gpio_claim_output(self._chip, unlock_pin, 1)
lgpio.gpio_claim_output(self._chip, lock_pin, 1)
logger.info(
"DoorController started. lock=%s unlock=%s factory=%s",
"DoorController started. lock=%s unlock=%s mock=%s",
lock_pin,
unlock_pin,
type(self._lock.pin_factory).__name__,
mock_factory,
)
def open(self):
self._unlock.on()
if self._mock:
self._is_open = True
logger.info("Dor unlocked.[MOCK]")
return
lgpio.gpio_write(self._chip, self._unlock_pin, 0)
sleep(0.4)
self._unlock.off()
lgpio.gpio_write(self._chip, self._unlock_pin, 1)
self._is_open = True
logger.info("Door unlocked!")
def close(self):
self._lock.on()
lgpio.gpio_write(self._chip, self._lock_pin, 0)
sleep(0.4)
self._lock.off()
lgpio.gpio_write(self._chip, self._lock_pin, 1)
self._is_open = False
logger.info("Door locked!")

View File

@@ -18,8 +18,8 @@ dependencies = [
"pyscard>=2.3.1",
"alembic>=1.18.5",
"ruff>=0.16.0",
"gpiozero>=2.0.1.post3",
"pydantic-settings>=2.13.1",
'lgpio>=0.2.2.0' # ; sys_platform == "linux" and platform_machine == "aarch64"',
]
[tool.uv.sources]
@@ -28,6 +28,7 @@ python-desfire = { git = "https://github.com/waza-ari/python-desfire" }
[tool.uv.extra-build-dependencies]
python-desfire = ["poetry"]
"pyscard" = ["setuptools"]
"lgpio" = ["setuptools"]
[tool.setuptools]
py-modules = ["app"]

34
uv.lock generated
View File

@@ -270,18 +270,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]]
name = "colorzero"
version = "2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "setuptools" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/688824a06e8c4d04c7d2fd2af2d8da27bed51af20ee5f094154e1d680334/colorzero-2.0.tar.gz", hash = "sha256:e7d5a5c26cd0dc37b164ebefc609f388de24f8593b659191e12d85f8f9d5eb58", size = 25382, upload-time = "2021-03-15T23:42:23.261Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/7e/a6/ddd0f130e44a7593ac6c55aa93f6e256d2270fd88e9d1b64ab7f22ab8fde/colorzero-2.0-py2.py3-none-any.whl", hash = "sha256:0e60d743a6b8071498a56465f7719c96a5e92928f858bab1be2a0d606c9aa0f8", size = 26573, upload-time = "2021-03-15T23:42:21.757Z" },
]
[[package]]
name = "coverage"
version = "7.14.0"
@@ -636,7 +624,7 @@ source = { virtual = "." }
dependencies = [
{ name = "alembic" },
{ name = "fastapi", extra = ["standard"] },
{ name = "gpiozero" },
{ name = "lgpio" },
{ name = "poetry" },
{ name = "pwdlib", extra = ["argon2"] },
{ name = "pydantic-settings" },
@@ -655,7 +643,7 @@ dependencies = [
requires-dist = [
{ name = "alembic", specifier = ">=1.18.5" },
{ name = "fastapi", extras = ["standard"], specifier = ">=0.135.3" },
{ name = "gpiozero", specifier = ">=2.0.1.post3" },
{ name = "lgpio", specifier = ">=0.2.2.0" },
{ name = "poetry", specifier = ">=2.3.4" },
{ name = "pwdlib", extras = ["argon2"], specifier = ">=0.3.0" },
{ name = "pydantic-settings", specifier = ">=2.13.1" },
@@ -670,18 +658,6 @@ requires-dist = [
{ name = "sqlmodel", specifier = ">=0.0.38" },
]
[[package]]
name = "gpiozero"
version = "2.0.1.post3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorzero" },
]
sdist = { url = "https://files.pythonhosted.org/packages/67/63/864a3c36842cf7b05808aadf906763a024a1b13f2a4c8144e3163de91255/gpiozero-2.0.1.post3.tar.gz", hash = "sha256:745feab6df463ac2e9de10c67e2dd9f396e668ba4e281e92381d6c460100a8f7", size = 168403, upload-time = "2026-07-27T10:03:32.628Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/45/cb/ec5917b454b2e82874769a348dc74cfcec5b447bf1061c827edea9702451/gpiozero-2.0.1.post3-py3-none-any.whl", hash = "sha256:d491734803a9bc6036602e6b8bbd73fb25c33da88de0fcd11a40e890b8bc2d3b", size = 151465, upload-time = "2026-07-27T10:03:31.195Z" },
]
[[package]]
name = "greenlet"
version = "3.4.0"
@@ -870,6 +846,12 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" },
]
[[package]]
name = "lgpio"
version = "0.2.2.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/56/33/26ec2e8049eaa2f077bf23a12dc61ca559fbfa7bea0516bf263d657ae275/lgpio-0.2.2.0.tar.gz", hash = "sha256:11372e653b200f76a0b3ef8a23a0735c85ec678a9f8550b9893151ed0f863fff", size = 90087, upload-time = "2024-03-29T21:59:55.901Z" }
[[package]]
name = "mako"
version = "1.3.12"