forked from OpenPDU/openpdu
first mockup in go
This commit is contained in:
138
source/main.go
Normal file
138
source/main.go
Normal file
@@ -0,0 +1,138 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
// "encoding/json"
|
||||
"github.com/go-macaron/pongo2"
|
||||
|
||||
"gopkg.in/macaron.v1"
|
||||
"net/http"
|
||||
"log"
|
||||
// "periph.io/x/periph"
|
||||
"periph.io/x/periph/host"
|
||||
"periph.io/x/periph/conn/i2c"
|
||||
"periph.io/x/periph/conn/i2c/i2creg"
|
||||
"time"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type Dictionary map[string]interface{}
|
||||
|
||||
func readConfig() {
|
||||
viper.SetConfigName("openpdu.yaml") // name of config file (without extension)
|
||||
viper.SetConfigType("yaml")
|
||||
viper.AddConfigPath("/etc/openpdu/") // path to look for the config file in
|
||||
viper.AddConfigPath(".") // optionally look for config in the working directory
|
||||
err := viper.ReadInConfig() // Find and read the config file
|
||||
if err != nil { // Handle errors reading the config file
|
||||
log.Printf("Fatal error config file: %s \n", err)
|
||||
}
|
||||
|
||||
viper.SetDefault("hostname","openpdu")
|
||||
}
|
||||
|
||||
func initI2C() {
|
||||
// Make sure periph is initialized.
|
||||
if _, err := host.Init(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Use i2creg I²C bus registry to find the first available I²C bus.
|
||||
b, err := i2creg.Open("/dev/i2c-0")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer b.Close()
|
||||
|
||||
// bus 0
|
||||
// Dev is a valid conn.Conn.
|
||||
d := &i2c.Dev{Addr: 0x27, Bus: b}
|
||||
|
||||
// Send a command 0x10 and expect a 5 bytes reply.
|
||||
// write := []byte{0x10}
|
||||
write := []byte{0x0}
|
||||
// read := make([]byte, 5)
|
||||
// if err := d.Tx(write, read); err != nil {
|
||||
if _, err := d.Write(write); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
for i := 0; i < 2; i++ {
|
||||
|
||||
write := []byte{0x0A}
|
||||
read := make([]byte, 5)
|
||||
if err := d.Tx(write, read); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("%v\n", read)
|
||||
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// func myHandler(ctx *macaron.Context) string {
|
||||
// ctx.Data["name"] = "jeremy"
|
||||
// ctx.HTML(200, "hello") // 200 is the response code.
|
||||
|
||||
// return "The request path is: " + ctx.Req.RequestURI
|
||||
// }
|
||||
|
||||
func startServer() {
|
||||
m := macaron.Classic()
|
||||
m.Use(pongo2.Pongoer())
|
||||
m.Use(macaron.Static("static"))
|
||||
// m.Get("/", myHandler)
|
||||
|
||||
m.Get("/", func(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.
|
||||
})
|
||||
|
||||
m.Get("/boards", func(ctx *macaron.Context) {
|
||||
ctx.HTML(200, "boards") // 200 is the response code.
|
||||
})
|
||||
|
||||
log.Println("Server is running...")
|
||||
log.Println(http.ListenAndServe("0.0.0.0:4000", m))
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
readConfig()
|
||||
|
||||
nam := viper.Get("name")
|
||||
log.Printf("name: %v\n", nam)
|
||||
|
||||
|
||||
initI2C()
|
||||
startServer()
|
||||
}
|
||||
|
||||
|
||||
|
||||
// https://github.com/ColorlibHQ/AdminLTE/archive/v2.4.17.tar.gz
|
||||
|
||||
/* TODO
|
||||
|
||||
- config reset gpio
|
||||
- classi per board
|
||||
- classi per outlet
|
||||
- fai funzionare toggle
|
||||
- scan i2c
|
||||
- impostazioni log
|
||||
- impostazioni mqtt
|
||||
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user