From a49978ee5f94a6e297266ee84cd5721a765f5850 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Thu, 9 Mar 2023 16:15:54 +0200 Subject: [PATCH] gh-21 PUT /api/v1/temperature/ for changing temperature setpoint --- enervent-ctrl-go/main.go | 14 ++++++++- enervent-ctrl-go/pingvinKL/pingvinKL.go | 38 +++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/enervent-ctrl-go/main.go b/enervent-ctrl-go/main.go index 63523cb..54d04dc 100644 --- a/enervent-ctrl-go/main.go +++ b/enervent-ctrl-go/main.go @@ -22,7 +22,7 @@ import ( var static embed.FS var ( - version = "0.0.12" + version = "0.0.13" pingvin pingvinKL.PingvinKL DEBUG *bool INTERVAL *int @@ -110,11 +110,23 @@ func status(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(pingvin.Status) } +func temperature(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + pathparams := strings.Split(strings.TrimPrefix(r.URL.Path, "/api/v1/temperature/"), "/") + if len(pathparams[0]) > 0 && r.Method == "POST" && len(pathparams) == 1 { + pingvin.Temperature(pathparams[0]) + json.NewEncoder(w).Encode(pingvin.Registers[135]) + } else { + return + } +} + func listen() { log.Println("Starting pingvinAPI...") http.HandleFunc("/api/v1/coils/", coils) http.HandleFunc("/api/v1/registers/", registers) http.HandleFunc("/api/v1/status", status) + http.HandleFunc("/api/v1/temperature/", temperature) html, err := fs.Sub(static, "static/html") if err != nil { log.Fatal(err) diff --git a/enervent-ctrl-go/pingvinKL/pingvinKL.go b/enervent-ctrl-go/pingvinKL/pingvinKL.go index 6f957fe..a68cdab 100644 --- a/enervent-ctrl-go/pingvinKL/pingvinKL.go +++ b/enervent-ctrl-go/pingvinKL/pingvinKL.go @@ -502,6 +502,44 @@ func parseStatus(value int) string { } +func (p *PingvinKL) Temperature(action string) error { + temperature := 0 + if action == "up" { + temperature = p.Registers[135].Value + 1*p.Registers[135].Multiplier + p.Debug.Println("Raising temperature to", temperature) + } else if action == "down" { + temperature = p.Registers[135].Value - 1*p.Registers[135].Multiplier + p.Debug.Println("Lowering temperature to", temperature) + } else { + t, err := strconv.Atoi(action) + if err != nil { + p.Debug.Println(err) + tfloat, err := strconv.ParseFloat(action, 32) + if err != nil { + p.Debug.Println(err) + return err + } + t = int(tfloat * float64(p.Registers[135].Multiplier)) + temperature = t + } + p.Debug.Println("Setting temperature to", temperature) + // _, err = p.WriteRegister(135, uint16(t)) + // if err != nil { + // return err + // } + } + if temperature > 300 || temperature < 200 { + return fmt.Errorf("Temperature setpoint must be between 200 and 300") + } + p.Debug.Println("Writing register 135 to", temperature) + res, err := p.WriteRegister(135, uint16(temperature)) + if err != nil { + return err + } + p.Debug.Println("Temperature changed to", res) + return nil +} + func (p *PingvinKL) Monitor(interval int) { for { time.Sleep(time.Duration(interval) * time.Second)