# rightSensor and broker file
#Preliminary code for an outer pi, definitely not finished just an idea
import time
import board
import os
import multiprocessing
import logging
from gpiozero import MotionSensor
from gpiozero import Servo
from paho.mqtt import client as mqtt
from paho.mqtt import publish
from paho.mqtt import subscribe
IRSensor = MotionSensor(4)
servo = Servo(16)
ThermalCamOff = 1 #temp variable at the moment
broker = '192.168.1.15'
port = 1883
home_topic="sensors"
aux_topic="rightSensor"
clientID = "rightPumpkin"
subscription = ("servoPosition", 2)
RSensorRunning = True
CLEAN_SESSION=True
logging.basicConfig(level=logging.INFO)
# def subscribe(client, subscription):
# r = client.subscribe(subscription)
# if r[0] == 0:
# print(f"Successfully subscribed to {subscription}")
# else:
# print(f"Failed to subscribe to {subscription}")
def on_subscribe(client, userdata, mid, granted_qos):
time.sleep(1)
logging.info("sub acknowledge message id="+str(mid))
pass
def on_disconnect(client, userdata, rc=0):
logging.info("Disconnected result code" +str(rc))
def on_connect(client, userdata, flags, rc):
if rc==0:
print("connected to MQTT Broker!")
else:
print("failed to connect")
logging.info("Connected flags " +str(flags)+"result code " + str(rc))
# def connect_mqtt():
# def on_connect(client, userdata, flags, rc):
# if rc==0:
# print("connected to MQTT Broker!")
# else:
# print("failed to connect")
# client = mqtt.Client(clientID)
# client.on_connect = on_connect
# client.on_message = on_message
# client.connect(broker, port)
# subscribe(client, subscription)
# return client
# def publish(client, msg):
# print("in publish")
# result = client.publish(topic, msg)
# status = result[0]
# if status == 0:
# print(f"sent `{msg}` to topic `{topic}`")
# else:
# print(f"failed to send message to topic {topic}")
# time.sleep(5)
def on_message(client, userdata, message):
print("in response to subscription")
# msg = str(message.payload.decode("utf-8"))
print("topic="+message.topic)
topics = (message.topic).split("/")
print(f"Message received: {message.payload} from {topics[2]}")
if topics[1] == home_topic:
reply_topic = "base/" + topics[2] + "/" + home_topic + "/" + aux_topic
client.publish(reply_topic,"I got it dude!")
print("replied")
# if(RSensorRunning):
# RSensorRunning = False
# if (message.payload == 5):
# servo.value = 0
# print("0enmasse")
# time.sleep(60)
# RSensorRunning = True
# else:
# servo.value = int(message.payload)
# if (rightSensorProcess.is_alive()):
# print("still alive jackass")
# print(f'received {int(message.payload)}')
def on_publish(client, userdata, mid):
logging.info("message published " +str(mid))
send_topic = "house/thermalPumpkin/sensors/rightSensor"
client = mqtt.Client("rightSensor", False)
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.on_connect = on_connect
client.on_message = on_message
client.on_publish = on_publish
client.connect(broker, port)
time.sleep(1)
client.subscribe("house/sensors/thermalPumpkin/rightSensor")
client.loop_start()
count = 1
def RSensor(client):
global RSensorRunning
print("in RSensor")
while True:
print("loop")
IRSensor.wait_for_motion()
print('seen')
publish(client, "-1")
return
# client = connect_mqtt()
# rightSensorProcess = multiprocessing.Process(target=RSensor, args=(client,))
def run():
global count
while True:
msg="message " + str(count) + " from RSensor"
count += 1
time.sleep(5)
client.disconnect()
client.loop_stop()
# client.loop_start()
# # publish(client, "bruh moment")
# rightSensorProcess.start()
if __name__ == '__main__':
run()
Comments