package main import ( "bufio" "bytes" "encoding/json" "fmt" "io" "os" "strconv" "strings" mqtt "github.com/eclipse/paho.mqtt.golang" ) var time_hold int var mqtt_cms_bi mqtt.Client const CMS_HOST_BI string = "tcp://broker.beetai.com:21883" const CMS_ACCESS_TOKEN_BI string = "beeetai" const CMS_PASS_BI = "5ige8TdfTEHoTgJz" var id_box string = "" var CMS_TOPIC_IN_1 string = "gpio/devices/in/+" // var CMS_TOPIC_IN string = "gpio/devices/in/1" // var CMS_TOPIC_OUT string = "gpio/devices/out/1" var CMS_TOPIC_IN string = "gpio/devices/ademax/in/+" var CMS_TOPIC_OUT string = "gpio/devices/ademax/out/+" // var CMS_TOPIC_IN_1 string = "v1/devices/7/telemetry/+" //var CMS_TOPIC_OUT string = "gpio/devices/ademax/out/+" var count int = 0 var params string = "" var method string = "" var mode int = 0 //var ty bool = false // {"method" : "ssh","params":"1"} {"method" : "cmd","params":"reboot"} {"method" : "cmd","params":"nano /root/monitor/engine/face_recognition/data/Config.txt"} // {"method" : "ssh","params":"0"} {"method" : "cmd","params":"htop"} // {"method" : "gpio","params":"1","name":"HIEUPV"} //============================> Main <========================== func main() { fmt.Printf("ID BOX : ") i := bufio.NewReader(os.Stdin) id, err := i.ReadString('\n') if err == io.EOF { os.Exit(0) } id = strings.Replace(id, "\n", "", -1) id_box = id // var CMS_TOPIC_IN string = "gpio/devices/in/1" // var CMS_TOPIC_OUT string = "gpio/devices/out/1" var CMS_TOPIC_IN string = "gpio/devices/ademax/in/1" var CMS_TOPIC_OUT string = "gpio/devices/ademax/out/+" fmt.Println("ID_BOX: " + id_box) fmt.Println("TOPIC IN :" + CMS_TOPIC_IN) fmt.Println("TOPIC OUT :" + CMS_TOPIC_OUT) fmt.Println("*************************************") mqtt_begin() mqtt_cms_bi.Subscribe(CMS_TOPIC_IN_1, 0, mqtt_messageHandler) fmt.Printf("MQTT host: %v\n", CMS_HOST_BI) fmt.Printf("Topic: %v\n", CMS_TOPIC_OUT) fmt.Println("Please sellect mode.\n*Mode 1: Tranfer Full Message.\n*Mode 2: Tranfer Message Type (params,value)") m := bufio.NewReader(os.Stdin) md, err := m.ReadString('\n') if err == io.EOF { os.Exit(0) } md = strings.Replace(md, "\n", "", -1) mode, _ = strconv.Atoi(md) fmt.Printf("Mode:%v\n", mode) fmt.Println("----------> START <----------") if mode == 1 { for { Mode_1() } } else if mode == 2 { for { Mode_2() } } fmt.Println("End game") // for { // if mode == 1 { // Mode_1() // } else if mode == 2 { // Mode_2() // } // } } func Mode_1() { fmt.Print("Message:") reader := bufio.NewReader(os.Stdin) msg, err := reader.ReadString('\n') if err == io.EOF { os.Exit(0) } msg = strings.Replace(msg, "\n", "", -1) msg = strings.Replace(msg, "\n", "", -1) count++ //CmsResponse(mqtt_cms_bi, CMS_TOPIC_OUT+strconv.Itoa(count), p) //CmsResponse_1(mqtt_cms_bi, CMS_TOPIC_IN+strconv.Itoa(count), msg) CmsResponse_1(mqtt_cms_bi, CMS_TOPIC_IN, msg) fmt.Println("Publish message Mode 1 ok") } func Mode_2() { fmt.Print("Method:") reader := bufio.NewReader(os.Stdin) p, err := reader.ReadString('\n') if err == io.EOF { os.Exit(0) } method = strings.Replace(p, "\n", "", -1) fmt.Print("Params:") reader1 := bufio.NewReader(os.Stdin) v, err := reader1.ReadString('\n') if err == io.EOF { os.Exit(0) } params = strings.Replace(v, "\n", "", -1) count++ //CmsResponse(mqtt_cms_bi, CMS_TOPIC_OUT+strconv.Itoa(count), p) CmsResponse_2(mqtt_cms_bi, CMS_TOPIC_IN, method, params) } //=================> END MAIN <==================== //***********************************************// //------------------ Function --------------------- func mqtt_begin() { opts_cms_bi := mqtt.NewClientOptions() opts_cms_bi.AddBroker(CMS_HOST_BI) opts_cms_bi.SetUsername(CMS_ACCESS_TOKEN_BI) opts_cms_bi.SetPassword("CMS_PASS_BI") opts_cms_bi.SetCleanSession(true) mqtt_cms_bi = mqtt.NewClient(opts_cms_bi) if token_1 := mqtt_cms_bi.Connect(); token_1.Wait() && token_1.Error() == nil { fmt.Printf("MQTT CMS Beetsoft Connected\n") //file.Write_log("MQTT CMS BeetsoftConnected\n", path_log_luncher) } else { fmt.Printf("MQTT CMS Beetsoft cant not Connected\n") //file.Write_log("MQTT CMS Beetsoft cant not Connected\n", path_log_luncher) fmt.Printf("Loi CMS Beetsoft : %v \n", token_1.Error()) fmt.Printf("-------------------\n") } } /************************************************************************/ func CmsResponse_2(c mqtt.Client, topic string, method string, params string) { //var msg = `{"` + params + `":` + value + `}` var msg = `{"method":"` + method + `","params": "` + params + `"}` fmt.Printf("Message:%v", msg) c.Publish(topic, 0, false, msg) fmt.Println("\nPublic Message Done") fmt.Println("*****************************") } func CmsResponse_1(c mqtt.Client, topic string, msg string) { fmt.Printf("Message:%v", msg) c.Publish(topic, 0, false, msg) fmt.Println("\nPublic Message Done") fmt.Println("*****************************") } func mqtt_messageHandler(mqtt_bi mqtt.Client, message mqtt.Message) { fmt.Printf("TOPIC: %s\n", message.Topic()) fmt.Printf("MSG:\n %s\n", message.Payload()) dec := json.NewDecoder(bytes.NewReader(message.Payload())) var list map[string]interface{} if err := dec.Decode(&list); err != nil { println(err) //return } //fmt.Print("\n") if mode == 1 { Mode_1() } else if mode == 2 { Mode_2() } }