Mercurial > code > home > repos > doorbell
view doorbell_to_mqtt.py @ 0:7bd85b962845
start
author | drewp@bigasterisk.com |
---|---|
date | Sat, 21 Jan 2023 21:59:14 -0800 |
parents | |
children | f822e7fe7120 |
line wrap: on
line source
import time import logging import sys import paho.mqtt.client as mqtt from pyfirmata import Arduino, INPUT PULLUP = 0x0b MIN_REPEAT_SEC = .5 logging.basicConfig(level=logging.INFO) log = logging.getLogger() dev, = sys.argv[1:] client = mqtt.Client() client.will_set('doorbell/online', '0', qos=0, retain=False) client.connect('bang') log.info(f'connecting to {dev}') # note that I set StandardFirmata to double baud rate board = Arduino(dev, baudrate=115200) log.info('done') pin = board.get_pin('d:2:i') pin.mode = PULLUP # config msg to send to firmata pin._mode = INPUT # fake value so pyfirmata still reads this pin log.info('running mqtt client') client.loop_start() log.info('done') client.publish('doorbell/online', '1') last_value = None last_edge = 0 def on_press(t): global last_edge if t > last_edge + MIN_REPEAT_SEC: log.info(f'press {t=}') client.publish('doorbell/button', 'press') log.info('published') last_edge = t try: while True: now = time.time() board.iterate() value = pin.read() if value == 0 and last_value == 1: on_press(now) last_value = value client.loop() except Exception: client.publish('doorbell/online', '0') client.disconnect() raise