sensor.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import typing
  2. # circuitpython
  3. import busio
  4. import digitalio
  5. import adafruit_mcp3xxx.analog_in
  6. import adafruit_mcp3xxx.mcp3008
  7. import homeassistant.const
  8. import homeassistant.core
  9. import homeassistant.helpers.entity
  10. class MCP3008Channel(homeassistant.helpers.entity.Entity):
  11. def __init__(self, adc: adafruit_mcp3xxx.mcp3008.MCP3008, channel: int) -> None:
  12. self._input = adafruit_mcp3xxx.analog_in.AnalogIn(adc, channel)
  13. self._channel = channel
  14. self._state: typing.Optional[float] = None
  15. # https://developers.home-assistant.io/docs/core/entity/#generic-properties
  16. @property
  17. def name(self) -> str:
  18. return f"MCP3008 Channel #{self._channel}"
  19. @property
  20. def unique_id(self) -> str:
  21. return f"mcp3008-ch{self._channel}"
  22. # https://developers.home-assistant.io/docs/core/entity/sensor/#properties
  23. @property
  24. def state(self) -> typing.Optional[float]:
  25. return self._state
  26. @property
  27. def device_class(self) -> str:
  28. return "voltage"
  29. @property
  30. def unit_of_measurement(self) -> str:
  31. return homeassistant.const.VOLT
  32. def update(self) -> None:
  33. self._state = self._input.voltage
  34. def setup_platform(
  35. hass: homeassistant.core.HomeAssistant,
  36. config: dict,
  37. add_entities: typing.Callable,
  38. discovery_info=None,
  39. ):
  40. board = __import__("board") # raises NotImplementedError
  41. spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
  42. spi_chip_select = digitalio.DigitalInOut(board.D5)
  43. adc = adafruit_mcp3xxx.mcp3008.MCP3008(
  44. spi_bus=spi, cs=spi_chip_select, ref_voltage=3.3
  45. )
  46. add_entities(
  47. [
  48. MCP3008Channel(adc=adc, channel=c)
  49. for c in [
  50. adafruit_mcp3xxx.mcp3008.P0,
  51. adafruit_mcp3xxx.mcp3008.P1,
  52. adafruit_mcp3xxx.mcp3008.P2,
  53. adafruit_mcp3xxx.mcp3008.P3,
  54. adafruit_mcp3xxx.mcp3008.P4,
  55. adafruit_mcp3xxx.mcp3008.P5,
  56. adafruit_mcp3xxx.mcp3008.P6,
  57. adafruit_mcp3xxx.mcp3008.P7,
  58. ]
  59. ]
  60. )