PeelCapture – Custom Devices

  1. Adding a new device
  2. Device module
  3. Methods

Adding a new device

New devices can be added using pythons scripts.

To add a new device, create a new device class that is a subclass of PeelDeviceBase and put the .py module for your class in python\peel_devices. See python\peel_devices\stub.py as an example of how a Device class should be constructed. The base class is defined in python\peel_devices\__init__.py

The source code for all devices is available on github here.

If you find any bugs or have any suggestions for new devices, please create issues on github or create merge requests.

Top Home

Device Module

Your device module should implement the something similar to this template:

from peel_devices import PeelDevice

class MyDevice(PeelDevice):

    def __init__(self, name):
        super(MyDevice, self).__init__(name, foo)
        self.state = None
        self.foo = foo

    @staticmethod
    def device():
        # Return a unique name for this device class
        return "mydevice"

    def as_dict(self):
        # dict keys should match constructor arguments
        return {'name': self.name, 'foo': self.foo }

    def teardown():
        # disconnect/remove device
        pass

    def thread_join():
        # block while device is being shutdown
        pass

    def __str__(self):
        # Return the unique name of this device instance
        return self.name

    def get_state(self):
        # Called by the app or calls to update_state() update the device state
        if self.state is None:      return "OFFLINE"
        if self.state == "stopped": return "ONLINE"
        if self.state == "running": return "RECORDING"
        if self.state == "fail":    return "ERROR"
        return "ERROR"

    def command(self, command, argument):
        # record and stop actions
        if command == "record":
            self.state = "running"
            print("Take is: " + str(argument))

        if command == "stop":
            self.state = "stopped"

        # Push a state update to the main app
        # Uses get_state() and get_info() for state/info values
        self.update_state()

    def get_info(self):
        # return some status info to show in the device dialog
        return "hello!"

    @staticmethod
    def dialog(settings):
        # return a qt gui widget used to create the device
        # SimpleDeviceWidget can be used for many devices
        pass

    @staticmethod
    def dialog_callback(widget):
        # callback when the create widget is confirmed.  Create a new instance
        # of your device using the values in the widget.  Return the new device.
        pass

    def edit(self, settings):
        # return a qt gui widget to edit the device
        pass
        
    def edit_callback(self, widget):
        # callback when the edit wiget is confirmed. Update the device
        # using the values from the widget   

    def has_harvest(self):
        # Return true if the device is able to copy files locally
        return True
 
    def harvest(self, directory):
        # copy the data from the device to the directory
        pass

See the code examples in the python/peel_devices directory for more examples.

Top Home