Browse Source

Added storing and loading WOLs

  1 step closer to sending Wake On Lan packets so we can try waking the
device if a command fails.
Apollo 3 years ago
parent
commit
34c8c2ceec
3 changed files with 55 additions and 4 deletions
  1. 2 0
      .gitignore
  2. 8 3
      roku1.go
  3. 45 1
      webserver.go

+ 2 - 0
.gitignore

@@ -24,3 +24,5 @@ _testmain.go
 *.test
 *.prof
 
+# Exclude WOL file
+WOL.txt

+ 8 - 3
roku1.go

@@ -1,7 +1,7 @@
 package main
 
 import (
-	"fmt"
+	"errors"
 	"log"
 	"net"
 	"os"
@@ -44,14 +44,19 @@ func PostFind() string {
 	conn.SetReadDeadline(time.Now().Add(time.Second * time.Duration(5)))
 	buffer := make([]byte, 512)
 	n, fromaddr, err := conn.ReadFrom(buffer) //  Read(buffer)
-	fmt.Printf("%d, %#v, %#v\n", n, fromaddr, err)
+	log.Printf("%d, %#v, %#v", n, fromaddr, err)
 
 	var output string = string(buffer[0:n])
-	//fmt.Printf("GOT: [%s]\n", output)
+	log.Printf("GOT: [%s]", output)
 	// log.Printf("Read: %#v\n", buffer)
 	return output
 }
 
+func FileExists(path string) bool {
+	_, err := os.Stat(path)
+	return !errors.Is(err, os.ErrNotExist)
+}
+
 /*
 func main() {
 	fmt.Println("Start:")

+ 45 - 1
webserver.go

@@ -1,9 +1,12 @@
 package main
 
 import (
+	"bufio"
 	"fmt"
 	"log"
 	"net/http"
+	"os"
+	"strings"
 
 	"github.com/labstack/echo/v4"
 	"github.com/labstack/echo/v4/middleware"
@@ -24,6 +27,27 @@ func (w *WebServer) Init(tv, host, port string) {
 	w.Host = host
 	w.Port = port
 	w.WakeOnLan = make(map[string]string)
+	if FileExists("WOL.txt") {
+		log.Print("Loading WOLs from WOL.txt")
+		file, err := os.Open("WOL.txt")
+		if err != nil {
+			log.Printf("Failed reading WOL.txt got %v", err)
+		}
+		defer file.Close()
+
+		var scanner *bufio.Scanner = bufio.NewScanner(file)
+		for scanner.Scan() {
+			var line string = scanner.Text()
+			if len(line) == 0 {
+				continue
+			}
+			var parts []string = strings.Split(line, " = ")
+			var ip string = parts[0]
+			var mac string = parts[1]
+			log.Printf("IP='%s' MAC='%s'", ip, mac)
+			w.WakeOnLan[ip] = mac
+		}
+	}
 }
 
 func (w *WebServer) homepage(c echo.Context) error {
@@ -63,8 +87,28 @@ func (w *WebServer) con_refresh(c echo.Context) error {
 	list, w.WakeOnLan = GetDevices(w.WakeOnLan)
 	log.Printf("Found %d devices", len(*list))
 	log.Printf("Obtained %d WOLs", len(w.WakeOnLan))
+	var save_file []byte
 	for ip, mac := range w.WakeOnLan {
-		fmt.Printf("IP='%v' MAC='%v'\n", ip, mac)
+		log.Printf("IP='%v' MAC='%v'\n", ip, mac)
+		if ip != "" && mac != "" {
+			for _, r := range ip {
+				save_file = append(save_file, byte(r))
+			}
+			save_file = append(save_file, ' ')
+			save_file = append(save_file, '=')
+			save_file = append(save_file, ' ')
+			for _, r := range mac {
+				save_file = append(save_file, byte(r))
+			}
+		}
+	}
+	if len(save_file) != 0 {
+		err := os.WriteFile("WOL.txt", save_file, 0775)
+		if err != nil {
+			log.Printf("Saving WOL.txt failed with %v", err)
+		} else {
+			log.Print("Saved WOL to WOL.txt")
+		}
 	}
 	for _, ip := range *list {
 		if ip != w.Tv_ip {