Client library for S.C.I.L.E.R.
Project description
Developing with scclib
Client computer library for S.C.I.L.E.R. system
This is the library to create devices to work together with the SCILER system
Installation
- pip install with
pip install scclib
Using this library
- import lib with
from scclib.device import Device
create a class that extends Device
- in order to do this:
- implement
getStatus()
which should return a dictionary of the current status - implement
performInstruction(action)
which should return a boolean of whether the instruction can be performed, where action has:instruction
: string with the name of the instructionvalue
: any type with a value specific for this instructioncomponent_id
: string with the name of the component for which the instruction is meant (can be undefined)
- implement
test()
which returns nothing, this method should do something visible so the operator can test this device works correctly - implement
reset()
which returns nothing, this method should make the device return to its starting state so that the escape room can be started again - create a constructor which calls the constructor of
Device
withsuper(config, logger)
where:- config is a dictionary which has keys:
id
: this is the id of a device. Write it in camelCase, e.g. "controlBoard".host
: the IP address of the host for the broker, formatted as a string.port
the port of the host for the broker, formatted as a number.labels
: these are the labels to which this device should also subscribe, labels is an array of strings,
- logger is a function(date, level, message) in which an own logger is implemented where
date
is an Date objectlevel
is one of the following strings: 'debug', 'info', 'warn', 'error', 'fatal'message
is a custom string containing more information
- it should also add event listeners to GPIO for all input components.
- config is a dictionary which has keys:
- implement
main()
which should callstart(loop, stop)
with an optional event loop and ending function.
- implement
Now in your class which implements Device
- you can call:
log(level, message)
which logs using the logger provided inDevice
where level one of the following strings: 'debug', 'info', 'warn', 'error', 'fatal' and message custom string containing more informationstatusChanged()
which can be called to signal toDevice
that the status is changed, this will send a new status to SCILER
To now start the system
- initialize the device in your main program and call
device.main()
Example
import os
from scclib.device import Device
class Display(Device):
def __init__(self):
two_up = os.path.abspath(os.path.join(__file__, ".."))
rel_path = "display_config.json"
abs_file_path = os.path.join(two_up, rel_path)
abs_file_path = os.path.abspath(os.path.realpath(abs_file_path))
config = open(file=abs_file_path)
super().__init__(config)
self.hint = ""
def get_status(self):
return {"hint": self.hint}
def perform_instruction(self, action):
instruction = action.get("instruction")
if instruction == "hint":
self.show_hint(action)
else:
return False, action
return True, None
def test(self):
self.hint = "test"
print(self.hint)
self.status_changed()
def show_hint(self, data):
self.hint = data.get("value")
print(self.hint)
self.status_changed()
def reset(self):
self.hint = ""
self.status_changed()
def main(self):
self.start()
if __name__ == "__main__":
device = Display()
device.main()
where display_config.json
is
{
"id": "display",
"description": "Display can print hints",
"host": "192.168.178.82",
"labels": ["hint"],
"port": 1883
}
example of main()
with loop and stop:
def loop(self):
previous = self.get_sliders_analog_reading()
while True:
positions = self.get_sliders_analog_reading()
if previous != positions:
self.status_changed()
previous = positions
def main(self):
self.setup_events()
self.start(loop=self.loop, stop=GPIO.cleanup)
License
This library is licensed with GNU GPL v3, see LICENSE.md
.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
scclib-0.1.3.tar.gz
(7.9 kB
view hashes)
Built Distribution
scclib-0.1.3-py3-none-any.whl
(20.7 kB
view hashes)