Giter Club home page Giter Club logo

pysonofflan-remix's Introduction

pysonofflanr3 - remix

Buy Me A Coffee

Control Sonoff devices running original firmware, in LAN mode.

To control Sonoff switches running the V3+ Itead firmware (tested on 3.0, 3.0.1, 3.1.0, 3.3.0, 3.4.0, 3.5.0), locally (LAN mode).

# Remix of the original pysonofflan Apparently the original "pysonofflan from github.com/mattsaxon/pysonofflan" is no longer being maintained, and contained some bugs. I needed something that exactly this component does, so I forked it, fixed the line I needed, and re-up in case the original was removed.

This will only work for Sonoff devices running V3+ of the stock (Itead / eWeLink) firmware. For users of V1.8.0 - V2.6.1, please use PySonoffLAN

This module provides a way to interface with Sonoff smart home devices, such as smart switches (e.g. Sonoff Basic), plugs (e.g. Sonoff S20), and wall switches (e.g. Sonoff Touch), when these devices are in LAN Mode.

LAN Mode is a feature introduced by manufacturer Itead, to allow operation locally when their servers are unavailable. Further details can be found in the eWeLink LAN Mode guide.

Since mid 2018, the firmware Itead have shipped with most Sonoff devices has provided this feature, allowing devices to be controlled directly on the local network using a WebSocket connection on port 8081.

Features

  • Discover all devices on local network
  • Read device state
  • Switch device ON/OFF
  • Listen for state changes announced by the device (e.g. by physical switch)
  • Activate inching/momentary device, with variable ON time (e.g. 1s)

Documentation

Install

with common user
$ git clone git://github.com/NandoGommez/pysonofflan-remix/ && cd pysonofflan-remix
with root user
$ python3 setup.py install

Command-Line Usage

Usage: pysonofflanr3 [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.
  -l, --level LVL  Either CRITICAL, ERROR, WARNING, INFO or DEBUG
  --help               Show this message and exit.
  --api_key KEY        Needed for devices not in DIY mode. See https://pysonofflanr3.readthedocs.io/encryption.html

Commands:
  discover  Discover devices in the network
  listen    Connect to device, print state and repeat
  off       Turn the device off.
  on        Turn the device on.
  state     Connect to device and print current state.

Usage Example

$ pysonofflanr3 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

$ pysonofflanr3 --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

$ pysonofflanr3 --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

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.

License

  • Free software: MIT license

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

[ ~ Dependencies scanned by PyUp.io ~ ]

pysonofflan-remix's People

Contributors

nandogommez avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.