Source code for pi_portal.modules.integrations.gpio.components.contact_switch
"""ContactSwitch class."""
from typing import Optional, cast
from pi_portal.modules.integrations.gpio.components.bases import \
input_base as gpio_input
from pi_portal.modules.python.rpi import RPi
[docs]class ContactSwitch(gpio_input.GPIOInputBase[Optional[bool]]):
"""GPIO input for a contact switch."""
current_state: Optional[bool]
open = 1
[docs] def __init__(
self,
pin_number: int,
pin_name: str,
) -> None:
super().__init__(pin_number, pin_name, None)
[docs] def hook_setup_input(self) -> None:
"""Initialize the GPIO input."""
RPi.GPIO.setup(self.pin_number, RPi.GPIO.IN, pull_up_down=RPi.GPIO.PUD_UP)
[docs] def hook_update_state(self) -> bool:
"""Retrieve new state for the GPIO input.
:returns: The new GPIO state value.
"""
return cast(bool, RPi.GPIO.input(self.pin_number) == self.open)