Skip to main content

Python Package to connect to wappsto.com

Project description

Wappsto python module - DEPRECATED

The project is archived. Please migrate to https://github.com/Wappsto/python-wappsto-iot

Build Status Coverage Status

The wappsto module provide a simple python interface to wappsto.com for IoT Rapid Prototyping.

Prerequisites

The wappsto module requires two things: A set of certificates for authentication and the JSON data model for representing your data and structure of your physical device. The certificates provides the physical device the secure connection to wappsto.com. The data model provides context and structure for the data stored at wappsto.com and systematic handling of your device. It is an instance of our Unified Data Model (UDM) specifying the structure of your network, devices, values and their states. Be sure to read more about the UDM here before moving on.

These files are automatically generated at wappsto.com when using the IoT Rapid Prototyping web-app (wapp) along with working code. You may choose a blank template to serve as a starting point for your own custom IoT device.

Getting Started

Working examples of usage can be found in the example folder.

The following explains the example code found in info.py.

Basic setup

For the wappsto module to know the desired data model, we need to provide it as a JSON config file as seen below.

service = wappsto.Wappsto(
    json_file_name="NameOfTheConfigFile.json",  # Typical a UUID.json
    abs_config_path="~/Downloads"  # Optional: Just assumes same folder as code.
)

The needed certificates for the secure connection are excepted to be found in a folder named: certificates in the same level as the JSON config file.

Optional Status Callback

If you want to know or act upon changes to the connection status of the wappsto module, a callback can be registered.

The below defines a callback that simply lets you know when the connection status have changed.

def status_cb(status):
    """A Status Callback Example."""
    global ready
    if status.is_running():
        print("\rWappsto connect is up and running.")
        ready = True
    if status.is_disconnecting():
        print("\rWappsto connect have been lost.")

# Setting the Status Callback.
service.service.get_status().set_callback(status_cb)

Optional Network Delete callback

You can register a callback at the network level. Currently, only Delete network events are supported. Such events typically means that the network have been deleted by the user. This could be used to trigger a factory reset, a device reboot, or prompt any other desired behavior. In this case we just stop the program.

def network_callback(network, event):
    print(f"network event: {event}")
    if event == "delete":  # Always true for networks
        service.stop()
        exit(1)

# Setting the Network Callback
service.get_network().set_callback(network_callback)

Value Handle Setup

For each value for each device a registered callback is expected. For a value with a control state, the set action_type is needed to be able to react on an attempt to control the device. This is used for controlling a state and prompting the device to act a certain way. For a value with a report state, the refresh action_type is needed to renew the value. This is often set up to trigger a device to sample the relevant "sensor" and get the latest data.

In the below, the control state is simply printed upon change and the report state is updated to "Refreshed!" upon a refresh:

device = service.get_device("TheDevice")


def string_info_cb(value, action_type):
    """This is the Callback function for value: 'StringInfo'."""
    if action_type == 'refresh':
        print("\rRefreshing StringInfo to: 'Refreshed!'")
        device.get_value("StringInfo").update(
            data_value="Refreshed!",
            timestamp=get_timestamp()  # In principle redundant
        )
    elif action_type == 'set':
        value = value.get_control_state().data
        print(f"\rMessage from Wappsto: {value}")


device.get_value("StringInfo").set_callback(string_info_cb)

When updating the report value, only the value/data is required and the timestamp is optional. If the timestamp is not explicitly given, the wappsto module will set the timestamp to the current time when function is called.

Main Loop.

If everything is in callbacks and you just want to run forever you can then call the service.start with the blocking=True input, which is making it blocking until a SIGINT or SIGTERM is received. If this is the case, you do not need to call service.stop(). An example of this can be found in the echo.py example.

Alternatively, the main loop can be stated just after the service is started.

try:
    service.start()
    # NOTE: YOUR CODE GOES HERE!
finally:
    service.stop()

In our example we set it up to wait for user input which updates the value:

try:
    service.start()
    while not ready:
        # Waiting for Wappsto to be ready.
        time.sleep(0.5)
    while True:
        data = input("Enter a Message: ")
        if data in ['exit', 'x', 'quit', 'q']:
            break
        device.get_value("StringInfo").update(data, get_timestamp())
finally:
    service.stop()

Tips and tricks

If the UUIDs are known for the given Network, Devices or Values you can get them directly with this function:

service.get_by_id("<UUID>")

To get the latest value that was reported in for the value: StringInfo:

device.get_value("StringInfo").getdata()

The data model JSON file may also contain a delta (value change) & period (update time period), for which the value should uphold. To check this there is a function.

device.get_value("StringInfo").check_delta_and_period(value)

The service will by default save the runtime data to a new JSON file, this can be disabled in the stop command as such:

service.stop(save=False)

Installation using pip

The wappsto module can be installed using PIP (Python Package Index) as follows:

$ pip install -U wappsto

License

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

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

wappsto-1.2.12.tar.gz (36.0 kB view details)

Uploaded Source

Built Distribution

wappsto-1.2.12-py3-none-any.whl (43.3 kB view details)

Uploaded Python 3

File details

Details for the file wappsto-1.2.12.tar.gz.

File metadata

  • Download URL: wappsto-1.2.12.tar.gz
  • Upload date:
  • Size: 36.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for wappsto-1.2.12.tar.gz
Algorithm Hash digest
SHA256 2f891a0b517c2b0803cbc20df3d15a41cd84864b3107a10606e031b2c7237c5e
MD5 e2f9542e75940b5ad322a60e96387aba
BLAKE2b-256 85de7e98930ab1d7b450144bdec0933d211d423cae4ddd234fe43da89cc8d4df

See more details on using hashes here.

File details

Details for the file wappsto-1.2.12-py3-none-any.whl.

File metadata

  • Download URL: wappsto-1.2.12-py3-none-any.whl
  • Upload date:
  • Size: 43.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for wappsto-1.2.12-py3-none-any.whl
Algorithm Hash digest
SHA256 50ccd18cb7a7e197644d94b499861eaf954e7583d00d960567265dac22ccab42
MD5 851a6389924f2e207124ea1a41859833
BLAKE2b-256 ae92d4d3c647f86379868caff0dd306a840731ceed533daedd8e91d9a888b8f7

See more details on using hashes here.

Supported by

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