From c5a09d9d7676b76ff0694a624af2a3916ae46460 Mon Sep 17 00:00:00 2001 From: Kevin Lyda <kevin@ie.suberic.net> Date: Wed, 1 Feb 2017 11:35:23 +0000 Subject: [PATCH] Fixed serial. --- cmd/gqgmc/main.go | 9 +-------- cmd/gqgmcd/main.go | 6 ++++-- devices/geiger/geiger.go | 2 +- devices/geiger/gqgmc.go | 40 ++++++++++++++++++---------------------- 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/cmd/gqgmc/main.go b/cmd/gqgmc/main.go index b440d91..50e051a 100644 --- a/cmd/gqgmc/main.go +++ b/cmd/gqgmc/main.go @@ -20,7 +20,6 @@ func main() { cps, cpm uint16 volts int16 temp float64 - ser string err error t time.Time ) @@ -57,13 +56,7 @@ func main() { fmt.Printf("Version: %s\n", gc.Version()) fmt.Printf("Model: %s\n", gc.Model()) - - ser, err = gc.SerialNum() - if err != nil { - fmt.Printf("Serial failed: '%s'\n", err) - return - } - fmt.Printf("Serial: %s\n", ser) + fmt.Printf("Serial: %s\n", gc.Serial()) volts, err = gc.Volts() if err != nil { diff --git a/cmd/gqgmcd/main.go b/cmd/gqgmcd/main.go index 47e73da..e6c448e 100644 --- a/cmd/gqgmcd/main.go +++ b/cmd/gqgmcd/main.go @@ -12,6 +12,7 @@ import ( "html/template" "log" "net/http" + "path" "github.com/prometheus/client_golang/prometheus/promhttp" "gitlab.com/lyda/gqgmc/devices/geiger" @@ -20,6 +21,7 @@ import ( var addr = flag.String("listen-address", ":8080", "Address for HTTP requests.") var device = flag.String("device", "/dev/gqgmc", "Device for Geiger Counter.") var model = flag.String("model", "gqgmc", "Model of Geiger Counter.") +var templateDir = flag.String("template_dir", "templates", "Template directory.") type indexPage struct { Model string @@ -34,7 +36,7 @@ var indexPg indexPage func indexHandler(w http.ResponseWriter, r *http.Request) { indexPg.CPM, _ = gc.GetCPM() - t, err := template.ParseFiles("index.html") + t, err := template.ParseFiles(path.Join(*templateDir, "index.html")) if err != nil { log.Printf("Template error: %s\n", err) } @@ -47,7 +49,7 @@ func main() { gc, _ = geiger.New(geiger.Config{Model: *model, Device: *device}) indexPg.Model = gc.Model() indexPg.Version = gc.Version() - indexPg.Serial, _ = gc.SerialNum() + indexPg.Serial = gc.Serial() indexPg.Volts, _ = gc.Volts() http.HandleFunc("/", indexHandler) http.Handle("/metrics", promhttp.Handler()) diff --git a/devices/geiger/geiger.go b/devices/geiger/geiger.go index af32bf3..27e2e2e 100644 --- a/devices/geiger/geiger.go +++ b/devices/geiger/geiger.go @@ -23,7 +23,7 @@ type Counter interface { Clear() error Model() string Version() string - SerialNum() (string, error) + Serial() string GetCPM() (uint16, error) GetCPS() (uint16, error) Volts() (int16, error) diff --git a/devices/geiger/gqgmc.go b/devices/geiger/gqgmc.go index e68b201..06e98af 100644 --- a/devices/geiger/gqgmc.go +++ b/devices/geiger/gqgmc.go @@ -8,6 +8,7 @@ package geiger import ( + "encoding/hex" "errors" "fmt" "strconv" @@ -52,13 +53,14 @@ type GQGMCCounter struct { port *serial.Port config *serial.Config version, - model string + model, + serial string } // NewGQGMC creates a new GQGMC Counter instance func NewGQGMC(c Config) (*GQGMCCounter, error) { var gc GQGMCCounter - var v []byte + var buf []byte gc.config = &serial.Config{ Name: c.Device, @@ -70,9 +72,17 @@ func NewGQGMC(c Config) (*GQGMCCounter, error) { return nil, err } gc.port = p - v, err = gc.communicate(cmdGetVersion, 14) - gc.model = string(v[:7]) - gc.version = string(v[7:]) + buf, err = gc.communicate(cmdGetVersion, 14) + if err == nil { + gc.model = string(buf[:7]) + gc.version = string(buf[7:]) + } + if gc.supportedModels(mod280n300) && !gc.versionLT("Re 2.11") { + buf, err := gc.communicate(cmdGetSerial, 7) + if err == nil { + gc.serial = hex.EncodeToString(buf) + } + } //getConfigurationData() return &gc, nil } @@ -99,23 +109,9 @@ func (gc *GQGMCCounter) Model() string { return gc.model } -// SerialNum gets the serial number of the device -func (gc *GQGMCCounter) SerialNum() (string, error) { - if !gc.supportedModels(mod280n300) { - return "", errors.New("Unsupported model") - } - if gc.versionLT("Re 2.11") { - return "", errors.New("Unsupported version") - } - - serStr := "" - ser, err := gc.communicate(cmdGetSerial, 7) - if err == nil { - for _, b := range ser { - serStr += fmt.Sprintf("%02X", b) - } - } - return serStr, err +// Serial gets the serial number of the device +func (gc *GQGMCCounter) Serial() string { + return gc.serial } func (gc *GQGMCCounter) getReading(what string) (uint16, error) { -- GitLab