在LAN模式下运行原始ITEAD固件的Sonoff设备的接口。

pysonofflan的Python项目详细描述


在LAN模式下控制运行原始固件的SONOFF设备。

该模块提供了一种与Sonoff智能家居设备接口的方法, 如智能开关(如SONOFF BASIC)、插头(如SONOFF S20)。 和墙壁开关(例如Sonoff Touch),当这些设备处于LAN模式时。

LAN模式是ITEAD制造商引入的一项功能,允许操作 当服务器不可用时在本地。 有关详细信息,请参见《eLink LAN模式指南》。

自2018年年中以来,iTead固件已与大多数Sonoff设备一起发货 提供了此功能,允许直接控制设备 在本地网络上使用端口8081上的WebSocket连接。

此功能仅在没有连接时使用 到iTead云服务器(例如,如果您的Internet连接断开, 或者他们的服务器坏了)。 因此,仅当设备连接到WiFi时才启用 网络,但无法访问itead服务器

大多数用户只能通过 故意使用 阻止对其Sonoff设备的Internet访问。

功能

  • 查找本地网络上的所有设备(192.168.0.0/24、192.168.1.0/24)
  • 查找具有已知设备ID的设备的IP地址(来自eWebLink应用程序)
  • 读取设备状态
  • 打开/关闭设备
  • 监听设备宣布的状态更改(例如通过物理交换机)
  • 启动微动/瞬时装置,开启时间可变(如1s)
H3> DOCU心理状态
  • 文档:https://pysonofflan.readthedocs.io" rel="nofollow">https://pysonofflan.readthedocs.io

安装

$ pip install pysonofflan

命令行用法

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.

用法示例
$ 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

库使用

通过 sonoffswitch 类:

x = SonoffSwitch("192.168.1.50")

在实例化sonoffswitch类时,连接是 已启动,设备状态已填充,但未采取进一步操作。

对于大多数用例,您需要在更新后使用 回调函数 连接完成后对设备执行操作的参数 初始化,例如:

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
)

此示例只连接到设备,打印设备当前是否 "开"或"关",然后关闭连接。注意,回调必须是 异步。

特定于模块的错误作为异常引发,并且是预期的 由库用户处理。

许可证

  • 自由软件:麻省理工学院许可证

学分

这个包是用cookiecutter和项目模板创建的。

历史记录

0.3.0(2019-05-16)

  • 已清除关闭代码
  • 始终创建重试逻辑以处理断开连接和其他故障
  • 增加了处理状态维护的功能
  • 更新的依赖项
  • 去除片状测试

0.2.1(2019-02-02)

  • 使WebSocket库的使用向后兼容旧版本

0.2.0(2019-02-02)

  • 重写发现以使用多个线程,因此只需1秒
  • 通过logger传递改进了客户端类中的日志记录
  • 改进了对事件循环的处理,以允许在现有的异步代码库中使用
  • 向cli添加了–version参数

0.1.7(2019-02-01)

  • 从bumpversion迁移到bump2version,以实现更清洁的发布过程

0.1.6(2019-02-01)

  • 另一个bump让travis上传到pypi本身,以修复构建

0.1.5(2019-02-01)

  • 调整生成工作流后的缓冲版本

0.1.4(2019-01-31)

  • 调整了各种构建和测试参数,以使代码覆盖率和分发工作正常

0.1.3(2019-01-31)

  • 更新了自述布局
  • 为travis和changelog/history链接添加了工作服配置

0.1.2(2019-01-31)

  • 修复了用于ReadtheDocs的文档构建
  • 修复了历史中中断PYPI格式的RestructuredText

0.1.1(2019-01-30)

  • 改进的发现日志记录
  • 添加文档
  • 固定测试

0.1.0(2019-01-27)

  • pypi上的第一个版本。
  • 基本功能cli客户端,允许基本控制(打开、关闭、检查状态)
  • 添加了带有详细选项的全面日志记录,以帮助调试新设备
  • 设备的控制是通过异步WebSocket实现的,因此应该可以在异步代码中使用

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将jaxb插件扩展与gradlejaxbplugin一起使用   java Hibernate列表<Object[]>到特定对象   java使用多态性显示arraylist的输出   java水平堆叠卡,带有一定偏移量   java错误:找不到符号方法liesInt()   java客户机/服务器文件收发中的多线程流管理   在java中可以基于访问重载方法吗?   包含空元素的java排序数组   swing Java按钮/网格布局   java BottomNavigationView getmaxitemcount   java空指针异常字符串生成器   java Xamarin升级导致“类文件版本错误52.0,应为50.0”错误   java我正在尝试打印它,而不只是对每一行进行println   Tomcat7中的java是否需要复制上下文。将xml转换为conf/Catalina/locahost以使其生效   带有注入服务的java REST端点在何处引发自定义WebServiceException?   在Java中使用GPS数据   java如何将JFreeChart ChartPanel导出到包含添加的CrosshairOverlay的图像对象?   内置Eclipse期间的Java 8堆栈溢出   java在GWT编译的JavaScript中如何表示BigDecimal