Skip to main content

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 instruction
      • value: any type with a value specific for this instruction
      • component_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 with super(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 object
        • level 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.
    • implement main() which should call start(loop, stop) with an optional event loop and ending function.
Now in your class which implements Device
  • you can call:
    • log(level, message) which logs using the logger provided in Device where level one of the following strings: 'debug', 'info', 'warn', 'error', 'fatal' and message custom string containing more information
    • statusChanged() which can be called to signal to Device 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 details)

Uploaded Source

Built Distribution

scclib-0.1.3-py3-none-any.whl (20.7 kB view details)

Uploaded Python 3

File details

Details for the file scclib-0.1.3.tar.gz.

File metadata

  • Download URL: scclib-0.1.3.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.0 CPython/3.7.3

File hashes

Hashes for scclib-0.1.3.tar.gz
Algorithm Hash digest
SHA256 8678543d659af51263a20919de2a1fb50a8da75e22873e928fbe1dc98354b939
MD5 d77cb359fb75a9cf0963b713d343c414
BLAKE2b-256 a723111f213427f2c88a14c26f02f752ece7128b4e91da8d5232b5165445d065

See more details on using hashes here.

File details

Details for the file scclib-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: scclib-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 20.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.40.0 CPython/3.7.3

File hashes

Hashes for scclib-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5cd40afef2774877529aa3b2b55badf4197e6eb93e3a085a8df3efc808495ac6
MD5 2e6bd10f03e5345b4fc5d91e1b0c9f6a
BLAKE2b-256 d983ec12249c6828b8f220c91e509dbe4454285322a0fbf23a76eb252d990db1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page