broadlink的智能插座sp2简单分析--更新

2023-11-03 23:59

本文主要是介绍broadlink的智能插座sp2简单分析--更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请保留作者信息:星辉斑斓http://blog.csdn.net/hnmsky

最近入手一个broadlink的智能插座sp2.图就不上了,官网上有.拿到手第一印象觉得有些大,插在插排

上要占好几个位置.功能上wifi配置可以用smart config和ap模式,还是不错的.而且有功率统计,估计

里面有测量电流电压的芯片.

至于手机上的app,目前不是很完善.首先,这个app极其耗电,即使在后台也是.而且这个app有时会

卡住,然后从此再也搜索不到设备,要清除数据才可以,当时我以为坏了差点去退货.所以我准备自己写

程序来控制开关,这个也可以自己订制各种应用场景,毕竟等这个app完善还有段时间.

 

简单研究了下sp2, 有兴趣的可以再深入下.

配置wifi部分我觉得没有必要hack了, 感兴趣的可以参考[1],毕竟配置一次就可以了.


至于指令,无非就是开和关,这个用wireshark抓包就可以看出来.


指令是每次配置完都会变化,所以配置后就要重新抓包更改。所以抓的包只能自己用。

下面我说一下如何抓包:

  最好用PC通过网线来连接路由器,这样抓的包不是加密的。

1:在路由器上查看sp2的ip, 假设为192.168.0.102

2:如果你的电脑的网卡支持monitor模式,可直接看第4条。如果不支持moniter模式,现在自己电脑上的80端口运行个udp的echo server,就是把所有80端口收到的udp包都原封不动的发送回原来的发送端。我写了程序(server.c)可以参考。

3:把自己电脑ip改为和sp2一样,假设为192.168.0.102。

4:用wireshark抓包,可以看到开关指令其实就是2个udp包(开一个,关一个),其中data长度是72byte。大概类似于这个样子(0x5a,0xa5,0xaa,0x55,0x5a,0xa5,0xaa,0x55,0x00,0x00,0x00,0x00,0x00,0x00......)


这个是发送开指令时抓的包,其中192.168.0.101是nexus7 的ip, 192.168.0.102是开关的ip. 

可以看到手机发送一个udp包,然后sp2收到后会把这个把发送给手机.

5:要写这个程序就很简单了,把这个包(72byte)发出去,然后再收到包就成功了. 用python写了个示例代码,见sample.py。

因此要你自己抓包,然后用抓到数据,类似于这种(0x5a,0xa5,0xaa,0x55,0x5a,0xa5,0xaa,0x55,0x00,0x00,0x00,0x00,0x00,0x00......),替换掉程序里的on 和 off两个数组。




关于功率,可以看到sp2一直在给手机发包,功率信息应该在这里.不过这个就不研究了.


不知道像定时休眠一类的功能是用手机发命令还是外部服务器来发,但我没有发现sp2会经常

的连接外部服务器.(开始时会连一次的,应为需要NAT,这个可以参考[2])



代码在

http://download.csdn.net/detail/hnmsky/7434419 去掉了积分要求。

server.c 是echo server

sample.py 示例代码

我以前放的代码别人不能用的,所以要用这个新的,并自己抓包。现在sdk不开放给个人,所以就用这个方法凑合着用了,只能控制开关,不能看功率。

一些问题的更新:

1:抓包后,不能重新配置sp2去连接路由器,也不要去改路由器的配置(改密码啥的),这肯定是不行的。另外抓包不要通过wifi去抓加密的数据,通过eth口去抓解密好的数据。

2:抓的包要是点了手机App上开关按钮后,手机发出来的udp包,你点一次按钮,只会发3个udp的包。  不要去抓那个每过一段时间就会发的包,那个是用来查询状态的。


参考文献:

1:smartconfig

http://depletionregion.blogspot.ch/2013/10/cc3000-smart-config-transmitting-ssid.html

2:NAT

http://en.wikipedia.org/wiki/Network_address_translation


这篇关于broadlink的智能插座sp2简单分析--更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341793

相关文章

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle