Create a Function to Automate the Process
-
To create a function, click Functions > Workers.
Figure 1. - Click New Worker.
- Add the Function name as update-cpu-state and description if desired.
- Select the Python 3 template.
-
Enter the following code. In the provided code, complete with
the information required at the beginning. Also, complete the PATH with your own
values.
import requests import json from swx.auth.token import get_token API_URL = 'https://api.swx.altairone.com' #Complete with your own values SPACE = '<A-SPACE-NAME>' CATEGORY = '<A-CATEGORY-NAME>' THING_UID = '<A-THING-UID>' CLIENT_ID = '<A-CLIENT-ID>' CLIENT_SECRET = '<A-CLIENT-SECRET>' def handle(req): with get_token(CLIENT_ID, CLIENT_SECRET, ["thing.update","thing.read"]) as token: body = req.body.decode("utf-8") body = json.loads(body) cpu = body['cpu'] if cpu >= 85: state = "Critical usage" elif 50 < cpu < 85: state = "Normal usage" else: state = "Low usage" url = f"{API_URL}/spaces/{SPACE}/categories/{CATEGORY}/things/{THING_UID}/properties" response = requests.put(url,headers={"Authorization": f"Bearer {token.access_token}"},json={"statecpu": state}) return { "status_code": 200, "body": response.json() }
Figure 2. New Function formNote: You can edit the code as necessary.
Figure 3. Edit Function code tab -
Add an Event trigger as follows:
spaces/your-space_name/categories/your_categories_name/things/your_thing_id/properties/
cpu
When using this method, the function will be invoked whenever there is a change on the Property
cpu
on the Thing you have created. -
Deploy your function by clicking Save.
The function is created. This could take a few minutes. The status of your Function will be updated to a Building status and, eventually, it will become Running. At this point, your Function is ready to be called.
-
Test the function created in the Test tab by sending the input parameters to
the function and receiving the solution in the test response field.
- In Test Request Input field enter, enter {"cpu": 57.9}.
-
Click Run.
The Test Response field shows Normal usage.
Figure 4.