12
返回列表 发新帖
楼主: outman

引爆Zigbee-智能家居及LED照明专用Zigbee HA/ZLL模块及网关发布

[复制链接]
dtlyxcq 发表于 2013-8-2 15:13:13 | 显示全部楼层
API接口规范手册拿到了
http://pan.baidu.com/share/link? ... 5&uk=4046190940

我的Serial No 5644BC48
按照接口规范我给网关发送
09 00 48 BC 44 56 FE 01 8c
09 00 是包长度 48 BC 44 56 是SN 5644BC48高位到低位重写
FE是控制标志
01是 控制类型为获取当前连接的所有设备
8c 是CRC8
返回数据为

01 19 8C FE 0B 04 01 02 01 00 00 01 76 9F 61 02 00 4B 12 00 C6 01 00 20 00 00 00
01 19 E0 C2 0B 04 01 01 01 00 00 01 D6 7F 33 02 00 4B 12 00 C6 01 00 20 00 00 00 01 19 06 F4 11 04 01 00 00 00 00 01 91 A0 61 02 00 4B 12 00 C6 01 00 20 00 00 00 01 19 06 F4 10 04 01 00 00 00 00 01 91 A0 61 02 00 4B 12 00 C6 01 00 20 00 00 00 01 19 06 F4 0C 04 01 00 00 00 00 01 91 A0 61 02 00 4B 12 00 C6 01 00 20 00 00 00 01 19 75 F7 0B 04 01 01 01 00 00 01 AA B1 61 02 00 4B 12 00 C6 01 00 20 00 00 00 01 19 10 27 0B 04 01 02 01 00 00 01 60 98 61 02 00 4B 12 00 C6 01 00 20 00 00 00 01 1A 3B 60 98 02 00 4B 12 00 02 01 00 00 06 B5 F7 B9 E2 B5 C6 01 00 20 00 00 00 00
再对照规范发送询灯的状态
15 00 48 bc 44 56 fe 05 02 75 F7 00 00 00 00 00 00 0B 00 00 4a
15 00 是包长
09 00 是包长度 48 BC 44 56 是SN 5644BC48高位到低位重写
FE是控制标志
05是 控制类型为获取设备的状态
02是 短地址模式
75 F7 是灯的短地址
然后00 00 00 00 00 00是保留字
0B是 ENDPOINT
00 00 保留字
4A是CRC8
但是没有任何返回值,请教我错在那里。

dtlyxcq 发表于 2013-8-4 12:12:20 | 显示全部楼层


Dim rID
Dim lap() As Byte
Private Sub Command1_Click()
Dim ip As String
Dim port As String
ip = Text1.Text
port = Text2.Text
With Winsock1

If .State = 0 Then
   .RemoteHost = ip
  .RemotePort = port
  .Connect
  Command1.Caption = "断开"
Else
   .Close
   Command1.Caption = "连接"
End If

End With
  
  

End Sub



Private Sub Command2_Click()
Dim temp() As String
Dim sendmsg() As Byte
Dim s As Integer

s = 0
msg = "09 00 48 BC 44 56 FE 01 00"
temp = Split(msg, " ")
For i = 0 To UBound(temp)
  If Len(temp(i)) > 0 Then
    temp(i) = "&H" & temp(i)
    ReDim Preserve sendmsg(s)
    sendmsg(s) = Val(temp(i))
    s = s + 1
  End If
Next
List1.Clear
ReDim lap(2, 0)
Winsock1.SendData sendmsg
End Sub

Private Sub Command3_Click()
If List1.ListIndex < 0 Then Exit Sub
Dim temp() As String
Dim sendmsg() As Byte
Dim s As Integer
s = 0
msg = "16 00 48 bc 44 56 fe 82 0d 02 ff ff 00 00 00 00 00 00 0b 00 00 01"
temp = Split(msg, " ")
For i = 0 To UBound(temp)
  If Len(temp(i)) > 0 Then
    temp(i) = "&H" & temp(i)
    ReDim Preserve sendmsg(s)
    sendmsg(s) = Val(temp(i))
    s = s + 1
  End If
Next
sendmsg(10) = lap(0, List1.ListIndex)
sendmsg(11) = lap(1, List1.ListIndex)
sendmsg(18) = lap(2, List1.ListIndex)
Winsock1.SendData sendmsg
End Sub

Private Sub Command4_Click()
If List1.ListIndex < 0 Then Exit Sub
Dim temp() As String
Dim sendmsg() As Byte
Dim s As Integer
s = 0
msg = "16 00 48 bc 44 56 fe 82 0d 02 ff ff 00 00 00 00 00 00 0b 00 00 00"
temp = Split(msg, " ")
For i = 0 To UBound(temp)
  If Len(temp(i)) > 0 Then
    temp(i) = "&H" & temp(i)
    ReDim Preserve sendmsg(s)
    sendmsg(s) = Val(temp(i))
    s = s + 1
  End If
Next
sendmsg(10) = lap(0, List1.ListIndex)
sendmsg(11) = lap(1, List1.ListIndex)
sendmsg(18) = lap(2, List1.ListIndex)
Winsock1.SendData sendmsg
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Winsock1.Close
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strGet() As Byte
ReDim strGet(bytesTotal - 1)
Dim ccom As String
Winsock1.GetData strGet '注释:读取到达的数据
Text3.Text = strGet

