126 lines
3.3 KiB
Python
126 lines
3.3 KiB
Python
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()
|