Преглед на файлове

bugfix: parse data should be hex offset. repeat sample and report instead run command sequence

yuguorong преди 2 години
родител
ревизия
e1f475c083
променени са 2 файла, в които са добавени 23 реда и са изтрити 6 реда
  1. 21 5
      example/main.go
  2. 2 1
      example/mqtt.go

+ 21 - 5
example/main.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"log"
 	"os"
+	"strconv"
 	"strings"
 	"time"
 
@@ -19,6 +20,7 @@ var cur_cmd string
 var cmdList map[string][]byte
 var tmrCmdTimeout *time.Timer = nil
 var chnMain chan string
+var sampFreq int
 
 func init() {
 	cmdList = map[string][]byte{
@@ -86,9 +88,11 @@ func shell(device hid.Device) {
 				switch cur_cmd {
 				case "read":
 					FmtPrintBinary(buf)
-					temp := binary.BigEndian.Uint16(buf[23:25])
-					humidity := binary.BigEndian.Uint16(buf[25:27])
-					log.Printf("%d, %d\n", temp, humidity)
+					temp := binary.BigEndian.Uint16(buf[0x23:0x25])
+					humidity := binary.BigEndian.Uint16(buf[0x25:0x27])
+					ts := uint32(time.Now().Unix())
+					log.Printf("%d: %d, %d\n", ts, temp, humidity)
+					ReportTelemty(ts, temp, humidity)
 					chnMain <- cur_cmd
 				case "query": // aa3b020000861c5553422d5448000000555342e6b8a9e6b9bfe5baa6e8aeb0e5bd95e4bbaa000000000000000000000000000000000000000000000000006223
 					num_total = int(buf[6])
@@ -151,13 +155,16 @@ func shell(device hid.Device) {
 
 	timeout := 0
 
-	for _, k := range cmds {
+	//for _, k := range cmds {
+	for k := cmds[0]; ; {
 		sendcmd(device, k)
 		tmrCmdTimeout.Stop()
 		tmrCmdTimeout.Reset(3 * time.Second)
 		select {
 		case msg := <-chnMain:
 			log.Println("Send command [", k, "<>", msg, "] done!")
+			tmrCmdTimeout.Stop()
+			time.Sleep(time.Duration(sampFreq) * time.Second)
 		case <-tmrCmdTimeout.C:
 			log.Println("Send command [", k, "] timeout!")
 			timeout = 1
@@ -194,7 +201,7 @@ func main() {
 	if len(os.Args) == 2 && (os.Args[1] == "-h" || os.Args[1] == "--help") {
 		fmt.Println("USAGE:")
 		fmt.Printf("  %s              list USB HID devices\n", os.Args[0])
-		fmt.Printf("  %s <id>         open USB HID device shell for the given input report size\n", os.Args[0])
+		fmt.Printf("  %s <id>  [dd]   open USB HID device shell for the given input report size and each [dd] second sample and report once \n", os.Args[0])
 		fmt.Printf("  %s -h|--help    show this help\n", os.Args[0])
 		fmt.Println()
 		return
@@ -214,6 +221,15 @@ func main() {
 		return
 	}
 
+	sampFreq = 30
+	if len(os.Args) >= 3 {
+		duration, err := strconv.Atoi(os.Args[2])
+		if err == nil {
+			sampFreq = duration
+			fmt.Println("Sample duration:", sampFreq)
+		}
+	}
+
 	hid.UsbWalk(func(device hid.Device) {
 		info := device.Info()
 		id := fmt.Sprintf("%04x:%04x:%04x:%02x", info.Vendor, info.Product, info.Revision, info.Interface)

+ 2 - 1
example/mqtt.go

@@ -56,6 +56,7 @@ func (mqtt *QdMqtt) ConnServer(retry int, cbSubs CbRegistMqttSubs) {
 	//create a ClientOptions struct setting the broker address, clientid, turn
 	//off trace output and set the default message handler
 	suid := "8d18db45-2fa6-410a-a46d-acf30f011dac"
+	//suid := "e6cda680-fc16-11ec-a3de-a55303223d4b"
 	brokerurl := "tcp://" + strings.Trim(mqtt.MqttUrl, " ") + ":" + strings.Trim(mqtt.MqttPort, "")
 	log.Info("Mqtt broker:", brokerurl)
 	opts := MQTT.NewClientOptions().AddBroker(brokerurl)
@@ -90,7 +91,7 @@ var mqServer *QdMqtt = nil
 
 func MqttConnServer(cbSubs CbRegistMqttSubs) *QdMqtt {
 	mq := &QdMqtt{
-		User:     "5V1K3yCy5I5TRlVoCeeY", //"6XiAxAxtm0uTPnzwjtWd",
+		User:     "tD0geKmBqrxHk3QDnZ7u", //"5V1K3yCy5I5TRlVoCeeY", //"6XiAxAxtm0uTPnzwjtWd",
 		Pswd:     "",
 		MqttUrl:  "test-sbuilding.pacom.cn",
 		MqttPort: "1885",