def receive_command(client, obj, message): message_json = MqttClient.parse_payload(message.payload) print("chomp: %s %s %s" % (mqtt.endpoint, message.topic, str(message_json))) # parse arguments parser = argparse.ArgumentParser() parser.add_argument("-e", "--endpoint", help="AWS IoT endpoint") parser.add_argument("-r", "--ca_file", help="Certificate Authority file", default='rootCA.pem') parser.add_argument("-c", "--client_cert_file", help="Client certificate file", default='certificate.pem') parser.add_argument("-k", "--client_key_file", help="Client Key File", default='private.pem') parser.add_argument("-p", "--port", help="MQTT port", type=int, default=8883) parser.add_argument("-q", "--qos", help="MQTT QoS", type=int, default=1) parser.add_argument("-t", "--topic", help="MQTT topic") parser.add_argument("-g", "--log_level", help="log level", type=int, default=logging.INFO) args = parser.parse_args() if args.endpoint is None: sys.exit("Error: IoT connection information needed") # connect with Amazon IoT mqtt = MqttClient(args.endpoint, args.log_level, args.port) mqtt.set_tls(args.ca_file, args.client_cert_file, args.client_key_file) mqtt.add_callback(args.topic, receive_command) mqtt.add_subscription(args.topic, qos=args.qos) # subscribe or not? mqtt.loop_start() while True: time.sleep(1)
# logging setup logger = set_logger(level=args.log_level) video = Video( rotation=args.rotation, horizontal_resolution=args.horizontal_resolution, vertical_resolution=args.vertical_resolution ) video.start() pir = PIR(args.pin) pir.start() mqtt = MqttClient(args.endpoint, args.log_level, args.port) mqtt.set_tls(args.ca_file, args.client_cert_file, args.client_key_file) mqtt.add_callback(args.topic + args.subtopic, receive_command) mqtt.add_subscription(args.topic + args.subtopic, qos=args.qos) mqtt.loop_start() # loop while True: is_moving = pir.detects_movement() if is_monitoring: if not is_moving: if video.recording: Video.generate_thumbnail(video.stop_recording(), hres=args.horizontal_resolution, vres=args.vertical_resolution) elif is_moving: video.start_recording() sleep(args.wait)
parser.add_argument("-k", "--client_key_file", help="Client Key File", default='private.pem') parser.add_argument("-p", "--port", help="MQTT port", type=int, default=8883) parser.add_argument("-q", "--qos", help="MQTT QoS", type=int, default=1) parser.add_argument("-d", "--beep_duration", help="time in seconds for a beep duration", type=float, default=0.06) parser.add_argument("-w", "--quiet_duration", help="time in seconds between beeps", type=float, default=0.1) parser.add_argument("-n", "--beep_count", help="number of beeps", type=int, default=2) parser.add_argument("-i", "--pin", help="gpio pin (using BCM numbering)", type=int, default=6) parser.add_argument("-s", "--buzzer_name", help="buzzer name", default='buzzer') parser.add_argument("-y", "--config_file", help="yaml config file", default='buzzer.yml') parser.add_argument("-g", "--log_level", help="log level", type=int, default=logging.INFO) args = parser.parse_args() # logging setup logger = set_logger(level=args.log_level) # read subscriptions from config and create buzzer buzzer = Buzzer(args.buzzer_name, args.pin) buzzer.start() SUBSCRIPTIONS = yaml.load(open(args.config_file)) # connect with Amazon IoT and go mqtt = MqttClient(args.endpoint, args.log_level, args.port) mqtt.set_tls(args.ca_file, args.client_cert_file, args.client_key_file) for sub in SUBSCRIPTIONS.keys(): mqtt.add_callback(sub, receive_command) mqtt.add_subscription(sub, qos=args.qos) mqtt.run()