Skip to content

Instantly share code, notes, and snippets.

@angww
Created December 21, 2018 03:05
Show Gist options
  • Save angww/4cc5ced354a0e8f2636766eec5ba3a66 to your computer and use it in GitHub Desktop.
Save angww/4cc5ced354a0e8f2636766eec5ba3a66 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"os"
"os/exec"
"strconv"
"time"
"github.com/davecgh/go-spew/spew"
tb "gopkg.in/tucnak/telebot.v2"
)
var (
LogTrace *log.Logger
LogInfo *log.Logger
LogWarning *log.Logger
LogError *log.Logger
)
func LogInit(traceHandle io.Writer, infoHandle io.Writer, warningHandle io.Writer, errorHandle io.Writer) {
file, err := os.OpenFile("logTelegram.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println(err.Error())
}
LogTrace = log.New(io.MultiWriter(file, traceHandle), "TRAC: ", log.Ldate|log.Ltime|log.Lshortfile)
LogInfo = log.New(io.MultiWriter(file, infoHandle), "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
LogWarning = log.New(io.MultiWriter(file, warningHandle), "WARN: ", log.Ldate|log.Ltime|log.Lshortfile)
LogError = log.New(io.MultiWriter(file, errorHandle), "ERRO: ", log.Ldate|log.Ltime|log.Lshortfile)
}
func isError(err error) bool {
if err != nil {
fmt.Println(err.Error())
}
return (err != nil)
}
func ipExterno() (body string) {
resp, err := http.Get("http://myexternalip.com/raw")
if err != nil {
LogError.Println(err)
}
defer resp.Body.Close()
body2, err := ioutil.ReadAll(resp.Body)
body2 = body2[:len(body2)-1] // tira quebra de linha
return string(body2)
}
func fnSendMessageStartUpCubie(bb *tb.Bot) {
ipExterno := ipExterno()
LogInfo.Printf("IP VIA FUNC: %s <%T>\n", ipExterno, ipExterno)
user := telebot.User{ID: 83863444} //ID Angelo
message := "Cubieboard ON, IP: " + ipExterno + "\nVia GO"
bb.Send(telebot.Recipient(&user), message)
return
}
func convertStrToFormatedTemperature(str string) string {
// Remove last char if is new line "\n"
if last := len(str) - 1; last >= 0 && str[last] == '\n' {
str = str[:last]
}
s, _ := strconv.ParseFloat(str, 32)
// Divide by 1000 and format, return string.
return fmt.Sprintf("%2.2f °C", s/1000)
}
func getSensorSunxiTemperature() string {
cmd := exec.Command("cat", "/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input")
out, _ := cmd.CombinedOutput()
return string(out)
}
func main() {
LogInit(os.Stdout, os.Stdout, os.Stdout, os.Stderr)
fmt.Println("Valor1 : ", convertStrToFormatedTemperature(getSensorSunxiTemperature()))
envToken := os.Getenv("CubieBoardHomeBot_TOKEN")
LogInfo.Println("Started \\o/. Token: ", envToken)
b, err := tb.NewBot(tb.Settings{
Token: envToken,
Poller: &tb.LongPoller{Timeout: 10 * time.Second},
})
if err != nil {
LogError.Println(err)
return
}
b.Handle(tb.OnText, func(m *tb.Message) {
b.Send(m.Chat, "*Try:* /hello or /start or /temperature")
LogInfo.Println("Sender: ", m.Sender.ID, " -- ", m.Text)
})
b.Handle("/hello", func(m *tb.Message) {
options := new(tb.SendOptions)
options.ReplyTo = m
b.Send(m.Chat, "Hi "+m.Sender.FirstName+", I'm the Bot!", options)
LogInfo.Println("/hello recived from " + m.Sender.ID + " -- " + m.Sender.FirstName)
})
b.Handle("/start", func(m *tb.Message) {
personalMessage := "OLááá " + m.Sender.FirstName
b.Send(m.Sender, personalMessage)
LogInfo.Println("\nSender: ", m.Sender.ID)
spew.Dump(m.Sender)
//spew.Dump(m)
u := telebot.User{ID: 83863444} //lisi 235720729
message := "Usuário mandou hello: " + m.Sender.Username +
"\n" + m.Sender.FirstName + " " + m.Sender.LastName
b.Send(telebot.Recipient(&u), message)
LogInfo.Println("/start recived from " + m.Sender.ID + " -- " + m.Sender.FirstName)
})
b.Handle("/temperature", func(m *tb.Message) {
options := new(tb.SendOptions)
options.ReplyTo = m
message := "Temperature now: " + convertStrToFormatedTemperature(getSensorSunxiTemperature())
LogInfo.Println("Handle Temp ", message)
b.Send(m.Chat, message, options)
LogInfo.Println("/temperature recived from " + m.Sender.ID + " -- " + m.Sender.FirstName)
})
b.Handle("/on", func(m *tb.Message) {
options := new(tb.SendOptions)
options.ReplyTo = m
// CMD
cmd := exec.Command("echo default-on >", "/sys/class/leds/green:ph20:led1/trigger")
cmd := exec.Command("echo default-on >", "/sys/class/leds/blue:ph21:led2/trigger")
b.Send(m.Chat, "LED setado para ON", options)
LogInfo.Println("/on recived from " + m.Sender.ID + " -- " + m.Sender.FirstName)
})
b.Handle("/off", func(m *tb.Message) {
options := new(tb.SendOptions)
options.ReplyTo = m
// CMD
cmd := exec.Command("echo none >", "/sys/class/leds/green:ph20:led1/trigger")
cmd := exec.Command("echo none >", "/sys/class/leds/blue:ph21:led2/trigger")
b.Send(m.Chat, "LED setado para OFF", options)
LogInfo.Println("/off recived from " + m.Sender.ID + " -- " + m.Sender.FirstName)
})
//echo cpu1 > /sys/class/leds/green:ph20:led1/trigger &
// echo cpu0 > /sys/class/leds/blue:ph21:led2/trigger &
fnSendMessageStartUpCubie(b)
b.Start()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment