From f76bddbb4568aa7dc0d75abc805bde175c39a952 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Fri, 24 Feb 2023 22:52:13 +0200 Subject: [PATCH] gh-10 read/write single coil api method GET /api/v1/coils/N - read coil N (int) POST /api/v1/coils/N/VAL - set coil N (int) to VAL, VAL can be one of accepted values for strconv.ParseBool (1 or 0 is the simplest) --- enervent-ctrl-go/coils.csv | 2 +- enervent-ctrl-go/main.go | 36 ++++++++++++++++++++++++- enervent-ctrl-go/pingvinKL/pingvinKL.go | 1 + 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/enervent-ctrl-go/coils.csv b/enervent-ctrl-go/coils.csv index 452f605..d4e9964 100644 --- a/enervent-ctrl-go/coils.csv +++ b/enervent-ctrl-go/coils.csv @@ -9,7 +9,7 @@ 8;COIL_CO2_BOOST_EN;CO2 boosting enabled 9;COIL_RH_BOOST_EN;Relative humidity boosting enabled 10;COIL_M_BOOST;Boost the fanspeeds to 100% for a period of time -11;COIL_TEMP_BOOST_EN;Temperature boosting enabled +11;COIL_TEMP_BOOST_EN;Adaptive circulation fan speed enabled 12;COIL_SNC;Summer night cooling (SNC) function enabled. 13;-;- 14;-;- diff --git a/enervent-ctrl-go/main.go b/enervent-ctrl-go/main.go index a2bc271..81d8fab 100644 --- a/enervent-ctrl-go/main.go +++ b/enervent-ctrl-go/main.go @@ -6,6 +6,8 @@ import ( "io/fs" "log" "net/http" + "strconv" + "strings" "github.com/0ranki/enervent-ctrl/enervent-ctrl-go/pingvinKL" ) @@ -24,9 +26,41 @@ var ( func coils(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(pingvin.Coils) + pathparams := strings.Split(strings.TrimPrefix(r.URL.Path, "/api/v1/coils/"), "/") + if len(pathparams[0]) == 0 { + json.NewEncoder(w).Encode(pingvin.Coils) + } else if len(pathparams[0]) > 0 && r.Method == "GET" && len(pathparams) < 2 { // && r.Method == "POST" + intaddr, err := strconv.Atoi(pathparams[0]) + if err != nil { + log.Println("ERROR: Could not parse coil address", pathparams[0]) + log.Println(err) + return + } + pingvin.ReadCoil(uint16(intaddr)) + json.NewEncoder(w).Encode(pingvin.Coils[intaddr]) + } else if len(pathparams[0]) > 0 && r.Method == "POST" && len(pathparams) == 2 { + intaddr, err := strconv.Atoi(pathparams[0]) + if err != nil { + log.Println("ERROR: Could not parse coil address", pathparams[0]) + log.Println(err) + return + } + boolval, err := strconv.ParseBool(pathparams[1]) + if err != nil { + log.Println("ERROR: Could not parse coil value", pathparams[1]) + log.Println(err) + return + } + pingvin.WriteCoil(uint16(intaddr), boolval) + json.NewEncoder(w).Encode(pingvin.Coils[intaddr]) + } } +// func singlecoil(w http.ResponseWriter, r *http.Request) { +// w.Header().Set("Content-Type", "application/json") + +// } + func registers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if DEBUG { diff --git a/enervent-ctrl-go/pingvinKL/pingvinKL.go b/enervent-ctrl-go/pingvinKL/pingvinKL.go index e665654..6abfb92 100644 --- a/enervent-ctrl-go/pingvinKL/pingvinKL.go +++ b/enervent-ctrl-go/pingvinKL/pingvinKL.go @@ -284,6 +284,7 @@ func (p *PingvinKL) WriteCoil(n uint16, val bool) bool { return false } + p.ReadCoil(n) return true }