import sys, os def dummy_handler(signum, frame): print("received ", signum) return def handler(signum, frame): raise KeyboardInterrupt() return def main(): """ Daemon main routine; update relay state according to GPIO buttons every 0.1 seconds. """ import time import datetime as dt import logging import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library from pubsub import pub from WebRelay import WebRelay tnow = dt.datetime.now() logging.basicConfig( handlers = [ logging.FileHandler("/tmp/valve-test2-log"), ], format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S', level=logging.INFO ) pin2relay = {} pin2relay[11] = 0 pin2relay[13] = 1 pin2relay[16] = 2 pin2relay[18] = 3 # GPIO.setwarnings(False) # Ignore warning for now GPIO.setmode(GPIO.BOARD) # Use physical pin numbering GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP) nc_dict = dict() nc_dict["ipaddr"] = "192.168.1.2" nc_dict["port"] = 502 nc_dict["uid"] = 240 modbus = WebRelay() modbus.apply_network_configs(nc_dict) modbus.connect_slave() logging.info("Driver started") pub.subscribe(modbus.turn_relay_off, "turn_relay_off") pub.subscribe(modbus.turn_relay_on, "turn_relay_on") valve1_old = False valve2_old = False while True: # Valve 1 Switch if GPIO.input(11) == 0: if not valve1_old: logging.info("Open Valve 1") valve1_old = not valve1_old pub.sendMessage("turn_relay_on", relay_id=0) else: if valve1_old: logging.info("Close Valve 1") valve1_old = not valve1_old pub.sendMessage("turn_relay_off", relay_id=0) # Container 2 Full if GPIO.input(13) == 0: if not valve2_old: logging.info("Open Valve 2") valve2_old = not valve2_old pub.sendMessage("turn_relay_on", relay_id=1) else: if valve2_old: logging.info("Close Valve 2") valve2_old = not valve2_old pub.sendMessage("turn_relay_off", relay_id=1) time.sleep(0.1) if __name__ == "__main__": # Do the Unix double-fork magic; see Stevens's book "Advanced # Programming in the UNIX Environment" (Addison-Wesley) for details try: pid = os.fork() if pid > 0: # Exit first parent sys.exit(0) except OSError as e: print ("fork #1 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr) sys.exit(1) # Decouple from parent environment os.chdir("/") os.setsid( ) os.umask(0) # Do second fork try: pid = os.fork( ) if pid > 0: # Exit from second parent; print eventual PID before exiting print ("Daemon PID %d" % pid) sys.exit(0) except OSError as e: print ("fork #2 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr) sys.exit(1) # Start the daemon main loop main()