https://github.com/dyrkin/znp-go
ZigBee Network Processor (ZNP) Interface
https://github.com/dyrkin/znp-go
cc2531 go zigbee zigbee-network-processor znp znpi
Last synced: about 2 months ago
JSON representation
ZigBee Network Processor (ZNP) Interface
- Host: GitHub
- URL: https://github.com/dyrkin/znp-go
- Owner: dyrkin
- License: mit
- Created: 2019-01-05T11:58:08.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-25T00:36:38.000Z (about 3 years ago)
- Last Synced: 2024-06-19T00:17:40.283Z (over 1 year ago)
- Topics: cc2531, go, zigbee, zigbee-network-processor, znp, znpi
- Language: Go
- Homepage:
- Size: 2.62 MB
- Stars: 14
- Watchers: 5
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ZigBee Network Processor (ZNP) Interface
[](https://cloud.drone.io/dyrkin/znp-go)
## Overview
ZNP is used for communication between the host and a ZigBee device through a serial port. You can issue Monitor and Test (MT) commands to the
ZigBee target from your application.
I tested it with cc253**1**, but it might work with cc253**X**
## Example
To use it you need to provide a reference to an unp instance:
```go
import (
"go.bug.st/serial.v1"
"github.com/davecgh/go-spew/spew"
"github.com/dyrkin/unp-go"
"github.com/dyrkin/znp-go"
)
func main() {
mode := &serial.Mode{
BaudRate: 115200,
}
port, err := serial.Open("/dev/tty.usbmodem14101", mode)
if err != nil {
log.Fatal(err)
}
port.SetRTS(true)
u := unp.New(1, port)
z := znp.New(u)
z.Start()
}
```
Then you be able to run commands:
```go
res, err := z.SysSetExtAddr("0x00124b00019c2ee9")
if err != nil {
log.Fatal(err)
}
res, err = z.SapiZbPermitJoiningRequest("0xFF00", 200)
if err != nil {
log.Fatal(err)
}
```
To receive async commands and errors, use `AsyncInbound()` and `Errors()` channels:
```go
go func() {
for {
select {
case err := <-z.Errors():
fmt.Printf("Error received: %s\n", err)
case async := <-z.AsyncInbound():
fmt.Printf("Async received: %s\n", spew.Sdump(async))
}
}
}()
```
To log all ingoing and outgoing unp frames, use `InFramesLog()` and `OutFramesLog()` channels:
```go
go func() {
for {
select {
case frame := <-z.OutFramesLog():
fmt.Printf("Frame sent: %s\n", spew.Sdump(frame))
case frame := <-z.InFramesLog():
fmt.Printf("Frame received: %s\n", spew.Sdump(frame))
}
}
}()
```
See more [examples](example/example.go)