Select Case strGet(0)
       Case 1

         
         x = 2
         j = List1.ListCount
         While x < UBound(strGet)
            ReDim Preserve lap(2, j)
            List1.AddItem ("灯" & Str(List1.ListCount))
            For i = 0 To 2
                 lap(i, j) = strGet(x + i)
                 Debug.Print lap(i, j);
            Next
            Debug.Print
            x = x + strGet(x - 1) + 2
            j = j + 1
         Wend
End Select
End Sub

开关灯的VB6.0原码自写的。呵呵。
 楼主| outman 发表于 2013-8-4 16:17:22 | 显示全部楼层
dtlyxcq 发表于 2013-8-4 12:12
Dim rID
Dim lap() As Byte
Private Sub Command1_Click()

文档暂时还不是太全面,没想到,楼上就已经做出来了{:soso_e179:}
如果能把整个过程和相关的资料整理下,相信不少人可以受益了
dtlyxcq 发表于 2013-8-7 23:13:20 | 显示全部楼层
outman 发表于 2013-8-4 16:17
文档暂时还不是太全面,没想到,楼上就已经做出来了
如果能把整个过程和相关的资料整理下 ...

嗯。其实我们应该分工协作。
一部分研究物连部分。
一部分研究网关到用户界面。

我的构想利用NAS 的WEB 服务功能,来与网关通信,控制家里的设备终端(包括灯,传感器…………),这样我们基本的智能手机电脑都能控制。但是我购买的网关和灯没有给我开关。只给了一些我电路板。实话让我认真研究,我是能把那些给我的东东拼起来的。但是这需要我去华强北一个档口一个档口的找原件,而且对于我最大的困难是PCB板。所以希望能做一些成品拿着直接用。

需要网关,每进行一次通信都回馈一个消息结束标,让WEB服务器知道已收到消息。
dtlyxcq 发表于 2013-8-9 17:50:58 | 显示全部楼层
Private Sub List1_Click()
  Option1.Value = lap(3, List1.ListIndex)
  a = laprun(List1.ListIndex)
End Sub

Private Sub List1_ItemCheck(Item As Integer)

End Sub

Private Sub Timer1_Timer()
  Timer1.Enabled = False
   laprun (List1.ListIndex)
  Timer1.Enabled = True
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strGet() As Byte
ReDim strGet(bytesTotal - 1)
Dim ccom As String
Winsock1.GetData strGet '注释:读取到达的数据
Text3.Text = strGet

Select Case strGet(0)
    Case 1

         
         x = 2
         j = List1.ListCount
         While x < UBound(strGet)
            ReDim Preserve lap(3, j)
            List1.AddItem ("灯" & Str(List1.ListCount))
            For i = 0 To 2
                 lap(i, j) = strGet(x + i)
                 Debug.Print lap(i, j);
            Next
            Debug.Print
            x = x + strGet(x - 1) + 2
            j = j + 1
        Wend
    Case 7
           For x = 0 To UBound(lap, 2)
              If strGet(2) = lap(0, x) And strGet(3) = lap(1, x) And strGet(4) = lap(2, x) Then
                lap(3, x) = strGet(5)
                If List1.ListIndex = x Then
                  Option1.Value = (strGet(5) = 1)
                End If
              End If
           Next
           
         
End Select
End Sub
Private Function laprun(lapindex As Integer) '开关状态获取开关状态
If lapindex < 0 Then Exit Function
Dim temp() As String
Dim sendmsg() As Byte
Dim s As Integer
s = 0
msg = "16 00 48 bc 44 56 fe 85 0d 02 ff ff 00 00 00 00 00 00 0b 00 00 00"
temp = Split(msg, " ")
For i = 0 To UBound(temp)
  If Len(temp(i)) > 0 Then
    temp(i) = "&H" & temp(i)
    ReDim Preserve sendmsg(s)
    sendmsg(s) = Val(temp(i))
    s = s + 1
  End If
Next
sendmsg(10) = lap(0, lapindex)
sendmsg(11) = lap(1, lapindex)
sendmsg(18) = lap(2, lapindex)
Winsock1.SendData sendmsg



End Function

V1.1 VB开关态自动获取状态
 楼主| outman 发表于 2013-8-9 21:29:14 | 显示全部楼层
dtlyxcq 发表于 2013-8-7 23:13
嗯。其实我们应该分工协作。
一部分研究物连部分。
一部分研究网关到用户界面。


我们的开关成品已经做出来了,下周会在物联网展会上演示并同时发布。

顺便透露下即将发布的新产品:
06.jpg
lwx0280833 发表于 2013-9-18 16:09:54 | 显示全部楼层
沙发!最后随音乐改变的时候很拉风
zhangzhizh 发表于 2013-10-8 20:05:31 | 显示全部楼层
支持,看上去不错
scb3804 发表于 2013-11-29 15:46:26 | 显示全部楼层
赞一个,看好这个市场,方便的话给我发份资料
307573842@qq.com
Deebug 发表于 2014-2-26 13:40:20 | 显示全部楼层
顶一个。大有可为。
12
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表