scadable add device
Generate a device file in devices/ from a protocol template.
scadable add device <protocol> <name>Supported protocols
| Protocol | Command |
|---|---|
| Modbus TCP | scadable add device modbus-tcp line-sensor |
| Modbus RTU | scadable add device modbus-rtu power-meter |
| BLE | scadable add device ble env-sensor |
| GPIO | scadable add device gpio door-contact |
| Serial | scadable add device serial custom-device |
Modbus is the only protocol with full runtime support in v0.2.0. The other stubs compile and validate, but their gateway-side drivers ship in a future release. See Modbus for the production surface.
What gets generated
scadable add device modbus-tcp line-sensor creates devices/line_sensor.py:
"""TODO: describe this device."""
from scadable import Device, Register, modbus_tcp, every, SECONDS, MINUTES
class LineSensor(Device):
id = "line-sensor"
name = "Line Sensor"
connection = modbus_tcp(
host="${SENSOR_HOST}",
port=502,
slave=1,
)
poll = every(5, SECONDS)
historian = every(5, MINUTES)
registers = [
Register(40001, "value_1", unit="", scale=1),
]Fill in the TODO items, set the host (or use ${SENSOR_HOST} and inject it from fleet.toml), and replace the placeholder register with the real ones from your device's datasheet.
Naming conventions
The CLI converts the name in three places:
| Input | File | Class |
|---|---|---|
line-sensor | devices/line_sensor.py | LineSensor |
temp_pressure | devices/temp_pressure.py | TempPressure |
myPLC | devices/myplc.py | Myplc |
Stick to lower-kebab-case (line-sensor) for the cleanest results.
Exit codes
| Code | Meaning |
|---|---|
| 0 | File created |
| 1 | Device file already exists, or unknown protocol |
Next steps
- scadable add controller: add controller logic
- Modbus: full Modbus syntax reference
- scadable verify: catch problems before compile
Updated 4 days ago
