scadable add device

Generate a device file in devices/ from a protocol template.

scadable add device <protocol> <name>

Supported protocols

ProtocolCommand
Modbus TCPscadable add device modbus-tcp line-sensor
Modbus RTUscadable add device modbus-rtu power-meter
BLEscadable add device ble env-sensor
GPIOscadable add device gpio door-contact
Serialscadable 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:

InputFileClass
line-sensordevices/line_sensor.pyLineSensor
temp_pressuredevices/temp_pressure.pyTempPressure
myPLCdevices/myplc.pyMyplc

Stick to lower-kebab-case (line-sensor) for the cleanest results.

Exit codes

CodeMeaning
0File created
1Device file already exists, or unknown protocol

Next steps