From 335d34a21a2f9513b31e938a6a877fa89008ef1d Mon Sep 17 00:00:00 2001 From: Paolo Asperti Date: Tue, 5 Jan 2021 09:11:38 +0100 Subject: [PATCH] Update board.go, board_ui.go, and 2 more files... --- src/board.go | 31 ++++++++++++++++--------------- src/board_ui.go | 1 - src/outlets_ui.go | 2 +- src/webui.go | 41 +++++++++++++++++++++++------------------ 4 files changed, 40 insertions(+), 35 deletions(-) delete mode 100644 src/board_ui.go diff --git a/src/board.go b/src/board.go index 9dfded9..b5f3ad5 100644 --- a/src/board.go +++ b/src/board.go @@ -23,7 +23,7 @@ type Board struct { Name string ChannelCount uint Inverted bool // low level only - Channels []Channel + Channels []*Channel } type Outlet struct { @@ -34,28 +34,28 @@ type Outlet struct { Channel *Channel } -func (c Channel) Toggle() (bool, error) { +func (c *Channel) Toggle() (bool, error) { c.Value = !c.Value return c.Value, nil } -func (c Channel) On() error { +func (c *Channel) On() error { c.Value = true return nil } -func (c Channel) Off() error { +func (c *Channel) Off() error { c.Value = true return nil } -func (c Channel) Status() bool { +func (c *Channel) Status() bool { return c.Value } -var boards []Board +var boards []*Board var allChannels map[string]*Channel -var outlets []Outlet +var outlets []*Outlet func newDummyChannel(v *viper.Viper, channelID string) Channel { v.SetDefault("name", "unknown") @@ -104,7 +104,7 @@ func newDummyBoard(v *viper.Viper, id string) Board { Inverted: v.GetBool("inverted"), } - channels := make([]Channel, v.GetInt("channelCount")) + channels := make([]*Channel, v.GetInt("channelCount")) if v.GetInt("channelCount") > 0 { channelsConfig := v.Sub("channels") if channelsConfig != nil { @@ -116,7 +116,7 @@ func newDummyBoard(v *viper.Viper, id string) Board { if c.Num >= v.GetUint("channelCount") { continue } - channels[c.Num] = c + channels[c.Num] = &c allChannels[c.ID] = &c } } @@ -144,13 +144,14 @@ func parseBoardsConfig() { switch boardType { case "gpio": default: - boards = append(boards, newDummyBoard(boardConfig, key)) + b := newDummyBoard(boardConfig, key) + boards = append(boards, &b) } } - outlets = make([]Outlet, len(allChannels)) + outlets = make([]*Outlet, len(allChannels)) outletsConfig := viper.Sub("outlets") if outletsConfig == nil { @@ -174,7 +175,7 @@ func parseBoardsConfig() { Channel: channel, } - outlets[num] = o + outlets[num] = &o } // dumpa tutto @@ -189,17 +190,17 @@ func parseBoardsConfig() { } -func (c Channel) Dump() { +func (c *Channel) Dump() { log.Printf(" Channel %d (on boot: %s): %s \n", c.Num, c.OnBoot, c.Name) } -func (b Board) Dump() { +func (b *Board) Dump() { log.Printf("Board '%s' (id: %s): %d channels\n", b.Name, b.ID, b.ChannelCount) for c := range b.Channels { b.Channels[c].Dump() } } -func (o Outlet) Dump() { +func (o *Outlet) Dump() { log.Printf("Outlet %v: channel name: %v\n", o.Num, o.Channel.Name) } diff --git a/src/board_ui.go b/src/board_ui.go deleted file mode 100644 index 06ab7d0..0000000 --- a/src/board_ui.go +++ /dev/null @@ -1 +0,0 @@ -package main diff --git a/src/outlets_ui.go b/src/outlets_ui.go index e1c9df4..5c6c225 100644 --- a/src/outlets_ui.go +++ b/src/outlets_ui.go @@ -25,7 +25,7 @@ type OutletPostForm struct { func outletEditPage(ctx *macaron.Context) { var err error var num uint64 - var o Outlet + var o *Outlet num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64) if err != nil { ctx.JSON(http.StatusOK, Dictionary{ diff --git a/src/webui.go b/src/webui.go index 3f5aceb..c338a5b 100644 --- a/src/webui.go +++ b/src/webui.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "log" "net/http" "strconv" @@ -13,16 +12,6 @@ import ( ) func statusPage(ctx *macaron.Context) { - ctx.Data["pluglist"] = []Dictionary{ - {"id": 1, "description": "p1"}, - {"id": 2, "description": "p2"}, - {"id": 3, "description": "p3"}, - {"id": 4, "description": "p4"}, - {"id": 5, "description": "p5"}, - {"id": 6, "description": "p6"}, - {"id": 7, "description": "p7"}, - {"id": 8, "description": "p8"}, - } ctx.HTML(200, "status") // 200 is the response code. } @@ -30,7 +19,7 @@ func jsonStatus(ctx *macaron.Context) { // MQTTpublish("openpdu/status", "asdss") var data = [][]string{} - var o Outlet + var o *Outlet for i := range outlets { o = outlets[i] d := []string{fmt.Sprintf("%d", o.Num), o.Channel.Name, fmt.Sprintf("%v", o.Channel.Value)} @@ -43,16 +32,32 @@ func jsonStatus(ctx *macaron.Context) { } func jsonOutletToggle(ctx *macaron.Context) { - id, err := strconv.ParseUint(ctx.Params(":id"), 10, 64) + var err error + var num uint64 + var outlet *Outlet + + num, err = strconv.ParseUint(ctx.Params(":id"), 10, 64) if err != nil { - log.Fatal(err) + ctx.JSON(http.StatusOK, Dictionary{ + "data": "error1", + }) } - MQTTpublish("openpdu/toggolo1", fmt.Sprint(id)) - err = MyBoard.channelToggle(uint(id)) + + if num >= uint64(len(outlets)) || num < 0 { + ctx.JSON(http.StatusOK, Dictionary{ + "data": "error2", + }) + } + + outlet = outlets[num] + _, err = outlet.Channel.Toggle() if err != nil { - log.Fatal(err) + ctx.JSON(http.StatusOK, Dictionary{ + "data": "error3", + }) } - MQTTpublish("openpdu/toggolo2", fmt.Sprint(id)) + // MQTTpublish("openpdu/toggolo1", fmt.Sprint(id)) + ctx.JSON(http.StatusOK, Dictionary{ "data": "ok", })