package main import ( "fmt" "github.com/tarm/serial" "log" "math/rand" "os" "path/filepath" "strings" "time" ) func RandomEUI64() string { r := rand.New(rand.NewSource(time.Now().UnixNano())) var letter = []rune("ABCDEF0123456789") b := make([]rune, 16+7) for i := range b { if (i+1)%3 == 0 { b[i] = '-' } else { b[i] = letter[r.Intn(len(letter))] } } return string(b) } func sendCommand(p *serial.Port, command string, waitForOk bool) string { fmt.Print(command) var status string = "" p.Flush() _, err := p.Write([]byte(command)) if err != nil { log.Fatal(err) } buf := make([]byte, 32) var loop int = 1 if waitForOk { loop = 10 } time.Sleep(200 * time.Millisecond) for i := 0; i < loop; i++ { // ignoring error as EOF raises error on Linux n, _ := p.Read(buf) if n > 0 { status = string(buf[:n]) fmt.Print(status) if strings.Contains(status, "OK") || strings.Contains(status, "?") { break } } } return status } func main() { if len(os.Args) != 3 { fmt.Println("usage: " + filepath.Base(os.Args[0]) + " ") os.Exit(1) } serialdev := os.Args[1] deveui := os.Args[2] c := &serial.Config{Name: serialdev, Baud: 115200, ReadTimeout: time.Second * 1} s, err := serial.OpenPort(c) if err != nil { log.Fatal("Problem mit Serial Interface") } sendCommand(s, "system configure syseui "+RandomEUI64()+"\n", true) sendCommand(s, "system configure platformguid 53ca094b-b888-465e-aa0e-e3064ec56d21\n", true) sendCommand(s, "system configure operatingflags 0\n", true) sendCommand(s, "lorawan configure deveui "+deveui+"\n", true) sendCommand(s, "lorawan configure appeui "+deveui+"\n", true) sendCommand(s, "lorawan configure appkey "+deveui+"-"+deveui+"\n", true) sendCommand(s, "lorawan configure join 1\n", true) }