Toggle an LED

This lambda toggles the state of led0 on a Raspberry Pi. The On Prem CLI is used to demonstrate manually triggering the lambda and taking delivery of the event JSON using a remote desktop.

Device Edge
Cloud api.on-prem.net
User Edge
tunnel
Agent
LED
Control Plane
CLI

Note that manually triggering a lambda is unusual in that it requires device connectivity to the control plane. A more typical scenario is where Lambdas and their Lambda Trigger control loops run autonomously at the device edge, regardless of the device's connectivity to the control plane.

Setup

Start by disabling the default triggering for led0, so that you can use it for your own purposes.

$ echo none | sudo tee /sys/class/leds/led0/trigger

Register the lambda

$ onprem generate xid clutm1e56a1dn0f2p4dg
# toggle_led0.yaml id: clutm1e56a1dn0f2p4dg kind: Lambda name: toggle_led0 description: > Toggle led0. runAt: deviceId: ci2fabp32ckvhk1g9qe0 scriptContentType: text/x-lua script: > local LED = require('periphery.LED') local M={} function M.handler(event, context) local led = LED('led0') local currentValue = led:read() local newValue = not currentValue led:write(newValue) return {currentValue=currentValue, newValue=newValue} end return M
$ onprem apply toggle_led0.yaml

It will now show up in the cloud console.

Cloud Console

Run it twice

$ onprem run lambda clutm1e56a1dn0f2p4dg {"currentValue":true,"newValue":false} $ onprem run lambda clutm1e56a1dn0f2p4dg {"currentValue":false,"newValue":true}

Cleanup

Restore the default triggering for led0 with:

$ echo mmc0 | sudo tee /sys/class/leds/led0/trigger