You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shepherd-agent/shepherd/plugins/flytrap.py

79 lines
2.4 KiB

#!/usr/bin/env python3
import shepherd.config as shconf
import shepherd.plugin
import sys
import os
import time
import argparse
class FlytrapPlugin(shepherd.plugin.Plugin):
@staticmethod
def define_config(confdef):
confdef.add_def('servo_open_pulse', shconf.IntDef(default=1200, minval=800, maxval=2200))
confdef.add_def('servo_closed_pulse', shconf.IntDef(default=1800, minval=800, maxval=2200))
confdef.add_def('servo_open_time', shconf.IntDef(default=5))
def __init__(self, pluginInterface, config):
super().__init__(pluginInterface, config)
self.config = config
self.interface = pluginInterface
self.plugins = pluginInterface.other_plugins
self.hooks = pluginInterface.hooks
self.root_dir = os.path.expanduser(pluginInterface.coreconfig["root_dir"])
self.id = pluginInterface.coreconfig["id"]
print("Flytrap config:")
print(self.config)
self.interface.attach_hook("usbcam", "pre_cam", self.led_on)
self.interface.attach_hook("usbcam", "post_cam", self.uv_camera)
self.interface.register_function(self.test)
def uv_camera(self):
self.led_off()
self.led_uv_on()
self.plugins["usbcam"].run_cameras(" UV")
self.led_uv_off()
self.run_servo()
def led_on(self):
self.plugins["scout"].set_out1(True)
def led_off(self):
self.plugins["scout"].set_out1(False)
def led_uv_on(self):
self.plugins["scout"].set_out2(True)
def led_uv_off(self):
self.plugins["scout"].set_out2(False)
def run_servo(self):
self.plugins["scout"].set_aux5v(True)
#self.door_servo_power.on()
time.sleep(0.5)
self.plugins["scout"].set_pwm1(True, self.config["servo_open_pulse"])
#self.door_servo.pulse_width = self.config["servo_open_pulse"] / 1000000
time.sleep(self.config["servo_open_time"])
self.plugins["scout"].set_pwm1(True, self.config["servo_closed_pulse"])
#self.door_servo.pulse_width = self.config["servo_closed_pulse"] / 1000000
time.sleep(self.config["servo_open_time"])
self.plugins["scout"].set_pwm1(False, self.config["servo_closed_pulse"])
#self.door_servo.detach()
self.plugins["scout"].set_aux5v(False)
#self.door_servo_power.off()
def test(self):
self.led_on()
time.sleep(1)
self.led_off()
self.run_servo()