diff --git a/relay.py b/relay.py index 913cdb0..4f34bd9 100644 --- a/relay.py +++ b/relay.py @@ -3,13 +3,16 @@ import time,sys from paho.mqtt import client as mqtt_client #mqtt settings -broker = '192.168.2.2' +broker = '192.168.3.2' port = 1883 -uname = 'ecyhass' -pw = 'ecyhass1216' +#uname = 'ecyhass' +#pw = 'ecyhass1216' topic_sensor = 'garage/door_sensor' topic_control = 'garage/door_control' client_id = str(210) +BUTTON_TIME=1 #seconds + +RUN=1 #GPIO settings relay_pin = 15 @@ -19,25 +22,46 @@ gpio.setmode(gpio.BOARD) gpio.setup(relay_pin,gpio.OUT) gpio.setup(sensor_pin,gpio.IN,pull_up_down=gpio.PUD_DOWN) -def mqtt_connect(): - def on_connect(client, userdata, flags, rc): - if rc == 0: - print("Connected to MQTT Broker") - else: - print("Failed to Connect MQTT") +def mqtt_on_message(client, userdata, msg): + data=str(msg.payload.decode("utf-8")) + print("message received " ,data) + if data=="set_low": + set_relay(0) + if data=="set_high": + set_relay(1) + if data=="open_door": + press_button(client) + #if data=="end": + # end() + # client.loop_stop() +def mqtt_on_connect(client, userdata, flags, rc): + if rc == 0: + print("Connected to MQTT Broker") + else: + print("Failed to Connect MQTT") + + +def mqtt_setup(): + #Connect client = mqtt_client.Client(client_id) - client.username_pw_set(uname,pw) - client.on_connect = on_connect - client.connect(broker,port) + #client.username_pw_set(uname,pw) + client.on_connect = mqtt_on_connect + while(1): # keep trying until the network is up + try: + client.connect(broker,port,keepalive=60) + break + except: + print("RELAY:Cant connect. waiting 1s") + time.sleep(1) + print("RELAY: Subscribed") + #Subscribe + client.subscribe(topic_control) + client.on_message = mqtt_on_message return client -def mqtt_subscribe(client): - def on_message(client, userdata, msg): - print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic") - - client.subscribe(topic_control) - client.on_message = on_message +def publish_status(client): + client.publish(topic_sensor,str(get_sensor()),retain=True) def set_relay(value): if value==1: @@ -48,19 +72,25 @@ def set_relay(value): def get_sensor(): return gpio.input(sensor_pin) -def set_from_sensor(): - set_relay(get_sensor()) +def press_button(client): + set_relay(1) + time.sleep(BUTTON_TIME) + set_relay(0) def end(): - gpio.cleanup() - exit() + print("stop") + RUN=0 def main(): - mqtt_subscribe(mqtt_connect()) - while(1): - continue -# set_from_sensor() -# time.sleep(.25) + print("Start Relay Contorl") + client=mqtt_setup() + client.loop_start() + publish_status(client) + while(RUN): + time.sleep(5) + publish_status(client) + gpio.cleanup() + exit()