def main_close(): RELAY.relayOFF(0, 5) time.sleep(0.5) RELAY.relayOFF(0, 6) print("MPV CLOSED") client.publish(TOPIC_2, b'MAINCLOSE') return
def all_off(): #GPIO.setmode(GPIO.BCM) import piplates.RELAYplate as rel rel.relayOFF(0, 1) rel.relayOFF(0, 2) logging.info('RELAY 1 OFF') logging.info('RELAY 2 OFF')
def launch(): RELAY.relayON(0, 6) time.sleep(0.5) RELAY.relayON(0, 5) print("MPV OPENED") client.publish(TOPIC_2, b'MAINOPEN') return
def deflate(): import piplates.RELAYplate as rel rel.relayOFF(0, 1) time.sleep(0.1) rel.relayON(0, 2) time.sleep(DEFLATION_TIME) all_off()
def on_terminate(): RELAY.RESET(0) RELAY.RESET(1) MOTOR.RESET(0) MOTOR.RESET(1) print("All relays and Motors are off.") print("Program has been terminated!")
def get_state(self): ''' Returns a 7-bit number with the current state of each relay. Bit 0 is relay 1, bit 1 is relay 2, and so on. A "1" in a bit position means that the relay is on and zero means that it's off. ''' return json.dumps({ "Relay card1": RELAY.relaySTATE(0), "Relay card2": RELAY.relaySTATE(1) })
def shower_shutdown(shower_id): db_session.query(Shower).filter_by(id=shower_id).update(dict(assigned=False,started_at=None,paused_at=None,seconds_allocated=None)) db_session.commit() #GPIO.output(shower_pin(int(shower_id)), 1) RELAY.relayOFF(3,int(shower_id)) redis.set(f"shower{shower_id}", 0) redis.set(f"shower_time_sum:{shower_id}", 0) text = f"Shutting down shower {shower_id}" print(text) say.delay(text)
def shower_off(shower_id): try: #j = request.get_json() #shower_id = j['shower'] #GPIO.output(shower_pin(int(shower_id)), 1) RELAY.relayOFF(3,int(shower_id)) redis.set(f"shower{shower_id}", 0) return "off" except Exception as e: result = error_handler(e) return result, status.HTTP_500_INTERNAL_SERVER_ERROR
def get_state_of_relays_on_plate(plate_num): if RELAY.getADDR(plate_num) != plate_num: raise Exception("Plate Number is invalid") status_num = RELAY.relaySTATE(plate_num) relay_status = {} relay_num = 0 while relay_num < 7: relay_num += 1 if status_num & 1 == 1: relay_status[relay_num] = 'on' else: relay_status[relay_num] = 'off' status_num = status_num >> 1 return relay_status
def pin_update(pin_number, value): if pin_number in VALID_PIPLATES_PIN_NUMBERS: if pin_number < 8: #card 1 if value: RELAY.relayON(0, pin_number) else: RELAY.relayOFF(0, pin_number) else: #card 2 valid pin numbers 1..7 if value: RELAY.relayON(1, pin_number - 7) else: RELAY.relayOFF(1, pin_number - 7) new_value = _get_relaystate(pin_number) data = { 'status': 'SUCCESS', 'error': None, 'pin_number': pin_number, 'pin_name': PIN_NAMES[str(pin_number)], 'new_value': int(new_value) } else: data = {'status': 'ERROR', 'error': 'Invalid pin number or value.'} return data
def open_valve(self): # opens the valve and returns True on success or False on failure to open valve # if the valve is already open, True is returned RELAY.relayON(0, self.relayID) vs = self.valve_status() valvelog.info("Open valve / relay : %d", self.relayID) if (vs == "OPEN"): valvelog.info("Open Success") return True else: valvelog.error("Open Failed on relay: %d ", self.relayID) return False
def close_valve(self): # closes the valve and returns True on success or False on failure to close valve # if the valve is already closed, True is returned RELAY.relayOFF(0, self.relayID) vs = self.valve_status() valvelog.info("Close valve / relay : %d", self.relayID) if (vs == "CLOSED"): valvelog.info("Close Success") return True else: valvelog.error("Close Failed on relay: %d ", self.relayID) return False
def get_state_dict(self): ret_dict = {} state = RELAY.relaySTATE(self.pid) for idx in list(range(7)): key = 'r' + str(idx + 1) ret_dict[key] = self.get_bool(state, idx) return ret_dict
def GetState(self): states = RELAY.relaySTATE(0) states = dec_to_bin(states) for i in range (0, len(self.relays)): status = states%10 states = states/10 self.relays[i].deviceStatus = status
def Poll(): ppFoundCount=0 for i in range (0,8): rtn = RP.getADDR(i) if (rtn==i): print ("RELAYplate found at address",rtn) ppFoundCount += 1 if (ppFoundCount == 0): print ("No RELAYplates found")
def get_status(self): relay_state = RELAY.relaySTATE(self.relay_plate_id) self.coup_dict['Coup']['Plate Status'] = relay_state i = 0 status = {} for light_name in self.light_names: status[light_name] = pow(2, i) & relay_state > 0 i += 1 self.coup_dict['Coup']['Lights'] = status return json.dumps(self.coup_dict)
def shower_toggle(shower_id): shower = Shower.query.filter_by(id=shower_id, assigned=True).first() if shower == None: r = f"shower{shower_id} NOT ASSIGNED" return r else: # TODO: DRY shower_status = int(redis.get(f"shower{shower_id}") or 0) toggle_status = not bool(shower_status) #GPIO.output(shower_pin(int(shower_id)), not toggle_status) # 1 == off RELAY.relayTOGGLE(3,int(shower_id)) redis.set(f"shower{shower_id}", int(toggle_status)) if int(toggle_status) == 1 and shower.started_at == None: # first shower shower.started_at = datetime.now() db_session.commit() elif int(toggle_status) == 0: # pause shower.paused_at = datetime.now() db_session.commit() return f"shower{shower_id}, status:{toggle_status}"
def toggle(): try: j = request.get_json() shower_id = j['shower'] shower_status = int(redis.get(f"shower{shower_id}") or 0) toggle_status = not bool(shower_status) #GPIO.output(shower_pin(shower_id), not toggle_status) # 1 == off RELAY.relayTOGGLE(3,int(shower_id)) redis.set(f"shower{shower_id}", int(toggle_status)) print(f"shower id: {shower_id}, status: {toggle_status}") result = { "shower": { "id": shower_id, "status": toggle_status } } return jsonify(result) except Exception as e: result = error_handler(e) return result, status.HTTP_500_INTERNAL_SERVER_ERROR
def get_card_address(): relays = [] motors = [] for address in range(0, 2): relays.append(RELAY.getADDR(address)) for address in range(0, 8): motors.append(MOTOR.getADDR(address)) # remove duplicates with set return {'Relays': list(set(relays)), 'Steppers': list(set(motors))}
class Coup(): relay_plate_id = 0 light_names = [ 'Run Light 1', 'Run Light 2', 'Coup Light 1', 'Coup Light 2' ] coup_dict = { 'Coup': { 'Lights': {}, 'Doors': {}, 'Temperatures': {}, 'Plate Status': {}, 'LEDs': { 'Relay Plate {} LED'.format(relay_plate_id): False } } } RELAY.clrLED(relay_plate_id) def get_status(self): relay_state = RELAY.relaySTATE(self.relay_plate_id) self.coup_dict['Coup']['Plate Status'] = relay_state i = 0 status = {} for light_name in self.light_names: status[light_name] = pow(2, i) & relay_state > 0 i += 1 self.coup_dict['Coup']['Lights'] = status return json.dumps(self.coup_dict) # TODO: Invert state to only check passed in state--take away requirement to pass in fully built json state def set_state(self, desired_state_json): desired_state = json.loads(desired_state_json) current_state = json.loads(self.get_status()) lights = current_state['Coup']['Lights'] for light, state in lights.items(): if state != desired_state['Coup']['Lights'][light]: self.set_light(light, desired_state['Coup']['Lights'][light]) def set_light(self, name, value): light = self.light_names.index(name) + 1 if value: RELAY.relayON(self.relay_plate_id, light) else: RELAY.relayOFF(self.relay_plate_id, light) def set_light_mode(self, mode): self.set_state(mode) # c = Coup() # c.set_state('{"Coup": {"Lights": {"Coup Light 2": true, "Run Light 2": true, "Coup Light 1": true, "Run Light 1": false}, "Doors": {}, "Temperatures": {}}}')
def main(): global wakeup ppADDR = 1 rain_threshold = 1.0 spr_state = 0.0 observer = Observer() observer.schedule(Handler(), ".", recursive=False) observer.start() RELAY.RESET(ppADDR) while True: print('Iterating') if wakeup: try: pf = open('rain.data', 'r') print('Opened file rain.data') line = pf.readline() pf.close() sline = line.split(',') rv = float(sline[0]) rtime = datetime.datetime.now() print('File rain.data timestamp: ', sline[1]) print('Weighted rain amount -3/+3: ', sline[0]) print('Rain threshold to enable sprinkler: ', rain_threshold) if rv > rain_threshold: print('Sprinkler Disabled: Relay OFF at ', rtime) RELAY.relayOFF(ppADDR, 1) spr_state = 0.0 else: print('Sprinkler Enabled: Relay ON at ', rtime) RELAY.relayON(ppADDR, 1) spr_state = 1.0 except (ValueError, EOFError): ierr = ierr + 1 wakeup = False statsdb.statsdb('SprinklerEN', spr_state) time.sleep(100.0)
def inflate(): d = get_distance() #no measurement, something wrong, turn off the valves if d < 0: all_off() log_alarm('inflate: failed to get distance') if d < MAX_DIST_CM: return inflate_start = timer() import piplates.RELAYplate as rel rel.relayON(0, 1) rel.relayOFF(0, 2) while True: time.sleep(0.1) if timer() - inflate_start > MAX_INFLATION_TIME: all_off() log_alarm('inflate: max inflation time reached') break d = get_distance() if d < MAX_DIST_CM: break #we're done inflating, lock the valves all_off()
def relay(): global button_pressed if button_pressed == 1: RELAY.getID(1) 'Pi-Plate RELAY' RELAY.relayON(1, 1) sleep(0.02) RELAY.relayOFF(1, 1) return ()
def door_cmnd(self, override): now = datetime.datetime.now() ret_json = str(now) + str(requests.get(self.url).text) if str(ret_json).find('true') > -1 or override == True: RELAY.relayON(self.pid, 5) time.sleep(0.5) RELAY.relayOFF(self.pid, 5) else: RELAY.relayOFF(self.pid, 5) return ret_json
def valve_status(self): valvelog.debug("Get Valve Status") valvelog.debug(self) # returns the current valve status open, closed, error relayStates = RELAY.relaySTATE(self.relayAddress) valvelog.debug("Relay States:") valvelog.debug(relayStates) valvelog.debug("Relay Mask:") valvelog.debug("{0:b}".format(self.relayMask)) valvelog.debug(self.relayMask) valvelog.debug((relayStates & self.relayMask)) valveStatus = "CLOSED" if ((relayStates & self.relayMask) != 0): valvelog.debug("Valve is open!") valveStatus = "OPEN" return valveStatus
def relay(): relay = 1 j = input("Enter Insert Number: ") if relay== 1: button_pressed = 1 print ("button pressed") RELAY.getID(1) 'Pi-Plate RELAY' RELAY.relayON(1,1) sleep(0.02) RELAY.relayOFF(1,1) return()
def get_card_address(): relays = [] motors = [] for address in range(0, 2): relays.append({ "address": RELAY.getADDR(address), "status": is_relay_online(address) }) for address in range(0, 8): if MOTOR.getADDR( address) > -1: #suppress cards that don't exist , code -16 motors.append({ "address": MOTOR.getADDR(address), "status": is_stepper_online(address) }) # remove duplicates with set return { 'Relays': list((relays)), 'Steppers': list(motors), }
def getDoorCmnd(line, url, override): try: stdscr = curses.initscr() curses.noecho() stdscr.nodelay(1) localLine = 1 localLine += 1 stdscr.addstr(line + localLine, 0, "BEGIN: getDoorCmnd") localLine += 1 h = {'content-type': 'application/json'} fullUrl = url + 'door' stdscr.addstr(line + localLine, 0, "fullurl: " + fullUrl) localLine += 1 ret = requests.get(url + 'door') stdscr.addstr(line + localLine, 0, str(ret.text)) localLine += 1 # ret.text should be json or convertible to json, then we can get cmnd and the read config # variable if str(ret.text).find('true') < -1 or override == True: RELAY.relayON(0, 5) time.sleep(0.5) RELAY.relayOFF(0, 5) else: RELAY.relayOFF(0, 5) except Exception, ex: # print the exception and keep going stdscr.addstr(line + localLine, 0, "getDoorCmnd() outter exception: " + ex.message) localLine += 3
def getBoardData(): brd = 0 bites = bite_to_boolArray( int_to_bin( RELAY.relaySTATE( brd ) ) ) data = { "id": RELAY.getID( brd ), "FWrev": RELAY.getFWrev( brd ), "HWrev": RELAY.getHWrev( brd ), "PMrev": RELAY.getPMrev( ), "STATE": bites } app.logger.error( data ) return data
from __future__ import print_function import piplates.RELAYplate as RELAY import time ppADDR = 0 RELAY.RESET(ppADDR) rly = 6 RELAY.relayON(ppADDR, rly) print('relay 6 is on') time.sleep(1) print('starting spray loop') while True: rly = 7 RELAY.relayON(ppADDR, rly) print('Spray on, sleeping 1 sec') time.sleep(1) RELAY.relayOFF(ppADDR, rly) print('Spray off, sleeping 10 secs') time.sleep(10)
# # References # https://www.raspberrypi.org/documentation/linux/software/python.md # https://pi-plates.com/relayplate-users-guide/ # https://pi-plates.com/examples/#Controlling_aRELAYplate_Remotely_with_Your_Web_Browser # https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/#systemd # # import piplates.RELAYplate as RELAY import time ## The address of the relay plate ppADDR = 0 RELAY.RESET(ppADDR) while True: RELAY.relayON(ppADDR, 1) time.sleep(0.5) RELAY.relayOFF(ppADDR, 1) RELAY.relayON(ppADDR, 2) time.sleep(0.5) RELAY.relayOFF(ppADDR, 2) RELAY.relayON(ppADDR, 3) time.sleep(1) RELAY.relayOFF(ppADDR, 3) RELAY.relayON(ppADDR, 2) time.sleep(0.5) RELAY.relayOFF(ppADDR, 2) RELAY.relayON(ppADDR, 1)
def toggle_state_of_relay(plate_num, relay_num): RELAY.relayTOGGLE(plate_num, relay_num) relay_status = get_state_of_relays_on_plate(plate_num) return relay_status[relay_num]
def toggle_leds_on_plate(plate_num): if plate_num not in get_list_of_relay_plates(): raise Exception("Plate Number is invalid") RELAY.toggleLED(plate_num)