Skip to content

Instantly share code, notes, and snippets.

@karl-gustav
Created April 6, 2018 18:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karl-gustav/c5654c763daedcc58e01678010ad5014 to your computer and use it in GitHub Desktop.
Save karl-gustav/c5654c763daedcc58e01678010ad5014 to your computer and use it in GitHub Desktop.
Read /dev/ttyUSB0 (HAN Meterbus port)
package main
import (
"flag"
"io"
"log"
"time"
"github.com/goburrow/serial"
)
var (
address string
baudrate int
databits int
stopbits int
parity string
message string
)
func main() {
flag.StringVar(&address, "a", "/dev/ttyUSB0", "address")
flag.IntVar(&baudrate, "b", 2400, "baud rate")
flag.IntVar(&databits, "d", 8, "data bits")
flag.IntVar(&stopbits, "s", 1, "stop bits")
flag.StringVar(&parity, "p", "N", "parity (N/E/O)")
flag.StringVar(&message, "m", "serial", "message")
flag.Parse()
config := serial.Config{
Address: address,
BaudRate: baudrate,
DataBits: databits,
StopBits: stopbits,
Parity: parity,
Timeout: 90 * time.Second,
}
log.Printf("connecting %+v", config)
port, err := serial.Open(&config)
if err != nil {
log.Fatal(err)
}
log.Println("connected")
defer func() {
err := port.Close()
if err != nil {
log.Fatal(err)
}
log.Println("closed")
}()
b := make([]byte, 8)
for {
n, err := port.Read(b)
if err == io.EOF {
break
} else if err != nil {
log.Println("[ERROR]:", err)
continue
}
log.Printf("n = %v b = %v\n", n, b[:n])
log.Printf("b[:n] = %q\n", b[:n])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment