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.
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.