コード例 #1
0
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
コード例 #2
0
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')
コード例 #3
0
def launch():
    RELAY.relayON(0, 6)
    time.sleep(0.5)
    RELAY.relayON(0, 5)
    print("MPV OPENED")
    client.publish(TOPIC_2, b'MAINOPEN')
    return
コード例 #4
0
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()
コード例 #5
0
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!")
コード例 #6
0
 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)
     })
コード例 #7
0
ファイル: app.py プロジェクト: ijin/wt-shower
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)
コード例 #8
0
ファイル: app.py プロジェクト: ijin/wt-shower
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
    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
コード例 #12
0
    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
コード例 #13
0
 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
コード例 #14
0
 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
コード例 #15
0
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")
コード例 #16
0
ファイル: mycoup.py プロジェクト: jarobey/happygarden
 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)
コード例 #17
0
ファイル: app.py プロジェクト: ijin/wt-shower
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}"
コード例 #18
0
ファイル: app.py プロジェクト: ijin/wt-shower
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
コード例 #19
0
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))}
コード例 #20
0
ファイル: mycoup.py プロジェクト: jarobey/happygarden
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": {}}}')
コード例 #21
0
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)
コード例 #22
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()
コード例 #23
0
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 ()
コード例 #24
0
    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
コード例 #25
0
    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
コード例 #26
0
ファイル: Freq_Output.py プロジェクト: edmelnik/inserttest
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()
コード例 #27
0
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),
    }
コード例 #28
0
ファイル: door.py プロジェクト: kmahoney40/pi_plates
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
コード例 #29
0
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
コード例 #30
0
ファイル: relay-set.py プロジェクト: Ryanbons/The-Seed-Vault
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)
コード例 #31
0
#
# 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)
コード例 #32
0
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]
コード例 #33
0
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)