Usage

Command-Line Usage

Usage: pysonofflan [OPTIONS] COMMAND [ARGS]...

  A cli tool for controlling Sonoff Smart Switches/Plugs in LAN Mode.

Options:
  --host TEXT          IP address or hostname of the device to connect to.
  --device_id TEXT     Device ID of the device to connect to.
  --inching TEXT       Number of seconds of "on" time if this is an
                       Inching/Momentary switch.
  -v, --verbosity LVL  Either CRITICAL, ERROR, WARNING, INFO or DEBUG
  --help               Show this message and exit.

Commands:
  discover  Discover devices in the network (takes ~1...
  listen    Connect to device, print state, then print...
  off       Turn the device off.
  on        Turn the device on.
  state     Connect to device and print current state.

Install / Usage Example

$ pip install pysonofflan

$ pysonofflan discover
2019-01-31 00:45:32,074 - info: Attempting to discover Sonoff LAN Mode devices on the local network, please wait...
2019-01-31 00:46:24,007 - info: Found Sonoff LAN Mode device at IP 192.168.0.77

$ pysonofflan --host 192.168.0.77 state
2019-01-31 00:41:34,931 - info: Initialising SonoffSwitch with host 192.168.0.77
2019-01-31 00:41:35,016 - info: == Device: 10006866e9 (192.168.0.77) ==
2019-01-31 00:41:35,016 - info: State: OFF

$ pysonofflan --host 192.168.0.77 on
2019-01-31 00:49:40,334 - info: Initialising SonoffSwitch with host 192.168.0.77
2019-01-31 00:49:40,508 - info:
2019-01-31 00:49:40,508 - info: Initial state:
2019-01-31 00:49:40,508 - info: == Device: 10006866e9 (192.168.0.77) ==
2019-01-31 00:49:40,508 - info: State: OFF
2019-01-31 00:49:40,508 - info:
2019-01-31 00:49:40,508 - info: New state:
2019-01-31 00:49:40,508 - info: == Device: 10006866e9 (192.168.0.77) ==
2019-01-31 00:49:40,508 - info: State: ON

Library Usage

To use pySonoffLAN in a project:

import pysonofflan

All common, shared functionality is available through SonoffSwitch class:

x = SonoffSwitch("192.168.1.50")

Upon instantiating the SonoffSwitch class, a connection is initiated and device state is populated, but no further action is taken.

For most use cases, you’ll want to make use of the callback_after_update parameter to do something with the device after a connection has been initialised, for example:

async def print_state_callback(device):
    if device.basic_info is not None:
        print("ON" if device.is_on else "OFF")
        device.shutdown_event_loop()

SonoffSwitch(
    host="192.168.1.50",
    callback_after_update=print_state_callback
)

This example simply connects to the device, prints whether it is currently “ON” or “OFF”, then closes the connection. Note, the callback must be asynchronous.

Module-specific errors are raised as Exceptions, and are expected to be handled by the user of the library.